Emacs——如何收集信息并删除窗口而不选择它

Emacs——如何收集信息并删除窗口而不选择它,emacs,elisp,Emacs,Elisp,我正在寻找一些帮助,请收集有关特定窗口的一些信息,而不必选择它,然后删除该窗口,如果它符合指定的标准 下面的函数片段只有在选择了目标窗口时才起作用,但是,我希望无论哪个窗口有焦点,函数都能运行 (defconst lawlist日历缓冲区“*日历*” “用于lawlist日历的缓冲区的名称。”) (如果 (及 (获取缓冲区窗口列表日历缓冲区(选定帧)) (使用当前缓冲区(获取缓冲区列表日历缓冲区) (等式(窗高)12) (删除窗口(获取缓冲区窗口列表日历缓冲区(选定帧))) 尝试以下代码 (le

我正在寻找一些帮助,请收集有关特定窗口的一些信息,而不必选择它,然后删除该窗口,如果它符合指定的标准

下面的函数片段只有在选择了目标窗口时才起作用,但是,我希望无论哪个窗口有焦点,函数都能运行

(defconst lawlist日历缓冲区“*日历*”
“用于lawlist日历的缓冲区的名称。”)
(如果
(及
(获取缓冲区窗口列表日历缓冲区(选定帧))
(使用当前缓冲区(获取缓冲区列表日历缓冲区)
(等式(窗高)12)
(删除窗口(获取缓冲区窗口列表日历缓冲区(选定帧)))
尝试以下代码

(let ((target-window (get-buffer-window "*Calendar*")))
  (when (and target-window
             (eq (window-height target-window) 12))
    (delete-window target-window)))

如果缓冲区在当前帧中不可见,函数
获取缓冲区窗口将返回nil。函数
windowheight
被传递给现有窗口,它返回窗口的高度。上面的代码将这两个功能结合起来,以删除缓冲区
*日历*
打开的窗口,如果窗口的高度等于12。

您可以通过功能
窗口列表
获得窗口列表,这就是您要查找的吗?使用日历缓冲区时,我通常打开3个窗口,焦点可能位于这三个窗口中的任何一个。我想看看日历窗口是否存在,高度是否为12——如果存在,则删除该日历窗口。我试图避免使用
(选择窗口(获取缓冲区窗口(缓冲区名称缓冲区))
,然后切换回以前有焦点的窗口。下一步是在不同大小的窗口(在不同的位置/布局)中生成新日历,但我已经处理了该部分。@lawlist通常,您可以对所选窗口使用
进行临时窗口操作。这似乎在目标窗口或其他窗口中都不起作用。要复制此场景,我们可以基本上只
垂直拆分窗口
,将底部窗口的大小设置为12,并将该缓冲区称为
“*Calendar*”
——当焦点位于这两个窗口中的任何一个窗口时,代码应该可以工作。这对我来说非常有效,您确定日历的大小是12吗?在我的emacs中,大小为9。以下是我用来测试代码的步骤——步骤1:
(底部显示缓冲区(获取缓冲区创建“*Calendar*”)((窗口高度.12))
——步骤2:在任一窗口中集中评估代码。感谢您的测试代码。这对我很有用。你能用
emacs-Q
试试吗?我只是用一个空的
.emacs
文件试了试,结果是一样的——代码不能用最新的emacs主干:GNU emacs 24.3.50.1(x86_64-apple-darwin10.8.0,NS apple-appkit-1038.36)2014-03-19在MP.local上运行