Как убрать подсказку для уничтожения буферов emacsclient? - PullRequest
24 голосов
/ 06 ноября 2008

Когда я открываю что-то с помощью emacsclient, когда я уничтожаю этот буфер (C-x k), я получаю диалог подтверждения:

Buffer `blah' still has clients; kill it? (yes or no)

Но когда я убиваю буферы, открытые прямо из Emacs, я этого не делаю. Есть ли способ не получить их, когда emacsclient открыл их?

Ответы [ 4 ]

22 голосов
/ 06 ноября 2008

Другой вариант - использовать параметр -n с emacsclient, чтобы он не ждал редактирования файла перед выходом.

Например:

emacsclient -n myfile.txt
21 голосов
/ 06 ноября 2008

Это сработало для меня:

(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)

Более подробная информация о Использование записи в блоге Emacsclient .

1 голос
/ 17 января 2015

Вы можете установить команду клавиатуры 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.
0 голосов
/ 28 мая 2013

По какой-то причине мне приходится вручную запускать решение удаления крючка на emacs23, возможно, потому что некоторые части сервера загружаются после загрузки .emacs. Добавление фиктивной (server-start) строки в мои .emacs до (remove-hook ...) не помогло. Поэтому я выбрал следующее, менее принципиальное решение:

(defalias 'server-kill-buffer-query-function '(lambda () t))
...