设置所有Emacs窗口在一个帧给定的宽度
我试图写的函数,使得所有窗口在Emacs框架宽120个字符。到目前为止,我有这样的:设置所有Emacs窗口在一个帧给定的宽度
(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 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中也不太流利。
这将设置帧大小来窗口* 120的数量,但一个“窗口的数目中水平地”的意思需要更大的定义。
(set-frame-width (selected-frame) (* 120 (length (window-list))))
我的意思是横跨屏幕的最大数量的窗口。因此,例如,如果帧被分成多个窗口,那么我不希望总宽度为240。 – Shep 2012-04-12 09:33:28
目前的解决方案是它的所有丑陋的荣耀。
(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)))
)
这是有帮助的。但是,我对elisp的使用经验仅限于设置值和绑定键,所以它不会让我一直在那里。我想现在是学习的时候了。 – Shep 2012-04-12 07:02:30
我添加了一个代码示例来计算'window-tree'的'root'部分中的水平窗口作为答案。 – vhallac 2012-04-12 09:57:00
谢谢,这个工程。也许不是我见过的最漂亮的东西,但它的确有用。 – Shep 2012-04-12 15:37:17