如何检测Emacs窗口是否已被拆分?
在我的.emacs
文件中,我有:
(when (display-graphic-p)
(set-frame-size (selected-frame) 166 85)
(split-window-horizontally))
允许我并排放置两个缓冲区,每个缓冲区恰好有80个字符宽。
每隔一段时间我就会更改我的.emacs文件,并希望将其重新加载到位,因此我在.emacs文件上运行M-x load-file
,我所在的窗口会被重新拆分。
是否有某种命令可以调用以检查帧是否已被拆分,如果没有则只调用(split-window-horizontally)
?类似的东西:
(when (window-is-root)
(split-window-horizontally))
或
(when (not (window-is-already-split))
(split-window-horizontally))
答案 0 :(得分:10)
window-list
会返回一个窗口列表(对于当前帧),所以你应该可以这样做:
(when (= (length (window-list)) 1)
(split-window-horizontally))
答案 1 :(得分:-3)
这是一个毫无意义的问题,窗户不会拆分。
是的,有一些名为split-window ...的函数,但他们所做的只是减小窗口的大小,并在这样释放的空间中创建一个新窗口。
你不能只使用(= 1(长度(窗口列表))),因为每帧至少有一个窗口(不计算迷你缓冲区的simili窗口)。
你可以尝试:
(< (length (frame-list)) (length (window-list)))
但是这并没有告诉你所选框架中是否有多个窗口,这是你实际要问的,因为很明显它可能是另一个包含几个窗口的框架。
因此,如果您正确地提出问题,“如何知道所选框架是否包含多个窗口”,您可以轻松找到答案:
(require 'cl)
(defun complement (fun)
(byte-compile `(lambda (&rest args) (not (apply ',fun args)))))
(defun* more-than-one-window-in-frame-p (&optional (frame (selected-frame)))
(< 1 (length (remove* frame (window-list)
:key (function window-frame)
:test (complement (function eql))))))