フレームの分割をブロックするにはどうすればよいですか?


16

現在、私はrubyとrspecを使用しています。コンパイルバッファを表示する別のモニターに別のフレームを持つというアイデアが本当に好きです。現在の設定では、「コード」フレーム(実際の作業を行う)と「テスト結果」フレーム(rspecの結果を見る)を使用しています。

問題は、「テスト結果」フレームでコンパイルエラーまたはファイルを開こうとすると、そのフレームでウィンドウが分割されることです。私が本当にやりたいのは、「コード」フレームで開くことです。

私はすでにオプションを使用していますdisplay-buffer-reuse-frames。コンパイル結果ウィンドウも設定しようとしましたが、dedicatedemacsが新しいウィンドウを開こうとするたびに、新しいフレームが作成されます(Helmを使用する場合は特にひどいです)。

これを達成する簡単な方法はありますか?


1
emacsをIDEとして使用することは、バッファを所定の場所に簡単に「ピン留め」して、これから常に同じ場所に表示されるようになった場合、非常に便利です。emacsを使用するときに私が最も見逃しているVisual Studio機能の1つは、ウィンドウを分割、固定、ドッキング、非表示、その他の方法で操作するためのシンプルで直感的な方法です。
nispio 14

1
うん。私はまた、vsのバックグラウンドから来ましたが、これも見逃していますが、ほとんどの場合、ボタンなしのでたらめなインターフェイスがより良いと感じています。
レナンラネリ14

@nispio私はVSを使用しないので、「ピン」で意味を指定できます。Emacsフレームは通常排他的であり、ユーザーが操作しない限り変更されません。
Vamsi 14

@vamsi:VSは、フレームの上部/下部/側面にアタッチできる小さなウィンドウを多数使用します。または、それらをポップして新しいフレームを作成できます。ウィンドウをフレームの端にドッキングして、自動非表示に設定できます。たとえば、コンパイル出力ウィンドウは、コンパイルの開始時に魔法のように下からポップアップし、コンパイルの終了後すぐに再び非表示になります。ウィンドウを自動的に非表示にしたくない場合は、ウィンドウを所定の位置に固定し、参照が終了したら再び固定を解除できます。
nispio 14

@nispioなるほど。popwin.elMELPA を使用してコンパイルをポップアップし、C-g押されるまで持続するバッファーを支援します。フルタイムで必要な場合は、別のウィンドウで切り替えます。emacsがそうするので、私は窓を固定することを考えませんでしたsplit-windows-sensibly
Vamsi 14

回答:


9

バッファを表示する場所を選択display-buffer-alistする方法を決定する600ポンドのゴリラを設定する必要がありますdisplay-bufferdisplay-buffer-reuse-frames新しいemacsen では廃止されます。以下があなたをガイドする設定です(少なくともemacs 24.3で)。

;; all buffers, try to reuse windows across all frames
(add-to-list 'display-buffer-alist
           '(".*". (display-buffer-reuse-window .
                                  ((reusable-frames . t)))))

;; except for compilation buffers where you want new and dedicated frames when necessary
(add-to-list 'display-buffer-alist
         '("^\\*Compile-Log\\*". ((display-buffer-reuse-window
                                   display-buffer-pop-up-frame) .
                                  ((reusable-frames . t)
                                  (inhibit-same-window . t)))))

ご覧のとおり、コンパイルログバッファに一致する正規表現を使用しています。のドキュメントはdisplay-buffer、何が起こっているのかを知る必要があります。それはあなたがこれまで読んだドキュメントの中で最も楽しい部分ではないことを頭に浮かぶ。コンパイルログの正規表現が一般的な正規表現より先に一致するように、それらを順番に追加しました。正規表現をニーズに合わせます。

編集フレームを分割不可能にするためにM-: (set-frame-parameter nil 'unsplittable t)、その特定のフレームで評価できます。FRAMEelispから実行する場合は、nilをrequiredに置き換えます。これらの2つの設定の間で、コンパイルフレームを排他的にする必要があります。ただし、そのフレームでファイルを特に見つけない限りです。


問題は、常に新しいフレームを開きたくないということです。私が望むのは、すべてのウィンドウを「コード」フレームに制限することです。ただし、「テスト」フレームに常に表示される「コンパイルログ」バッファーは例外です。すべての新しいウィンドウをメインの「コード」フレームにリダイレクトする方法が見つかりませんでした。多分私は質問で十分に明確ではなかった=(
レナンラネリ14

これは、既存のフレームがない場合にのみ、コンパイルログ用の新しいフレームを開くだけです。何が悪いのか教えてください。フレームを分割不能にする方法については、編集をご覧ください。
Vamsi 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.