キー< backtab >はどのように定義されていますか。それを消し去る方法;ゼロから新しいものを作成する方法は?

ロゴ
基本的に私は過去数週間、キーバインドを一度に1つのモードでカスタマイズしようとしています。したがって、各モードを1つずつ確認し、キーマップを個別に完全にクリアしています。次に、便利だと思う関数をバインドします。
キーマップの内部動作、キーマップの関連性、操作方法などについて学ぶために、教育目的でもこれを行っています。

しかし、私が立ち往生しているのは、いくつかのキー(またはfunctions / macros;私はそうではないそれらが何と呼ばれるべきかを確認してください)が定義されています。例:<backtab><C-return><C-tab><C-iso-lefttab>など。

次のコマンドを使用して、function-key-maplocal-function-mapの両方のすべての関数キーをバインド解除しました。 (setf (cdr <keymap>) nil)

しかし、これらのキーはまだ存在しているようです。

おそらく私は混乱しているだけです。複数の抽象化レベルに同時に頭を包み込もうとすることで自分自身を..


質問
では、これらのキーを完全に消去して、最初の原則から始めて、(独自のカスタム名と機能を使用して)自分で作成できるようにするにはどうすればよいですか?


ボーナス質問
なぜ(define-key input-decode-map [?\C-i] (kbd "<C-i>"))は、キーC-iと<を解釈する抽象化を作成するのですかdiv id = "5407ad7918">

は異なりますか?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>!= TAB
これは、順番に行う必要のある私の思考のパラダイムシフトと関係があるのでしょうか。キーマップをよりよく理解するには?


誰かがこのような形式で些細で複雑な例を作成できれば、将来私と人々に本当に役立つと思います(現在のメジャーモードがtext-modeであると仮定):

keypress Control + Backspace ->
local-function-keymap Control + Backspace = <C-backspace>->
text-mode-map <C-backspace> = nil->
global-map <C-backspace> = backward-kill-word


UPDATE
できることがわかりました(種類)関数を消去してから、次のように対応するASCIIキーに再バインドします。

(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127]) 

ただし、何らかの理由でキーを再バインドしなかった場合でも私には知られていない、modキーの修飾子は引き続き機能します。それで、私が気付いていないキーマップはありますか?

if <tab> = undefined C-<tab> = defined 

コメント

  • それは'私には謎です。:('もx-alternatives-mapkey-translation-mapinput-decode-mapですが、'バックタブの場所がわかりません'の定義は…
  • どこで定義されているかがわかったと思います。keyboard.c ソースファイル。したがって、それらを完全に消去する方法はありません。

回答

あなたの質問の一部に答えられるかもしれません。他の人はおそらくここでもっと助けてくれるでしょう。

<backtab>は「ファンクションキー」と呼ばれますが、任意のキーマップのコマンドにバインドできます(このコンテキストではfunction-key-mapについては忘れてください)。

Vanilla Emacs (emacs -Q、initファイルなし)は、さまざまなキーマップの一部のファンクションキーをバインドします。また、ロードするライブラリもそうすることができます。

ファンクションキーのバインディングを本当に削除したい場合は、特定のコンテキストで、特定の時間に現在のモードから作業することをお勧めします。 C-h kを使用して、そのようなキーがバインドされているものを確認します。バインドされているキーマップ(通常はモードキーマップ)を特定し、そのマップから(initファイルで)バインドを解除します。 、たとえば、モードフックで)。すすぎ、繰り返します。

C-h M-kdescribe-keymap)の後にキーマップにバインドされた変数が続きます(または、変数がない場合は実際のキーマップが続きます)。describe-keymapを使用する場合は、ライブラリ help-fns+.el が必要です。

一部のファンクションキー(backtabf1、または<backtab><f1>ですが、裸の表記が好きです)はかなり標準的です。その他はEmacsに固有です。ファンクションキーは、さまざまな物理的実装を持つことができるものの論理名と考えてください。たとえば、backtabは通常本質的にS-TABです。これはC-h k*Help*に時々表示される「翻訳」表示の背後にあるものです。


(しかし、キーとキーマップ(これは良いことです)について学ぶ以外に、なぜキーバインディングを削除するこの演習を行っているのか疑問に思います。より一般的なのは、バインディングが気に入らないコマンドに別のキーをバインドすることです。 e。とにかく、理由を理解する必要はありません。)

コメント

  • それらがどこで定義されているかを見つけたかもしれません。これらはkeyboard.c ソースファイルにハードコードされているため、完全に消去する方法はありません。
  • これまでに得たものの質問を更新しました。不明-不明欠落しているキーマップを探している可能性があります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です