如何在 Emacs Org-Mode 中覆盖键绑定

如何在 Emacs Org-Mode 中覆盖键绑定

我刚刚更新了 emacs org-mode,当访问 org 文件时,此绑定生效:

C-TAB (org-force-cycle-archived) 循环一棵树,即使它被标记为 ARCHIVE。

禁用此绑定的最佳方法是什么?

我使用 C-Tab 在窗口之间移动。

我尝试创建一个钩子,但不起作用。本地键绑定仍然优先。

(defun my-org-mode-hook ()
  (define-key global-map '[(control tab)] 'other-window)
  (define-key global-map '[(shift control tab)] 'my-other-window-back)
  (global-set-key '[(control tab)] 'other-window)
  (global-set-key '[(shift control tab)] 'my-other-window-back)
  (local-set-key '[(control tab)] 'other-window)
  (local-set-key '[(shift control tab)] 'my-other-window-back)
  )
(add-hook 'org-mode-hook 'my-org-mode-hook)

答案1

下面是我在 Org-mode 中禁用的一些功能的示例——我使用了require,但您也可以使用eval-after-load——您不需要在每次 Org-mode 缓冲区加载时都这样做(例如,mode-hook 是多余的):

(require 'org)

(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-up>") nil)
(define-key org-mode-map (kbd "<M-down>") nil)
(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-left>") nil)
(define-key org-mode-map (kbd "<S-left>") nil)
(define-key org-mode-map (kbd "<S-right>") nil)
(define-key org-mode-map (kbd "<S-up>") nil)
(define-key org-mode-map (kbd "<S-down>") nil)
(define-key org-mode-map (kbd "<M-right>") nil) 
(define-key org-mode-map (kbd "C-<tab>") nil)
(define-key org-mode-map (kbd "C-S-<tab>") nil)
(define-key org-mode-map (kbd "<C-up>") nil)
(define-key org-mode-map (kbd "<C-down>") nil)

答案2

我使用 M-up 和 M-down 来更改文本大小时也遇到了类似的问题。如果您是 use-packager,此方法可解决该问题:-

  (use-package org
   :bind (:map org-mode-map
          ("<M-up>"   . nil)           ;; do not steal my keys!
          ("<M-down>" . nil)           ;; ditto
          ("<C-f3>"   . org-metaup)    ;; use this instead
          ("<M-f3>"   . org-metadown)  ;; ditto
          ;; etc

相关内容