我如何修改org-capture的行为,并在选择模板后将新打开的缓冲区放置在Emacs上新的垂直拆分窗口中?更精确地讲,如何使捕获的模板窗口放置在当前集中的窗口或最左边的窗口下方(分割窗口下方)?
这是一个复杂的主题(我不完全理解-告诫者!)。问题在于,org-capture
与实际进行窗口分割的函数(称为split-window-sensibly
)之间的概念距离很长。因此,在很多地方都可以想象到您对行为的改变进行干预,但是麻烦的是,无论您采取哪种方式,都可能破坏很多与捕获无关的其他事情。
split-window-sensibly
的文档字符串(执行C-h f split-window-sensibly RET
读取它确实提到了两个变量:
默认情况下,
display-buffer
例程调用此函数进行拆分 最大或最近最少使用的窗口。更改默认值 定制选项split-window-preferred-function
。您可以强制执行此功能以不水平分割WINDOW, 通过设置(或绑定)变量
split-width-threshold
为 零。此外,如果您将split-height-threshold
设置为零, 该函数确实会垂直拆分窗口的机会增加。为了不垂直拆分窗口,请设置(或绑定) 变量
split-height-threshold
为零。此外,您可以 将“ split-width-threshold”设置为零以进行水平分割 更有可能发生。
因此,我建议您定义自己的org-capture函数,该函数在调用“ real”`org-capture之前使用let-bind设置这些变量:
(defun my-org-capture ()
(interactive)
(let ((split-width-threshold nil)
(split-height-threshold 0))
(org-capture)))
并使用it而不是“真实”的。例如。您可以通过执行
将其绑定到组织模式手册建议的内容 (global-set-key (kbd "C-c c") 'my-org-capture)
(或修改您使用的任何键绑定)。
这样做的优点是它[[only修改了您如何调用org-capture
,因此几乎没有机会破坏其他任何内容。如果需要,您可以轻松撤消更改。