【发布时间】:2014-06-16 02:37:58
【问题描述】:
我正在寻求一些帮助,以测试多个窗口(在任何框架上)中是否存在相同的缓冲区以及这些窗口的 window-width 是否(包含特定的缓冲区)是不同的。
- 示例一
第 1 帧:
窗口 A -- minor-mode-xyz -- (= (window-width) 55) -- (equal (buffer-name) "*TEST*")
窗口 B -- 对这个例子没有什么重要的
窗口 C -- minor-mode-xyz -- (= (window-width) 55) -- (equal (buffer-name) "*TEST*")
第 2 帧:
窗口 A -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
窗口 B -- 对这个例子没有什么重要的
窗口 C -- minor-mode-xyz -- (= (window-width) 55) -- (equal (buffer-name) "*TEST*")
结果:(message "The test yielded a positive result -- do something now.")
- 示例二
第 1 帧:
窗口 A -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
窗口 B -- 对这个例子没有什么重要的
窗口 C -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
第 2 帧:
窗口 A -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
窗口 B -- 对这个例子没有什么重要的
窗口 C -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
结果:(message "Everything is PERFECT -- do not do anything !!!")
- 示例三
第 1 帧:
窗口 A -- minor-mode-xyz -- (= (window-width) 100) -- (equal (buffer-name) "*TEST*")
窗口 B -- 对这个例子没有什么重要的
Window C -- 对这个例子没有什么重要的
第 2 帧:
窗口 A -- 对这个例子没有什么重要的
窗口 B -- 对这个例子没有什么重要的
Window C -- 对这个例子没有什么重要的
结果:(message "Everything is PERFECT -- do not do anything !!!")
这是一个示例,其中两个窗口中的window-width 完全相同,并且次要模式运行良好。
(来源:lawlist.com)
这是一个示例,其中窗口中的window-width 不 相等,并且次要模式在任何没有焦点的窗口中都变得混乱 - 例如,水平/垂直黄线未正确绘制。当出现这种情况时,最好的处理方法可能是进行测试,当它返回阳性时,禁用所有窗口中的黄色水平/垂直线。
(来源:lawlist.com)
以下只是一个草拟的概念想法,但还不能处理所需的测试:
(defun test-function (&optional all-frames)
"If the same buffer displays on any frame -- with different `window-width`,
then do something."
(let* (
(wins (window-list (selected-frame) 'no-minibuf))
(bufs (delete-dups (mapcar #'window-buffer wins))))
(dolist (buf bufs)
(with-current-buffer buf
(dolist (win
(get-buffer-window-list (current-buffer) 'no-minibuf all-frames))
(select-window win)
(when test-mode
(message "hello-world.")))))))
【问题讨论】:
-
澄清问题:您是要测试是否存在 特定 缓冲区(例如,当前缓冲区),还是要测试 any 缓冲区是否存在跨窗口重复?
-
@Dan -- 最可能的情况是
current-buffer-- 例如,杀死一个 unrelated 缓冲区可能会显示一个新的current-buffer已经显示在其他地方;split-window-horizontally自然会显示current-buffer;并且切换到缓冲区也可能是在其他地方显示的缓冲区。但是,当使用display-buffer时,可能会出现不是current-buffer的情况(因为不一定要选择新的目标窗口)。所以,包罗万象的测试,应该涵盖所有场景 - 即,minor-mode-xyz的 any 缓冲区。