Skip to content

Instantly share code, notes, and snippets.

@Gyubin
Last active June 6, 2026 10:17
Show Gist options
  • Select an option

  • Save Gyubin/3d2623f712fe2a6c652bdb048a61083b to your computer and use it in GitHub Desktop.

Select an option

Save Gyubin/3d2623f712fe2a6c652bdb048a61083b to your computer and use it in GitHub Desktop.
맥북 입력소스 관련 설정 최종본

macOS 한/영 전환 세팅

요약

  • Right Command → F19: hidutil
  • 입력소스 전환: Hammerspoon
    • 손쉬운 사용 + 입력 모니터링 권한 필요
  • ₩ → backtick(`) 치환: DefaultKeyBinding.dict
  • 시스템 설정의 입력소스 단축키: 해제

1. ₩ → backtick(`)

파일:

~/Library/KeyBindings/DefaultKeyBinding.dict

내용:

{
    "₩" = ("insertText:", "`");
}

2. Right Command → F19 매핑

파일 생성:

vi ~/Library/LaunchAgents/com.user.hidutil.remap.plist

내용:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.user.hidutil.remap</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000E7,"HIDKeyboardModifierMappingDst":0x70000006E}]}</string>
    </array>

    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

적용:

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.user.hidutil.remap.plist

3. Hammerspoon

  • F19 단독 입력 or modifier + F19 입력 시 한/영 전환(shift, ctrl, alt, command가 같이 눌렸을 때 한영전환 안되는 문제 해결)
  • vim에서 esc 눌렀을 때 자동으로 영어로 바뀌도록
  • 위 2번의 f19키를 hidutil로 매핑하는 것은 유지 -> 코드가 단순해짐
  • aurora 부분은 다른 aurora gist 참고

~/.hammerspoon/init.lua

require('modules.inputsource_toggle')
require('modules.inputsource_aurora')

~/.hammerspoon/modules/inputsource_toggle.lua

-- ============================================================================
-- 한/영 입력 소스 전환 (Hammerspoon · 공유용 단일 파일)
--
-- 기능:
--   1. 우측 command 키 → 한/영 토글 (ABC ↔ 2벌식 한글)
--   2. Esc       → 무조건 영어(ABC) 강제 — vim normal 모드 진입 시 항상 영어 보장
--
-- 원리: hs.keycodes.currentSourceID()(TISSelectInputSource)로 입력 소스를 직접 set.
--       전환이 즉시라 빠른 반복 타이핑에 유리(드물게 stuck 가능성은 감수).
--       소스가 2개뿐이라 "이전 입력 소스" = 반대쪽이므로 단순 토글로 구현했다.
--
-- ────────────────────────────────────────────────────────────────────────────
-- ⚙️  사전 준비 — 이거 안 하면 우측 cmd가 동작하지 않는다
--
-- (1) 우측 command → F19 리매핑 (hidutil)
--     Hammerspoon은 modifier(cmd) 단독 탭을 잡기 어려워, 우측 cmd를 잘 안 쓰는
--     F19로 바꾼 뒤 그 F19를 잡는다. 1회성 테스트(재부팅 시 사라짐):
--       hidutil property --set '{"UserKeyMapping":[
--         {"HIDKeyboardModifierMappingSrc":0x7000000E7,
--          "HIDKeyboardModifierMappingDst":0x70000006E}]}'
--     로그인 시 자동 적용하려면 위 명령을 ~/Library/LaunchAgents/ 의 LaunchAgent
--     plist(ProgramArguments)로 등록해 둔다.
--       (0x7000000E7 = 우측 cmd, 0x70000006E = F19)
--
-- (2) 시스템 단축키 "이전 입력 소스 선택" 해제
--     시스템 설정 → 키보드 → 키보드 단축키 → 입력 소스 에서 끈다.
--     안 끄면 F19가 시스템 단축키와 이 스크립트 양쪽에서 처리돼 제자리 토글이 된다.
--
-- (3) 한글 입력 소스 ID 확인
--     아래 KOREAN 값은 macOS 기본 2벌식 기준. 세벌식 등 다른 자판이면 한글 입력 중
--     Hammerspoon 콘솔에서 hs.keycodes.currentSourceID() 로 실제 ID를 확인해 교체.
--
-- (4) 로드: 이 파일을 ~/.hammerspoon/ 아래 두고 init.lua 에서
--       require('inputsource_kr_en')
--     하거나, 아래 내용을 init.lua 에 그대로 붙여넣어도 된다.
-- ============================================================================

local ABC    = "com.apple.keylayout.ABC"
local KOREAN = "com.apple.inputmethod.Korean.2SetKorean"

local f19 = hs.keycodes.map["f19"]
local esc = hs.keycodes.map["escape"]

-- 우측 cmd(F19): 한/영 토글
local function toggleKorEng()
  if hs.keycodes.currentSourceID() == ABC then
    hs.keycodes.currentSourceID(KOREAN)
  else
    hs.keycodes.currentSourceID(ABC)
  end
end

-- 리로드 시 기존 eventtap 정리 (전역 핸들로 보관)
if krEnInputTap then krEnInputTap:stop() end

krEnInputTap = hs.eventtap.new({ hs.eventtap.event.types.keyDown }, function(e)
  local code = e:getKeyCode()

  if code == f19 then
    toggleKorEng()
    return true  -- F19는 소비(앱에 전달하지 않음)
  end

  if code == esc then
    hs.keycodes.currentSourceID(ABC)
    return false -- Esc는 통과시켜야 vim이 normal 모드로 전환. 소스 전환은 부수효과로만.
  end

  return false
end)

krEnInputTap:start()

4. tmux Ctrl+b / 터미널 Ctrl+c 한글 입력 문제

  • iTerm2:
    • Key Binding 설정으로 해결
  • Ghostty:
    • 별도 설정 없이 정상 동작
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment