7

Emacs ウィンドウが既に分割されていることを検出するにはどうすればよいですか?

私の.emacsファイルには、次のものがあります。

(when (display-graphic-p)
  (set-frame-size (selected-frame) 166 85)
  (split-window-horizontally))

これにより、それぞれ正確に 80 文字幅の 2 つのバッファーを並べて配置できます。

時々、.emacs ファイルを変更してその場で再読み込みしたいのでM-x load-file、.emacs ファイルを実行すると、そのウィンドウが再分割されます。

フレームが既に分割されているかどうかを確認し、分割されていない場合にのみ呼び出すことができるコマンドは(split-window-horizontally)ありますか? 何かのようなもの:

(when (window-is-root)
  (split-window-horizontally))

また

(when (not (window-is-already-split))
  (split-window-horizontally))
4

2 に答える 2

11

window-list(現在のフレームの)ウィンドウのリストが返されるので、次のことができるはずです。

(when (= (length (window-list)) 1)
  (split-window-horizontally))

windows の関連ドキュメントを確認してください。

于 2012-06-13T19:23:15.773 に答える
-3

これは無意味な質問です。ウィンドウは分割されていません。

はい、分割ウィンドウ...という名前の関数がありますが、それらが行うことは単にウィンドウのサイズを縮小し、解放されたスペースに新しいウィンドウを作成することです。

(= 1 (length (window-list))) だけを使用することはできません。フレームごとに少なくとも 1 つのウィンドウがあるためです (ミニバッファーの simili-window は数えません)。

あなたは試すことができます:

(< (length (frame-list)) (length (window-list)))

ただし、選択したフレームに複数のウィンドウがあるかどうかはわかりません。これは、実際に求めていることです。明らかに、複数のウィンドウを含む別のフレームである可能性があるためです。

したがって、「選択したフレームに複数のウィンドウが含まれているかどうかを知るにはどうすればよいですか」という質問を正しく尋ねれば、簡単に答えを見つけることができます。

(require 'cl)

(defun complement (fun)
  (byte-compile `(lambda (&rest args) (not (apply ',fun args)))))

(defun* more-than-one-window-in-frame-p (&optional (frame (selected-frame)))
  (< 1 (length (remove* frame (window-list)
                        :key (function window-frame)
                        :test (complement (function eql))))))
于 2012-06-13T21:33:23.657 に答える