2009-03-03 11 views
12

Comment obtenir une liste complète des fonctions non interactives que je peux utiliser dans Emacs Lisp?Comment obtenir une liste des fonctions non interactives d'Emacs Lisp?

Les interactifs sont assez faciles à trouver dans le système d'aide, mais je veux une liste complète de toutes les autres fonctions que je peux utiliser. Par exemple concat, car, cdr, etc. (Et de préférence avec la documentation).

Merci

Ed

Edit: Answered grâce à Jouni. J'ai joué avec sa réponse un peu, et ai eu pour trier les résultats (en utilisant les résultats de son code pour me aider à trouver la fonction de tri correct!)

(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

Merci pour les questions et réponses. Très utile tout en apprenant Emacs Lisp. – aartist

Répondre

13

Voilà l'idée de base - voir le Emacs Lisp manual pour des concepts peu clairs.

(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

Wow, c'est génial. J'ai appris environ dix nouvelles choses à partir de ce court morceau de code. Merci. – Singletoned

0

vous pourriez faire pire que look at the website

+0

Je l'ai fait, pas mal, mais je n'arrive pas à trouver une liste de fonctions. Il y a une page qui est une liste de tout absolument, mais pas un pour les fonctions. Et j'espérais qu'il y aurait quelque chose de intégré dans emacs. – Singletoned

0

Essayez la commande apropos avec une entrée vide.

+0

Cela liste tout, et C-h f serait mieux de ce point de vue. – Singletoned

+0

Désolé, ça ne liste pas tout. Il s'avère qu'il n'inclut pas du tout les commandes non-interactives. – Singletoned

+0

Regardez apropos.el et écrivez le vôtre ensuite. – starblue

0

Nevermind. Il s'avère que C-h f (fonction de description) inclut des fonctions non-interactives, bien que je serais toujours intéressé à trouver une manière de regarder/chercher seulement les non-interactives (particulièrement seulement celles intégrées).

1

Vous pouvez vérifier le contenu de l'obarray, bien qu'il contienne tous les symboles, plutôt que "toutes les fonctions".

Alternativement, peuvent faire l'affaire (va tirer dans certaines parties du paquet CL de compatibilité):

(réduire (lambda (so-far suivante) (si (fboundp suivant) (Cons prochaine soi- loin) so-far)) obarray : nulle valeur initiale)
4

Essayez apropos au lieu de apropos-command. Cela vous donnera toutes les fonctions, pas seulement les fonctions interactives. C-h a est lié par défaut à ce dernier, mais si vous faites beaucoup de piratage, je recommande de le lier à l'ancien.

Questions connexes