오토핫키 무조건 영어 - otohaski mujogeon yeong-eo

(1) 레지스트리 수정으로 CapsLock -> 한/영전환 매핑

글에 이어서 작성하므로 서론은 생략.

====================

우선 CapsLock 을 눌렀을 때 대신 한영전환으로 바꾸는건 부트캠프에서 Cmd+Space 로 한영전환 하기 에서도 했으니 패스.

SuperUser - Using CapsLock LED for other purposes

이 글을 참고해서 LED 변경법을 알았는데, kbd 값이 PC 마다 다른 것 같아서 그냥 0~5 까지 다 루프를 돌도록 만들었다.

현재 언어 설정을 받아오는 법이 문제였는데, 영어, 한국어 키보드 레이아웃 자체를 변경하는게 아니라

한국어 키보드 레이아웃에서 IME 자체적으로 영어/한국어 변경을 하는식이라 GetKeyboardLayoutName 으로는 무조건 한국어로만 나오는 문제가 있더라. (AutoHotKey - Detecting the currently-active language)

그래서 조금 뒤져보니 뭔가 알수 없는 방법으로 한국어 Layout 하에서 현재 상태가 한국어인지 영어인지 알아내는 법을 찾았다.

영어일때는 ErrorCode 가 0, 한국어일때 Error 가 나서 ErrorCode 가 1이 되는 뭔가 이상한 방법을 쓰는데 원리는 모르겠음.

AutoHotKey - 한글입력인지 영어입력인지 구분

AutoHotKey - 절대한영전환

요걸 잘 섞어서

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
CapsLockIME.ahk

이런 스크립트를 만들 수 있다.

led.ahk 는 위 링크에서 받아도 되지만 링크가 깨질 수도 있으니 -> 

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
led.ahk

====================

그리고 대부분이 다운받아 쓸 컴파일된 바이너리

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
CapsLockIME.exe

부트캠프에서 Cmd+Space 로 한영전환 하기

글에서의, CommandKeys 와 함께 쓰고싶다면

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
CmdKeys CapsLockIME.exe

영어일때 CapsLock LED가 꺼지고 한글일때 CapsLock LED가 켜진다.

윈7, 윈10 에서 테스트 해봤음.

원래 CommandKeys 프로그램과 같이 그냥 시작메뉴에 넣어두고 쓰면 된다.

참고 URL은 위에 링크 다 걸었음.


== Git ==

https://github.com/iolate/CapsLockIME


컴퓨터/이용하자

2021. 1. 28. 23:40

한, 영, 일 키보드를 왔다갔다 하다보니 레이아웃이 햇갈려서 만들어보았다.

우측Alt(한/영키)와 J를 누르면 일본어, K를 누르면 한글, L을 누르면 영어로 바꿀 수 있도록 해보자 

en := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1) ;영어 키보드 레이아웃을 en으로 선언
jp := DllCall("LoadKeyboardLayout", "Str", "00000411", "Int", 1) ; 일본어 키보드 레이아웃을 jp로
kr := DllCall("LoadKeyboardLayout", "Str", "00000412", "Int", 1) ; 한국어를 kr로
SetLayout(language) ; 함수 대충 언어 레이아웃을 변경해준다는 내용
{
  ControlGetFocus, control, A
  ;SplashTextOn,,, % "" . language
  PostMessage 0x50, 0, %language%, %control%, A ; WM_INPUTLANGCHANGEREQUEST
}

RAlt & j::   ;오른쪽알트 + j를 누르고
KeyWait, RAlt  ; 오른쪽 알트의 입력이 끝나는 걸 기다림
SetLayout(jp) ; 레이아웃을 jp로 변경
return ; 끝

vk15 & j:: ; vk15는 한영키임 한글 레이아웃일때는 오른쪽알트가 아니라 한영키이므로 vk15를 이용
KeyWait, vk15  ; 대충 위와 동일한 구조
SetLayout(jp)
return

vk15 & l::
KeyWait, vk15 
SetLayout(en)
return

RAlt & k::
KeyWait, RAlt
SetLayout(kr)
return

RAlt & l::
KeyWait, RAlt
SetLayout(en)
return

추가로 오른쪽 알트 혹은 한영키를 누를시에 무조건 영어로 변경하는 방법은

RAlt:: 
KeyWait, alt
SetLayout(en)
return

vk15::
KeyWait, vk15
SetLayout(en)
return

KeyWait는 일반적으로 사용하지 않아도 문제가 없지만, 키보드 레이아웃이 변경이 되는 과정에서

오른쪽 알트키가 한영으로 변환이 되며, 한글 자판으로 바뀌었는데 알트가 계속 눌려진 것으로 인식되는 상황이 생겼다.

이를 해결하기위해 입력이 끝나는 것을 기다리는 KeyWait를 사용하여 회피하였다.


필자의 경우 윈도우에서는 오토핫키를 이용해 Ctrl + Spacebar 를 누르면 무조건 영어로, Alt + Spacebar 를 누르면 무조건 한글로 변환되도록 세팅해두고 사용을 하고 있습니다.

Windows 와 macOS 를 동시에 사용하다 보니 맥에서도 동일하게 세팅을 해서 사용중인데요.

