I'm using EmacsW32 (patched) on windows. Emacs is running in server mode so that subsequent calls to emacsclientw open files in the same server session.
I have C-x C-c mapped to make the current frame invisible and not kill the emacs server process. I'd like clicking the window's X (close) button to also just hide the frame & not terminate the server process as it currently does.
Any ideas ? Thanks!
Sure, I have a method of doing this. There may be refinements possible, but this is a good starting place.
First, I setup a variable and advise the kill-emacs function
(defvar bnb/really-kill-emacs nil)
(defadvice kill-emacs (around bnb/really-exit activate)
"Only kill emacs if the variable is true"
(if bnb/really-kill-emacs
ad-do-it)
(bnb/exit))
The bnb/exit function just makes the frame invisible like what you have bound to C-x C-c.
I then have an additional function to properly exit emacs if that is ever necessary. That will set the variable and call kill-emacs as follows.
(defun bnb/really-kill-emacs ()
(interactive)
(setq bnb/really-kill-emacs t)
(kill-emacs))
来源:https://stackoverflow.com/questions/2001485/how-do-i-keep-emacs-server-running-when-the-current-window-is-closed-x-on-wind