Ответ 1
Существует встроенная переменная, которую вы можете установить так:
(setq confirm-kill-emacs 'y-or-n-p)
Есть ли способ предотвратить выход Emacs после запуска процесса выхода?
Я иногда толстый палец C-x C-s как C-x C-c. Это не ужасный процесс для резервного копирования и запуска, но мне любопытно, есть ли способ остановить процесс выхода, чтобы я мог продолжать работать без открытия всех моих файлов.
Использование GNU Emacs 24.3.1. Запуск на Cygwin под окном 7.
Существует встроенная переменная, которую вы можете установить так:
(setq confirm-kill-emacs 'y-or-n-p)
scottfrazer ответьте мне более подходящим, чем то, что следует.
Включить Emacs Lock второстепенный режим (emacs-lock-mode
) на любом из буферов, чтобы предотвратить выход Emacs, если вы случайно нажали C-x C-c.
На странице Emacs Wiki:
Emacs не может выйти, пока буфер не будет убит или не разблокирован
Добавьте (emacs-lock-mode)
в ваш файл .emacs
/init.el
, чтобы эта блокировка была включена в каждом сеансе Emacs. Добавление этого блокирует буфер *scratch*
, который нужно разблокировать, если вы действительно хотите выйти из Emacs.
Другой способ/взломать это - начать процесс в Emacs, например. M-x shell
или иметь несохраненный файл, связанный с буфером, при этом вам будет предложено подтвердить, когда Emacs выходит.
Да еще один, unset C-x C-c с помощью global-unset-key
. А затем, если вы хотите выйти из Emacs M-x kill-emacs
.
Используя confirm-kill-emacs
, как предложил @scottfrazer, это один из подходов.
В более общем плане вы можете использовать kill-emacs-query-functions
, чтобы делать все, что вы хотите в этом отношении. (Нет необходимости в них добавлять confirm-kill-emacs
, но они это сделали.)
Вероятно, вы не хотите использовать kill-emacs-hook
в этом отношении (для чего kill-emacs-query-functions
), но имейте это в виду, если вы столкнетесь с ним, используя apropos
и т.д.
Одно из преимуществ kill-emacs-query-functions
всего лишь confirm-kill-emacs
заключается в том, что вам может потребоваться лучшее подтверждение: yes
вместо простого нажатия клавиши y
. Например:
(add-hook 'kill-emacs-query-functions
(lambda () (y-or-n-p "Do you really want to exit Emacs? "))
'append)
Вот что я делаю. Слишком легко ударить по клавишам и случайно нажать C-x C-c y
, тем более, что у меня есть схожие клавиши (например, C-x c
, C-x C-x
, C-x C-y
).
Если вы ищете более короткий ответ, у меня была эта строка в нижней части всех моих файлов .emacs с прошлого века:
(shell)
Я добавил следующее в свою конфигурацию emacs, чтобы предотвратить случайное закрытие. Мне не нравилось подтверждать закрытие emacs для чего-то вроде однократного коммита, но я ненавижу потерять сеанс emacs случайно, когда глубоко в проблеме.
Это добавляет глобальный флаг состояния в emacs, описывающий, заблокирован он или нет. Этот флаг устанавливается либо автоматически после открытия emacs в течение 5 минут, либо вручную с помощью команды lock-emacs
. Позднее блокировку можно снять вручную с помощью команды unlock-emacs
.
Если emacs заблокирован, и вы пытаетесь закрыть его (предположительно случайно), вместо этого emacs выдаст вам сообщение о том, что emacs заблокирован и не может быть закрыт. Если он разблокирован, close ведет себя точно так же, как и по умолчанию.
;; don't close emacs on accident
(setq emacs-locked nil)
(setq confirm-kill-emacs
(lambda (&rest args)
(if emacs-locked
(progn
(message "%s" "Emacs is locked, and cannot be closed.")
nil)
t)
))
(defun lock-emacs-silently ()
(progn
(setq emacs-locked t))
)
(defun lock-emacs ()
"Prevent emacs from being closed."
(interactive)
(progn
(lock-emacs-silently)
(message "%s" "Emacs is now locked."))
)
(defun unlock-emacs ()
"Allow emacs to be closed."
(interactive)
(progn
(setq emacs-locked 'nil)
(message "%s" "Emacs can now be closed."))
)
(run-at-time "5 minutes" nil 'lock-emacs-silently)
(Открыт для предложений о том, как сделать порцию verify-kill-emacs приятнее, я начинающий новичок :)).