Запретить Emacs спрашивать "существуют модифицированные буферы; все равно выйти?" - PullRequest
15 голосов
/ 20 июля 2011

Всякий раз, когда я пытаюсь выйти из Emacs, он спрашивает меня, хочу ли я сохранить какие-либо измененные буферы. В случае, если я отвечу «нет», он спросит меня:

Модифицированные буферы существуют; все равно выйти? (у или н)

Есть ли способ помешать Emacs задать мне последний вопрос?

Ответы [ 3 ]

16 голосов
/ 20 июля 2011

Есть несколько способов сделать это:

Вы можете посоветовать функцию save-buffers-kill-emacs:

(defadvice save-buffers-kill-emacs (around no-y-or-n activate)
  (flet ((yes-or-no-p (&rest args) t)
         (y-or-n-p (&rest args) t))
    ad-do-it))

Недостатком этого является то, чтотакже пропустит проверку на активные процессы в Emacs (что делается после проверки буфера файлов).Поэтому, вероятно, безопаснее всего написать собственную версию save-buffers-kill-emacs

(defun my-save-buffers-kill-emacs (&optional arg)
  "Offer to save each buffer(once only), then kill this Emacs process.
With prefix ARG, silently save all file-visiting buffers, then kill."
  (interactive "P")
  (save-some-buffers arg t)
  (and (or (not (fboundp 'process-list))
       ;; process-list is not defined on MSDOS.
       (let ((processes (process-list))
         active)
         (while processes
           (and (memq (process-status (car processes)) '(run stop open listen))
            (process-query-on-exit-flag (car processes))
            (setq active t))
           (setq processes (cdr processes)))
         (or (not active)
         (progn (list-processes t)
            (yes-or-no-p "Active processes exist; kill them and exit anyway? ")))))
       ;; Query the user for other things, perhaps.
       (run-hook-with-args-until-failure 'kill-emacs-query-functions)
       (or (null confirm-kill-emacs)
       (funcall confirm-kill-emacs "Really exit Emacs? "))
       (kill-emacs)))

и привязать ее к стандартной Cx Cc привязке ключа:

(global-set-key (kbd "C-x C-c") 'my-save-buffers-kill-emacs)

или установите его в "save-buffers-kill-emacs":

(fset 'save-buffers-kill-emacs 'my-save-buffers-kill-emacs)
7 голосов
/ 20 июля 2011

Если вы посмотрите на источник для save-buffers-kill-emacs, вы увидите, что пользователь не может отключить этот вопрос.

Так что я боюсь, что самый простой способполучить то, что вы хотите, - написать собственную версию save-buffers-kill-emacs, которая пропускает подтверждение (см. ответ Трея Джексона о том, как это будет выглядеть).

Однако, я думаю, что лучший подходизменить свои рабочие привычки, чтобы вам не приходилось часто выходить из Emacs.Если вы часто выходите из Emacs, это признак того, что вы не используете в полной мере клиент-серверные возможности Emacs или его способность запускать интерактивные оболочки, редактировать файлы на удаленных компьютерах, подключаться к нескольким терминалам и т. Д.

6 голосов
/ 20 июля 2011

Вы можете добавить это в свой .emacs, который предложит вам сохранить несохраненные изменения в файлах, а затем выйти без дальнейшего подтверждения:

(defun my-kill-emacs ()
  "save some buffers, then exit unconditionally"
  (interactive)
  (save-some-buffers nil t)
  (kill-emacs))
(global-set-key (kbd "C-x C-c") 'my-kill-emacs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...