2012-04-11 3 views
2

emacs 24.1.50.1のace-jump-modeをインストールしようとしています。eval-when-compile not honored?

私は、MXのパッケージをインストールして、それをインストールし、およびMXエースジャンプモードを呼び出すと、それを活性化し、文字の入力を求められますが、文字を入力すると、私はエラーを取得しました:

Symbol's function definition is void: every 

ランニングemacs -q(そして、私の.emacsファイルにあるように(add-to-list 'load-path "~/.emacs.d/elpa")を実行しています)、エースジャンプモードをロードすることができ、問題なく機能します。私の.emacsにエラーが存在すると仮定して、私は自分の.emacsのすべてをコメントアウトし、定期的にemacsを再オープンしましたが、まだエラーが発生します。周りに検索するいくつかから

、私は、問題は、私がemacs -qを使用しない場合に、ACE-ジャンプ-mode.elのコード

(eval-when-compile 
    (require 'cl)) 

が正しく動作していないと思います。私がM-x load-library clを実行すると、すべて正常に動作します。

私はこのオンラインへの参照を見つけることができないので、一般的なバグではないので、自分の設定に問題があるはずです。私は私の.emacsにclをロードすることができるのは分かっていますが、1つの関数のためだけにパッケージ全体をロードする必要はありません。

誰でもこれを解決する方法を知っていますか?または、clから1つの関数だけをロードする方法は?

ありがとうございました。

答えて

4

Emacsは自己文書化され、すべての F C-hがこの 機能がcl-extraないclに定義されていることを示しますが、それは、それが利用可能になるんので、 をcl自動ロードをロードします。

clがロードされる方法のいくつかは、 がこのライブラリを壊したEmacs 24で変更されている可能性があります。あなたが見つけたように、最も簡単な修正は、あなたの初期化ファイルにちょうど

(require 'cl) 

に です。これは大したことではありません。 A ロットの ライブラリを使用すると、これはやりとりするので、ロードされる順序を変更するのは だと思われます。

everyの使用を避けるace-jump-mode の作成者にパッチを提出するだけです。これはより不便です。あなたが動作するようにace-jump-modeを得た場合、あなたがclcl-seqの両方をすることを意味し、代わりに 実行(require 'cl)を持っているでしょうコンパイル「.elc」ファイル、の コンパイルされていない「.EL」ファイルをロードしているため

は最後に、それはでした途中で がロードされています。したがって、これらのファイルをロードせずにこの作業を にすることはできません。

+0

'.emacs'をバイトコンパイルしたときに警告を無効にする'(バイトコンパイル - ディセーブル警告 'cl-functions) 'を追加することもできます。 – Daimrod

3

(eval-when-compile <foo>)は、<foo>がファイルをコンパイルするとき(またはコンパイルされていないとき)にのみ実行されることを意味します。したがって、ファイルをコンパイルすると、結果ファイルにはclがロードされません。everyclがロードされたときにのみ定義されるため、問題です。 (eval-when-compile <foo>)は、マクロ(例:ignore-errors)をロードするために使用されます。これらはコンパイル時にのみ必要ですが、everyはマクロではないため、問題です。

+0

eval-when-compileの代わりにここで動作させることはできますか? – Josh

+0

@Josh:はい、 '(require 'cl)'の周りに何も置かないでください。 – Stefan