Как мне получить список неинтерактивных функций Emacs lisp? - PullRequest
13 голосов
/ 03 марта 2009

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

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

Спасибо

1010 * Ed *

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

(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))))

Ответы [ 6 ]

14 голосов
/ 03 марта 2009

Вот основная идея - см. Руководство 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")))))
4 голосов
/ 06 сентября 2009

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

1 голос
/ 03 марта 2009

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

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

(уменьшить (лямбда (пока дальше)) (если (fboundp дальше) (минусы до сих пор) пока)) obarray : начальное значение ноль)
0 голосов
/ 03 марта 2009

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

0 голосов
/ 03 марта 2009

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

0 голосов
/ 03 марта 2009

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

...