Przez cały dzień ciągle używam C-h f
lub C-h v
( describe-function
i describe-variable
) szukam dokumentacji funkcji i zmiennych. Częściej niż nie, jeśli nie otrzymam wszystkich potrzebnych informacji, kliknę link do pliku na końcu:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
i przejdź do kodu źródłowego. Działa to w przypadku zainstalowanych pakietów, ale nie działa w przypadku wbudowanych. Na przykład u góry strony pomocy dotyczącej polecenia describe-function
dostaję tylko:
describe-function is an interactive compiled Lisp function.
bez linku do kodu źródłowego. Czy jest jakiś sposób na szybkie przejście do kodu źródłowego wbudowanego pakietu?
Wiem, że mogę znaleźć kod źródłowy np. /usr/share/emacs/24.5/lisp
I wymyślić wiele sposobów szybkiego dostępu do tego katalogu, ale jestem ciekawy, czy istnieje szybki i łatwy sposób na przejście do wbudowanej definicji funkcji / zmiennej w kod źródłowy. Dziękuję Ci!
źródło
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
. Zawsze używam pełnej instalacji Emacsa, aby mieć dostęp do wszystkiego, i zaraz po zbudowaniu własnego Emacsa kopiuję kod źródłowy C i ustawiam jego lokalizację, aby móc również znaleźć definicje kodu C-Source. Zobacz zmienną,find-function-C-source-directory
aby ustawić lokalizację kodu źródłowego C po skopiowaniu.M-x describe-function
: opis-funkcja jest interaktywną, automatycznie ładowaną, skompilowaną funkcją Lisp w 'help-fns.el'. Stamtąd mogę kliknąć (lub nacisnąć klawisz Enter),help-fns.el
a następnie przenieść się do odpowiedniej sekcji kodu. Być może masz wiele wersji Emacsa, a ta, której używasz w tej chwili, nie ma zainstalowanego całego kodu źródłowego?emacs -Q
(bez pliku inicjującego) lub jeśli możesz go ponownie wypisać według przepisu rozpoczynającego się odemacs -Q
(np. Mówiąc, jakie biblioteki ładujesz i jak je ładujesz itp.), Rozważ zgłoszenie błędu sprawozdanie:M-x report-emacs-bug
..el
pliki (traktowane jako opcjonalne) od.elc
plików (obowiązkowe), tak że aby je zdobyć, musisz zainstalować jeden lub więcej dodatkowych pakietów. Jeśli uzyskałeś Emacsa z menedżera pakietów systemu operacyjnego, być może to wyjaśnia./usr/bin/emacs
i/usr/bin/emacsclient
mam wersję ładnie spakowaną w folderze aplikacji OSX kończącym się na .app - tj./Applications/Emacs.app
(Wewnątrz Emacs.app znajdują się pliki binarne i wszystkie pliki kodu źródłowego).Odpowiedzi:
Powodem, dla którego czasami widzisz „interaktywną skompilowaną funkcję Lisp” (lub podobnie w przypadku zmiennych) bez nazwy pliku, jest to, że funkcja została załadowana z pliku skompilowanego bajtowo i odpowiedni plik źródłowy Elisp nie jest obecny. Aby pokazać ci kod źródłowy, Emacs musi być w stanie znaleźć kod źródłowy.
Wiele dystrybucji dostarcza pliki źródłowe Lisp w osobnym pakiecie, ponieważ nie każdy chce ich i są nieporęczne. Na przykład na Debianie i derywatach zainstaluj
emacs24-el
. Jeśli budujesz Emacsa ze źródła,make install
skopiuj źródła Elisp.Jeśli chcesz zobaczyć kod źródłowy prymitywów (podprogramy i formularze specjalne), Emacs musi być w stanie znaleźć źródła C. Nie są one normalnie dostępne, chyba że zostały zainstalowane ze źródła.
Emacs szuka źródeł Lisp w katalogach w
load-path
. Dla funkcji lub zmiennej ładowanej zfoo.elc,
pliku może byćfoo.el
lubfoo.el.gz
. Emacs szuka pod C źródeł poniżejsource-directory
i pyta o inny katalog, jeśli nie znajdzie pliku źródłowego.źródło
M-x emacs-version
końcu mówi „zmodyfikowane przez Debiana”, co wskazywałoby, że używam wersji z menedżera pakietów mojego systemu operacyjnego (Ubuntu), prawda?/usr/bin/emacs
czy/usr/local/bin/emacs
?Jeśli szukasz sposobów, aby szybko przejść do kodu źródłowego, istnieją również
find-function-at-point
ifind-variable-at-point
która będzie skakać do definicji symbolu pod kursorem - można powiązać je Ch Ch CF oraz CV, na przykład.Lub możesz spróbować elisp-slime-nav , który używa M-. aby przejść do definicji symbolu, a M-, aby powrócić - nawiguje do zmiennych, funkcji, bibliotek i twarzy - https://github.com/purcell/elisp-slime-nav/
źródło