【发布时间】:2013-07-11 10:16:16
【问题描述】:
我希望用[C-c C-o]在当前窗口打开类似[[file://filename.org|filename]]的链接,而不是在其他窗口默认打开。
如何改变这种组织模式的默认行为?
似乎默认[C-u C-c C-o] 是在其他窗口中强制打开链接。
这里有一个类似的问题:How do I keep Emacs org-mode from splitting windows?
【问题讨论】:
我希望用[C-c C-o]在当前窗口打开类似[[file://filename.org|filename]]的链接,而不是在其他窗口默认打开。
如何改变这种组织模式的默认行为?
似乎默认[C-u C-c C-o] 是在其他窗口中强制打开链接。
这里有一个类似的问题:How do I keep Emacs org-mode from splitting windows?
【问题讨论】:
您需要更改org-link-frame-setup 的值。默认值包含缺点(file . find-file-other-window)。您可以将其替换为(file . find-file)。
【讨论】:
(file . find-file),但很快我发现[C-u C-c C-o] 在当前窗口的某个位置打开了链接也是。我希望保留[C-u C-c C-o] 在其他窗口中打开链接。我不知道该怎么做。我阅读了变量org-link-frame-setup 的文档字符串。你有什么想法吗?
(let ((org-link-frame-setup whatever-policies)) (org-open-at-point)) 创建它们,然后将其绑定到您选择的组合键。
org-link-frame-setup 值的方法:(add-to-list 'org-link-frame-setup '(file . find-file))
这是我写的解决方案,灵感来自@juanleon 的回答。它映射C-c C-o 以在当前窗口中打开链接,但保留C-u C-c C-o 的默认行为(在其他窗口中打开)。它不会破坏通用参数函数(当我天真地重新映射 C-u C-c C-o 时会发生这种情况)。
(defun org-force-open-current-window ()
(interactive)
(let ((org-link-frame-setup (quote
((vm . vm-visit-folder)
(vm-imap . vm-visit-imap-folder)
(gnus . gnus)
(file . find-file)
(wl . wl)))
))
(org-open-at-point)))
;; Depending on universal argument try opening link
(defun org-open-maybe (&optional arg)
(interactive "P")
(if arg
(org-open-at-point)
(org-force-open-current-window)
)
)
;; Redefine file opening without clobbering universal argumnet
(define-key org-mode-map "\C-c\C-o" 'org-open-maybe)
【讨论】: