2013-12-15 63 views
1

我有很多框架总是在emacs中打开。就像我使用emacsclient(守护进程)并且几乎从不重新启动计算机一样,这些帧永远不会关闭。我可以用C-x k关闭一个,但如何关闭所有打开的帧?如何关闭emacsclient中的所有打开的框架?

+0

你是指任何偶然的缓冲区?检查'C-x C-b'或'list-buffers' – progo

+0

另外'C-x k'杀死一个缓冲区,而不是相关的帧。 'C-x 5 0'杀死帧(但保留缓冲区)。 – tripleee

+0

无论如何,为什么你首先要创造如此多的框架?看到http://stackoverflow.com/questions/9968740/create-or-reuse-existing-emacs-gui-frame – tripleee

回答

1

这似乎工作可以接受。它会询问你是否有杀手列表上的某个缓冲区有未保存的更改。

(defun close-all-other-buffers-and-frames() 
    "Destroy all frames except this one, kill all buffers, display `*scratch*'." 
    (interactive) 
    (set-buffer "*scratch*") 
    (delete-other-frames) 
    (let ((l (buffer-list)) b) 
    (while l 
     (setq b (car l) 
      l (cdr l)) 
     (and (buffer-file-name b) 
      (kill-buffer b))))) 

我有一种感觉,循环杀死缓冲区可以做得更优雅 - 请建议改进​​!

+0

我在编辑中有类似的东西(您可以访问它并查看是否要采用它)。由于我没有找到安全检测我想保持打开的最后一个打开的文件的方法,所以我放弃了它。 (我想在'find-file-hook'中调用它。)我还添加了'buffer-modified-p'并杀死了只有未修改的缓冲区。 – Tobias

1

关闭所有框架只是退出,不是吗?

如果您想关闭除一个框架以外的所有框架,您可以使用delete-other-frames以及键序列C-x 5 1

+0

我想避免关闭窗口,然后重新启动emacsclient,仍然有很多缓冲区打开。我想退出emacsclient就像我退出emacs(通过关闭每个缓冲区)。当我再次启动emacsclient时,我想要一个没有打开缓冲区的全新emacs。 – ppr

+0

如果你想像emacs一样退出emacs-client,我不明白你为什么要使用emacs-client。然后你可以直接使用emacs。 – Tobias

+0

我使用emacsclient,因为启动速度比emacs快很多。我在一台非常旧的电脑上...... – ppr

相关问题