Właśnie zainstalowałem cmake-mode
pakiet w Emacs 24 przy użyciu:
M-x package-install cmake-mode
Widzę paczkę na: ~/.emacs.d/elpa/cmake-mode-20110824
i mogę ją załadować, korzystając z instrukcji w Commentary:
sekcji ~/.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))
Jest to jednak sprzeczne z instrukcją użytkowania na stronie EmacsWiki ELPA:
... pakiety są inicjowane PO załadowaniu pliku init.el. Oznacza to, że NIE należy umieszczać inicjalizacji specyficznej dla pakietu w pliku init.el ...
Zwykle zgadzam się z tą instrukcją, ponieważ dodając do mojego ~/.gnu-emacs
pliku wiersz taki jak:
(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
jest brzydka i pęknie, jeśli i kiedy zaktualizuję pakiet. Jednak bez tej linii nie mogę użyć cmake-mode
.
Czy coś mi umyka?
Uwagi:
- Nie zrobiłem nic dziwnego,
package-enable-at-startup
a jego wartość tot
. - Używam preludium .
user-emacs-directory
wartość to"~/.emacs.d/"
(Dzięki @lawlist za sugestię)package-user-dir
wartosc jest"~/.emacs.d/elpa"
emacs
package-management
elpa
cmake
Chen Levy
źródło
źródło
default-directory
lubuser-emacs-directory
, tak żeelpa
katalog nie jest ładowany?package-install
tworzyelpa
katalog, a plik autoloads, który jest tworzony podczas instalacji, jest oparty na tej lokalizacji.elpa
katalogu - tzn.~/.emacs.d/cmake-mode-20110824/
Nie jest tam, gdzie spodziewa się tego plik autoloads.~/.emacs.d/elpa/cmake-mode-20110824/
. Problem pozostaje.Odpowiedzi:
Zainstalowałem cmake-mode z marmoladą-repo i spojrzałem na cmake-mode-autoloads.el. Wygląda na to, że autor podjął świadomą decyzję,
not
włączając wszystko, co potrzebne do instalacji w pliku autoloads. Jednak instrukcje w wierszach od 25 do 30 polecenia cmake-mode.el są poprawne, które zacytowałeś w swoim pytaniu. Jeśli użyjesz linii od 25 do 30 i poprawnie ustawisz ścieżkę, NIE będziesz potrzebował dodatkowej linii kodu, takiej jak(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
.Oczywiście nie chciałbyś używać
/dir/with/cmake-mode
- chcesz używać~/.emacs.d/elpa/cmake-mode-20110824
bez ukośnika na końcu.Może być konieczne usunięcie katalogu c-make-mode ... i próba ponownej instalacji, jeśli powyższy kod nie działa (przy użyciu własnej ścieżki).
źródło
(package-initialize)
ładujesz inną. Czy się mylę? Mam na myśli, że nie korzystałem dużo z ELPA i nie zaktualizowałem jeszcze żadnych pakietów, więc mogę się mylić. I oczywiście nie jest to poważny problem, ale dlaczego by tego nie uniknąć?Biorąc pod uwagę naturę wiki jako repozytorium pół kodu, pół wspomnienia dla hakerów Emacsa, zrozumiałe jest, że przeoczyłeś ten punkt:
Tym się właśnie zajmuję; jednym z pierwszych plików załadowanych przez mój niestandardowy skrypt inicjujący (którego tworzenie, z tego, co mogę zebrać, jest pons asinorum poważnego użycia Emacsa 1 ), robi
i stamtąd po prostu
(require)
potrzebuję pakietów ELPA. Ma to również tę zaletę, że pozwala lepiej kontrolować zachowanie pakietów zainstalowanych w ELPA; jeśli na przykład chcę na chwilę wyłączyć dany pakiet, ale nie odinstalować go całkowicie, wystarczy skomentować odpowiednie(require)
wywołanie, gdzie domyślne zachowanie wymagałoby całkowitego przeniesienia pakietu z mojego katalogu ELPA.(1. Pomimo niemal przytłaczającej pokusy, mężnie odmówiłem nazwania mojego niestandardowego skryptu inicjującego
lightsaber.el
.)źródło
Możesz wykonać całą inicjalizację po załadowaniu pakietów za pomocą
after-init-hook
. Z EmacsWiki :źródło
Miałem podobny problem, kiedy zacząłem używać ELPA. W moim przypadku miałem kilka lokalnych pakietów, ponieważ nie były one obecne w ELPA.
I tak zmieniłem ścieżkę obciążenia. Z jakiegoś powodu ścieżka ładowania nie jest poprawnie aktualizowana przez package.el. Aby rozwiązać ten problem musiałem umieścić
(setq load-path (cons "~/.emacs.d" load-path))
po wywołaniupackage-initialize
źródło