賢明な分割ウィンドウポリシーを取得するにはどうすればよいですか?


13

Emacsは絶えず新しいウィンドウを作成しており、最近は1日が台無しになっています。ウィンドウを作成するときにemacsに次のポリシーを使用するように指示するにはどうすればよいですか?

  • 垂直分割を好む
  • ウィンドウが80列未満になる場合は、垂直分割を停止します。
  • ウィンドウが60行未満になる場合は、水平分割を停止します。
  • この6x6グリッドに到達したら、27インチモニターでウィンドウの再利用を開始してください!

また、ウィンドウのバランスを常に維持することをお勧めしますが、分割するたびに未亡人のサイズが不均衡になります。大きすぎるウィンドウが1つ、小さすぎるウィンドウが2つではなく、同じサイズのウィンドウが3つある方がいいです。このための設定はありますか、それともバランスウィンドウのアドバイスをする賢明な場所はありますか?


分割ウィンドウを作成する操作は何ですか?
アンドリュースワン

私は主に最近のプログラミングClojureのをやっているので、サイダーのコマンドのように:サイダーテストランテスト、サイダー-FIND-VAR、サイダー-docの、サイダー・スイッチ・ツー・REPLバッファなどなど
expez

1
ほとんどの人は、ニーズに合わせてカスタマイズするためにソースコード(たとえばcider -stuff)を開くことに興味がありません。代わりに、のカスタマイズなどの簡単な修正を探しますdisplay-buffer-alist。他の人は、事実の後にそれをプログラムで修正するだけです。たとえば、delete-windowおよびswitch-to-buffer、垂直/水平に分割するなどです。また、ウィンドウの管理や以前のレイアウトに戻すためのライブラリがいくつかあります。私は最初のオプション、つまりソースを変更して完全に完璧にすることを好みますが、私はまれな少数派です。
法律家

5
マニュアルに関するウィンドウ分割でセクションを見て- split-height-thresholdsplit-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/...
lawlist

1
の非常に汎用的なCONDITIONで使用するカスタムACTION関数を定義したいようですdisplay-buffer-alistdisplay-bufferこのようなACTION関数(および標準関数のリスト、調べることができるコード)の要件については参照してください。ただし、希望する方法でバッファーを表示する必要があります(そして、後でウィンドウのバランスをとることができます)。 。
-phils

回答:


2

私は長い間、次のものを使用しています。好みのスタイルに合わせて編集する必要がある場合があります。

;; ------------------------------------------------------------------
;; display-buffer

;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.

(setq pop-up-windows nil)

(defun my-display-buffer-function (buf not-this-window)
  (if (and (not pop-up-frames)
           (one-window-p)
           (or not-this-window
               (not (eq (window-buffer (selected-window)) buf)))
           (> (frame-width) 162))
      (split-window-horizontally))
  ;; Note: Some modules sets `pop-up-windows' to t before calling
  ;; `display-buffer' -- Why, oh, why!
  (let ((display-buffer-function nil)
        (pop-up-windows nil))
    (display-buffer buf not-this-window)))

(setq display-buffer-function 'my-display-buffer-function)

1

少し遅れましたが、これも検索してすぐに解決策が見つからなかったためです。

独自のsplit-window-sensibly関数を定義できます。
そのためには、次の行をに入れてくださいinit.el

(setq split-height-threshold 120
      split-width-threshold 160)

(defun my-split-window-sensibly (&optional window)
    "replacement `split-window-sensibly' function which prefers vertical splits"
    (interactive)
    (let ((window (or window (selected-window))))
        (or (and (window-splittable-p window t)
                 (with-selected-window window
                     (split-window-right)))
            (and (window-splittable-p window)
                 (with-selected-window window
                     (split-window-below))))))

(setq split-window-preferred-function #'my-split-window-sensibly)

注:新しいウィンドウはそれぞれ以前のウィンドウサイズの半分を使用するため、しきい値は許可される最小ウィンドウの2倍にする必要があります。
最後の行は、定義された分割関数を使用するようemacsに指示します。


0

これにより、垂直分割を好むようになります

(setq split-width-threshold 1)

0

(setq split-height-threshold nil) (setq split-width-threshold 200)

  • split-height-threshold基本的に水平に分割したくないという設定
  • 200 は、大きな外部ディスプレイ上でもEmacsが一度に分割するだけの十分な数のようです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.