So binden Sie eine Bindung aus einem Hauptmodus neu

342
mmorin

Ich bin mit org-Modus und will die lokale Bindung außer Kraft zu setzen C-c C-x C-z, um gebunden org-resolve-clocksstandardmäßig. Das Handbuch sagt

Wie in Lokale Keymaps beschrieben, können Hauptmodi und Nebenmodi lokale Keymaps definieren. ... Wenn Sie eines dieser Keymaps ändern möchten, müssen Sie den Modus-Hook verwenden (siehe Hooks).

Ich habe also diese Zeilen in meinem ~/.emacs:

(global-set-key (kbd "C-c C-x C-SPC") 'my-function)  (global-set-key (kbd "C-c C-x C-z") 'my-function)  (add-hook 'org-mode-hook (lambda () (local-set-key (kbd "C-c C-x C-z") 'my-function))) 

Die erste Zeile bindet einen ungebundenen Schlüssel an die Funktion. Die zweite Zeile bindet eine bereits im org-Modus gebundene Taste an die Funktion. Die restlichen Zeilen definieren den Haken.

Ich starte Emacs neu und beschreibe die Schlüssel. C-c C-x C-SPCgebunden ist, an my-functionund C-c C-x C-zwird auf den Standard gebunden org-resolve-clocksin einem org Puffer und my-functionanderswo. Wenn ich den Bindungscode interaktiv in einem Organisationspuffer mit M-::

(local-set-key (kbd "C-c C-x C-z") 'my-function) 

Dann ist der Schlüssel an my-functionden Standard gebunden .

Ich habe auch eine andere Antwort in diesem Thread ausprobiert, wie man wichtige Keybindings für den Major-Modus in Emacs setzt, und es schlug fehl:

(with-eval-after-load 'org-mode '(define-key org-mode-map (kbd "C-c C-x C-SPC") 'my-function) ) 

Ich verwende Emacs 25.3 (9.0).

Wie kann ich eine Bindung in einem Major-Modus überschreiben?

0

1 Antwort auf die Frage

1
manandearth

Sie können Ihre Funktion im org-Modus binden, indem Sie define-key:

(define-key org-mode-map (kbd "C-c C-x C-z") 'my-function) 

Es überschreibt alle globalen Bindungen und funktioniert nur in einem Puffer im Organisationsmodus.