Заставьте Emacs перестать спрашивать: "Активные процессы существуют; убить их и выйти в любом случае"
Несмотря на все советы о том, что это плохая идея, я все же хотел бы, чтобы Emacs прекратил спрашивать меня: "Существуют активные процессы; убей их и все равно выйди", когда я нажму Cc Cx. Я хотел бы просто убить все активные процессы, не спрашивая.
Как я могу сделать это?
6 ответов
Этот фрагмент (входит в ваш файл настройки.emacs) временно заставит Emacs поверить, что при его уничтожении нет активного процесса, и поэтому вы не получите раздражающее приглашение.
(require 'cl-lib)
(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate)
"Prevent annoying \"Active processes exist\" query when you quit Emacs."
(cl-letf (((symbol-function #'process-list) (lambda ())))
ad-do-it))
Вы можете сделать это, установив флаг запроса при выходе для каждого процесса на ноль. Вы можете использовать ловушку, чтобы сделать это автоматически при выполнении интерпретатора команд:
(add-hook 'comint-exec-hook
(lambda () (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil)))
Следующая версия Emacs (25.3 или 26.1) будет иметь новую опцию настройки confirm-kill-processes
чтобы сделать это проще. Вы можете сказать M-x customize-variable RET confirm-kill-processes RET
и установите переменную в nil
подавить запрос подтверждения.
Вы не можете без взлома. Если вы чувствуете себя авантюрным, замените определение save-buffers-kill-emacs
в вашем .emacs
чтобы он не спрашивал (но не забывайте повторять процедуру каждый раз, когда вы обновляете Emacs впоследствии). Стандартное определение этой функции требует без каких-либо способов настроить это поведение.
РЕДАКТИРОВАТЬ:
В качестве альтернативы, вы можете переопределить yes-or-no-p
как это (не проверено):
(defadvice yes-or-no-p (around hack-exit (prompt))
(if (string= prompt "Active processes exist; kill them and exit anyway? ")
t
ad-do-it))
(if (get-buffer your-process-buffer)
(progn
(if (get-buffer-process your-process-buffer)
(set-process-query-on-exit-flag (get-buffer-process your-process-buffer) nil)
(kill-buffer your-process-buffer))))
Вот что я считаю лучшим решением, которое специально игнорирует только
SLIME
буферы:
(defun process-ignore-on-exit (regexp)
(cl-loop for proc in (process-list)
when (s-matches-p regexp (process-name proc))
do
(progn (message "disabling query-on-exit for '%s'" proc)
(set-process-query-on-exit-flag proc nil))))
(defun slime-ignore-processes-on-exit (&rest r)
(process-ignore-on-exit "SLIME"))
(advice-add #'save-some-buffers :before #'slime-ignore-processes-on-exit)