2

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

4

3 回答 3

4

我不知道一个简单的方法来做到这一点。我会使用(window-tree (selected-frame)), 并解析返回值以找到水平布局的最大窗口数的行,并使用计数来计算帧宽度并希望窗口能够正确缩放。如果窗口不能正确缩放,那么我会尝试window-resize使用window.el.

的返回值格式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 也不是很流利。

于 2012-04-11T09:06:23.570 回答
1

这会将帧大小设置为窗口数 * 120,但“水平窗口数”的含义需要更大的定义。

(set-frame-width (selected-frame) (* 120 (length (window-list))))
于 2012-04-11T16:25:04.177 回答
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)))
  )
于 2012-04-14T06:42:13.830 回答