Gibt es eine Möglichkeit, die Definition einer vorhandenen Funktion in Emacs auszudrucken?

2351
Micah R Ledbetter

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 etwas Ähnliches an den typeBefehl von bash, der die gesamte Definition einer Funktion zurückgibt.

(Peinlicher Hinter: Ich schrieb versehentlich über eine Arbeitsfunktion in meiner .emacsDatei mit einer nicht funktionierenden Version Die ursprüngliche Funktion ist noch in Erinnerung und es funktioniert, aber ich kann nicht für die.! Leben von mir erinnern, wie ich es tat.)

6
Wenn Sie ".emacs" in einem Puffer geöffnet haben, versuchen Sie, es wie verrückt zu machen. Gilles vor 13 Jahren 1

2 Antworten auf die Frage

6
Gilles

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 Ort der Quelle einer Funktion abzurufen. Die Suche ist ziemlich eng mit dem Rest des Hilfesystems verbunden. find-lisp-object-file-nameist die Hauptfunktion, die versucht herauszufinden, wo die Quelle einer Funktion liegt.

Wenn function-namees sich nicht um ein Grundelement (in der Emacs-C-Quelle definiert) handelt, kann der Code mit (symbol-function 'function-name)oder allgemeiner (Funktionsname der indirekten Funktion) angezeigt werden. Wenn die Funktion jedoch bytekompiliert wurde, sehen Sie nur den Bytecode.

Vielen Dank! `(Symbol-Funktion 'Funktionsname)` ist genau das, wonach ich gesucht habe! Es sieht auch so aus, als wenn Sie wirklich die Source-to-C-Funktionen benötigen, die Sie mit Hilfe von Olegs Antwort erhalten können. Micah R Ledbetter vor 13 Jahren 0
Vielen Dank! Wenn die Funktion automatisch geladen wird, müssen Sie sie einmal aufrufen, bevor Sie den Quellcode erhalten können. Gerhard Burger vor 10 Jahren 0
3
Oleg Pavliv

M-x find-function gibt die Definition der Funktion in der Nähe des Punktes zurück.

Aus der Dokumentation:

Findet die Quelldatei, die die Definition der Funktion in der Nähe des Punkts (ausgewählt durch `function-at-point-Funktion ') enthält, in einem Puffer und platziert einen Punkt vor der Definition. Setzen Sie vor dem Verschieben eine Markierung, wenn der Puffer bereits vorhanden ist.

Wenn Sie auch in C implementierte Funktionen einschließen möchten, müssen Sie Ihrer .emacs-Datei Folgendes hinzufügen:

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir")) 
Hmm. Das ist gut zu wissen, aber ich denke, es funktioniert nur für eingebaute Funktionen, was ich nicht gesucht habe. Micah R Ledbetter vor 13 Jahren 0
Es funktioniert auch für benutzerdefinierte Funktionen Oleg Pavliv vor 13 Jahren 1