2

Emacsフレームのすべてのウィンドウを120文字幅にする関数を書こうとしています。これまでのところ私はこれを持っています:

(defun standard-width ()
  "makes the widht of the window 120, our coding standard"
  (interactive)
  (delete-other-windows)
  (set-frame-width (selected-frame) 120 )
  )

delete-other-windowsしかし、私は電話なしでこの仕事をしたいです。残念ながら、この呼び出しがないと、合計フレーム幅は120であり、ウィンドウ間で共有されます。合計フレーム幅(水平方向のウィンドウの最大数)* 120を作成するにはどうすればよいですか?

4

3 に答える 3

4

これを行う簡単な方法がわかりません。を使用(window-tree (selected-frame))し、戻り値を解析して、水平方向に配置されたウィンドウの最大数を含む行を見つけ、カウントを使用してフレーム幅を計算し、ウィンドウが正しくスケーリングされることを期待します。ウィンドウが正しく拡大縮小されない場合は、でwindow-resize定義された関数を使用して、(フレーム幅を設定した後)ウィンドウのサイズを個別に変更しようとしwindow.elます。

の戻り値の形式は、EmacsLispドキュメントwindow-treeに記載されています。

次の関数の線に沿った何かがトリックを行う必要があります:

(defun horizontal-window-count (tree) 
  (if (atom tree)
      1
    (if (car tree)
        (apply 'max (mapcar 'horizontal-window-count (cddr tree)))
      (apply '+ (mapcar 'horizontal-window-count (cddr tree))))))

として使用します(horizontal-window-count (car (window-tree)))。コードはおそらく単純化でき、いくつかの問題があるかもしれませんが、私はlispにあまり精通していません。

于 2012-04-11T09:06:23.570 に答える
1

これにより、フレームサイズがウィンドウ数* 120に設定されますが、「水平方向のウィンドウ数」の意味をより明確にする必要があります。

(set-frame-width (selected-frame) (* 120 (length (window-list))))
于 2012-04-11T16:25:04.177 に答える
0

現在の解決策は、その醜い栄光です。

(defun horizontal-window-count (tree) 
  (if (atom tree)
      1
    (if (car tree)
        (apply 'max (mapcar 'horizontal-window-count (cddr tree)))
      (apply '+ (mapcar 'horizontal-window-count (cddr tree))))))
(defun horz-count ()
  (horizontal-window-count (car (window-tree))))
(defun standard-width ()
  "makes the widht of the window 120, our coding standard"
  (interactive)
  (set-frame-width (selected-frame) (* 120 (horz-count)))
  )
于 2012-04-14T06:42:13.830 に答える