Sepanjang hari saya terus-menerus menggunakan C-h f
atau C-h v
( describe-function
dan describe-variable
) mencari dokumentasi untuk fungsi dan variabel. Lebih sering daripada tidak, jika saya tidak mendapatkan semua informasi yang saya butuhkan, saya akan mengklik tautan file di akhir:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
dan arahkan ke kode sumber. Ini berfungsi untuk paket yang diinstal, tetapi sepertinya tidak berfungsi untuk yang sudah ada. Sebagai contoh, di bagian atas halaman bantuan untuk perintah yang describe-function
saya dapatkan adalah:
describe-function is an interactive compiled Lisp function.
tanpa tautan ke kode sumber. Apakah ada cara untuk dengan cepat menavigasi ke kode sumber paket bawaan?
Saya tahu saya dapat menemukan kode sumber dalam mis. /usr/share/emacs/24.5/lisp
,, Dan menemukan sejumlah cara untuk mengakses direktori itu dengan cepat, tetapi saya ingin tahu apakah ada cara cepat dan mudah untuk menavigasi ke fungsi / definisi variabel bawaan di Kode sumber. Terima kasih!
sumber
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
. Saya selalu menggunakan instalasi penuh Emacs sehingga saya memiliki akses ke semuanya, dan setelah membangun Emacs saya sendiri, saya menyalin kode sumber-C dan mengatur lokasinya sehingga saya dapat menemukan definisi kode Sumber-C juga. Lihat variabelfind-function-C-source-directory
untuk mengatur lokasi kode sumber-C setelah Anda menyalinnya.M-x describe-function
: menggambarkan-fungsi adalah fungsi Lisp kompilasi autoloaded interaktif di 'help-fns.el'. Dan dari sana saya dapat mengklik (atau menekan enter)help-fns.el
dan kemudian dipindahkan ke bagian kode yang berlaku. Mungkin Anda memiliki beberapa versi Emacs, dan yang Anda gunakan saat ini tidak menginstal semua kode sumber?emacs -Q
(tidak ada file init), atau jika Anda dapat mengolahnya dengan resep yang dimulai denganemacs -Q
(misalnya mengatakan perpustakaan apa yang Anda muat dan bagaimana Anda memuatnya dll), maka silakan pertimbangkan untuk mengajukan bug melaporkan:M-x report-emacs-bug
..el
file (diperlakukan sebagai opsional) dari.elc
file (wajib), sehingga Anda perlu menginstal satu atau lebih paket tambahan untuk mendapatkannya. Jika Anda memperoleh Emacs dari manajer paket OS Anda, mungkin ini menjelaskannya./usr/bin/emacs
dan/usr/bin/emacsclient
, dan saya memiliki versi yang dikemas dengan baik di folder aplikasi OSX yang berakhiran .app - yaitu,/Applications/Emacs.app
(di dalam Emacs.app, adalah binari dan semua file kode sumber).Jawaban:
Alasan Anda kadang-kadang melihat "fungsi interaktif Lisp yang dikompilasi" (atau juga untuk variabel) tanpa nama file adalah bahwa fungsi tersebut diambil dari file byte-yang dikompilasi dan file sumber Elisp yang sesuai tidak ada. Untuk menunjukkan kepada Anda kode sumber, Emacs harus dapat menemukan kode sumber.
Banyak distribusi mengirimkan file sumber Lisp dalam paket terpisah, karena tidak setiap pengguna menginginkannya dan mereka berukuran besar. Misalnya, pada Debian dan turunannya, instal
emacs24-el
. Jika Anda membuat Emacs dari sumber,make install
salin sumber Elisp.Jika Anda ingin melihat kode sumber primitif (subrutin dan formulir khusus), Emacs harus dapat menemukan sumber C. Biasanya tidak tersedia kecuali Anda menginstal dari sumber.
Emacs mencari sumber Lisp di direktori di
load-path
. Untuk fungsi atau variabel yang diambil darifoo.elc,
file dapatfoo.el
ataufoo.el.gz
. Emacs mencari sumber C di bawahsource-directory
, dan meminta Anda untuk direktori yang berbeda jika tidak menemukan file sumber.sumber
M-x emacs-version
mengatakan "dimodifikasi oleh Debian" pada akhirnya, yang akan menunjukkan bahwa saya menggunakan versi dari manajer paket OS saya (Ubuntu), kan?/usr/bin/emacs
atau tidak/usr/local/bin/emacs
?Jika Anda mencari cara untuk melompat dengan cepat ke kode sumber, ada juga
find-function-at-point
danfind-variable-at-point
yang akan melompat ke definisi simbol di bawah kursor - Anda dapat mengikatnya ke Ch Cf dan Ch Cv, misalnya.Atau Anda bisa mencoba elisp-slime-nav , yang menggunakan M-. untuk melompat ke definisi simbol, dan M-, untuk kembali - itu menavigasi ke variabel, fungsi, perpustakaan, dan wajah - https://github.com/purcell/elisp-slime-nav/
sumber