Chcę zobaczyć definicję istniejącej funkcji w Emacsie. czy to możliwe?
Próbowałem C-h d function-name RET
, ale zwraca tylko dokumentację funkcji, a nie samą funkcję.
Myślę o czymś podobnym do type
polecenia bash , które zwróci całą definicję funkcji.
(Żenująca historia: przypadkowo napisałem nad działającą funkcją w moim .emacs
pliku niedziałającą wersją. Oryginalna funkcja jest nadal w pamięci! I działa! Ale nie mogę sobie przypomnieć, jak to zrobiłem przez całe życie .)
.emacs
otwarty w buforze, spróbuj cofnąć jak szalony.Odpowiedzi:
Jeśli wpiszesz
C-h f function-name RET
, otrzymasz dokumentację funkcji wraz z linkiem do źródła funkcji, jeśli jest dostępna.Nie sądzę, aby istniała łatwa funkcja Lisp, którą można wywołać w celu odzyskania lokalizacji źródła funkcji; wyszukiwanie jest ściśle powiązane z resztą systemu pomocy.
find-lisp-object-file-name
to główna funkcja, która próbuje dowiedzieć się, gdzie jest źródło funkcji.O ile nie
function-name
jest prymitywne (zdefiniowane w źródle C Emacsa), możesz zobaczyć jego kod za pomocą(symbol-function 'function-name)
, lub bardziej ogólnie (nazwa-funkcji funkcji pośredniej). Jeśli jednak funkcja została skompilowana bajtowo, zobaczysz tylko jej kod bajtowy.źródło
(symbol-function 'function-name)
jest dokładnie tym, czego szukałem! Wygląda również na to, że jeśli naprawdę potrzebujesz źródła do funkcji C, możesz je uzyskać, korzystając z informacji z odpowiedzi Olega.M-x find-function
zwraca definicję funkcji w pobliżu punktu.Z dokumentacji:
Jeśli chcesz uwzględnić także funkcje zaimplementowane w języku C, musisz dodać do pliku .emacs:
źródło