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