macOS에서 입력 소스 전환을 깔끔하게 하는 방법

일기
이 글은 읽는데 약 7분이 걸립니다.

최근 M1 프로세서가 탑재된 맥북 에어를 사용하게 되었는데, 처음 사용하는 macOS에 적응하는 과정에서 겪었던 불편함 중 하나인 한/영 전환과 그 해결 방법에 대해 설명하고자 한다.

macOS에서는 기본적으로 Caps Lock 키를 눌러 한/영 전환을 하게 되는데, 이는 일반적으로 사용하는 Windows 또는 Linux와 같은 OS에서 우측 Alt(또는 한/영) 키를 눌러서 전환하는 것과는 많이 달라서 불편하다. 또한, Caps Lock의 본래 기능인 Case 고정 기능을 사용하려면 Caps Lock 키를 1초가량 누르고 있어야 한다. 여간 불편한 게 아니다.

Mac의 키 레이아웃에서 우측 Alt 위치에 있는 키는 우측 Command 키인데, 나는 이 키에 한/영 기능을 바인딩하고자 하였다.

해결 방법은 크게 두 가지가 있다.

  1. Karabiner(또는 키 바인딩 스크립트)를 통해 우측 Command 키를 F18 키로 바인딩하고, 시스템 설정에서 입력 소스 전환 키를 F18 키로 설정
  2. 마찬가지로 Karabiner를 통해 우측 Command 키를 F18 키로 바인딩하지만, 이후 Hammerspoon으로 입력 소스 전환을 직접 프로그래밍

첫 번째 방법은 난이도가 쉽고, 입력 소스가 2개만(영어, 한국어 등) 있을 때는 원활하게 작동한다. 그러나, 입력 소스가 3개 이상(영어, 한국어, 일본어 등)이 될 경우 다음과 같은 문제가 발생한다.

  1. 입력 소스 전환 키를 눌렀을 때, Key down 시에 전환이 되지 않고 Key up 시에 전환되어 빠른 타이핑 시 불편
  2. Key down 시에 입력 소스를 전환하기 위해 ‘이전 입력 소스 선택’ 대신 ‘다음 입력 소스 선택’을 선택하면, 3개 입력 소스 중 하나를 선택하려 할 때마다 최악의 경우 입력 소스를 3번 전환해야 함

나는 입력 소스를 3개(영어, 한국어, 일본어)로 사용하기 때문에, 1번 방법은 선택지가 아니었다. 물론, ‘이전 입력 소스 선택’으로 키 전환을 구성하면 3번 사이클을 돌지 않아도 되지만, Key up 시에 입력 소스가 전환되어 타이핑 시 불편한 단점이 너무 크게 다가왔다.

따라서 이틀에 걸쳐 해결 방법을 찾은 결과, 2번 방법을 선택하게 되었다.

이 글에서는 1번과 2번 방법을 모두 설명한다.

1. 시스템 설정에서 입력 소스 전환 키를 우측 Command 키로 설정하는 방법

1. Karabiner 설치

Karabiner 공식 사이트에서 앱을 설치한다.

2. 우측 Command 키를 F18 키로 바인딩

Karabiner-Elements 앱을 실행하고, Simple Modifications 메뉴에서 right_commandf18 키로 바인딩한다.

3. 시스템 설정에서 입력 소스 전환 키를 F18 키로 설정

시스템 설정 -> 키보드 -> 키보드 단축키 -> 입력 소스로 들어가면 위와 같은 창이 표시되는데, 아래의 ‘입력 메뉴에서 다음 소스를 선택’ 항목을 더블 클릭하여 F18 키로 바인딩하면 끝이다.

위의 ‘이전 입력 소스 선택’ 항목을 바인딩해도 되긴 하는데, 그렇게 하면 Key up 시에 전환되어 타이핑을 빠르게 할 때 불편하다. 반면, ‘입력 메뉴에서 다음 소스를 선택’을 바인딩하면 입력 메뉴 전체 사이클(이 경우에는 영어, 한국어 두 개뿐이라 문제 없음)을 도는 대신, Key down 시에 전환되어 빠른 타이핑에 좋다.

2. Hammerspoon으로 입력 소스 전환을 직접 프로그래밍

1. Karabiner 설치

Karabiner 공식 사이트에서 앱을 설치한다.

2. 우측 Command 키를 F18 키로 바인딩

Karabiner-Elements 앱을 실행하고, Simple Modifications 메뉴에서 right_commandf18 키로 바인딩한다.

3. Hammerspoon 설치

Hammerspoon 공식 사이트에서 앱을 설치한다.

4. init.lua 작성

~/.hammerspoon/init.lua 파일을 작성한다. 이 파일은 Hammerspoon 앱이 실행될 때 자동으로 로드되는 파일로, 특정 키나 키 조합이 입력되었을 때의 동작을 정의할 수 있다.

나는 영어, 한국어, 일본어 세 개의 입력 소스를 사용하는데, 평소에는 한/영 전환 위주로 사용하다가 가끔 일본어 입력을 사용하기 때문에 다음과 같이 구성했다.

  1. 우측 Command 키로 한/영 전환
  2. 좌측 Command 키를 누른 상태에서 우측 Command 키를 눌러서 일본어 입력으로 전환

이렇게 하면 영어, 한국어, 일본어 세 개의 입력을 사용할 때 위화감 없이 입력 소스를 전환할 수 있으며, Key down 시에 전환되기 때문에 빠른 타이핑에도 문제가 없다.

내가 사용하고 있는 Lua 스크립트는 다음과 같다.

-- f18 키에 바인딩
hs.hotkey.bind({}, "f18", function()
    local current = hs.keycodes.currentSourceID()

    if current == "com.apple.inputmethod.Korean.2SetKorean" or current == "com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese" then
        -- 한국어 or 일본어일 때 -> 영어
        hs.keycodes.currentSourceID("com.apple.keylayout.ABC")
    elseif current == "com.apple.keylayout.ABC" then
        -- 영어일 때 -> 한국어
        hs.keycodes.currentSourceID("com.apple.inputmethod.Korean.2SetKorean")
    end
end)

-- cmd-f18 키에 바인딩
hs.hotkey.bind({"cmd"}, "f18", function()
    local current = hs.keycodes.currentSourceID()

    if current == "com.apple.keylayout.ABC" or current == "com.apple.inputmethod.Korean.2SetKorean" then
        -- 영어 or 한국어일 때 -> 일본어
        hs.keycodes.currentSourceID("com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese")
    elseif current == "com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese" then
        -- 일본어일 때 -> 한국어
        hs.keycodes.currentSourceID("com.apple.inputmethod.Korean.2SetKorean")
    end
end)
5. Hammerspoon에서 Reload Config를 실행

Reload Config를 실행하여 방금 작성한 init.lua 파일을 로드한 후, 제대로 작동하는지 확인한다.