Yerleşik işlevlerin ve değişkenlerin kaynak koduna gidin


9

Gün boyunca sürekli olarak işlevler ve değişkenler için dokümanları aramak için C-h fveya C-h v( describe-functionve describe-variable) kullanıyorum . Sık sık, ihtiyacım olan tüm bilgileri alamazsam, sonunda dosya bağlantısını tıklayacağım:

some-random-command is an interactive compiled Lisp function in `some-mode.el'.

kaynak koduna gidin. Bu, kurulu paketler için çalışır, ancak yerleşik paketler için işe yaramaz gibi görünüyor. Örneğin, komut için yardım sayfasının üst kısmında tek describe-functionaldığım şey:

describe-function is an interactive compiled Lisp function.

kaynak koduna bağlantı yok. Yerleşik bir paketin kaynak koduna hızlı bir şekilde gitmenin bir yolu var mı?

Örneğin, kaynak kodu bulabilirsiniz biliyorum /usr/share/emacs/24.5/lispve bu dizine hızlı bir şekilde erişmek için herhangi bir sayıda yol ile gel, ama yerleşik bir işlev / değişken tanımına gitmek için hızlı ve kolay bir yolu olup olmadığını merak ediyorum kaynak kodu. Teşekkür ederim!


5
M-x find-function; M-x find-variable; M-x find-face; M-x find-library. Her zaman erişebilmem için her zaman tam bir Emacs yüklemesi kullanıyorum ve kendi Emacs'ımı oluşturduktan hemen sonra C-kaynak kodunu kopyalayıp C-Kaynak kodu tanımlarını da bulabilmek için konumunu ayarladım. find-function-C-source-directoryKopyaladıktan sonra C-kaynak kodunun konumunu ayarlamak için değişkene bakın .
hukukçu

1
Emacs'ın ana dalını kullanarak aşağıdakileri alıyorum M-x describe-function: define-function, 'help-fns.el'de etkileşimli otomatik yüklenen derlenmiş Lisp işlevidir. Ve oradan tıklayabilirim (veya enter tuşuna basabilirim) help-fns.elve daha sonra kodun ilgili bölümüne taşınırım. Belki birden fazla Emacs sürümünüz var ve şu anda kullandığınız kaynak kodun tamamı yüklü değil mi?
hukukçu

Emacs'ı emacs -Q(init dosyası yok) kullanarak başlattığınızda bu davranışı yaşarsanız veya ile başlayan bir tarifle emacs -Q(örneğin hangi kitaplıkları yüklediğinizi ve bunları nasıl yüklediğinizi söyleyerek) yeniden çoğaltabiliyorsanız, lütfen hata bildirmeyi düşünün raporu: M-x report-emacs-bug.
Drew

4
nb IIRC, Debian için Emacs paketleri (belki de diğer işletim sistemleri de) .eldosyaları (isteğe bağlı olarak işlenir) dosyalardan ayırır .elc(zorunlu), böylece bunları almak için bir veya daha fazla ek paket yüklemeniz gerekir. İşletim sistemi paket yöneticinizden Emacs aldıysanız, belki de bunu açıklar.
phils

1
İkili adlar (yürütülebilir izinlerle) - emacs veya emacsclient - için bir grep (veya başka bir arama yardımcı programı) yapabilir ve sabit diskinizde nerede olduklarını görebilirsiniz. Benimkini tamamen ayrı ayrı kendi klasörlerinde saklıyorum. Örneğin, işletim sistemimle birlikte gelen sürüme sahibim - /usr/bin/emacsve /usr/bin/emacsclient.app ile biten bir OSX uygulama klasöründe güzelce paketlenmiş bir sürüme sahibim - yani, /Applications/Emacs.app(Emacs.app'ın içinde ikili dosyalar ve tüm kaynak kod dosyaları).
hukukçu

Yanıtlar:


7

Bazen dosya adı olmadan “etkileşimli derlenmiş Lisp işlevi” (veya benzer şekilde değişkenler için) görmenizin nedeni, işlevin bayt derlemeli dosyadan yüklenmesi ve karşılık gelen Elisp kaynak dosyasının bulunmamasıdır. Kaynak kodu size gösterebilmek için Emacs'ın kaynak kodunu bulabilmesi gerekir.

Birçok dağıtım Lisp kaynak dosyalarını ayrı bir pakette gönderir, çünkü her kullanıcı bunları istemez ve hantaldır. Örneğin, Debian ve türevlerine yükleyin emacs24-el. Eğer kaynaktan Emacs kurarsan, make installkopyalar elisp kaynaklar.

İlkellerin kaynak kodunu (alt rutinler ve özel formlar) görmek istiyorsanız, Emacs'ın C kaynaklarını bulabilmesi gerekir. Kaynaktan kurulum yapmadığınız sürece bunlar normalde kullanılamaz.

Emacs, içindeki dizinlerdeki Lisp kaynaklarını arar load-path. foo.elc,Dosyadan yüklenen bir işlev veya değişken için foo.elveya olabilir foo.el.gz. Emacs altında C kaynaklarını arar source-directoryve kaynak dosyayı bulamazsa sizden farklı bir dizin ister.


Emacs'ın bu sürümünü kaynaktan oluşturduğuma yemin edebilsem de M-x emacs-version, sonunda "Debian tarafından değiştirildi" derken işletim sistemimin (Ubuntu) paket yöneticisinin bir sürümünü kullandığımı gösterir, değil mi?
elethan

@elethan “Debian tarafından değiştirildi” yazıyorsa, Ubuntu paketini kurdunuz veya en azından kurdunuz. Kaynaktan oluşturmuş olabilirsiniz (belki Ubuntu sürümünüzden daha yeni bir sürüm istediniz). Koşuyor musun /usr/bin/emacsyoksa /usr/local/bin/emacs?
Gilles 'SO- kötü olmayı bırak'

1

Kaynak koduna hızlı bir şekilde atlamanın yollarını arıyorsanız, ayrıca find-function-at-pointve find-variable-at-pointimlecin altındaki sembol tanımına atlayacaksınız - örneğin bunları Ch Cf ve Ch Cv'ye bağlayabilirsiniz.

Veya M- kullanan elisp-slime-nav'u deneyebilirsiniz . bir sembolün tanımına atlamak ve M-, geri dönmek için - değişkenlere, fonksiyonlara, kütüphanelere ve yüzlere gider - https://github.com/purcell/elisp-slime-nav/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.