将帧中的所有Emacs窗口设置为给定宽度

时间:2012-04-11 08:20:25

标签: emacs elisp

我正在尝试编写一个函数,使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?

3 个答案:

答案 0 :(得分:4)

我不知道一个简单的方法。我会使用(window-tree (selected-frame)),并解析返回值以找到具有水平布局的最大窗口数的行,并使用计数来计算帧宽度并希望窗口可以正确缩放。如果窗口没有正确缩放,那么我会尝试使用window-resize中定义的window.el函数单独调整它们的大小(在设置帧宽度之后)。

window-tree的返回值格式可在Emacs Lisp document

中找到

以下函数中的某些内容应该可以解决问题:

(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。

答案 1 :(得分:1)

这会将帧大小设置为窗口数* 120,但“水平窗口数”的含义需要更大的定义。

(set-frame-width (selected-frame) (* 120 (length (window-list))))

答案 2 :(得分: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)))
  )