요약
- Right Command → F19:
hidutil - 입력소스 전환:
Hammerspoon- 손쉬운 사용 + 입력 모니터링 권한 필요
- ₩ → backtick(`) 치환:
DefaultKeyBinding.dict - 시스템 설정의 입력소스 단축키: 해제
파일:
~/Library/KeyBindings/DefaultKeyBinding.dict
내용:
{
"₩" = ("insertText:", "`");
}
파일 생성:
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.plistF19 단독 입력ormodifier + 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()- iTerm2:
- Key Binding 설정으로 해결
- Ghostty:
- 별도 설정 없이 정상 동작