我在Emacs中有以下全局键盘快捷键:
(global-set-key (kbd "C-<right>") 'forward-word)
对于组织模式,我决定重新定义这个快捷方式。如果光标位于链接上,则转到链接位置。否则 - 使用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)))
是否可以通过以下方式更改组织模式快捷方式:不是调用(前向单词),而是查找全局绑定到"C-<right>"
的函数并改为调用它。
因此,如果我决定更改全局快捷方式,我将不需要更改(前向单词)两次。
答案 0 :(得分:4)
我认为你正在寻找函数(lookup-key keymap key &optional accept-defaults)
此函数返回keymap中key的定义。所有其他的 本章中描述的查找键的函数使用lookup-key。 以下是示例:
(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)))