2016-06-01 8 views
0

私の.emacsの下のコードは正常に動作しますが、バイトコンパイルしようとすると "無効なキーマップのマイキーモードマップ"エラーが表示されます。マイナーモードのキーバインドをバイトコンパイルするときに無効なキーマップエラー

(eval-and-compile 
    (defvar my-keys-mode-map (make-sparse-keymap) "my-keys-mode keymap.") 

    (define-minor-mode my-keys-mode 
    "A minor mode to override major modes keys." 
    t " my-keys" 'my-keys-mode-map) 

    (bind-key "C-;" (quote right-char) my-keys-mode-map) 
    (bind-key "C-j" (quote left-char) my-keys-mode-map) 
) 

エラーがバインドキー行です。私はbind-keyの代わりにdefine-keyを試していますが、make-sparse-mapではなくmake-keymapを使用していますが運がありません。私はelispにあまり堪能ではない。バイトコンパイラによって認識されるようにキーマップを定義する他の方法はありますか?

+2

'(define-key my-keys-mode-map(kbd" C-; ")# 'right-char)'を試してください。 – Lindydancer

+0

@Lindydancer、問題は私のキーマップの前の引用でした。しかし、あなたの提案にあるシンボルの前の#は何をしていますか? – RNP

+0

これは関数の引用に使用されます。この場合、それは普通の見積もりとほぼ同じです。しかし、 'lambda'の前に普通の引用符を使うと、システムはそれを普通のリストと見なしてコンパイルしません。 – Lindydancer

答えて

1

define-minor-modeのキーマップ記号の前にある引用符を削除します。言い換えれば

、マイナーモードの定義は、このようになります。あなたがdefine-minor-modeに、キーマップ、(その値がキーマップである)ではないシンボルを渡す必要が

(define-minor-mode my-keys-mode 
    "A minor mode to override major modes keys." 
    t " my-keys" my-keys-mode-map) 

+0

それはそれを解決し、新しいことを学びました。ありがとう@ドリュー。 – RNP

関連する問題