Как получить список неинтерактивных функций Emacs Lisp?

StackOverflow https://stackoverflow.com/questions/605785

  •  03-07-2019
  •  | 
  •  

Вопрос

Как мне получить полный список неинтерактивных функций, которые я могу использовать в Emacs Lisp?

Интерактивные функции достаточно легко найти в справочной системе, но мне нужен полный список всех других функций, которые я могу использовать.Например concat, car, cdr, и т. д.(И желательно с документацией).

Спасибо

Эд

Редактировать:Ответил спасибо Джуни.Я немного поигрался с его ответом и заставил его отсортировать результаты (используя результаты его кода, чтобы помочь мне найти правильную функцию сортировки!)

(flet ((first-line (text)
                   (if text
                       (substring text 0 (string-match "\n" text))
                     "")))
  (let ((funclist (list)))
    (mapatoms 
     (lambda (x)
       (and (fboundp x)                     ; does x name a function?
            (not (commandp (symbol-function x))) ; is it non-interactive?
            (subrp (symbol-function x))          ; is it built-in?
            (add-to-list 'funclist 
                         (concat (symbol-name x) " - " (first-line (documentation x))
                                 "\n")))))
    (dolist (item (sort funclist 'string<))
      (insert item))))
Это было полезно?

Решение

Вот основная идея – см. Руководство по Emacs Lisp для любых неясных понятий.

(flet ((first-line (text)
         (if text
             (substring text 0 (string-match "\n" text))
           "")))
  (mapatoms 
   (lambda (x)
     (and (fboundp x)                          ; does x name a function?
          (not (commandp (symbol-function x))) ; is it non-interactive?
          (subrp (symbol-function x))          ; is it built-in?
          (insert (symbol-name x) " - " (first-line (documentation x)) "\n")))))

Другие советы

Пытаться apropos вместо apropos-command.Это даст вам все функции, а не только интерактивные. C-h a по умолчанию привязан к последнему, но если вы часто занимаетесь взломом elisp, я рекомендую привязать его к первому.

Вы можете проверить содержимое obarray, хотя оно содержит все символы, а не «все функции».

В качестве альтернативы, следующее может помочь (будет использовано части пакета совместимости CL):

(Уменьшите (Lambda (SO-FAR NEXT) (if (fboundp Далее) (Минусы следующий FAR) SO-FAR)) ОБАРРЕЙ: Начальная стоимость ноль)

ты мог бы сделать хуже, чем посмотри на сайте

Попробуйте команду apropos с пустым вводом.

Неважно.Оказывается, C-h f (описать функцию) включает в себя неинтерактивные функции, хотя мне все равно было бы интересно найти способ просмотра/поиска только неинтерактивных функций (особенно только встроенных).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top