2011-02-09 10 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

答えて

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) 
+0

素晴らしい、ありがとう! –

+0

FWIW、まだ定期的に使用しています。驚くばかり。 –

1

ない正確な答えが、私はあなたが視覚的にのみ以外

AとBの間を移動するためのコントロール左またはControl右をしているし、Windowsとの間を移動するには、矢印を使用することができているもののため windmove-modeを使用おそらく他のバッファ関数を再定義することができます。何らかの方法でバッファリストを取ると、そのバッファへの切り替え時にいくつかのパターンを無視しますが、コードを書くのは簡単ではありません。

+0

ええ、これを使用しますが、打つ方向を覚えるのではなく、1つのキーがはるかに便利だと思われます。ありがとう、しかし! –

+0

ちょうどあなたの質問に答えることはできませんhttp://www.emacswiki.org/emacs/window-number.elちょうど別のオプションと同様にウインドウ番号モードがあります。 –

+0

ace-windowは、ウィンドウに素早く切り替えることができます.ece-jumpのように、どのウィンドウでも簡単に単語に切り替えることができます。同様の切り替え方法については、avy-goto-lineを参照してください。 https://github.com/abo-abo/ace-window https://github.com/winterTTr/ace-jump-mode https://github.com/abo-abo/avy – tristan

-1

は、私は私の.emacs

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

と代替シングルとダブルバッファ・スイッチを使用しての間にこのようなものを使用します。

+0

バッファサイクリングの場所を把握して代替キーを押す必要があるため、これがどのように怠惰であるかわかりません。質問のポイント(そして怠け者になる方法)は、@ trey-jacksonが答えている特定のウィンドウを無視することです。 – aculich

0

これはESHELLのために働く:非nilに無他のウィンドウを設定する

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

は、標準の他、窓関数がこれをスキップします。他のウィンドウのドキュメントを参照してくださいC-h C-f other-window

現在のウィンドウを取得するより良い方法があるかもしれませんが、まだ分かりません。

関連する問題