외부 에디터로 EmacsW32를 등록하여 사용할 때, 파일마다 별도의 emacs 창이 뜨는 것을 방지하기 위하여 emacsclient (혹은 emacsclientw)를 통하여 emacs를 실행하게 된다.


이 경우 파일을 편집한 후, 해당 버퍼를 닫으려고 할 때, 다음과 같은 메세지를 보게 된다.


Buffer 'xxxxx' still has client; kill it?


이 메세지가 나타나는 이유는 명령 프롬프트를 통해 emacsclient를 실행해보면 알 수 있는데, 명령 프롬프트 상에서 다음과 같이 emacsclient를 실행해보자.


emacsclient myfile


emacs를 통해 파일이 열리지만, 프로그램이 계속 실행중이며 프롬프트가 돌아오지 않는다. 해당 버퍼가 닫히고 나서야 비로소 프롬프트가 돌아온다.


emacsclient --help라고 입력하면, 실행 옵션 중에 다음과 같은 옵션이 있다.


-n, --no-wait   Don't wait for the server to return


이 옵션을 사용하여 아래와 같이 실행했을 때는 파일이 열리는 동시에 프롬프트가 돌아오는 것을 확인할 수 있다.


emacsclient -n myfile


따라서 위의 메세지를 방지하기 위해서는 외부 에디터로 emacs를 등록할 시에는 아래와 같이 -n 옵션을 적용하여 등록하도록 하자.


emacsclient -n


* 주의사항 *


특수한 경우에는 이 옵션을 사용하지 말아야 할 수도 있다. 예를 들어 에디터를 실행한 곳에서 편집이 끝나기를 기다려야 하는 경우.



또 다른 방법

.emacs 파일에 다음 초기화 구문을 추가해주는 방법이 있다.


(eval-after-load "server" '(defalias 'server-kill-buffer-query-function '(lambda () t)))




단, 이 방법을 사용하면 팝업은 안 뜨지만 emacsclient를 실행한 client측은 파일이 닫힐 때까지 대기 상태로 남아있게 된다.



<테스트 환경>


OS : Windows 7 (32bit)

Emacs 버전 : EmacsW32 1.58-091103 patched (Emacs-23-CvsP091103-EmacsW32-1.58.exe)



,