в Emacs, как изменить привязки клавиш для orgstruct-mode?

#emacs #org-mode

#emacs #org-mode

Вопрос:

Я использую пользовательские привязки клавиш для 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)
 ))
 

Я хотел бы использовать эти же привязки клавиш в режиме orgstruct, который я запускаю поверх режима сообщений. То, что я пробовал, не работает:

  (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)
 

Как я могу изменить сопоставление ключей для orgstruct-mode?

Ответ №1:

Определение ключа для его отмены. nil Отвязывая ключ в orgstruct-mode-map (второстепенном режиме), вы открываете message-mode-map привязки (в основном режиме). Вы можете переопределить message-mode-map привязки клавиш, активно связывая эти ключи orgstruct-mode-map , но если вы хотите их отменить, вам также нужно будет отменить привязку ключей message-mode-map .

Вот способ отменить привязку всех этих ключей на обеих картах:

 (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)))
 

Комментарии:

1. Я поместил это в свой .emacs, но, похоже, это работает, только если я оцениваю его вручную. Должен ли я обернуть это в какой-то код оценки после загрузки?