【发布时间】:2011-06-19 15:50:54
【问题描述】:
在 Emacs 中自定义选项时会出现问题。每次我单击链接时,都会创建一个新缓冲区。如何强制 Emacs 使用单缓冲区?
【问题讨论】:
标签: emacs buffer customization
在 Emacs 中自定义选项时会出现问题。每次我单击链接时,都会创建一个新缓冲区。如何强制 Emacs 使用单缓冲区?
【问题讨论】:
标签: emacs buffer customization
试试这个:
(defadvice custom-buffer-create (before my-advice-custom-buffer-create)
"Exit the current Customize buffer before creating a new one, unless there are modified widgets."
(if (eq major-mode 'Custom-mode)
(let ((custom-buffer-done-kill t)
(custom-buffer-modified nil))
(mapc (lambda (widget)
(and (not custom-buffer-modified)
(eq (widget-get widget :custom-state) 'modified)
(setq custom-buffer-modified t)))
custom-options)
(if (not custom-buffer-modified)
(Custom-buffer-done)))))
(ad-activate 'custom-buffer-create)
【讨论】:
customize-group 更改为 custom-buffer-create。
作为我最初的答案(我自己不倾向于使用)的替代方案,我想我可能会建议您在完成自定义内容后处理摆脱大量自定义缓冲区的其他方法。
首先,请注意,只需按 q 将“根据 `custom-buffer-done-kill' 退出当前自定义缓冲区”(即,要么埋掉它,要么杀死它)。
其次是使用Mx kill-matching-buffers RET \*Customize RET (然后逐一确认),不过这样有点繁琐.
我实际上会使用ibuffer。
如果您还没有使用它,我建议将 C-x C-b 绑定到 ibuffer,这是对默认 list-buffers 的极大增强替代。我喜欢它主要是因为它的filtering and grouping abilities,但除此之外它还可以做很多事情。
(global-set-key (kbd "C-x C-b") 'ibuffer)
我还使用当前可以找到的建议 here at the Emacs Wiki 以便 ibuffer 始终以我选择的缓冲区打开。
完成后,从自定义缓冲区中,C-x C-b * M RET D y 将杀死所有自定义缓冲区。那就是:
Custom-mode RET)试试看;你可能会喜欢它。 Searching for ibuffer 将提供其他方便的用途。
例如,您可以使用/ n ^\* RET / g tmp RET 将所有以* 开头的缓冲区分隔到一个“tmp”组中,这样它们就不会弄乱您更可能感兴趣的缓冲区组。
与任何主要模式一样,使用 C-h m 来阅读内置文档。
【讨论】: