将框架中的所有 Emacs 窗口设置为给定的宽度



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

最新更新