来自原始缓冲区的emacs调度帮助窗口

来自原始缓冲区的emacs调度帮助窗口,emacs,Emacs,每当我在emacs中执行apropos、descripe key或其他帮助功能时,它都会在我的其他窗口中显示帮助。为了摆脱它,我必须将窗口/缓冲区更改为转到那里,键入“q”,然后更改回我原来的工作缓冲区 有没有一种方法可以在代码中实现这一点?我知道如何保存偏移、切换缓冲区等,但我不知道在另一个缓冲区中结束时如何将“q”发送到minibuffer/emacs。谢谢帮助窗口选择变量可能正是您想要的。 如果将其值设置为true(setq帮助窗口选择t),则通过帮助命令之一打开帮助窗口时,将自动选择帮助

每当我在emacs中执行apropos、descripe key或其他帮助功能时,它都会在我的其他窗口中显示帮助。为了摆脱它,我必须将窗口/缓冲区更改为转到那里,键入“q”,然后更改回我原来的工作缓冲区


有没有一种方法可以在代码中实现这一点?我知道如何保存偏移、切换缓冲区等,但我不知道在另一个缓冲区中结束时如何将“q”发送到minibuffer/emacs。谢谢

帮助窗口选择变量可能正是您想要的。 如果将其值设置为true
(setq帮助窗口选择t)
,则通过帮助命令之一打开帮助窗口时,将自动选择帮助窗口。然后,您可以按
q
退出缓冲区并返回原始缓冲区。还有很多其他的选择,所以你也应该去看看

对于apropos窗口或任何使用
显示缓冲区的窗口,您可以使用

(add-to-list 'display-buffer-alist
         '("*Apropos*" display-buffer-same-window))

显示缓冲区相同窗口
是许多选项之一;它在当前窗口中打开缓冲区。其他可能的选项可以通过在
显示缓冲区
功能中查找文档来查看。

我建议将
(赢家模式1)
放在您的init文件中,然后使用C-C调用
赢家撤销
(如有必要,反复调用)以返回到以前的窗口配置。

这是我解决这个问题的方法。我将此命令绑定到
C-cq

(定义我的/帮助窗口名称
'(
无处不在的帮助缓冲区
“*帮助*”
“*恰如其分*
“*消息*”
“*完成*”
其他一般缓冲区
“*命令历史记录*”
“*编译日志*”
“*已禁用命令*”)
“应退出“my/quit help windows”的缓冲区的名称。”)
(取消运行我的/退出帮助窗口(&可选终止框架)
“使用帮助(如缓冲区)退出所有窗口。
对中指定的每个缓冲区调用“退出windows打开”
`my/help windows name'。可选参数KILL和FRAME
与“退出windows on”中的相同,只是框架默认为t(所以
仅考虑选定框架上的窗口)。
请注意,帧的nil值不能与
省略的参数,将被忽略;如果
您想退出所有框架上的windows。“
(互动)
(let((帧(或帧t)))
(dolist(名称我的/帮助窗口名称)
(忽略错误
(退出名为kill frame(()()))的窗口)

感谢您快速、准确的回复!!我们已经走到一半了。设置变量确实解决了Descripte键的问题,但不能解决Apropos显示的问题。我检查了等价的apropos变量(描述变量apropos),但没有一个看起来像是帮助窗口选择。想法?很抱歉延迟重播,我用一些关于适当缓冲区的信息编辑了我的答案。我使用类似的命令在与当前相同的窗口中打开shell,而不是在不同的窗口中。希望有帮助。谢谢朱尔斯。我想最好让它覆盖我当前的缓冲区,因为这样很容易分派。总比去那边打q好。。。再次谢谢你。@Kevin是的,我也是这么想的,如果你能找到更好的方法,我很想知道!帮助缓冲区有
帮助窗口选择
,如下所述。不过,一般来说,您可能对shackle包()感兴趣。是的,谢谢您的提示。我已经有了winner模式(但奇怪的是,几乎从未使用过它,因为ctrl-Xo的旧习惯很难改变…)Emacs中有很多缓冲区/窗口魔法。我不知道为什么Apropos不算作帮助窗口——它以同样的方式发送(带有一个q)。哦,好吧。我现在有一些东西可以用了,其他的也可以用。
apropos模式
help模式
是不同的主要模式。它们都是从
特殊模式
(它提供了键绑定)派生出来的,然而.YMMV,但我只能建议大家更习惯于使用
winner undo
(如果有帮助的话,可以将其绑定到稍微简单一点的键序列)。我发现它绝对是无价的,因为它是所有类似于此问题的通用解决方案,并且可以方便地还原我故意进行的窗口更改。有趣的解决方案——与使用“q”的缓冲区对话,与Emacs对话并说“杀死所有这些家伙”。而且还可以扩展,这很好。感谢您提供代码。