我正在尝试编写一个函数,使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?
有什么简单的方法可以做到这一点。我会使用 (window-tree (selected-frame))
,并解析返回值以找到水平布局窗口数量最多的行,并使用计数来计算帧宽度并希望窗口能够正确缩放。如果窗口无法正确缩放,那么我会尝试使用 window.el
中定义的 window-resize
函数单独调整它们的大小(在设置框架宽度后)。
window-tree
的返回值的格式可以在 Emacs Lisp 文档中找到。
类似于以下函数的内容应该可以解决问题:
(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也不是很流利。
这会将帧大小设置为窗口数 * 120,但"水平窗口数"的含义需要更大的定义。
(set-frame-width (selected-frame) (* 120 (length (window-list))))
当前的解决方案是其所有丑陋的荣耀。
(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)))
)