2009-07-31 103 views
24

這可能是一個非常天真的Emacs問題 - 我是新手。如何關閉Emacs中自動打開的窗口?

當我評估一個lisp表達式時,如果出現錯誤,調試器會自動出現在另一個窗口中。如果我有* scratch *和* info * open(前者用於嘗試lisp,後者用於閱讀它),然後調試器在* info *所在的窗口中打開。此刻,我必須切換到該窗口,然後在返回* scratch *之前將其更改回* info *。 (如果我爲緩衝區列表做了C-x C-b,會發生同樣的事情。)我猜想必須有一種方法可以在沒有這麼長的命令序列的情況下關閉那個窗口。任何人都可以啓發我嗎?

+0

也許在問這個超級用戶了? – 2009-07-31 13:11:14

+0

我的確在考慮......這是棘手的決定。是否可以交叉? (我想我應該問在元:P) – Skilldrick 2009-07-31 13:28:25

回答

21

至少在我的emacs(22.3)中,當調試器彈出時,它的窗口變爲活動窗口。在那裏,按q只是退出調試器,如果這就是你想要的。在那一點上,它也退出了遞歸編輯。

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

3

我想你要找的是C-x 4 C-o,它在「其他」窗口中顯示緩衝區而不切換到它。

如上所述,在回溯緩衝區的情況下,您可能想用q退出,以退出遞歸編輯。

5

使用winner mode,可以使用鍵綁定C-C左箭頭返回到上一個窗口配置。當然,這實際上並不會殺死新的緩衝區,但它確實隱藏了它。

12

從我的理解,你想關閉另一個窗口中的緩衝區,而無需從當前窗口移動光標。

我沒有任何現有的功能做到這一點,所以我推出了自己的。

(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緩衝區,以及我現在想要關閉的普通舊緩衝區,而不移動點)

1

嘗試使用popwin-mode。它自動關閉窗口真的很好。

不久生病試圖描述

你打開undo-tree-visualize比之後你發現你的正確的分支你改變窗口switch-window將關閉其他窗口會自動