1

我在 Emacs 中有以下全局键盘快捷键:

(global-set-key (kbd "C-<right>") 'forward-word)

对于 org-mode,我决定重新定义这个快捷方式。如果光标位于链接上,则转到链接位置。否则 - 使用forward-word功能。

(defun is-link-p ()
      (if (org-in-regexp org-bracket-link-regexp)
            t))

(defun follow-link-or-next-word ()
      (interactive)
      (if (is-link-p)
            (org-open-at-point)
            (forward-word)))

(add-hook 'org-mode-hook (lambda () 
      (define-key org-mode-map (kbd "C-<right>") 'follow-link-or-next-word)))

是否可以通过以下方式更改 org-mode 快捷方式:而不是调用 (forward-word),而是找到全局绑定的函数"C-<right>"并调用它。

因此,如果我决定更改全局快捷方式,我不需要更改 (forward-word) 两次。

4

1 回答 1

4

我认为您正在寻找该功能(查找键键盘映射键和可选的接受默认值)

此函数返回 keymap 中键的定义。本章描述的所有其他查找键的函数都使用查找键。以下是示例:

      (lookup-key (current-global-map) "\C-x\C-f")
          ⇒ find-file
      (lookup-key (current-global-map) (kbd "C-x C-f"))
          ⇒ find-file

您可以扩展您的功能:

(defun is-link-p ()
    (if (org-in-regexp org-bracket-link-regexp)
         t))

(defun follow-link-or-default-action()
    (interactive)
       (let ((global-default (lookup-key (current-global-map) (kbd "C-<right>"))))
           (if (is-link-p)
               (org-open-at-point)
               (funcall global-default))))

(add-hook 'org-mode-hook (lambda () 
      (define-key org-mode-map (kbd "C-<right>") 'follow-link-or-default-action)))
于 2013-06-01T00:20:00.810 回答