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

Предотвратить Emacs от запроса "модифицированные буферы существуют, выходить в любом случае?"

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

Модифицированные буферы существуют; выходить в любом случае? (y или n)

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

4b9b3361

Ответ 1

Существует несколько способов сделать это:

Вы можете указать функцию 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)))

и привязать его к стандартному привязке C-x C-c:

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

или fset для "save-buffers-kill-emacs":

(fset 'save-buffers-kill-emacs 'my-save-buffers-kill-emacs)

Ответ 2

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

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

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

Ответ 3

Вы можете добавить это в ваш .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)