2009-03-03 5 views
12

Wie erhalte ich eine vollständige Liste nicht interaktiver Funktionen, die ich in Emacs Lisp verwenden kann?Wie erhalte ich eine Liste von nicht interaktiven Emacs-Lisp-Funktionen?

Die interaktiven sind leicht zu finden im Hilfesystem, aber ich möchte eine vollständige Liste aller anderen Funktionen, die ich verwenden kann. Zum Beispiel concat, car, cdr usw. (Und vorzugsweise mit Dokumentation).

Dank

Ed

Edit: Beantwortet dank Jouni. Ich spielte mit seiner Antwort ein bisschen herum, und bekam es die Ergebnisse sortiert werden (die Ergebnisse seiner Code mit mir die richtige Sortierfunktion für Sie zu finden!)

(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

Danke für die Frage und Antwort. Sehr nützlich beim Lernen von Emacs Lispeln. – aartist

Antwort

13

Hier ist die Grundidee - siehe Emacs Lisp manual für Unklarheiten Konzepte.

(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, das ist brilliant. Ich habe aus dem kurzen Code zehn neue Dinge gelernt. Vielen Dank. – Singletoned

0

Sie tun könnte schlimmer als look at the website

+0

Ich habe ziemlich viel getan, aber ich kann nicht scheinen, eine Liste von Funktionen zu finden. Es gibt eine Seite, die eine Liste von allem enthält, aber keine für Funktionen. Und ich hatte gehofft, dass etwas in Emacs eingebaut würde. – Singletoned

0

Probieren Sie den Befehl apropos mit einer leeren Eingabe aus.

+0

Das listet alles auf, und C-h f wäre von diesem Standpunkt aus besser. – Singletoned

+0

Sorry, es ist nicht alles aufgelistet. Es stellt sich heraus, dass es keine nicht interaktiven Befehle enthält. – Singletoned

+0

Schauen Sie sich apropos.el an und schreiben Sie Ihre eigenen dann. – starblue

0

Vergesst nicht. Es stellt sich heraus, dass C-h f (beschreibende Funktion) nicht-interaktive Funktionen enthält, obwohl ich immer noch daran interessiert wäre, eine Möglichkeit zu finden, nur die nicht-interaktiven (insbesondere nur die eingebauten) zu sehen/zu durchsuchen.

1

Sie könnten den Inhalt von obarray prüfen, obwohl dieser alle Symbole enthält und nicht "alle Funktionen".

Alternativ können folgende den Trick (in Teilen des CL-Kompatibilität Paket ziehen wird):

(reduzieren (Lambda (so weit next) (if (fboundp next) (cons nächste sogenannten far) so weit)) obarray : Anfangswert nil)
4

Versuchen apropos statt apropos-command. Das gibt Ihnen alle Funktionen, nicht nur die interaktiven. C-h a ist standardmäßig an letzteres gebunden, aber wenn Sie eine Menge elisp Hacking tun, empfehle ich, es an ersteres zu binden.

Verwandte Themen