본문 바로가기

IT

MacOSX Leopard에서 MacVim 사용시 언어 자동전환 문제

맥에서 기본으로 제공하는 콘솔용 vim이 있긴 하지만 윈도우에서도 gvim을 쓰고 있었고 Finder와 연동하기도 불편하다는 문제가 있어 대안을 찾던 중 MacVim이라는 훌륭한 포팅이 있음을 발견했다. git를 이용해 소스를 내려받아 직접 컴파일해야 되지만 그냥 써있는대로 따라하면 되기에 큰 어려움은 없었다. (단, macports와 xcode가 설치되어 있는 것이 편하다.)

문제는 MacVim을 실행 후 입력모드에 들어갈 때마다 IM 언어가 한글로 자동으로 바뀌는데 그 상태에서 키보드를 치면 영문이 입력되고 실제 한글을 입력하려면 Cmd+Space를 수 차례 눌러주어야 했다는 점이다. 뭐 소스코드도 있겠다 한 번 문제를 들여다보았더니 원인은 GetScriptManagerVariable이라는 MacOSX의 Carbon API에 문제가 있는 것으로 판명되었다.

즉, 원래 제작자의 구현이 제대로 동작한다면, 명령 모드에서는 영문 입력 상태가 유지되고 입력 모드에 들어가고 나올 때 입력모드에서 사용하던 입력 상태를 기억하여 자동으로 전환되어야 한다. (윈도우용 gvim 7.1에서는 잘 됨을 확인했다.) 나름대로 이것을 그대로 구현하기 위해 IM 상태를 저장하는 함수를 별도로 만들어보는 등 삽질을 해봤지만 OSX의 호환성 문제인지 잘 되지 않았다. 무엇보다 IM 상태를 얻거나 변경하는 방법만 3가지(Script manager로 바꾸는 방법, Class/Layout component로 바꾸는 방법, 최신 API인 TIS*+CoreFoundation 계열)나 존재해서 어떤 것을 써야 제대로 동작하는지 알 수도 없었고 각 API가 크게 다른 모습을 가지고 있어 어떤 시맨틱을 써야 좋을지도 헷갈렸다. (윈도API는 그러고보면 버전에 따라 심하게 바뀌는 일이 별로 없으니 좋은 거다.)

그래서 결론은, MacVim 소스에서 src/MacVim/gui_macvim.m 파일의 im_set_active 함수에서 호출되는 KeyScript API에 smKeyRoman을 항상 넘겨주게 하면 입력모드 들어갈 때 무조건 영문 상태로 들어가게 된다. (보통 명령 모드는 항상 영문으로 쓰니 겉으로 보기에 바뀌는 것으로 보이진 않을 것이다) 대신 한글 상태에서 입력모드를 쓰다가 Esc를 눌렀을 때 다시 입력모드로 들어가면 영문으로 되어 있으므로 한영전환을 매번 해줘야 한다는 불편이 생기지만, 한글 입력 상태로 표시되면서 영문으로 입력되는 등의 모호한 상태는 없어진다.