Вы можете установить команду клавиатуры C-x k , чтобы она помечала клиентские буферы как выполненные и убивала обычные буферы .
Я бессовестно украл этот фрагмент кода из записи Emacs Client в Emacs Wiki:
(add-hook 'server-switch-hook
(lambda ()
(when (current-local-map)
(use-local-map (copy-keymap (current-local-map))))
(when server-buffer-clients
(local-set-key (kbd "C-x k") 'server-edit))))
Хотя это не помогает при других способах уничтожения буферов (таких как M-x list-buffers
), он должен быть на безопасной стороне, уважая поведение клиента Emacs, которого ожидают некоторые сценарии оболочки.
Вот выдержка из файла server.el в вашем дистрибутиве Emacs, которая может пролить немного света на то, что я имею в виду:
;; When you finish editing a Server buffer, again call server-edit
;; to mark that buffer as done for the client and switch to the next
;; Server buffer. When all the buffers for a client have been edited
;; and exited with server-edit, the client "editor" will return
;; to the program that invoked it.
Позже появляется явное предупреждение о том, что буфер не должен быть уничтожен, а освобожден (по крайней мере, так я его интерпретирую):
;; Ask before killing a server buffer.
;; It was suggested to release its client instead,
;; but I think that is dangerous--the client would proceed
;; using whatever is on disk in that file. -- rms.