.Emacs.d dizinimdeki her şeyi nasıl bayt-derleyebilirim?


138

Emacs'ı kontrol etmeye karar verdim ve çok beğendim. Şimdi, Emacs'ın varsayılan yüklemesine daha iyi varsayılanlar ve bazı güzel özelleştirmeler sağlayan Emacs Başlangıç ​​Seti'ni kullanıyorum .

Biraz özelleştirdim, yasnippet , renk temaları , bağlanmamış ve diğer şeyler ekledim . Tüm özelleştirmeleri sakladığım bir github deposu oluşturdum, böylece onlara birden fazla yerden erişebiliyorum veya bir şeylerin kötü gitmesi durumunda .emacs.d dizinimi kaybettim.

Bunların hepsi çok güzel, ama bir sorun var: Emacs'ın yüklenmesi yaklaşık 1-2 saniye sürer. AFAIK .x dosyalarını tek tek .el dosyalarını Mx bayt-derleme dosyası ile derleyebilirim ve çalışır. Ama birçok .el dosyası var ve hepsini Emacs'ın yüklenmesini hızlandırmak için basit bir komutla veya bir şeyle derlemenin bir yolu olup olmadığını merak ediyorum. Emacs'ım her zaman açık değildir ve özellikle Total Commander'da daha hızlı alışmak için düzenleme komutu için varsayılan bir düzenleyici olarak ayarladıktan sonra (evet, burada windows xp) oldukça sık açıp kapatıyorum.

Emacs sürümüm 22.3. Ve evet, herhangi bir özelleştirmeden varsayılan Emacs yüklemesi anında devreye girer.

Yükleme sırasında hangi sürümü tercih ettiğimden emin değilim .el veya derlenmiş .elc bir arada Oo

Yani, Emacs bayt-.emacs.d dizinindeki her şeyi derlemek için bir elisp komutu veya Emacs komut satırı anahtarı var mı?

Yanıtlar:


208

C-u 0 M-x byte-recompile-directory

dizindeki ve aşağıdaki tüm alt dizinlerdeki tüm .el dosyalarını derleyecektir.

C-u 0Bölüm bir .elc muadili yok her .el dosya hakkında sormayın yapmaktır.


9
Daha sonra (her biri bir kez derlendikten sonra), aynı komutu C-u 0(aka C-0, BTW) olmadan kullanın . Bu, yalnızca byte-derlenmiş sürümlerinden daha yeni olan kaynak dosyaları byte-derleyecektir.
Drew

1
Küçük bir not: benim için uygun bir «.elc» dosyasını kaldırıncaya kadar işe yaramadı. Sadece «Bitti, 0 dosya derlendi, α dosya atlandı» gibi bir şey söyledi.
Hi-Angel

1
@ Merhaba Angel Aynı problemim var. Herhangi bir çözüm buldunuz mu?
zhanxw

@zhanxw yep. Ne yazık ki komut yalnızca ya değiştirilmiş ya da «.elc» karşılığı olmayan dosyaları derler. Bu nedenle, bir dizindeki her şeyi yeniden derlemek için önce tüm «.elc» dosyalarını silmeniz gerekir.
Hi-Angel

2
Etkileşimli komut maalesef bunu ortaya çıkarmaz, ancak işlevi doğrudan FORCEçağırırsanız, kaynak dosyadan daha eski olmasa bile ilişkili bir ".elc" içeren dosyaları yeniden derlemek için isteğe bağlı bağımsız değişkeni kullanabilirsiniz :M-: (byte-recompile-directory "/the/directory/" 0 t)
jbm

44

Emac'ları her başlattığımda byte derlemesi gereken her şeyi otomatik olarak bayt olarak derlemek için load-path, değişikliklerimden sonra dosyamın üstüne şunu .emacsekliyorum:

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

Şaşırtıcı bir şekilde, başlangıç ​​süreme fazla bir şey katmıyor (bir şey derlenmesi gerekmedikçe).

Emacs'ımı hızlandırmak için önce profile-dotemacs.el kullanarak yavaş parçaları tanımladım ve sonra otomatik yüklerle değiştirdim .


otomatik yükleme belgeleri taşındı. Bu ve profile-dotemacs.el referansı, bu sayfaya rastladığımda tam olarak ihtiyaç duyduğum şey.
Digicrat

24

--batchKomut satırından yeniden derlemek için bayrağı kullanabilirsiniz .

Tümünü yeniden derlemek için

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

veya tek bir dosyayı bir Makefile dosyasından yeniden derlemek için,

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'

5
Kullanım toplu bayt-derlemek yerine.
npostavs

1
Nasıl kullanılır?
nacho4d

8
@ nacho4d emacs -Q --batch -f batch-byte-compile *.el foo/*.el- byte-recompile-directory olsa da yinelenmez .
Brian Burns

3
Muhtemelen yeniden derlemeyi zorlamak için bir argüman eklemek istersiniz, örn. emacs --batch --eval '(bayt-yeniden derleme-dizini "~ / .emacs.d" 0)'
Ibrahim

17

Bu sorudan biraz sallanıyor, ancak yavaş yükleme problemini çözmek için Emacs 23'teki yeni daemon özelliğini kullanabilirsiniz.

"Çok fazla destek paketiniz varsa, emacs başlangıcı biraz yavaş olabilir. Ancak, emacs 23 arka planda emacs başlatmanızı sağlayan emacs --daemon'u getirir (örneğin, oturum açtığınızda). Tabii ki, eski sürümlerde zaten bir emacs 'sunucusu' olabilir, ancak arka planda başlatabilmek bunu çok daha güzel bir çözüm haline getirir. "

Gönderen http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html


Bunu kesinlikle kontrol edeceğim. Teşekkür ederim!
Mikka

2
.Bashrc'nize (veya kabuğunuzun sürümüne) takma ad emss = 'emacsclient -nw -a "" -c' eklerseniz, ilk önce çalışan bir arka plan programına bağlanmaya çalışır, eğer değilse, başlar ve bağlanır sen.
Frederick

2

Benim spacemacs kullanmak için, komut spacemacs/recompile-elpa. Komut byte-recompile-directoryherhangi bir dosyayı derlemez.


2
Farklı şeyler. ELPA / MELPA işleri, kendi arşiv hiyerarşisinde derleme yöntemleri tanımladı. byte-recompile-directory, kullanıcı tanımlı bir dizindeki tüm .el dosyalarını derlemeye çalışır.
RichieHH
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.