最近Emacs24にアップグレードしましたが、その結果、多くのカスタムキーバインディングが壊れました。
細かいマニュアルによると、 EmacsにファンクションキーとASCII制御コードとの混同をやめさせることができます(たとえば、さまざまなもの、または、などを持っC-m
てRET
バインドすることが可能です)。これは常にEmacsでの私の大きなペットであり、そのような貴重な「第1レベル」のキーボードショートカットは、私がすでにキーボードに専用のキーを持っているものに無駄になっています。私の場合、geditを模倣してキーバインドを「最新化」するために、それらをさまざまなものにバインドしたいと思います。Emacs23では、これは美しく機能していました。C-i
TAB
(global-set-key (kbd "C-i") 'goto-line)
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "C-d") 'kill-whole-line)
;; Fix some stuff broken by the above
(global-set-key [delete] 'delete-char)
(global-set-key (kbd "TAB") 'indent-for-tab-command)
(global-set-key (kbd "RET") 'newline)
それから、私はEmacs24にアップグレードしました、そしてそれはちょっと壊れました。C-m
それは確かにあることをし、別のことをするという意味でまだ「機能」しますRET
が、問題は、リターンキーがターミナルモードまたはミニバッファで正しく動作しなくなることです。入力したコマンドをアクティブにする代わりに、どちらの場合も、リターンキーを押すとカーソルが次の行に移動し、ミニバッファーまたはターミナルに入力したコマンドをアクティブにする方法がなくなります。
皮肉なことに、Emacs24は削除の動作に多くの変更を導入し、それらが切り離されたプロセスでC-d
、期待される動作にバインドし直す必要なしDEL
に実際に安全にバインドできるようになりました。他の何かにバインドされている間、私のリターンキーの同様の「それはうまくいく」動作。C-d
DEL
C-m
したがって、この問題に対する2つの可能な解決策を想像することができます。次のようになります。
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "RET") 'do-what-i-expect-the-return-key-to-do-in-any-mode)
または、このようなものはさらに良いでしょう:
(setq decouple-ascii-control-codes-from-function-keys t)
しかし、私はこのシナリオで私を助けるような変数や関数を知りません。
モードフックを使用してターミナルモードとミニバッファモードで正しいバインディングを復元しようとして何度か失敗しましたが、何も機能しないようです。ヘルプ!
ありがとう。