如何在Emacs中关闭自动打开的窗口?

时间:2009-07-31 13:04:23

标签: emacs

这可能是一个非常天真的Emacs问题 - 我是新手。

当我评估lisp表达式时,如果出现错误,调试器会自动出现在另一个窗口中。如果我有* scratch *和* info * open(前者用于尝试lisp而后者用于读取它),则调试器在* info *所在的窗口中打开。此时,我必须切换到那个窗口,然后将其更改回* info *,然后返回* scratch *。 (如果我为缓冲区列表执行C-x C-b,也会发生同样的事情。)我猜测必须有一种方法可以在没有这么长的命令序列的情况下关闭该窗口。谁能开导我?

8 个答案:

答案 0 :(得分:24)

至少在我的emacs(22.3)上,当调试器弹出时,它的窗口变为活动窗口。在那里,按 q 只是退出调试器,如果这是你想要的。那时,它也会退出递归编辑。

答案 1 :(得分:18)

根据我的理解,你想要关闭另一个窗口中的缓冲区而不将光标从当前窗口移开。

我没有任何现有的功能,所以我自己动手。

(defun other-window-kill-buffer ()
  "Kill the buffer in the other window"
  (interactive)
  ;; Window selection is used because point goes to a different window
  ;; if more than 2 windows are present
  (let ((win-curr (selected-window))
        (win-other (next-window)))
    (select-window win-other)
    (kill-this-buffer)
    (select-window win-curr)))

您可以将其绑定到类似“C-x K”或其他一些难以按键的键上,这样您就不会误将其按下。

(global-set-key (kbd "C-x K") 'other-window-kill-buffer)

我用这个很多! (对于帮助缓冲区,编译缓冲区,Grep缓冲区,以及我想立即关闭的普通旧缓冲区,而不移动该点)

答案 2 :(得分:13)

我通常使用delete-other-windows命令。 C-x 1

它如此规则,我重新加入了F4。

官方文档:http://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Window.htmla

HTH

答案 3 :(得分:6)

使用winner mode,您可以使用键绑定C-C左箭头返回上一个窗口配置。当然,这实际上并不会杀死新的缓冲区,但它会隐藏它。

答案 4 :(得分:4)

我认为你正在寻找 C-x 4 C-o ,它在“其他”窗口中显示缓冲区而不切换到它。

如上所述,在回溯缓冲区的情况下,您可能希望使用 q 退出它,以退出递归编辑。

答案 5 :(得分:2)

尝试使用popwin-mode。自动关闭窗口非常好。

很快就试着描述

在您更改窗口undo-tree-visualize之后,您打开switch-window而不是找到正确的分支它会自动关闭其他窗口

答案 6 :(得分:1)

一种可能的解决方案是使用窗口管理包。存储您的“首选”窗口排列,在调试器/缓冲区窗口弹出并完成后,请恢复为您的首选安排。

有许多软件包可供选择,请参阅维基上的switching window configurations

此外,您可能想要找出通常会触发额外(不需要的)窗口弹出的操作,并使用该操作在窗口弹出之前触发保存窗口配置。

如果你想自己滚动(这很简单),你可以保存窗口配置,然后恢复它:

(setq the-window-configuration-i-want (current-window-configuration))
(global-set-key (kbd "<f7>") 
       (lambda () (interactive) 
            (set-window-configuration the-window-configuration-i-want)))

诀窍在于确定将the-window-configuration-i-want设置的位置。

答案 7 :(得分:0)

感谢@spk提供了一个不错的功能。我只是对其进行了修改,也使其也关闭了窗口,并将其绑定到邪恶窗口(通过“ C-w”)中已经很好的一组窗口控制功能:

(use-package evil
  :bind (:map evil-window-map ("O" . delete-most-recent-window))
  :preface
  (defun delete-most-recent-window ()
    "Kill the buffer in the most recent window."
    (interactive)
    ;; Window selection is used because point goes to a different window
    ;; if more than 2 windows are present
    (let ((win-curr (selected-window))
          (win-other (next-window)))
      (select-window win-other)
      (kill-this-buffer)   
      (delete-window)   ; <-- Added this
      (select-window win-curr))))