2009-03-03 11 views
12

¿Cómo obtengo una lista completa de las funciones no interactivas que puedo usar en Emacs Lisp?¿Cómo obtengo una lista de funciones no interactivas de Emacs lisp?

Los interactivos son fáciles de encontrar en el sistema de ayuda, pero quiero una lista completa de todas las otras funciones que puedo usar. Por ejemplo concat, car, cdr, etc. (Y preferiblemente con documentación).

Gracias

Ed

Editar: respondidas gracias a Jouni. He jugado un poco con su respuesta un poco, y lo consiguió para ordenar los resultados (utilizando los resultados de su código para ayudar a encontrar la función de clasificación correcta!)

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

Gracias por la pregunta y la respuesta. Muy útil al aprender emacs lisp. – aartist

Respuesta

13

Aquí es la idea básica - ver el Emacs Lisp manual para cualquier conceptos poco 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"))))) 
+1

Guau, eso es brillante. Aprendí acerca de diez cosas nuevas solo a partir de ese breve fragmento de código. Gracias. – Singletoned

0

se podía hacer peor que look at the website

+0

He hecho bastante, pero parece que no puedo encontrar una lista de funciones. Hay una página que es una lista de absolutamente todo, pero no una para las funciones. Y esperaba que hubiera algo integrado en emacs. – Singletoned

0

Pruebe el comando apropos con una entrada vacía.

+0

Eso enumera todo, y C-h f sería mejor desde ese punto de vista. – Singletoned

+0

Lo sentimos, no muestra todo. Resulta que no incluye comandos no interactivos en absoluto. – Singletoned

+0

Mira apropos.el y escribe el tuyo entonces. – starblue

0

Nevermind. Resulta que C-h f (describir función) incluye funciones no interactivas, aunque todavía estaría interesado en encontrar una forma de ver/buscar solo las no interactivas (especialmente las integradas).

1

Puede comprobar el contenido de obarray, aunque contiene todos los símbolos, en lugar de "todas las funciones".

Alternativamente, la siguiente puede hacer el truco (se tire en partes del paquete de compatibilidad CL):

(reducir (lambda (tan-lejos siguiente) (si (fboundp siguiente) (cons siguiente SO- ahora) tan lejos)) obarray : valor-inicial nula)
4

Trate apropos en lugar de apropos-command. Eso le dará todas las funciones, no solo las interactivas. C-h a está vinculado por defecto a este último, pero si estás haciendo un montón de hackear elisp, te recomiendo que lo vincules con el primero.

Cuestiones relacionadas