【问题标题】:set all Emacs windows in a frame to a given width将框架中的所有 Emacs 窗口设置为给定宽度
【发布时间】:2012-04-11 08:20:25
【问题描述】:

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

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    我不知道有什么简单的方法可以做到这一点。我会使用(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也不是很流利。

    【讨论】:

    • 这很有帮助。不过,我在 elisp 方面的经验仅限于设置值和绑定键,所以它不会让我一路走好。我想现在是学习的时候了。
    • 我添加了一个代码示例来计算root 部分window-tree 中的水平窗口。
    • 谢谢,这行得通。也许不是我见过的最漂亮的东西,但它确实有用。
    【解决方案2】:

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

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

    【讨论】:

    • 我的意思是屏幕上水平方向的最大窗口数。因此,例如,如果框架被分成多个窗口,一个在另一个之上,我不希望总宽度为 240。
    【解决方案3】:

    当前的解决方案是其丑陋的荣耀。

    (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)))
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2014-05-29
      • 2014-12-18
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多