Ctrl私自身の使用のためにEMACSで+を使用したいTabのですが、Emacs組織モードにはすでにこれがあります。org-modeバインディングの代わりに独自のバインディングを使用するにはどうすればよいですか。
私の.emacsファイルでは以下を使用しています:
(global-set-key (kbd "<C-tab>") 'switch-view )
そしてそれはorg-modeを除いてどこでも動作します
Ctrl私自身の使用のためにEMACSで+を使用したいTabのですが、Emacs組織モードにはすでにこれがあります。org-modeバインディングの代わりに独自のバインディングを使用するにはどうすればよいですか。
私の.emacsファイルでは以下を使用しています:
(global-set-key (kbd "<C-tab>") 'switch-view )
そしてそれはorg-modeを除いてどこでも動作します
説明するキーバインディングは、次のorg.el
ように定義されます。
(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived)
org-mode-map
これは、org-modeのローカルキーマップの1つでのみ有効であることを意味します。次のコードは、 org-modeの開始時に実行されるフックを追加します。からそのキーバインディングを削除するだけorg-mode-map
です。
(add-hook 'org-mode-hook
'(lambda ()
(define-key org-mode-map [(control tab)] nil)))
このコードを.emacsファイルに追加してから、emacsを再起動します。
メジャーモードに関係なく、どこでも有効にするキーバインディングを設定するためのより堅牢な方法は、カスタムキーマップを使用してグローバルマイナーモードを定義することです。
マイナーモードにはローカルキーマップを含めることもできます。マイナーモードが有効な場合は常に、そのキーマップの定義がメジャーモードのローカルキーマップとグローバルキーマップの両方をオーバーライドします。
(http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html)
そうすれば、キーバインディングを壊すモードに遭遇するたびに、メジャーモードのローカルキーマップをいじる必要がなくなります。
詳細については、このQ&Aを参照してください:
Emacsのキーバインディングをグローバルにオーバーライドする
あなたが言ったように、org-modeはC-TABに独自のキーバインディングを使用するため、これは機能しません。つまり、グローバルキーバインディングを定義した場合でも、org-modeを呼び出すとすぐに、そのバインディングがローカルキーバインディングで上書きされます。
ただし、実行できることは、org-modeを起動するたびに呼び出されるコールバック関数を追加することです。そのコールバック関数で、C-TABをリセットしてswitch-viewを呼び出します。
(add-hook 'org-mode-hook (lambda () (local-set-key [(control tab)] 'switch-view)))
上記の行を.emacsファイルに入れて、次に新しいEmacsを起動するときは、準備が整っているはずです。