gpt4 book ai didi

svn - 防止 emacs 命令在其他窗口中显示新缓冲区

转载 作者:行者123 更新时间:2023-12-04 18:08:07 25 4
gpt4 key购买 nike

我在控制台模式下使用 emacs(即没有鼠标,一帧),具有固定的四个窗口配置:

+------+------+
|赢|赢|
| 1 | 3 |
+------+------+
|赢|赢|
| 2 | 4 |
+------+------+

窗口 3 是我的主要编辑窗口,我大部分时间都在那个窗口中度过。 Windows 1 和 2 一直保持相同的两个缓冲区,我很少更改这些窗口,因为缓冲区会自动更新并且它们包含只读信息。 Windows 4 是我的附属窗口,很高兴大多数打开新缓冲区的 emacs 命令(例如 grep、编译命令等)总是在 Window 4 中显示新缓冲区。这让生活变得非常简单,因为我绑定(bind)了 F12 直接在窗口 3 和窗口 4 并返回。

坏家伙是 psvn.el。 svn-status 缓冲区总是根据需要在窗口 3 中打开。
但是所有其他缓冲区(*svn-diff*、*svn-log*、...)在窗口 1、2 或 3 中随机打开,我永远无法预测它们会在哪个窗口中打开。有时,甚至同时在其中两个窗口上显示相同的缓冲区,这让我发疯!

我如何告诉 emacs/psvn 停止这样做?我尝试了所有常用的措施(调整相同的窗口缓冲区名称、分割高度阈值、分割宽度阈值……),但到目前为止没有任何效果:-(

请不要涉及ecb的解决方案。

最佳答案

基于@lawlist 所说的,这里有一个如何覆盖display-buffer 的示例。通过编写您自己的 display-buffer 来实现功能函数并将元素添加到 display-buffer-alist .

这里我们有一个交互函数,它将当前选择的窗口标记为“卫星”窗口:

(defun mark-this-window-as-satellite ()
"Mark the current window as the satellite window."
(interactive)
(mapc (lambda (win) (set-window-parameter win 'satellite nil))
(window-list))
(set-window-parameter nil 'satellite t)
(message "Window: %s is now the satellite window." (selected-window)))

这是一个帮助程序,可以让我们扫描并找到卫星窗口:

(defun get-satellite-window ()
"Find and return the satellite window or nil if non exists."
(find-if (lambda (win) (window-parameter win 'satellite)) (window-list)))

然后我们编写一个覆盖 display-buffer的函数。的行为。这个函数将寻找一个卫星窗口并在那里显示缓冲区:

(defun display-buffer-in-satellite (buffer ignore)
"Display the buffer in the satellite window, or the first window \
it finds if there is no satellite."
(let ((satellite-window (or (get-satellite-window)
(first (window-list)))))
(select-window satellite-window)
(display-buffer-same-window buffer nil)
(display-buffer-record-window 'reuse satellite-window buffer)
satellite-window))

最后,您需要将正则表达式/函数对添加到 display-buffer-alist这将使您所有的 SVN 缓冲区都使用新的卫星功能:

(push '("\\*svn-" display-buffer-in-satellite) display-buffer-alist)

您也可以为其他烦人的模式添加类似的元素。

关于svn - 防止 emacs 命令在其他窗口中显示新缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com