【问题标题】:how to prevent Emacs dired from splitting frame into more than two windows?如何防止 Emacs dired 将框架拆分为两个以上的窗口?
【发布时间】:2014-04-21 23:53:51
【问题描述】:

在 Emacs 的 dired 缓冲区中,如果我在文件名上导航并点击 o 以获得 dired-find-file-other-window,dired 会成功产生所需的行为:在辅助窗口中打开文件。

但是,如果我随后将点导航到第二个文件名并再次点击 o,则 dired 再次拆分框架并在第三个窗口中打开文件。

我如何指示 dired 重用第二个窗口,这样我总是在一个框架中最多有两个窗口?

【问题讨论】:

  • 我看不到这种行为,无论是香草dired.el 还是dired+.el。如果您使用emacs -Q 启动 Emacs,您会看到这种情况吗?如果没有,请递归地一分为二您的 init 文件以找到导致它发生的代码。通过注释掉初始化文件的 1/2、3/4、7/8...来做到这一点。您可以使用comment-region 来评论和(使用C-u)取消对该区域的评论。
  • 在第二个窗口中使用aRET 代替o 怎么样?

标签: emacs dired


【解决方案1】:

尝试通过修改split-width-threshold的值来解决同样的问题,但发现当监视器配置更改时它经常停止工作。最后为window-splittable-p写了一条建议。

(setq split-width-threshold (- (window-width) 10))
(setq split-height-threshold nil)

(defun count-visible-buffers (&optional frame)
  "Count how many buffers are currently being shown. Defaults to selected frame."
  (length (mapcar #'window-buffer (window-list frame))))

(defun do-not-split-more-than-two-windows (window &optional horizontal)
  (if (and horizontal (> (count-visible-buffers) 1))
      nil
    t))

(advice-add 'window-splittable-p :before-while #'do-not-split-more-than-two-windows)

【讨论】:

    【解决方案2】:

    split-height-threshold 的值提高到不会再进行拆分的程度。

    您可能还需要提高 split-width-threshold - 以防 Emacs 认为以这种方式拆分更明智。

    评论中的WRT问题:

    选择 IMO 的值取决于窗口中显示的行数。假设显示了 40 行。如果一个窗口被拆分,则剩下 20 个。然后 15 的“分割高度阈值”应该防止进一步分割。防止进一步的并排拆分应该各自起作用,只需考虑显示的列。

    顺便说一句,希望有一种方法可以动态调整它。

    【讨论】:

    • 我发现了有问题的代码:(setq split-width-threshold 0),我曾经用它来强制 Emacs 通过创建两个并排的窗口而不是一个窗口在另一个之上来拆分帧。所以现在我的新问题是,我如何强制 Emacs 将帧拆分为并排的窗口而不使其产生超过 2 个?
    • 我应该选择什么值?
    • (setq split-width-threshold 75) 似乎对我有用。
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多