Im Laufe des Tages verwende ich ständig C-h f
oder C-h v
( describe-function
und describe-variable
), um die Dokumentation für Funktionen und Variablen nachzuschlagen. Wenn ich nicht alle benötigten Informationen erhalte, klicke ich meistens auf den Dateilink am Ende von:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
und navigieren Sie zum Quellcode. Dies funktioniert für installierte Pakete, scheint jedoch für integrierte Pakete nicht zu funktionieren. Zum Beispiel describe-function
bekomme ich oben auf der Hilfeseite für den Befehl nur Folgendes:
describe-function is an interactive compiled Lisp function.
ohne Link zum Quellcode. Gibt es eine Möglichkeit, schnell zum Quellcode eines integrierten Pakets zu navigieren?
Ich weiß , ich Quellcode in zB finden, /usr/share/emacs/24.5/lisp
und komme mit einem beliebigen Anzahl von Möglichkeiten , um den Zugriff des Verzeichnisses schnell, aber ich bin gespannt , ob es eine schnelle und einfache Möglichkeit, navigieren Sie zu einer integrierten Funktion / Variablendefinition in der ist Quellcode. Vielen Dank!
quelle
M-x find-function
;;M-x find-variable
;;M-x find-face
;;M-x find-library
. Ich verwende immer eine vollständige Installation von Emacs, damit ich auf alles zugreifen kann. Kurz nachdem ich meine eigenen Emacs erstellt habe, kopiere ich den C-Quellcode und stelle seinen Speicherort so ein, dass ich auch C-Quellcode-Definitionen finden kann. Sehen Sie sich die Variablefind-function-C-source-directory
an, um den Speicherort des C-Quellcodes nach dem Kopieren festzulegen.M-x describe-function
: description-function ist eine interaktive, automatisch geladene kompilierte Lisp-Funktion in 'help-fns.el'. Und von dort aus kann ich auf klicken (oder die Eingabetaste drücken)help-fns.el
und werde dann zum entsprechenden Abschnitt des Codes transportiert. Vielleicht haben Sie mehrere Emacs-Versionen, und in der Version, die Sie derzeit verwenden, ist nicht der gesamte Quellcode installiert?emacs -Q
(keine Init-Datei) feststellen oder wenn Sie es mit einem Rezept wiederholen können, das mit beginntemacs -Q
(z. B. wenn Sie angeben , welche Bibliotheken Sie laden und wie Sie sie laden usw.), sollten Sie einen Fehler melden Bericht :M-x report-emacs-bug
..el
Dateien (als optional behandelt) von den.elc
Dateien (obligatorisch), sodass Sie ein oder mehrere zusätzliche Pakete installieren müssen, um sie zu erhalten. Wenn Sie Emacs von Ihrem OS-Paketmanager erhalten haben, erklärt dies dies möglicherweise./usr/bin/emacs
und/usr/bin/emacsclient
ich habe eine Version, die gut in einem OSX-Anwendungsordner/Applications/Emacs.app
gepackt ist, der auf .app endet - dh (innerhalb dieser Emacs.app sind die Binärdateien und alle Quellcodedateien).Antworten:
Der Grund, warum manchmal "interaktive kompilierte Lisp-Funktion" (oder ebenfalls für Variablen) ohne Dateinamen angezeigt wird, ist, dass die Funktion aus einer bytekompilierten Datei geladen wurde und die entsprechende Elisp-Quelldatei nicht vorhanden ist. Um Ihnen den Quellcode anzuzeigen, muss Emacs den Quellcode finden können.
Viele Distributionen liefern Lisp-Quelldateien in einem separaten Paket, da nicht jeder Benutzer sie möchte und sie sperrig sind. Installieren Sie beispielsweise Debian und Derivate
emacs24-el
. Wenn Sie Emacs aus dem Quellcodemake install
erstellen , kopieren Sie die Elisp-Quellen.Wenn Sie den Quellcode von Grundelementen (Unterprogramme und Sonderformulare) anzeigen möchten, muss Emacs in der Lage sein, die C-Quellen zu finden. Diese sind normalerweise nur verfügbar, wenn Sie sie von der Quelle installiert haben.
Emacs sucht nach den Lisp-Quellen in den Verzeichnissen in
load-path
. Für eine ausfoo.elc,
der Datei geladene Funktion oder Variable kannfoo.el
oder seinfoo.el.gz
. Emacs sucht unter nach C-Quellensource-directory
und fordert Sie auf, ein anderes Verzeichnis einzugeben, wenn die Quelldatei nicht gefunden wird.quelle
M-x emacs-version
heißt es am Ende "modifiziert von Debian", was darauf hindeutet, dass ich eine Version aus dem Paketmanager meines Betriebssystems (Ubuntu) verwende, oder?/usr/bin/emacs
oder/usr/local/bin/emacs
?Wenn Sie nach Möglichkeiten suchen, schnell zum Quellcode zu springen, gibt es auch Möglichkeiten,
find-function-at-point
mitfind-variable-at-point
denen Sie zur Definition des Symbols unter dem Cursor springen können. Sie können sie beispielsweise an Ch Cf und Ch Cv binden.Oder versuchen Sie es mit elisp-slime-nav , das M- verwendet. Um zur Definition eines Symbols zu springen und M- zurückzukehren, navigiert es zu Variablen, Funktionen, Bibliotheken und Gesichtern - https://github.com/purcell/elisp-slime-nav/
quelle