修改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
相关产品推荐
相关产品推荐

