2012-03-26 11 views
5

stackoverflow!ここ数日、私はemacsを少しカスタマイズしようとしていましたが、私はどのように接近するのか分からないという問題に直面しました。グローバルセットキーによってマスクされたイドモードバインディング

私がしようとしているのは、グローバルキーバインディングと同じキーを使ってさまざまなことを行うイドモードのキーバインドを定義することです。

イドモードのキーバインドをこのように定義されています。

(defun ido-my-keys() 
    "Add my keybindings for ido." 
    (define-key ido-completion-map (kbd "M-<return>") 
    'ido-invoke-in-vertical-split) 
) 

(add-hook 'ido-setup-hook 'ido-my-keys) 

をそして、私は私の.emacsファイルに以下の行を配置するまで、それが正常に動作します:この行現在M-リターンで

(global-set-key (kbd "M-<return>") 'insert-newline-and-indent) 

ido-switch-bufferからでもinsert-newline-and-indentを呼び出します。興味深いことに、グローバルセットキーを対話的に使用すると(つまり、init-fileではなくM-x呼び出しから)、すべてが期待通りに機能します。

ありがとうございました。私の英語のために申し訳ありません。


問題は、私はオンになっていたergoemacsモードであることが判明しました。このモードは、この効果を引き起こすグローバルセットキーのアドバイスを定義します。

私はergoemacsの初期化よりも上にグローバルセットキー呼び出しを移動することでこの問題を解決しました。最高の解決策ではなく、単純な解決策です。

+0

私はこれを再現傾けます。 BTW 'ido-invoke-in-vertical-split'はinbuilt関数ではありません。 https://gist.github.com/493269 – kindahero

+0

このような不明な点は申し訳ありません。とにかく、この関数は問題には関係していないようです。例えば、ido-exit-minibufferなどのように変更しても効果は変わりません。 – campugnatus

+0

使用しているEmacsのバージョンは?私はこの問題を再現できません(Emacs 24.0.94)。 – phils

答えて

3

問題がergoemacs-mode.elことで、より具体的には、ergoemacs-キーバインドパッケージによって引き起こされる、またはされたこのパッケージには、実際には、に置き換えて、というグローバル・セットのキーのためのアドバイスを定義する

それ自身のergoemacs-global-set-key。しかし、ergoemacsはマイナーモードであるため、キーマップの方がグローバルマップよりも優先順位が高くなり、idoマイナーモードのキーバインディングがオーバーライドされます。 ergoemacs-mode.elで

  1. コメントアウトアドバイス:

    は、私はその問題には3つのソリューションを参照してください。

  2. ergoemacs-modeをオンにする前にグローバル設定キーを使用してください。
  3. バグを修正するergoemacsの作者待ち;)
関連する問題