Ich möchte die Definition einer vorhandenen Funktion in Emacs sehen. Ist das möglich?
Ich habe es versucht C-h d function-name RET
, aber es wird nur die Dokumentationszeichenfolge für die Funktion zurückgegeben, nicht die eigentliche Funktion.
Ich denke an etwas Ähnliches wie den type
Befehl von bash , der die gesamte Definition einer Funktion zurückgibt.
(Peinliche Hintergrundgeschichte: Ich habe versehentlich eine funktionierende Funktion in meiner .emacs
Datei mit einer nicht funktionierenden Version überschrieben. Die ursprüngliche Funktion ist noch im Speicher! Und sie funktioniert! Aber ich kann mich für mein ganzes Leben nicht daran erinnern, wie ich es gemacht habe.)
.emacs
in einem Puffer geöffnet haben, versuchen Sie es wie verrückt rückgängig zu machen.Antworten:
Wenn Sie eingeben
C-h f function-name RET
, erhalten Sie die Dokumentation der Funktion mit einem Link zur Funktionsquelle, falls verfügbar.Ich glaube nicht, dass es eine einfache Lisp-Funktion gibt, die Sie aufrufen können, um den Speicherort der Quelle einer Funktion abzurufen. Die Suche ist ziemlich eng mit dem Rest des Hilfesystems verknüpft.
find-lisp-object-file-name
ist die Hauptfunktion, die versucht herauszufinden, wo sich die Quelle einer Funktion befindet.Sofern
function-name
es sich nicht um ein Grundelement handelt (definiert in Emacs 'C-Quelle), können Sie dessen Code mit(symbol-function 'function-name)
oder allgemeiner (Funktionsname der indirekten Funktion) anzeigen. Wenn die Funktion jedoch bytekompiliert wurde, sehen Sie nur ihren Bytecode.quelle
(symbol-function 'function-name)
ist genau das, wonach ich gesucht habe! Es sieht auch so aus, als ob Sie die Quelle für C-Funktionen wirklich benötigen, indem Sie Informationen aus Olegs Antwort verwenden.M-x find-function
Gibt die Definition der Funktion in der Nähe des Punkts zurück.Aus der Dokumentation:
Wenn Sie auch in C implementierte Funktionen einbeziehen möchten, müssen Sie Ihrer .emacs-Datei Folgendes hinzufügen:
quelle