2011년 4월 18일 월요일

[Emacs] Cocoa Emacs 에서 Pymacs 기동이 안되는 경우

Mac OS X 용 Emacs로 Aquamacs가 유명하다. 과거에 Carbon 기반 GNU Emacs가 포팅되어 있을 때 Aquamacs가 Cocoa로 나오면서 유명해진 듯 하다. 하지만 개인적으로 좀 찝찝한게 있는데 GNU Emacs의 설정이 안먹거나 특별한 기능들이 일부 포함되어 있다는 점이었다.

위 스크린샷은 개인적으로 커스터마이지한 Aquamacs 시작 화면.

Aquamacs는 시작 화면 대신 스크래치 버퍼를 기본으로 보여준다. 스크래치 버퍼는 또한 자동 저장되기 때문에 항상 마지막 내용이 보여진다. 기본적으로 버퍼들을 툴바로 보여주는 형태가 특이하다.

그 외에 화면 하단 정보 표시줄의 폰트나 미니버퍼 폰트가 사용자가 설정한 것이 아닌 다른 가변폭 폰트가 표시된다. 미묘하게 color-theme가 일부 정상적으로 적용되지 않는 듯한 모습도 보여주었다. 가끔 한글/일본어 폰트 주변에 픽셀이 보이는 이상증상도 있고...

그래서 Aquamacs 대신 공식 GNU Emacs를 Cocoa 용으로 빌드한 Cocoa Emacs를 설치해서 사용해 보고 싶어졌다.

그런데 Mac Port로 별도로 Python을 설치해서 Pymacs 및 Rope 등의 환경을 구성했을 때 Cocoa Emacs에서는 Pymacs 기동이 안되는 경우가 있다. (Aquamacs의 경우는 잘 된다)
error: Pymacs helper did not start within 30 seconds
이럴때 터미널에서 Cocoa Emacs를 실행시키면 문제 없이 기동되는 경우도 있다.

결론으로, 이 문제는 MacPort나 Fink 등으로 특정 프로그램을 설치해서 사용중일 때 Cocoa Emacs가 이 프로그램의 경로정보(PATH 환경변수)를 읽지 않아서 발생하는 문제다. 반대로 터미널에서는 이미 쉘이 로딩되면서 PATH를 설정해주기 때문에 문제없이 기동되는 것이다.

문제가 생긴 Emacs에서 M-x getenv RET PATH RET 를 입력해 보면 PATH 가 영 신통치 않게 표시될 것이다.

문제를 해결하기 위해 직접 dotemacs(설정파일) 에서 setenv 등으로 PATH를 설정해 주면 될 줄 알았더니 잘 안되어서 다른 방법을 찾아보니 Mac OS X 만의 환경변수 설정 방법이 있었다.

~/.MacOSX/environment.plist 가 환경변수를 설정해 줄 수 있는 파일인데 없다면 만들어 주자. 물론 ~/.MacOSX디렉토리가 없을 수도 있으니 없다면 만들어 주자.

XCode가 설치되어 있다면 .plist 파일을 더블클릭하면 뜨는 프로퍼티 에디터로 PATH를 추가해 주면 되지만, 나 처럼 수동으로 편집하는걸 좋아하거나 XCode가 없다면 직접 XML을 입력해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PATH</key>
    <string>/sw/bin:/sw/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin:/usr/X11R6/bin</string>
</dict>
</plist>
보다싶이 PATH의 내용을 문자열 형식으로, 일반적인 bash에서 쓰는 방식으로 썼다. 위 예제의 내용은 시스템 마다 다를 수 있으니 복사내 넣지 말고 직접 터미널에서 echo $PATH를 통해 표시되는 내용을 확인해서 그대로 적어 넣는 것을 추천한다. 물론 다른 내용이 이미 있다면 dict 블럭의 내용만을 붙여 넣으면 된다.

이 파일을 생성한 후 다시 Emacs를 기동해 보면... 안된다 -_-;;;; Mac OS X를 리붓하거나 로그아웃 하고 다시 로그인 해야한다. 아마도 로그인 시에만 읽어들이는 파일인가 보다.
GNU Emacs 스럽게 시작부터 GNU Emacs로고를 보여주는 아주 그립던 화면이 보인다. 정보표시줄이나 미니버퍼의 폰트도 직접 적용한 고정폭 폰트로 표시된다. 사랑스러워... (= _ =)

만약 이 방법으로도 안된다면... 구글신께 기도를...

댓글 없음 :