web-dev-qa-db-ja.com

Emacs 24:ELPA経由でインストールされたパッケージをロードする

以下を使用して、Emacs24にcmake-modeパッケージをインストールしました。

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))

ただし、これはELPAのEmacsWikiページの 使用方法 と矛盾します。

...パッケージは、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"です
12
Chen Levy

Marmalade-repoを使用してcmake-modeをインストールし、cmake-mode-autoloads.elを確認しました。作成者が意識的に決定したようですnotは、セットアップに必要なすべてのものをautoloadsファイルに含めます。ただし、cmake-mode.elの25行目から30行目の説明は正しいものであり、質問で引用しました。 25〜30行目を使用してパスを正しく設定した場合は、[〜#〜] not [〜#〜](add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")などの追加のコード行が必要になります。

明らかに、/dir/with/cmake-modeを使用したくないでしょう-末尾にフォワードスラッシュなしで~/.emacs.d/elpa/cmake-mode-20110824を使用したいです。

(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))

上記のコードが機能しない場合は、c-make-mode ...ディレクトリを削除して、再インストールする必要がある場合があります(独自のパスを使用)。

2
lawlist

Emacsハッカーの半分のコードリポジトリ、半分aide-memoireとしてのウィキの性質を考えると、あなたは当然のことながらこの点を見落としていました:

パッケージの初期化を起動時に別のポイントに移動するだけで、ELPAパッケージを(必須)できるようにする方が簡単な場合があります。これにより、説明されている問題の多くが処理されます。

これが私がすることです;私のカスタムinitスクリプトによってロードされた最初のファイルの1つ(私が収集できるすべてのものから、その作成は、深刻なEmacsが使用するpons asinorumです1)します

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

そこから、必要なELPAパッケージを(require)するだけです。これには、ELPAがインストールされたパッケージの動作をより細かく制御できるという利点もあります。たとえば、特定のパッケージを今のところ無効にしたいが、完全にアンインストールしたくない場合は、関連する(require)呼び出しをコメントアウトするだけです。デフォルトの動作では、パッケージをELPAから移動する必要があります。ディレクトリ全体。

(1.ほとんど圧倒的な誘惑にもかかわらず、私は自分のカスタムinitスクリプトに名前を付けることを巧みに拒否しました lightsaber.el 。)

3
Aaron Miller

after-init-hookを使用して、パッケージのロード後にすべての初期化を行うことができます。から EmacsWiki

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

ELPAを使い始めたときも同様の問題がありました。私の場合、ELPAに存在しなかったため、いくつかのローカルパッケージがありました。

したがって、ロードパスを変更しました。何らかの理由で、load-pathがpackage.elによって適切に更新されません。この問題を解決するには、(setq load-path (cons "~/.emacs.d" load-path))afterpackage-initializeを呼び出す必要がありました。

0
Dmytro