Emacs 24:ELPA経由でインストールされたパッケージの読み込み


12

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

ただし、これは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"

1
default-directoryまたはの場所を変更しuser-emacs-directoryて、elpaディレクトリがロードされないようにすることはできますか? package-install作成しelpaたディレクトリと、インストール時に作成されたオートロードファイルがその場所に基づいています。
法律家

1
質問の最後のコード行は、パッケージをelpaディレクトリから移動したことを示しています。つまり、~/.emacs.d/cmake-mode-20110824/オートロードファイルが期待する場所ではありません。
法律家

@lawlist:あなたはとても用心深いです。質問を間違えました。これは、(質問)の正しい値に修正されました~/.emacs.d/elpa/cmake-mode-20110824/。問題は残っています。
チェンレヴィ

回答:


2

marmalade-repoでcmake-modeをインストールし、cmake-mode-autoloads.elを調べました。作成者はnot、オートロードファイル内のセットアップに必要なすべてを含めることを意識的に決定したようです。ただし、質問で引用したcmake-mode.elの25〜30行目の指示は正しいものです。25行目から30行目を使用してパスを正しく設定した場合、などの余分なコード行は必要ありませ(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 ...ディレクトリを削除し、再インストールする必要がある場合があります。


もちろん、何かが足りない場合を除き、後でELPAを使用してcmake-modeを更新すると、ディレクトリの名前がinitファイルにないものに変更されるか、新しいバージョンがロードパスにないディレクトリになります。後者の場合、更新が表示されないか、1つのバージョンを手動で(package-initialize)ロードし、別のバージョンをロードしているため、不当に奇妙になります。私が間違っている?つまり、ELPAをあまり使用しておらず、ELPAでパッケージを更新していないので、間違っている可能性があります。そして、確かに、それはどんな場合でも大きな関心事ではありませんが、なぜそれを完全に回避しないのですか?
アーロンミラー

あなたは正しいです。ただし、パッケージは、知らないうちに自分自身を更新するだけではありません。更新する場合は、それがハウスキーピングを行うときです。私は頻繁にさまざまなパッケージのソースファイルを変更するのにかなりの時間を費やします。Emacsは、「メンテナンスフリー」と見なされるものとはほど遠いものです。
法律家

素晴らしい点。
アーロンミラー

3

Emacsハッカーの半分のコードリポジトリ、半分の補遺メモとしてのWikiの性質を考えると、この点を見落とすことは理解できました。

ELPAパッケージを(必要とする)ことができるように、起動時にpackage-initializeを別のポイントに移動する方が簡単かもしれません。これにより、説明されている多くの問題が処理されます。

これが私がすることです; 私のカスタムinitスクリプトによってロードされた最初のファイルの1つ(作成できるのは、Emacsの深刻な使用1のポンポンです

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

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

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


デフォルトでELPAパッケージが存在するため、変更された場合はuser-emacs-directoryを確認することを忘れないでください。私は自分のものをDropboxに保管していますが、setqを実行するまで、バッチスクリプトで上記のコマンドの効果が見られないことに驚きました。
mlt 14

1

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

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

0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.