有许多有用的emacs命令可以在“其他窗口”中执行操作(例如C-x C-b
查看缓冲区列表,或C-h a
查看可用命令,或许多其他命令)。
我的问题:在一帧中使用一些精心布置的窗口似乎不太合适,每个窗口都显示特定的内容。
无论何时我使用其中一个“其他窗口”命令,它都会替换其他窗口的内容,其中(1)可能太窄而无法清楚地显示正在显示的信息,(2)可能需要手动“之后,通过将其设置回正确的缓冲区来清理。 (最好不要在执行此操作时检查缓冲区列表,否则您将陷入另一个窗口!)
(即使从同一窗口发出命令,Emacs也不会总是使用相同的“其他窗口”。例如,C-x C-b
输出可能会进入一个“其他”窗口而{{1在不同的“其他”窗口中显示其结果。同样,C-h a
有时会滚动与输出刚出现的窗口不同的“其他”窗口。)
我想解决或解决此问题,例如:
我真的希望能够指定一个特定的窗口,以便始终用作该帧中任何窗口的“其他窗口”。
如果失败了,或许有一种方法可以重新排列窗口顺序和/或使用不可见的窗口(如果存在的话)通过进行大量的幕后窗口改组来获得解决方案1的效果,可能需要在写入“其他窗口”的命令之前或之后输入额外的命令。
如果没有这些,我想要一个命令来撤消任何窗口中最近的缓冲区更改,因此无论使用什么窗口都会回到它在使用之前显示的内容。
(目前我使用的是workgroups.el,我使用一个单独的工作组来检查文档,但这显然不是最理想的。“更新”工作组没有实现解决方案3,因为它似乎只是改变了缓冲区,如果它是一个普通的文件。)
编辑:我看到这个问题与this similar question非常相似,但是这个问题没有得到它正在寻找的答案。由于理想的解决方案可能不存在,我也明确对解决方案感兴趣。答案 0 :(得分:2)
失败的那些,我想要一个命令来撤消任何窗口中最近的缓冲区更改,所以无论使用什么窗口都会回到 它在使用之前显示的是什么。
可能的解决方案是使用winner-mode
。通过添加
(winner-mode 1)
它提供了两个命令winner-undo
和winner-redo
分别用于撤消和重做窗口配置。
此外,由于您提到workgroups.el
尝试workgroups2
,一个workgroups.el的分支。它提供了类似的命令(wg-undo-wconfig-change
和wg-redo-wconfig-change
),用于恢复窗口配置
答案 1 :(得分:0)
所有人都不同意我的回答。但有人可能会认为这很有效。
每帧都做一个窗口。
;;Disable split-window
(defun split-window-below ()
(interactive)
;;do nothing
)
(defun split-window-right ()
(interactive)
;;do nothing
)
然后你不能拆分窗口了。如果需要显示另一个缓冲区,请使用另一个帧( C-x 5 2 )。
答案 2 :(得分:0)
上周我找到了#1的解决方案。这个想法是专注于所有的窗户,但你的关注。通过这种方式,您可以锁定窗口。听起来有点相反。
(defvar window-locked-p nil)
(defun lockon-window ()
"Set a target window to be used when calls `other-window'.
To set the target window, first put point to the window, then
call this. Technically this sets all window dedicated but the
target window. Call again to free windows."
(interactive)
(walk-windows
(lambda (win)
(set-window-dedicated-p win (not window-locked-p))))
(if window-locked-p
(message "All windows are free")
(set-window-dedicated-p (selected-window) nil)
(message "Window is locked on"))
(setq window-locked-p (not window-locked-p)))
当我听Stevie Ray Vaughan& amp;双重麻烦。弹出缓冲区位于其他缓冲区之上一层。
(winner-mode 1)
(defun slide-window ()
"This slides a buffer, in an unexpected window, to next-window.
Call this with point on the window. This only works soon after a
buffer was popped by `other-window' to an unexpected window.
Technically this recalls previous buffer-set by (winner-undo)
then shows the buffer to next-window. This is complementary to
`lockon-window'."
(interactive)
(let ((buf (buffer-name)))
(winner-undo)
(set-window-buffer (next-window) buf)
(message "Window is slided")
(other-window 1)))