Pergunta

Como faço para obter uma lista completa de funções não-interativas que eu posso usar em Emacs Lisp?

Os interactivas são bastante fáceis de encontrar no sistema de ajuda, mas eu quero uma lista completa de todas as outras funções que eu possa usar. Por exemplo concat, car, cdr, etc. (e de preferência com documentação).

Graças

Ed

Edit: atendida graças a Jouni. Eu brinquei com a sua resposta um pouco, e consegui-lo para classificar os resultados (usando os resultados de seu código para me ajudar a encontrar a função de classificação correta!)

(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))))
Foi útil?

Solução

Aqui está a idéia básica - veja a Emacs Lisp manual para qualquer conceitos pouco claros.

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

Outras dicas

apropos Tente em vez de apropos-command. Isso vai dar-lhe todas as funções, não apenas os interativas. C-h a é obrigado por padrão para o último, mas se você está fazendo um monte de pirataria elisp, eu recomendo que o vincule a do primeiro.

Você pode verificar o conteúdo de obarray, no entanto, que contém todos os símbolos, em vez de "todas as funções".

Como alternativa, podem fazer o truque (vai puxar a partes do pacote de compatibilidade CL):

(Reduzir (lambda (assim muito próxima) (if (fboundp seguinte) (cons próxima tão distante) tão distante)) obarray : Nil de valor inicial)

você poderia fazer pior do que olhada no site

Tente o comando apropos com uma entrada vazia.

de Nevermind. Acontece que Ch f (função de descrever) não inclui funções não-interativas, embora eu ainda estaria interessado em encontrar uma maneira de ver / procura apenas os não-interativas (especialmente apenas o construído em ones).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top