MS 윈도우용 Emacs에서 IME 사용하지 않고 자체(내장) 입력기 사용하기

primewizard의 이미지

리눅스 같은 경우 emacs 자체(내장) 입력기를 사용하기 위해
기본 입력기를 비활성화 시키는 방법이 몇 가지 있는데
저 같은 경우 데비안에서 .Xresources 파일에 "Emacs.useXIM: off"를 넣어서 사용합니다.

그러나 MS 윈도우 XP에서는 어떻게 하는지도 모르고 가끔 사용해서 불편한 대로 사용했는데
오랜만에 XP에서 emacs를 사용하니 리눅스에서 emacs를 사용하던 습관 때문에
갑자기 짜증이 확 밀려와서...--;

훅킹으로 EmacsW32에서만 IME를 막아버리는 프로그램을 만들어 봤습니다.
Type 3를 사용하셔서 shift+space로 한영 전환을 사용하시는 분들도 사용하실 수 있습니다.

인스톨 프로그램도 만들려 했으나 귀찮은 관계로...^^;
(적당히 시작 프로그램에 추가해서 사용하세요.)

주의 사항으로 EmacsW32에서
한/영키는 "kana"로 한자키는 "kanji"로 shift+space(Type 3)는 "shift+kana"로 인식됩니다.
그래서 .emacs에 아래처럼 추가하셔야 사용하실 수 있습니다.

(global-set-key [(kana)] 'toggle-input-method)
(global-set-key [(kanji)] 'hangul-to-hanja-conversion)
 
;; Type 3
(global-set-key [(shift kana)] 'toggle-input-method)
(global-set-key [(control kanji)] 'set-mark-command)

그리고...MFC71.dll도 필요합니다.

--
그냥 간단히 사용할려고 만든 것이기에 나머지는 다음 분께 패스.....

추가:
저는 사용을 안 하지만 만드는 김에 오리지널 GNU Emacs 22 것도...

너무 막 만들었는지 프로그램을 종료할 때
IME를 복원하지 못하는 경우가 생깁니다. 다음 분께 패스.....^^;

오리지널 GNU Emacs 22는 IME를 막아도 spy++로 보면 이벤트는 받고 있지만
한/영,한자키 자체를 인식 안 했습니다. (Type 3일 때는 shift+space, ctrl+space 도 포함)
그래서 키보드 훅킹을 해서 다른 키가 눌린 것처럼 만들고 .emacs에 아래처럼 추가했습니다.

;; * 한/영키 (toggle-input-method)
;; 키보드 훅킹을 해서 한/영키를 누르면 기본 바인딩 "C-\"를 누른 것처럼 변환됩니다. 
;; 그래서 키바인딩 설정 필요없음
 
;; * 한자키 (quail-hangul-switch-hanja)
;; 키보드 훅킹을 해서 한자키를 누르면 아래 키바인딩을 누른 것처럼 변환됩니다.
;; (오리지널 GNU Emacs 22에는 hangul-to-hanja-conversion 가 없었음)
(global-set-key [(control shift meta f9)] 'quail-hangul-switch-hanja)
;;(global-set-key [(control shift meta f9)] 'hangul-to-hanja-conversion)
 
;; * Type 3일 때 shift+space, ctrl+space
;; 키보드 훅킹을 해서 아래 키바인딩을 누른 것처럼 변환됩니다.
(global-set-key [(control shift meta f11)] 'toggle-input-method)
(global-set-key [(control shift meta f12)] 'set-mark-command)

--
http://ourcomments.org/cgi-bin/emacsw32-dl-latest.pl

ftp://ftp.gnu.org/gnu/emacs/windows/

dreamstorm의 이미지

저도 비슷한 고민을 했었네요.

한영키가 달린 키보드를 쓸때는 다른 어플에서는 한영키를 쓰고 이맥스에서는 shift-space 를 썼었는데
한영키가 없는 키보드로 바꾼후에 윈도 IME 에서 shift-space 를 쓰도록 한 후에는 이맥스를 쓸때 좀 답답했습니다.

그래서 한영키가 없는 키보드지만 한영키가 달린 키보드로 드라이버를 잡아주고(타입3?) autohotkey 를 이용해서 shift-space 가 들어오면 emacs 를 제외한 어플에서는 한영키로 변환을 하고 emacs 에서는 그냥 통과시켰습니다.( 오래된 일이라 키보드 타입 바꿔준건 기억이 가물가물 하네요. 지금은 거의 리눅스만 써서.. )

#IfWinNotActive ,GNU Emacs 23
+space::Send, {vk15sc138}

ms 분들이 IME 에 제외목록 같은걸 제공했다면 이런 삽질이 필요없었을텐데 말입니다.

ohyecloudy의 이미지

현재 Windows 7 에서도 IME 기조는 똑같네요. 남겨주신 댓글보고 저도 해결했습니다.

조금만 다르고 똑같이 해결했습니다.

'한국어 101 키 유형 1 USB 키보드'로 http://support.microsoft.com/kb/927824/ko 를 참고해 변경했습니다.

#IfWinNotActive, ahk_class Emacs
+space::Send, {vk15sc138}

yoo-2011의 이미지

저는 이걸로 씁니다.

LShift & RShift::
+Space::
IfWinActive, ahk_class Emacs
        Send,^\
Else
        Send,{VK15}
Return

shift 키 두 개를 같이 누르거나 (left shift를 먼저 눌러야 함), shift+space를 누를 때마다 한글입력과 영문입력 사이를 오고갑니다. Windows 8 에서 실험해보면 키보드유형과는 상관이 없고 한글입력IME만 설치되어있으면 됩니다.

죠커의 이미지

예전부터 궁금했던 것인데 Emacs는 왜 비 IME 친화적인 정책을 쓰는 걸까요? 저는 S-를 쓰지 않고 그냥 한/영키를 씁니다.

- 죠커's blog / HanIRC:#CN

klenui의 이미지

저경우에는 IME를 통해 키입력을 받는 gvim에 비해 자체입력기를 갖는 emacs방식이 훨씬 낫더군요.

vim의 경우 command 모드에서 한글 입력으로 되어 있는 경우가 자주 있어서 좀 짜증나는데, emacs에서는 시작하고 한번만 입력언어를 영어로 해두면 컴퓨터 끌때까지는 편하게 쓸 수 있으니까요..

edward0im의 이미지

2018년 12월 30일에 emacs 25.3 windows 버전에 사용해본 결과 잘 작동합니다. 상당히 오래전에 작성된 글이라 작동 안 할 줄 알았는데 정상적으로 작동하네요 :-)

DIFE-DisableIMEforEmacsW32-bin.zip 를 다운받아서 MSVCR71.dll 을 c:\Windows\SysWOW64\ 폴더에 놓고 실행한 결과 잘 작동합니다

최근에 emacs 윈도우로 유입하시는 분들은 참고하세요~

skyer9의 이미지

DIFE 는 32비트 버전만 지원하기에 64비트 이맥스를 사용할 수 없습니다.

스크립트는

#IfWinActive, ahk_class Emacs
VK15::
        Send,^\

요 3줄로 충분하네요.