2014-06-06 106 views
8

如果一個Emacs幀在多個窗口中分裂並且打開一個新緩衝區,是否可以告訴Emacs在哪個窗口打開緩衝區。告訴Emacs在特定窗口中打開新的緩衝區

尤其是,如果一個窗口包含直接緩衝區,並且我想告訴Emacs在其他打開的窗口中顯示一個新文件。

如果Emacs框架是例如分裂像這樣:

____________________ 
|  |   | 
|  |   | 
| A | B | 
|  |   | 
|  |   | 
-------------------- 
|  |   | 
| C | D | 
|  |   | 
-------------------- 

其中A,B,C和d是窗口。如果A包含直接緩衝區,我可以告訴Emacs在窗口D的新緩衝區中打開一個新文件嗎?

回答

0

其他人可能會給你更直接回答你的問題的答案。我的答案是將焦點移至所需的窗口,然後使用C-x C-f或其他任何方法打開文件或在所選窗口中顯示所需的緩衝區。

爲了直接執行您所要求的操作,無論如何您都需要使用調用所需命令的按鍵序列。如果你想要一些適用於不同命令的一般東西(例如find-fileswitch-to-buffer),那麼你需要使用前綴密鑰或改變前綴arg。這通常與切換到窗口然後使用常用命令一樣多的按鍵。

當然,我的建議你需要一個命令來快速切換到你想要的窗口。有各種各樣的命令可以讓你在窗口之間循環或使用完成來快速按名稱或編號選擇一個窗口。 (a)指定目標窗口(b)調用顯示緩衝區的命令。(b)調用顯示緩衝區的命令。 IOW,只要做到老派的方式:去窗口,然後在那裏顯示。當然,如果你真的不想在新顯示的緩衝區中結束,而你只是想把焦點保持在你開始的位置,那麼根據我的建議,你需要循環(例如)回到你的開始窗口。從您的描述中不清楚這是否是您的用例。如果是這樣,那麼我的解決方案可能不是那麼有用。 (a)命令(僅)指定用於以下display-buffer命令的窗口和(b)display-buffer命令。 IOW,基本上與我建議的相同,但第一步只是指定目標窗口而不是切換到目標窗口,第二步將使用指定的窗口。 (您需要定義(a)及(b)中,作爲一般的機制。)

在這種情況下也我的建議,從別人可能暗示可能有所不同,因爲它並不試圖結合窗口的選擇用顯示命令。它們按順序耦合,但不能組合成一個命令。

+0

問題是特別關心選擇「鏈接」或「命令」打開緩衝區的位置。很明顯,人們可以移動到一個窗口並在那裏直接打開一個緩衝區。問題是:當我在dired(例如)中按下「鏈接」時,如何指定將爲將要打開的新緩衝區選擇哪個窗口? – UndeadKernel

+0

@UndeadKernel:我不確定你說的問題是OP的問題。但是你的問題的答案是,「鏈接」調用的任何命令都會決定行爲。沒有更多,沒有更多。該命令可以執行這個或那個特定的動作,或者它可以提示用戶在一些可能的動作中進行選擇,或者...一個命令是一個Elisp函數 - 它可以執行一個函數可以做的任何事情。關鍵是無論什麼命令被調用(不管是否點擊一個鏈接)決定了行爲是什麼。它可能會給你一些選擇,或者它可能不會。 – Drew

3

這裏是另外一個答案 -

你可以你想使用Icicles什麼事。在冰柱模式下,C-x o,通常是other-window,是icicle-other-window-or-frame。前綴arg爲它提供了幾種可選行爲,其中一種(對於Emacs 24及更高版本)將選擇一個將由下一個緩衝區顯示操作使用的窗口。,C-x C-f,C-x b)。

這就是如果您使用雙重純前綴arg:C-u C-u C-x o會發生什麼情況。這會調用命令icicle-choose-window-for-buffer-display,您當然也可以綁定到其他任何鍵。

您按名稱選擇目標窗口(使用完成或騎自行車等)。

該命令的作用是將變量icicle-next-window-for-display-buffer設置爲您選擇的窗口。 冰柱建議命令display-buffer,switch-to-bufferswitch-to-buffer-other-window以便下次調用它們時使用的值是icicle-next-window-for-display-buffer的值。 (在調用之後,它們返回到它們的正常行爲。)

這意味着如果您有另一種選擇窗口的方法(比如使用其他方法之一here),那麼您可以修改該方法將icicle-next-window-for-display-buffer設置爲所選窗口,以獲得相同效果(在冰柱模式下)。 IOW,它如何選擇窗口無關緊要;只需將變量值設置爲它,下一個緩衝區顯示操作將使用它。

+0

謝謝。我會試試這個。 – Hypnotoad

相關問題