Active processes exist; kill them and exit anyway? - flet issue

2015. 1. 20. 14:54

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))

이 코드는 추가적인 것 없이 해결

emacs/General