맥에서 위와 같은 언어 전환 방식을 적용하는 방법은 Karabiner-Elements 또는 구버전의 구름 입력기 등 다양한 형태로 진행 할 수 있지만 개인적으로 가장 간편하고 효과적인 것은 macOS용 데스크톱 자동화 도구인 Hammerspoon 을 사용하는 것으로, 이 방식을 꽤 오래도록 사용 하고 있습니다.

그래서 오늘은 맥에서 Hammerspoon 을 사용해 특정 키를 무조건 한글 또는 무조건 영어로 한영 전환하기에 대해서 알아 봅니다.

해당 포스트는 충분한 테스트 및 검증 후 작성 되었지만 이것이 내용의 정확성이나 신뢰성에 대해 보증을 하는 것은 아니니 단순 하게 참고용으로 봐주시길 바랍니다.


튜토리얼 환경 : macOS Monterey 12.2.1(m1), Hammerspoon

선행 사항

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
Hammerspoon 공식 사이트

Hammerspoon 을 통해서 진행 하는 것이기 때문에 사용하는 맥에 Hammerspoon 이 설치 되어 있어야 합니다. Hammerspoon 을 설치하는 방법은 Hammerspoon 설치 및 기본적인 사용 방법에서 확인 할 수 있습니다.

macOS용 데스크톱 자동화 도구인 해머스푼을 이용 하여 시스템 레벨 API 를 Lua 스크립팅 엔진에 연결하거나 Lua 스크립트를 작성하는 것으로 시스템을 간단하게 조작할 수 있습니다.

특정 키 입력 시 한글 및 영어 고정으로 언어 전환하기

해머스푼을 설치 후 언어 변경을 위한 Lua 스크립트를 등록 하면 아주 간단하게 원하는 단축키로 특정 언어로의 전환이 가능합니다.

오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
Reload Config 메뉴
  1. 상단 메뉴막대의 해머스푼 아이콘
    오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
    (1) 을 클릭 해 점프 메뉴를 확장 후 Open Config (2) 를 선택 해 init.lua 파일을 열어 줍니다.
오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
initlua 파일에 스크립트 작성
  1. init.lua 파일에 아래 스크립트를 작성 하거나 붙여넣기 ( Cmd + V ) 합니다.
---english
local input_english = "com.apple.keylayout.ABC"

function input_eng()
  local input_source = hs.keycodes.currentSourceID()
  if not (input_source == input_english) then
     hs.keycodes.currentSourceID(input_english)
  end
  hs.eventtap.keyStroke({}, '')
end
---korean
local input_korean = "com.apple.inputmethod.Korean.2SetKorean"

function input_kor()
  local input_source = hs.keycodes.currentSourceID()
  if not (input_source == input_korean) then
     hs.keycodes.currentSourceID(input_korean)
  end
  hs.eventtap.keyStroke({}, '')
end
--shortcut 
hs.hotkey.bind({'ctrl'}, 'space', input_eng)
hs.hotkey.bind({'shift'}, 'space', input_eng)
hs.hotkey.bind({'cmd'}, 'space', input_eng)
hs.hotkey.bind({'alt'}, 'space', input_kor)

위 스크립트는 주석 표기 기준으로 상단 입력 소스를 영문으로 변경하는 input_eng 함수 와 입력 소스를 한글로 변경하는 input kor 함수로 되어 있습니다. 하단 shortcut 이라고 표기 된 주석에서 각자 지정하고 싶은 키를 지정해 주면 되겠습니다.

  • 필자의 경우 3개의 키를 영문 전환 , 1개의 키를 한글 전환으로 사용 중입니다.
  • 단축키는 hs.hotkey.bind({'modifier keys'}, 'normal key', 입력 소스) 와 같은 형식으로 지정 합니다.
    • modifier keys : Cmd , Shift , Option , Ctrl 키로 지정 할 수 있습니다. ( OptionAlt 로 지정 해도 동일합니다.)
    • normal key : modifier keys 를 제외한 모든 키로 지정 할 수 있습니다.
  • 작성이 완료 되었다면 Cmd + S 로 파일을 저장합니다.
오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
Reload Config 로 적용
  1. 다시 상단 메뉴막대의 해머스푼 아이콘
    오토핫키 무조건 영어 - otohaski mujogeon yeong-eo
    을 클릭 해 점프 메뉴를 확장 후 Reload Config 를 선택 해 변경 내용을 다시 로드합니다.

마무리

이렇게, 맥에서 Hammerspoon 을 사용해 특정 키를 무조건 한글 또는 무조건 영어로 한영 전환하기에 대해 알아 보았습니다.

이렇게 한번 사용해 보기 시작하면 다시는 예전으로 돌아가지 못할 거라고 생각합니다.

그 만큼 편리한데요. 이렇게 저와 같이 무조건 한글 또는 무조건 영어로 전환하고 싶은 경우 위 내용을 참고 해 적용 후 사용 해 보시길 바랍니다.

참고

  • hammerspoon 해머스푼 맥용 오토핫키 단축키 자동화 AutoHot key한영전환
  • 갤럭시, 아이폰, 맥, 윈도우 클립보드 공유 앱 소개 - Clipt
  • 맥에서 새로고침 하는 법 과 새로 고침 단축키 F5 로 수정하기
  • 맥 기본 보조키 cmd,option,ctrl 키 위치 값 변경 - 윈도우 키보드 연동