在特定窗口中打开组织捕获缓冲区?

时间:2019-01-15 03:16:15

标签: emacs org-mode

我已经成为Emacs用户大约一年了。我通常在每个会话中设置相同的窗口(四个窗口)。

我已经设置了捕获模板并可以捕获我想要的东西,但是:我希望选择的捕获模板可以在新的(第五个)窗口中打开,而不是使用捕获模式将我暂时从窗口设置中拉出来,保留我现有的布局。我通常希望捕获模板打开一段时间,这样会破坏性。

这种似乎似乎是一个显而易见的选择,但我无法弄清楚。在此先感谢所有Emacs的光临。

2 个答案:

答案 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)) )