Я только что установил cmake-mode
пакет в Emacs 24, используя:
M-x package-install cmake-mode
Я вижу пакет по адресу: ~/.emacs.d/elpa/cmake-mode-20110824
и могу загрузить его, используя инструкцию в Commentary:
разделе ~/.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))
Однако это противоречит инструкции по использованию на странице EmacsWiki ELPA:
... пакеты инициализируются ПОСЛЕ загрузки init.el. Это означает, что вы НЕ должны помещать специфичную для пакета инициализацию в свой init.el ...
Я склонен согласиться с этой инструкцией, потому что добавление в мой ~/.gnu-emacs
файл такой строки:
(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
уродливо, и сломается, если и когда я буду обновлять пакет. Однако без этой линии я не могу использовать cmake-mode
.
Я что-то здесь упускаю?
Примечания:
- Я не сделал ничего странного,
package-enable-at-startup
и его ценностьt
. - Я использую прелюдию .
user-emacs-directory
значение"~/.emacs.d/"
(спасибо @lawlist за предложение)package-user-dir
значение"~/.emacs.d/elpa"
emacs
package-management
elpa
cmake
Чен Леви
источник
источник
default-directory
илиuser-emacs-directory
, так чтоelpa
каталог не загружается?package-install
создаетelpa
каталог, и файл автозагрузки, который создается во время установки, основан на этом расположении.elpa
каталога, т. Е.~/.emacs.d/cmake-mode-20110824/
Это не тот файл, который ожидает файл автозагрузки.~/.emacs.d/elpa/cmake-mode-20110824/
. Проблема остается.Ответы:
Я установил cmake-mode с помощью marmalade-repo и взглянул на cmake-mode-autoloads.el. Похоже, что автор принял сознательное решение
not
включить все необходимое для настройки в файл автозагрузки. Тем не менее, инструкции в строках с 25 по 30 cmake-mode.el являются правильными, которые вы указали в своем вопросе. Если вы используете строки с 25 по 30 и правильно указали путь, тогда вам НЕ нужна дополнительная строка кода, такая как(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
.Очевидно, вы не захотите использовать
/dir/with/cmake-mode
- вы хотите использовать~/.emacs.d/elpa/cmake-mode-20110824
без прямого слеша в конце.Возможно, вам придется удалить каталог c-make-mode ... и попробовать переустановить, если приведенный выше код не работает (используя ваш собственный путь).
источник
(package-initialize)
загружаете другую. Я ошибаюсь? Я имею в виду, что я не очень много использовал ELPA и еще не обновлял пакеты, поэтому могу ошибаться. И, конечно, это не главная проблема в любом случае, но почему бы не избежать ее полностью?Учитывая природу вики как половинного хранилища кода, наполовину памятной записки для хакеров Emacs, вы по понятным причинам упустили из виду этот момент:
Это то чем я занимаюсь; один из первых файлов, загруженных моим пользовательским сценарием инициализации (создание которого, из всего, что я могу собрать, - это pons asinorum из серьезного использования Emacs 1 )
и оттуда я просто,
(require)
какие пакеты ELPA мне нужны. Это также имеет то преимущество, что позволяет лучше контролировать поведение установленных пакетов ELPA; если, например, я хочу отключить данный пакет на данный момент, но не удалить его полностью, достаточно просто(require)
закомментировать соответствующий вызов, когда поведение по умолчанию потребует полного удаления пакета из моего каталога ELPA.(1. Несмотря на почти непреодолимое искушение, я мужественно отказался назвать свой собственный сценарий инициализации
lightsaber.el
.)источник
Вы можете просто выполнить всю свою инициализацию после загрузки пакетов, используя
after-init-hook
. Из EmacsWiki :источник
У меня была похожая проблема, когда я начал использовать ELPA. В моем случае у меня было несколько локальных пакетов, так как их не было в ELPA.
И, таким образом, я изменил путь загрузки. По какой-то причине путь загрузки не обновляется надлежащим образом package.el. Для решения проблемы пришлось поставить
(setq load-path (cons "~/.emacs.d" load-path))
после звонкаpackage-initialize
источник