Diese Frage wurde von https://stackoverflow.com/q/605785/ inspiriert . Durch M-x describe-function <TAB>
kann ich eine Liste aller interaktiven oder nicht intuitiven Funktionen erhalten, die im aktuellen Status von Emacs verfügbar sind. Wenn ein bestimmter Modus aktiviert ist (z. B. Latex-Modus), erhalten wir eine längere Liste, da auch die im Latex-Modus verfügbaren Funktionen aufgelistet sind.
Meine Frage ist, wie man eine Liste aller Funktionen erhält, die ausschließlich in einem bestimmten Modus (z. B. Latex-Modus) verfügbar sind. Mit anderen Worten, ohne alle anderen Funktionen, die von diesem Modus nicht bereitgestellt werden. Wie im obigen Link wäre auch eine kurze Beschreibung der Funktionen nützlich.
major-mode
functions
Name
quelle
quelle
smex-major-mode-commands
.Antworten:
Was bedeutet es für einen Modus, eine Funktion bereitzustellen? Sie sagen " eine Liste aller Funktionen, die ausschließlich in einem bestimmten Modus verfügbar sind " und " alle anderen Funktionen ausschließen, die von diesem Modus nicht bereitgestellt werden ".
Es hört sich so an, als würden Sie einen Modus mit der Bibliothek verwechseln, die ihn definiert . Eine Bibliothek bietet / definiert Funktionen. Ein Modus tut dies im Allgemeinen nicht.
Wenn Sie eine Liste aller in einer bestimmten Bibliothek definierten Funktionen erhalten möchten, lesen Sie zunächst die Antwort von @ wvxvw. Sie können auch versuchen, das Bibliothekspräfix mit Funktionsnamen abzugleichen - das ist häufig relevant, aber keineswegs endgültig.
Wenn Sie jedoch eine Liste aller Funktionen erhalten möchten, die für einen bestimmten Modus relevant sein könnten , z. B. Funktionen, die nur verwendet werden können oder am nützlichsten sind, wenn dieser Modus aktiviert ist, dann fürchte ich Sie müssen die Bibliothek untersuchen, in der der Modus definiert ist. Möglicherweise müssen Sie sogar einige andere Bibliotheken untersuchen.
Eine bestimmte Bibliothek definiert normalerweise mehr als nur einige Dinge, die für einen bestimmten Modus relevant sind. Und ein bestimmter Modus kann sehr gut Dinge verwenden, die in verschiedenen Bibliotheken definiert sind, und in einigen Fällen Dinge, die nur für diesen bestimmten Modus oder eine Reihe von Modi, die ihn enthalten, sinnvoll sind.
Insgesamt ist Ihre Frage, wie derzeit gestellt, nicht sehr klar. Sie können sich selbst helfen, bessere Antworten zu erhalten, indem Sie dies klären.
quelle
.el
im Ordner enthaltenen Dateien definiert sindsite-lisp>auctex
. Für den Organisationsmodus meine ich alle Funktionen, die in den.el
im Ordner enthaltenen Dateien definiert sindsite-lisp>org
. Für viele Modi ist die Situation einfacher, da für sie nur eine.el
Datei vorhanden ist. Ich hoffe, diese Erklärungen machen das Motiv meiner Frage jetzt klar.Vielleicht hat dieser Code eine pädagogische Wirkung:
Das Problem
Aufgrund des nicht deterministischen Charakters des Code-Parsing und -Ladens müssen verschiedene Probleme behoben werden:
Wann ist die Funktion in einer Datei definiert? Funktionen können bedingt definiert werden, und die Vorhersage, ob eine Bedingung die Funktionsdefinition begünstigt oder nicht, entspricht der Lösung des Halteproblems. Nehmen wir zur Veranschaulichung diesen Code an:
Vor diesem Hintergrund möchten Sie wahrscheinlich nach
find-func.el
Inspiration suchen , um sich einen Überblick über das Layout und die Probleme beim Auffinden des Quellcodes für Emacs Lisp-Funktionen zu verschaffen.quelle
Symbol's function definition is void: find-library-name
. Das ist auch ein kleines Tippfehler-Symbol -> Symbole.(require 'find-func)
bevor Sie diesen Code ausführen. Danke für den Tippfehler gefunden. Ich werde das korrigieren.Ich habe diese Funktionalität gerade zu lispy hinzugefügt . Der neue Befehl
lispy-goto-elisp-commands
ist gebunden an oge.Das generic g(
lispy-goto
) gibt eine Liste aller Tags an, wobei Befehle mit einem anderen Gesicht hervorgehoben werden, währendlispy-goto-elisp-commands
nur die Befehls-Tags angegeben werden.Codeliste
Dies soll nur zeigen, dass die Semantik von CEDET verwendet wird, um die Liste der Tags zu erhalten.
(semantic-tag-get-attribute tag :user-visible-flag)
wird verwendet, um zu bestimmen, ob das Tag ein Befehl ist oder nicht.Wie benutzt man
Navigieren Sie zu der Datei, die den Code enthält. Dies kann mit erfolgen f1 f. Ich verwende stattdessen gerne die Counsel-Description-Funktion , da das Drücken C-.dort nicht durch den
*Help*
Puffer gehen muss .Machen Sie den Punkt zu etwas Besonderem (bewegen Sie ihn vor dem Öffnen des Parens oder aktivieren Sie die Region) und drücken Sie oge. Es ist auch möglich, nur zu verwenden M-x
lispy-goto-elisp-commands
.quelle
M-x lispy-goto-elisp-commands
auf dem Puffertex-mode.el
gibt den Fehlerlispy--fetch-tags: Wrong type argument: stringp, ("c:/Program Files/GNU Emacs/share/emacs/24.5/lisp/textmodes/tex-mode.el")
Das smex- Paket enthält Code zum Auflisten aller Befehle eines Pakets. Sie können diesen Code anpassen, um alle Funktionen zu erhalten.
quelle