Active processes exist; kill them and exit anyway? - flet issue
emacs에서 shell이나 gdb등을 실행한 상태에서 C-x, C-c를 눌러서 emacs를 종료하려고 할 경우에, 글 제목과 같은 메시지가 미니버퍼에 나타날 수 있습니다. 매번 yes를 입력하는 것도 귀찮으니, 이런 문제를 피하도록 설정해보도록 하겠습니다.
과거에는 간단했습니다. ".emacs"에 다음과 같은 내용만 추가하면 됐거든요.
;;#Active Process blah blah (defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate) "Prevent annoying \"Active processes exist\" query when you quit Emacs." (flet ((process-list ())) ad-do-it))
그러나, emacs 최신버전에서는 emacs lisp에서 'flet'이라는 키워드가 사라졌습니다. 길고 긴 구글링 끝에, 과거의 flet을 살릴 수 있는 site-lisp을 발견하고 해결할 수 있었습니다.
먼저 "https://raw.githubusercontent.com/nicferrier/emacs-noflet/master/noflet.el"의 파일을 site-lisp 디렉토리에 저장합니다. (속도를 위해 바이트 컴파일을 하려고하면 "-map"이라는 함수가 지정돼있지않다는 오류를 뿜는데, 이 때는 파일을 열고 -map을 쓰는 defmacro와 defun 부분을 주석처리 해주면 compile이 됩니다.)
이후에 .emacs 파일에 아래와 같은 내용을 추가해 주면 됩니다.
;;#Active Process blah blah (require 'noflet) (defadvice save-buffers-kill-terminal (around no-query-kill-emacs activate) "Prevent annoying \"Active processes exist\" query when you quit Emacs." (noflet ((process-list ())) ad-do-it))
앓던이를 뺀 기분이네요
p.s.
(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))
이 코드는 추가적인 것 없이 해결