我已经成为Emacs用户大约一年了。我通常在每个会话中设置相同的窗口(四个窗口)。
我已经设置了捕获模板并可以捕获我想要的东西,但是:我希望选择的捕获模板可以在新的(第五个)窗口中打开,而不是使用捕获模式将我暂时从窗口设置中拉出来,保留我现有的布局。我通常希望捕获模板打开一段时间,这样会破坏性。
这种似乎似乎是一个显而易见的选择,但我无法弄清楚。在此先感谢所有Emacs的光临。
答案 0 :(得分:2)
我为链接的问题想出了Dan's answer的易于使用的版本:
(defun my-org-capture-place-template-dont-delete-windows (oldfun args)
(cl-letf (((symbol-function 'delete-other-windows) 'ignore))
(apply oldfun args)))
(with-eval-after-load "org-capture"
(advice-add 'org-capture-place-template :around 'my-org-capture-place-template-dont-delete-windows))
也就是说,无需修改组织模式代码并删除对delete-other-windows
的调用,而这段代码delete-other-windows
临时将ignore
重新定义为org-capture-place-template
被呼叫。
它并没有完全满足您的要求:它选择了一个现有窗口,然后将捕获缓冲区放在那里。至少比删除所有以前的窗口(一个除外)的默认行为要好。
也许可以通过自定义变量display-buffer-alist
来完成所需的操作,但我无法弄清楚...
答案 1 :(得分:1)
您还可以在加载后使用https://github.com/raxod502/el-patch并修补org-capture(查找(el-patch-remove(delete-other-windows))):
(el-patch-feature org-capture)
(with-eval-after-load 'org-capture
(el-patch-defun org-capture-place-template (&optional inhibit-wconf-store)
"Insert the template at the target location, and display the buffer.
When `inhibit-wconf-store', don't store the window configuration, as it
may have been stored before."
(unless inhibit-wconf-store
(org-capture-put :return-to-wconf (current-window-configuration)))
(el-patch-remove (delete-other-windows))
(org-switch-to-buffer-other-window
(org-capture-get-indirect-buffer (org-capture-get :buffer) "CAPTURE"))
(widen)
(org-show-all)
(goto-char (org-capture-get :pos))
(setq-local outline-level 'org-outline-level)
(pcase (org-capture-get :type)
((or `nil `entry) (org-capture-place-entry))
(`table-line (org-capture-place-table-line))
(`plain (org-capture-place-plain-text))
(`item (org-capture-place-item))
(`checkitem (org-capture-place-item)))
(org-capture-mode 1)
(setq-local org-capture-current-plist org-capture-plist)) )