当缓冲区显示时,我想实现以下功能GNU Emacs
:
它永远不应该分割我的窗户;
如果缓冲区已经在窗口中打开,则应该重用它,否则应该使用当前窗口。
部分解决方案
设置
pop-up-windows
为nil
将解决该点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
(setq pop-up-windows nil)
似乎做了你想做的事。- 我认为您不必在这里做太多事情。至少,帮助命令已经表现出这种行为。