Как получить список неинтерактивных функций Emacs Lisp?
Вопрос
Как мне получить полный список неинтерактивных функций, которые я могу использовать в 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 (описать функцию) включает в себя неинтерактивные функции, хотя мне все равно было бы интересно найти способ просмотра/поиска только неинтерактивных функций (особенно только встроенных).