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上运行