设置所有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中也不太流利。

+0

这是有帮助的。但是,我对elisp的使用经验仅限于设置值和绑定键,所以它不会让我一直在那里。我想现在是学习的时候了。 – Shep 2012-04-12 07:02:30

+0

我添加了一个代码示例来计算'window-tree'的'root'部分中的水平窗口作为答案。 – vhallac 2012-04-12 09:57:00

+0

谢谢,这个工程。也许不是我见过的最漂亮的东西,但它的确有用。 – Shep 2012-04-12 15:37:17

这将设置帧大小来窗口* 120的数量,但一个“窗口的数目中水平地”的意思需要更大的定义。

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

我的意思是横跨屏幕的最大数量的窗口。因此,例如,如果帧被分成多个窗口,那么我不希望总宽度为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))) 
)