2012-04-11 26 views
2

我試圖寫的函數,使得所有窗口在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?

回答

4

我不知道一個簡單的方法來做到這一點。我將使用(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

1

這將設置幀大小來窗口* 120的數量,但一個「窗口的數目中水平地」的意思需要更大的定義。

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

我的意思是橫跨屏幕的最大數量的窗口。因此,例如,如果幀被分成多個窗口,那麼我不希望總寬度爲240。 – Shep 2012-04-12 09:33:28

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))) 
) 
相關問題