Meandering Trajectory

evil-mode 팁: 자동 한->영 전환 본문

컴퓨터/이맥스(Emacs)

evil-mode 팁: 자동 한->영 전환

latentis 2024. 12. 21. 11:28

업무에 사용하는 프로그래밍 언어가 C에서 Go, Python 등으로 바뀌면서 근 몇년간 JetBrains의 IDE의 편리함에 빠져 이맥스를 거의 버리다시피 했다가 최근에 다시 이맥스를 쓰기 시작했다.
전에는 그냥 바닐라 이맥스 상태에서 여기저기서 가져온 설정을 덕지덕지 붙여 사용했었는데, 다시 쓰기 시작하며서부터는 설정 관리를 위해 doom emacs를 사용 중이다. doom emacs는 vi 키맵 플러그인인 evil-mode를 기반으로 개발된 이맥스 활경 설정 관리자다. 원래부터 vi랑 Emacs를 모두 사용하던 터라 단축키에 대한 어려움은 별로 없었다. 그리고 평소 vi의 입력과 명령 모드를 구분하는 방식이 효율적이라는 생각을 가지고 있었기 때문에 키맵에 대한 반감도 딱히 없다.
그런데 한가지 (매우) 불편한 점이 있었으니 그건 한글을 입력하다 Esc를 눌러 기본(명령) 모드로 빠져가면 직접 한영 전환키를 눌러 영문 입력기로 전환을 해야 한다는 것이었다. 그래서 이래저래 뒤져보고 해결책을 찾아서 소개한다.
하고 싶은 일은 입력 모드를 빠져나갈 때 영문 입력기로 자동으로 전환하는 것이었다. 왜 만들어뒀는지는 모르겠지만 evil-mode에는 입력 모드를 빠져나갈 때 특정 함수를 수행할 수 있게 해주는 훅 기능이 있다. 입력 모드를 빠져나갈 때 실행되는 훅의 이름은 evil-insert-state-exit-hook인데, 요는 이 훅에  OS의 입력기를 영어로 전환하는 명령을 실행하는 함수를 등록하는 것. (참고한 코드)

아래 코드를 doom의 설정 파일인 config.el에 추가하고 doom을 리로드하거나 이맥스를 재시작하면 한글을 입력하다 Esc를 눌러 명령 모드로 빠져나갈 때 입력기가 영어로 바뀌는 것을 확인할 수 있다.

(defvar im-en-cmd (cond ((eq system-type 'darwin) "/usr/local/bin/im-select com.apple.keylayout.ABC")
                        (t "fcitx-remote -s fcitx-keyboard-kr-kr104"))
  "영문 입력기로 전환하는 명령")

(defun im-use-english ()
  "각 OS에서 제공하는 입력기 이용해 기본(영문) input-method로 전환"
  (interactive)
  (call-process-shell-command im-en-cmd))
;; insert-state-exit-hook으로 
(add-hook 'evil-insert-state-exit-hook #'im-use-english)

맥 OS와 리눅스에서 모두 동작하는 것을 확인했다. 다만 맥 OS의 경우 한영 전환을 위해 im-select라는 명령을 사용하는데, 별도로 설치가 필요하다.

Comments