Emacs 窗口管理

Emacs 窗口管理

当缓冲区显示时,我想实现以下功能GNU Emacs

  1. 它永远不应该分割我的窗户;

  2. 如果缓冲区已经在窗口中打开,则应该重用它,否则应该使用当前窗口。


部分解决方案

  • 设置pop-up-windowsnil将解决该点1

  • 设置same-window-regexps'("^\*")将解决要点的第二部分2,但与前者相反。

答案1

我发现可以display-buffer通过设置变量来定制函数的行为display-buffer-function

这个函数似乎可以完成我想要的功能(当然它需要一些清理但它可以工作):

(defun my-display-buffer(BUFFER-OR-NAME&可选NOT-THIS-WINDOW)
  (捕获'返回
    ;; 在现有窗口中搜索缓冲区
    (让((窗口(窗口列表)))
      (同时(第一个窗口)
        ;; 成立
        (如果(eq(窗口缓冲区(第一个窗口))BUFFER-OR-NAME)
            (抛出'返回
                   ;; 如果 minibuffer 没有选择窗口
                   (如果(eq(选定窗口)(迷你缓冲窗口))
                       (第一个窗口)
                     (选择窗口(第一个窗口)))))
        ;; 下一个窗口
        (setq 窗口(其余窗口))))
    ;; 否则使用当前
    (如果(eq(选定窗口)(迷你缓冲窗口))
        ;; 如果是小缓冲区
        (预
          (选择窗口(迷你缓冲区选定窗口))
          (切换到缓冲区 BUFFER-OR-NAME)
          (选择窗口(迷你缓冲窗口)))
      ;; 如果是常规窗口
      (预
        (切换到缓冲区 BUFFER-OR-NAME)
        (选定窗口)))))

答案2

  1. (setq pop-up-windows nil)似乎做了你想做的事。
  2. 我认为您不必在这里做太多事情。至少,帮助命令已经表现出这种行为。

相关内容