윈도우에서 외부 에디터로 emacs를 등록하여 사용할 때, EmacsW32의 경우는 emacsclient를 곧바로 사용하면 되지만, 오리지널 emacs의 경우는 잘 되지않고 몇가지 추가 작업이 필요하다.


1. emacs를 실행한 후, C-x C-f를 누르고 ~/.emacs를 입력하여 설정 파일을 연 뒤, 다음 문장을 추가한다.


(server-start)



2. 외부 에디터로 등록할 때, 아래와 같이 입력한다.


<emacs 설치 경로>\bin\emacsclientw.exe -a <emacs 설치 경로>\bin\runemacs.exe



3. 필요에 따라 다음 옵션도 설정하도록 한다.


-> [Emacs] 사용 중, Buffer 'xxxx' still has client; kill it? 메세지 방지


Buffer 'xxxx' still has client; kill it? 메세지 방지 옵션까지 적용한 최종 실행 커맨드는 다음과 같다.


<emacs 설치 경로>\bin\emacsclientw.exe -n -a <emacs 설치 경로>\bin\runemacs.exe




또 다른 방법

-a 옵션을 사용하는 대신에, ALTERNATE_EDITOR 환경변수를 사용하여 설정하여도 된다.

-> 환경 변수 설정하는 방법




<테스트 환경>
OS : Windows 7 (32bit)
Emacs 버전 : Emacs 24.3 윈도우용


,
외부 에디터로 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)



,