在 Emacs 中,如何防止 org-babel-detangle 更改我的框架/窗口/缓冲区配置?

问题描述 投票:0回答:1

我想要什么:

  • 我运行 org-babel-detangle,当前帧/窗口/缓冲区配置没有任何变化,焦点保持不变

发生了什么:

  • 正如您在屏幕截图中看到的,一个新的缓冲区(包含原始 .org 文件)被添加到当前选项卡行以及一个新框架中,该框架将成为焦点

before detangle after detangle

我尝试过的:

  • 使用 display-buffer-alist '((".*" (display-buffer-no-window))) 抑制显示缓冲区。没有效果,可能是我没做对?
  • 节省短途旅行。它有点有效,但仍然留下一团糟 - 1 个新缓冲区和 1 个新帧。
(defmacro save-frame-excursion (&rest body)
   "Eval BODY and return to the currently selected frame."
   (let ((frame-var (gensym "FRAME")))
     `(let ((,frame-var (selected-frame)))
        (unwind-protect
            (progn ,@body)
          (select-frame-set-input-focus ,frame-var)))))

(defun org-babel-detangle-no-buffer-pop-up (orig-fun &rest args)
  (save-window-excursion
    (save-frame-excursion
     (apply orig-fun args))))
(advice-add 'org-babel-detangle :around #'org-babel-detangle-no-buffer-pop-up)
emacs org-mode literate-programming org-babel
1个回答
0
投票

找到解决方案。事实证明,如果没有额外的参数 -

display-buffer-alist '((".*" (display-buffer-no-window)))
(allow-no-window . t)
就无法工作。这非常直观,这让我很失望。

完整的工作解决方案如下:

(defun org-babel-detangle-no-buffer-pop-up (orig-fun &rest args)
  (save-excursion
    (let ((display-buffer-alist
           '((".*" (display-buffer-no-window) (allow-no-window . t)))))
      (apply orig-fun args))))

(advice-add 'org-babel-detangle :around #'org-babel-detangle-no-buffer-pop-up)
© www.soinside.com 2019 - 2024. All rights reserved.