incandescentman
incandescentman

Reputation: 6378

in Emacs, how to change key bindings for orgstruct-mode?

I use custom key bindings for org-mode:

(eval-after-load "org"
'(progn
 (define-key org-mode-map (kbd "<M-S-left>") nil)
 (define-key org-mode-map (kbd "<M-S-right>") nil)
 (define-key org-mode-map (kbd "<M-S-up>") nil)
 (define-key org-mode-map (kbd "<M-S-down>") nil)
 (define-key org-mode-map (kbd "<M-left>") nil)
 (define-key org-mode-map (kbd "<M-right>") nil)
 (define-key org-mode-map (kbd "<M-right>") nil)
 (define-key org-mode-map [C-S-right] 'org-shiftmetaright)
 (define-key org-mode-map [C-S-left] 'org-shiftmetaleft)
 (define-key org-mode-map [C-right] 'org-metaright)
 (define-key org-mode-map [C-left] 'org-metaleft)
 (define-key org-mode-map [C-up] 'org-metaup)
 (define-key org-mode-map [C-down] 'org-metadown)
 (define-key org-mode-map [C-S-return] 'org-insert-todo-heading)
 ))

I'd like to use these same key bindings in orgstruct-mode, which I run overtop message-mode. What I tried doesn't work:

 (define-key orgstruct-mode-map (kbd "<M-S-left>") nil)
 (define-key orgstruct-mode-map (kbd "<M-S-right>") nil)
 (define-key orgstruct-mode-map (kbd "<M-S-up>") nil)
 (define-key orgstruct-mode-map (kbd "<M-S-down>") nil)
 (define-key orgstruct-mode-map (kbd "<M-left>") nil)
 (define-key orgstruct-mode-map (kbd "<M-right>") nil)
 (define-key orgstruct-mode-map (kbd "<M-up>") nil)
 (define-key orgstruct-mode-map (kbd "<M-down>") nil)

How can I change the key map for orgstruct-mode?

Upvotes: 0

Views: 470

Answers (1)

Dan
Dan

Reputation: 5369

Defining a key to nil unbinds it. By unbinding a key in orgstruct-mode-map (the minor mode), you've exposed the message-mode-map (the major mode) bindings. You can override the message-mode-map keybindings by actively binding those keys in orgstruct-mode-map, but if you want to unbind them, you'll need to unbind the keys in message-mode-map as well.

Here's a way to unbind all of those keys in both maps:

(cl-dolist (map '(message-mode-map orgstruct-mode-map))
  (cl-dolist (key '("<M-S-left>" "<M-S-right>" "<M-S-up>" "<M-S-down>"
                    "<M-left>" "<M-right>" "<M-up>" "<M-down>"))
    (define-key (eval map) (kbd key) nil)))

Upvotes: 2

Related Questions