Подтвердить что ты не робот

Как удалить подсказку для уничтожения буферов emacsclient?

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

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

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

4b9b3361

Ответ 2

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

Например:

emacsclient -n myfile.txt

Ответ 3

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

Ответ 4

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

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