You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Emacs函数:将Buffer分离至新Frame并删除旧Frame对应窗口

修改后的 detach-window 函数

下面是满足需求的修改版本:

(defun detach-window ()
  "将当前窗口的缓冲区分离到新框架,并删除原框架中所有显示该缓冲区的窗口。"
  (interactive)
  (let* ((buf (window-buffer (selected-window)))
         (old-frame (selected-frame))
         (new-frame (make-frame)))
    ;; 在新框架中加载目标缓冲区
    (select-frame new-frame)
    (switch-to-buffer buf)
    ;; 回到原框架,删除所有显示该缓冲区的窗口
    (select-frame old-frame)
    (dolist (window (window-list old-frame))
      (when (eq (window-buffer window) buf)
        (delete-window window)))))

关键改动说明

  • 新增记录原框架的变量 old-frame,避免切换框架后丢失原框架的引用
  • 用 window-list 获取原框架下的所有窗口,遍历检查每个窗口的缓冲区是否匹配目标缓冲区
  • 批量删除原框架中所有显示该缓冲区的窗口,而非仅删除初始选中的单个窗口
  • 更新函数文档字符串,准确描述新功能

内容的提问来源于stack exchange,提问作者Mahavir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:27:11