14

Ctrl私自身の使用のためにEMACSで+を使用したいTabのですが、Emacs組織モードにはすでにこれがあります。org-modeバインディングの代わりに独自のバインディングを使用するにはどうすればよいですか。

私の.emacsファイルでは以下を使用しています:

(global-set-key (kbd "<C-tab>") 'switch-view )

そしてそれはorg-modeを除いてどこでも動作します

4

3 に答える 3

26

説明するキーバインディングは、次の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を再起動します。

于 2010-12-02T10:20:51.513 に答える
5

メジャーモードに関係なく、どこでも有効にするキーバインディングを設定するためのより堅牢な方法は、カスタムキーマップを使用してグローバルマイナーモードを定義することです。

マイナーモードにはローカルキーマップを含めることもできます。マイナーモードが有効な場合は常に、そのキーマップの定義がメジャーモードのローカルキーマップとグローバルキーマップの両方をオーバーライドします。

http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html

そうすれば、キーバインディングを壊すモードに遭遇するたびに、メジャーモードのローカルキーマップをいじる必要がなくなります。

詳細については、このQ&Aを参照してください:
Emacsのキーバインディングをグローバルにオーバーライドする

于 2010-12-03T02:59:06.817 に答える
2

あなたが言ったように、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を起動するときは、準備が整っているはずです。

于 2010-12-02T10:22:10.020 に答える