esc 키를 누를 시 자동 영문 전환 (Windows)
24 Feb 2023 | vim autohotkey windows esc to english
목차
들어가기에 앞서…
해당 방법은 auto hotkey를 사용하는 방법이기에 윈도우에서만 동작합니다.
Windows가 아닌 다른 OS에서 사용하고 싶으시다면 뒤로가기를 눌러 주십시오.
준비
auto hotkey
오토핫키 설치가 필요합니다.
오토핫키는 여기서 다운받을 수 있습니다
스크립트 작성
아래 스크립트 작성
필자는 vim을 사용할 때 ctrl + space
키를 esc 키로 매핑하여 사용하고 있기에
ctrl + space
키 또한 누를 경우 한/영 상태를 체크하는 코드를 추가하였다.
만약 ctrl + [
를 주로 사용하는 사용자라면 ^Space
대신 ^[
를 추가한다.
동작 방식은 A를 눌러 눌러진 A가 A인지 확인하고 영문 A가 아닐 경우 한/영키를 눌러 전환한다.
아래 코드를 복붙하여 사용 (파일명은 esc_force_english.ahk
로 지정하였음)
; shift+space = underbar (_)
; +Space::
; Send, _
; return
; ^[::
; ^Space::
; ret := IME_CHECK("A")
; if %ret% <> 0 ; 1 means IME is in Hangul(Korean) mode now.
; {
; ; MsgBox, 0, test, test1, ]
; Send, ^
; Send, ^
; Send, {vk15} ;한글인 경우 Esc키를 입력하고 한영키를 입력해 준다.
; Sleep, 5
; Send, {Esc}
; }
; else if %ret% = 0 ; 0 means IME is in English mode now.
; {
; ; MsgBox, 0, test, test2, ]
; Send, ^
; Send, ^
; Send, {Esc} ;영문인 경우 Esc키만 입력한다.
; }
; return
;
; ; IME check
$Esc::
ret := IME_CHECK("A")
if %ret% <> 0 ; 1 means IME is in Hangul(Korean) mode now.
{
Send, {vk15} ;한글인 경우 Esc키를 입력하고 한영키를 입력해 준다.
Sleep, 10
Send, {Esc}
}
else if %ret% = 0 ; 0 means IME is in English mode now.
{
Send, {Esc} ;영문인 경우 Esc키만 입력한다.
}
return
; IME check
IME_CHECK(WinTitle) {
WinGet,hWnd,ID,%WinTitle%
Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
DetectSave := A_DetectHiddenWindows
DetectHiddenWindows,ON
SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
if (DetectSave <> A_DetectHiddenWindows)
DetectHiddenWindows,%DetectSave%
return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}
Send, {Esc}
이후 Send, {vk15}
를 누르게 되면 알 수 없는 오류가 발생하여
한영키가 눌러지는 시점을 esc보다 앞당겼다.
또한 한영키를 누르고 대기 시간을 주지 않을 경우 한영전환이 안되는 경우가 있어
sleep 타임을 주어 해결하였다.
윈도우 시작 시 자동실행
Win+R
눌러 실행창 진입shell:startup
입력 후 엔터- 생성한
esc_force_english.ahk
파일을 해당 폴더로 이동 - 동작 확인
Comments