回答:
できます(define-key key-translation-map (kbd "ESC") (kbd "C-g"))
。私はずっと前に同じことをしましたが、問題はありませんでした。
コメントに従って、回答を改善するために編集します。
ESC
重要な機能を維持したい場合は、
(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
注意すべきことの1つは、Emacsがハングした場合でもC-g
、何らかの理由でキーを使用する必要があることですが、まれにしか発生しません。
C-g
とハングを解除する必要がありますESC
。この場合、再マッピングは機能しません。
ESC
ので、これは気になりませんでした。ただし、必要に応じて、別の翻訳を行うことができます。たとえば、(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
ESC
それは特別な鍵なので、私は一人にしておくことをお勧めします。
デフォルトでは、EmacsはESC
(ASCII 27)をとして使用しますmeta-prefix-key
。Elispマニュアルから:
'esc-map'は、プレフィックスキーのグローバルキーマップです。したがって、すべてのメタ文字のグローバルな定義は実際にはここにあります。このマップは、「ESC-prefix」の関数定義でもあります。
そして
代わりに、メタ文字はキールックアップの目的で2文字のシーケンスと見なされます。最初の文字はESC(または現在「meta-prefix-char」の値であるもの)です。したがって、キー「M-a」は内部的に「ESC a」として表され、そのグローバルバインディングは「esc-map」の「a」のスロットにあります。
したがって、ESCを別のものに使用するには、別のものに設定meta-pefix-key
し、他のキーをにバインドする必要がありますESC-prefix
。他にも必要な変更があるかもしれません-私はこれを試したことはありません。
詳細についてはmeta-prefix-char
、参照キー探索のための機能を elispのマニュアルで。
meta-prefix-char
to nil
を設定しても、プレフィックスキーになることは無効になりません。メタキーから分離されるだけです。グラフィカルバージョンのEmacsを備えたOSXでは、エスケープキーをメタキーから分離したい-私(setq meta-prefix-char nil)
は初期化の最初に設定して、その後ロードされるすべてのライブラリがそれが私が望んでいることを理解できるようにします。これにより、メタキーをプレフィックスキーとして使用したり、エスケープキーをプレフィックスキーとして使用したりできます。esc-map
内のCソースコードレベルで定義されていますkeymap.c
。プレフィックスキーとして使用するためのものです。
esc-map
デフォルトのM-バインディングを維持するための接頭辞にマッピングしますか?
(setq ns-alternate-modifier 'meta)
、これはメタをAppleキーボードの左Altキーにします。OSXのデフォルト設定を使用して、Unicode文字を作成するために右のAltキーを使用したい: (setq ns-right-alternate-modifier 'none)
-スペイン語の文字、段落記号などを挿入する--with-ns
。デフォルト設定の絆使用してOSX上のメタキーにエスケープキーmeta-prefix-char
で、27
あなたが述べたように。
ここで素敵な答え:https : //superuser.com/a/945245/624661
引用:
これはEmacsのinitファイルで使用できます。
;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)
Oleが参照するバインディングとしてでは[escape]
なく(kbd "ESC")
、をバインドする必要があります。在庫がある場合、これはウィンドウシステムのemacsフレームの場合にのみ機能します。これは少し説明する価値があると思います。
(kdb "ESC")
は、実際にはASCII制御文字を意味ESC
し、グルカが述べたように、この文字を再マッピングしたくはありません。しかしEsc、ASCIIではありません。少なくともグラフィカル環境でESC
は、シンボルescape
です。バインディングがそのときどのように(kbd "ESC")
影響するのEscですか?これは、に使用できるバインディングがない場合に emacsがに変換さescape
れるために発生ESC
しescape
ます。希望する場合のフォールバックの種類(これはlocal-function-key-map
、そのようなことに関心がある場合に実装されます)。
したがって、バインドする[escape]
ときは安全であり、心配する必要はありませんESC
。あなた自身のバインディングとは別に、ESC
それらが意味するときに言うキーマップを追加する必要があります[escape]
。
うーん...まあ、ほとんど。これらのマップ[escape]
が初めて使用されないのはなぜですか?これはターミナルでは機能しないためです。そのEscようなデバイスで作業したい場合は、少なくとも端末をカスタマイズする必要があります。
端末のストーリーは別の投稿で報告されています:
C- [を実際にバインドする方法は?。あなたがしなければならないことは、Esc押されたときに何らかのカスタムシーケンスを送信するように端末に伝え、次にこのシーケンスを[escape]
emacs(input-decode-map
)の初期入力段階でマッピングすることです。
お役に立てれば。
universal-argument
と同じ概念ですuniversal-argument-map
。