「その他のウィンドウ」が指すウィンドウの定義


10

emacsでは、たいていの場合、私は4つのウィンドウ以上を使用します。

その例を使用します。

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

多くの関数がアクションを実行できますother-window(通常、が指す同じウィンドウC-x o)。特に便利ですscroll-other-window。ただし、4つ以上のウィンドウを開いother windowた場合、私が望んでいるものではない可能性があります。

ウィンドウ/バッファのレイアウトを変更せずに設定を管理する簡単な方法はありother-windowますか?もちろん、たくさんのC-x 4 band を使ってC-b実行できますが、レイアウトを変更したくありません。例えば:

  • 上図のウィンドウ4で編集する場合C-M-v、ウィンドウ1をスクロールするように設定する簡単な方法はありますか?
  • または、単純に、ウィンドウ3にフォーカスを置いて、other-windowウィンドウ2を指すように設定するにはどうすればよいでしょうか。

回答:


7

私があなたの質問を正しく読んだ場合、あなたは主に他のウィンドウに表示されているバッファを操作することに興味があります(現在のウィンドウレイアウトを維持しながら)。

other-window指し示すウィンドウを変更することは、そのための1つの方法ですが、別のワークフローを提案したいと思います。

とは異なりother-window特定のウィンドウace-windowにすばやくジャンプできます。を呼び出すと、各ウィンドウに一意の番号が表示されます。特定のウィンドウにジャンプするには、対応する番号を入力するだけです。ウィンドウが2つしかない場合は、数値の入力を求められることなく、他のウィンドウにポイントが置かれます。このスクリーンキャストは、別のウィンドウへの切り替え、スクロール、および元のウィンドウへの切り替えを示しています。ace-window

エースウィンドウのデモ

にバインドするace-windowC-x o、追加のキーバインドを覚える必要がなくなり、スーパーチャージバージョンのを使用しているように感じられますother-window

また、タッチ入力を行う場合や、ホーム行から指を離しすぎないようにしたい場合はace-window、数字ではなく文字を使用してウィンドウに「番号を付ける」ように指示できます(以下を参照)。

ace-windowMELPAで利用できます。経由M-x package-install RET ace-window RETでインストールした後、initファイルに次のように記述して、上記のように設定できます。

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))

デモのおかげで、私は他のサイトでこのパッケージを見てきましたし、私がバインドされているとして、それは実際に簡単にウィンドウを切り替えることができworks.Iどのように思っていたM-1 M-2 ..使用してウィンドウ番号1、2を選択するために、window-numberパッケージを
Lompik

1

ソースを簡単に確認すると、cで定義されているother-windowによって返されるウィンドウに実際に依存しているように見えnext-windowます。残念ながらscroll-other-windowcでも定義されており、おそらくそこから次のウィンドウを呼び出します。それをオーバーライドするのは簡単ではないと思います。

ただし、switch-to-buffer-other-windowを使用pop-to-bufferしているように見えるので、運が良いかもしれません。


1

ウィンドウリストを操作する簡単な方法はないため、によって返される結果はother-windowほぼ固定されています。これは、ウィンドウをナビゲートするときに一貫性を可能にするため、それ自体は悪いことではありません。あなたが説明した2つのシナリオに関して、いくつかのelispまたはマクロを使用して、ワークフローに適合させることができます。

上図のウィンドウ4で編集する場合、ウィンドウ1をスクロールするようにCMvを設定する簡単な方法はありますか?

以下のような簡単なスニペットを使用しother-windowて適切な回数を使用し、下にスクロールして元のウィンドウに戻ることができます。

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

プレフィックス引数を渡して、スクロールするウィンドウを指定できます。推測できるように、それは組み込みのメカニズムを使用して、スクロールする前に多数のウィンドウother-windowをスキップしargます。これsave-selected-windowにより、フォーカスが元のウィンドウに戻ります。のドキュメントでother-windowは、このスニペットを動作に合わせて変更する方法について詳しく説明しています。

あるいは、ウィンドウ3にフォーカスを置いて、other-windowウィンドウ2を指すように設定するにはどうすればよいでしょうか。

を呼び出すときは、再びprefix-argasを使用します。提供する実際の数は、分割する順序によって異なり、新しいウィンドウを作成しない限り変わりません。別の方法として、次のような便利なパッケージを使用することができるか、高速スイッチ選択ウィンドウにMELPAから。C-3 C-x oother-windowwindow-numberace-window


そう、ウィンドウリストを操作する簡単な方法はありません。接頭辞の使用に苦労しています。到達できない別のキーが追加されて速度が低下するような感じ
Lompik

それがキーボードマクロ/キーバインディングの目的です。これがワークフローの通常の部分である場合、たとえば<f7> nn番目のウィンドウをスクロールするために、プレフィックスマップベースのキーバインドを簡単に定義できます。キーボードマクロを使用して一時的な1つのキーバインディングを作成します。
Vamsi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.