Emacs 24: ELPA ile yüklenmiş bir paketin yüklenmesi


12

Ben sadece cmake-modeEmacs 24 paketi kullanarak yükledim :

M-x package-install cmake-mode

Paketi şu adreste görebilirim: ~/.emacs.d/elpa/cmake-mode-20110824ve aşağıdaki Commentary:bölümdeki talimatları kullanarak yükleyebilirim ~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el:

;; Add this code to your .emacs file to use the mode:
;;
;;  (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;;  (require 'cmake-mode)
;;  (setq auto-mode-alist
;;        (append '(("CMakeLists\\.txt\\'" . cmake-mode)
;;                  ("\\.cmake\\'" . cmake-mode))
;;                auto-mode-alist))

Ancak bu, ELPA'nın EmacsWiki sayfasındaki kullanım talimatıyla çelişmektedir :

... init.el yüklendikten SONRA paketler başlatılır. Bu, init.el içine pakete özel başlatma KOYMAYIN anlamına gelir ...

Dosyama aşağıdaki ~/.gnu-emacsgibi bir satır eklediğim için bu talimatı kabul etme eğilimindeyim :

(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

çirkin ve paketi yükseltirsem ve ne zaman kıracağım. Ancak bu satır olmadan kullanamıyorum cmake-mode.

Burada bir şey mi eksik?

Notlar:

  • Garip bir şey yapmadım package-enable-at-startupve 'değeri' t.
  • Ben başlangıç kullanıyorum .
  • user-emacs-directorydeğeri "~/.emacs.d/" (Öneri için teşekkürler @lawlist)
  • package-user-dir değer şudur "~/.emacs.d/elpa"

1
Eğer yerlerini değiştirmiş mümkün mü default-directoryya user-emacs-directoryöyle ki, elpadizin yükleniyor değil? package-installbir elpadizin oluşturur ve yükleme sırasında oluşturulan otomatik yüklemeler dosyası bu konuma bağlıdır.
hukukçu

1
Sorunuzdaki son kod satırınız, paketi elpadizinin dışına taşımanızı önerir - yani, ~/.emacs.d/cmake-mode-20110824/autoloads dosyasının olmasını beklediği yer değildir.
hukukçu

@lawlist: Çok dikkatlisin. Soruda bir hata yaptım. Şimdi (soru) doğru değerine sabitlenmiştir ~/.emacs.d/elpa/cmake-mode-20110824/. Sorun devam ediyor.
Chen Levy

Yanıtlar:


2

Cmake-mode'u marmelat-repo ile kurdum ve cmake-mode-autoloads.el dosyasına bir göz attım. Yazarın bilinçli bir karar verdiği not, autoloads dosyasındaki kurulum için gereken her şeyi içerdiği anlaşılıyor . Bununla birlikte, cmake-mode.el'nin 25 ila 30. satırlarındaki talimatlar, sorunuzda belirttiğiniz doğrudur. 25 - 30 arasındaki satırları kullanır ve yolu doğru ayarlarsanız, gibi fazladan bir kod satırına ihtiyacınız YOKTUR(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/") .

Açıkçası, kullanmak istemezsiniz /dir/with/cmake-mode- ~/.emacs.d/elpa/cmake-mode-20110824sonunda bir eğik çizgi olmadan kullanmak istersiniz .

(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))

Yukarıdaki kod çalışmazsa (kendi yolunuzu kullanarak) c-make-mode ... dizinini silmeniz ve yeniden yüklemeyi denemeniz gerekebilir.


Tabii, ama bir şey eksik değilse, daha sonra ELPA aracılığıyla cmake-modunu güncellerseniz, ya dizin init dosyanızda olmayan bir şeyle yeniden adlandırılır ya da yeni sürüm yükleme yolunuzda olmayan bir dizinde sona erer; ikinci durumda, ya güncellemeyi görmezsiniz ya da bir sürümü manuel olarak yüklediğiniz ve (package-initialize)başka bir sürümü yüklediğiniz için gereksiz tuhaflık duyarsınız . Yanlış mıyım? Yani, ELPA'yı çok fazla kullanmadım ve henüz herhangi bir paket güncellemedim, bu yüzden yanlış olabilirim. Ve elbette, bu her durumda büyük bir endişe değil, ama neden tamamen kaçınmıyorsunuz?
Aaron Miller

Haklısın. Ancak, paketler sadece siz bilmeden kendilerini güncellemekle kalmaz, güncelleme yaparsanız ve güncelleştirirseniz, o zaman temizlik işleminizi yapmanın zamanı gelmiş demektir. Sık sık çeşitli paketlerin kaynak dosyalarını değiştirerek önemli miktarda zaman harcıyorum ve bunları doğru yapmak için harcadıktan sonra mutlaka güncellenmelerini istemem. Emacs, "bakım gerektirmeyen" olarak değerlendirilebilecek şeylerden uzaktır.
hukukçu

Mükemmel bir nokta.
Aaron Miller

3

Wiki'nin doğası, Emacs korsanları için yarım kod deposu, yarım yardımcı not olarak göz önüne alındığında, bu noktayı açıkça göz ardı ettiniz:

ELPA paketlerini (zorunlu kılmak) için başlangıçta paket başlatmayı başka bir noktaya taşımak daha kolay olabilir; bu, açıklanan sorunların çoğuyla ilgilenir:

Bu benim işim; Benim özel init komut dosyası tarafından yüklenen ilk dosyalardan biri (ben toplayabilir tüm hangi yaratılması olduğunu pons asinorum kullanmak ciddi Emacs'ın 1 yapar)

(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)

ve oradan (require)ihtiyacım olan ELPA paketlerine ihtiyacım var. Bu aynı zamanda ELPA tarafından kurulan paketlerin davranışı üzerinde daha iyi kontrole izin verme avantajına sahiptir; Örneğin, belirli bir paketi şu an için devre dışı bırakmak istiyorum, ancak tamamen kaldırmak istemiyorsanız (require), varsayılan davranışın paketi tamamen ELPA dizinimin dışına taşımayı gerektireceği ilgili çağrıyı yorumlamak basit bir konudur .

(1. Neredeyse ezici günaha rağmen, özel init betiğimi adlandırmayı erkekçe reddettim lightsaber.el.)


ELPA paketleri varsayılan olarak orada bulunuyorsa , kullanıcı-emacs-dizinini kontrol etmenizi hatırlatmak isteriz . Eşyalarımı Dropbox'ta saklıyorum ve ayarlayana kadar toplu komut dosyamdaki yukarıdaki komutlardan hiçbir etki görmeme şaşırdım.
mlt

1

Tüm başlatma işlemlerini paketler yüklendikten sonra yapabilirsiniz after-init-hook. Gönderen EmacsWiki :

;; init.el
(add-hook 'after-init-hook (lambda () (load "<real init file>")))

0

ELPA kullanmaya başladığımda da benzer bir sorun yaşadım. Benim durumumda, ELPA'da bulunmadığı için birkaç yerel paketim vardı.

Ve böylece yük yolunu değiştirmiştim. Bazı nedenlerden dolayı, yükleme yolu package.el tarafından düzgün şekilde güncellenmez. Sorunu çözmek için ben koymak zorunda (setq load-path (cons "~/.emacs.d" load-path)) sonra yapılan çağrıpackage-initialize

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.