2011-02-09 68 views
2

Emacs可以做一個窗口管理器的工作。我已經分手了我的Emacs框架是這樣的:如何讓Emacs的other-window命令忽略終端窗口?

+---------------------------+ 
|    |    | 
|    |    | 
|    |  B  | 
|  A  |    | 
|    |    | 
|    |    | 
|    |-------------| 
|    |  C  | 
+---------------------------+ 

C通常是某種形式的長期運行過程中,如Web服務器或守護進程的終端。偶爾我會移動那個點來重新啓動守護進程,但大多數時候我只想在AB之間進行交換。我怎樣才能使這個方便?

+0

看到有用的功能`esc-toggle-window-selectability` http://ericscrosson.wordpress.com/2013/04/27/ignoring-windows-with-other-window/ – artscan 2013-11-07 00:51:36

回答

4

沒有什麼內置的做你想做的。您可以使用以下代碼來執行您想要的操作(只需自定義正則表達式以匹配您想要避免的緩衝區的名稱)。

注意:my-other-window沒有實現other-window的所有功能,這是讀者的練習。

my-other-window將嘗試切換到緩衝區不匹配avoid-window-regexp的窗口。如果沒有這樣的窗口可用,那麼它就切換到下一個窗口。

(require 'cl) 
(defvar avoid-window-regexp "^[0-9]$") 
(defun my-other-window() 
    "Similar to 'other-window, only try to avoid windows whose buffers match avoid-window-regexp" 
    (interactive) 
    (let* ((window-list (delq (selected-window) (window-list))) 
     (filtered-window-list (remove-if 
           (lambda (w) 
            (string-match-p avoid-window-regexp (buffer-name (window-buffer w)))) 
           window-list))) 
    (if filtered-window-list 
     (select-window (car filtered-window-list)) 
     (and window-list 
      (select-window (car window-list)))))) 

,並適當地結合它:

(global-set-key (kbd "C-x o") 'my-other-window) 
1

沒有確切的答案,但我用windmove-mode爲它允許您使用箭頭窗口之間直觀的移動,然後做控制左或Control-右只有A和B.

除此之外之間移動你可能可以用緩衝列表重新定義其他緩衝區函數,而在切換緩衝區時忽略某些模式,但我沒有方便地編寫代碼。

+0

是的,我用這個,但是打一個鍵而不是記住方向似乎更方便。不過謝謝! – 2011-02-10 17:02:17

+0

還有一些窗口編號模式,以及http://www.emacswiki.org/emacs/window-number.el只是另一種選擇,可能不會回答你的問題。 – 2011-02-10 17:24:31

+0

ace-window允許快速切換到窗口,如ace-jump允許快速切換到任何窗口中的任何單詞。請參閱avy-goto-line瞭解類似的切換技巧,它也適用於Windows。 https://github.com/abo-abo/ace-window https://github.com/winterTTr/ace-jump-mode https://github.com/abo-abo/avy – tristan 2015-10-14 21:21:45

-1

對於懶惰,我使用像這樣在我的.emacs

(fset 'doublejump 
     "\C-u2\C-xo") 
(global-set-key (kbd "C-c o") 'doublejump) 

和使用單和雙緩衝交換機之間交替。

0

這適用於ESHELL:

(add-hook 'eshell-mode-hook (lambda() (set-window-parameter (first (window-list)) 'no-other-window t)))

設置無其他窗口以非零使得標準等窗口功能跳過此。查看其他窗口文檔C-h C-f other-window

可能有更好的方法來獲取當前窗口,但我還不知道它。