启动退出流程后,有没有办法阻止Emacs退出?
偶尔我的胖手指 C-x C-s 为 C-x C-c 。恢复运行并不是一个糟糕的过程,但我很好奇是否有办法可以停止退出流程,以便我可以不间断地打开所有文件。
使用GNU Emacs 24.3.1。在Window 7下运行Cygwin。
答案 0 :(得分:35)
有一个内置变量可以设置为这样的函数:
(setq confirm-kill-emacs 'y-or-n-p)
答案 1 :(得分:3)
在任何缓冲区上启用Emacs Lock次要模式(emacs-lock-mode
),以防止Emacs退出,以防您不小心碰到 Cx Cc
来自Emacs Wiki页面:
在缓冲区被终止或解锁之前,Emacs无法退出
将(emacs-lock-mode)
添加到.emacs
/ init.el
文件中,以便在每个Emacs会话中启用此锁定。添加此项将锁定*scratch*
缓冲区,如果确实想要退出Emacs,则必须解锁该缓冲区。
另一种方法/做法是在Emacs中启动一个过程,例如 M-x shell
或者有一个与缓冲区关联的未保存文件,这样做会在Emacs退出时提示您进行确认。
是的,使用global-unset-key
未设置 C-x C-c 。然后,如果你想退出Emacs M-x kill-emacs
。
答案 2 :(得分:2)
正如@scottfrazer建议的那样,使用confirm-kill-emacs
是一种方法。
更一般地说,您可以使用kill-emacs-query-functions
在这方面做任何您想做的事情。 (他们没有必要添加confirm-kill-emacs
,但他们确实如此。)
您可能不希望在这方面使用kill-emacs-hook
(这是kill-emacs-query-functions
的用途),但要注意它,以防您使用{{1}遇到它等等。
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
)。
答案 3 :(得分:1)
如果您正在寻找一个较短的答案,那么自上世纪以来,我在所有.emacs文件的底部都有这一行:
(shell)
答案 4 :(得分:1)
我已在我的emacs配置中添加了以下内容,以防止意外关闭。我不希望为一次提交之类的事情确认关闭emacs,但我讨厌在遇到问题时意外丢失我的emacs会话。
这会向emacs添加一个全局状态标志,描述它是否被锁定。在emacs打开5分钟后自动设置此标志,或者使用lock-emacs
命令手动设置。以后可以使用unlock-emacs
命令手动删除该锁。
如果emacs已被锁定,而您试图关闭它(可能是偶然地),则emacs会向您显示一条消息,指出emacs已被锁定,无法关闭。如果未锁定,则关闭的行为与默认情况下完全相同。
;; 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)
(欢迎提出有关如何使Confirm-kill-emacs部分更好的建议,我是个新手:))。