키보드의 잘 사용하지 않는 키를 다른 용도로 사용하려고 아래 키보드 설정 프로그램을 사용해 봤습니다.
https://github.com/jtroo/kanata
설정 파일을 편집하는 게 복잡하지만 몇가지 기능만 사용한다면 많이 어렵지는 않은 것 같네요.
설정할 때 필요한 키 이름의 목록은 프로그램 설명의 Usage 부분 아래쪽에 있는 keys module 링크에 있는데 오른쪽 Alt 키와 Ctrl 키를 변경하려는 경우에는 한국어 입력기일 때 오른쪽 Alt와 Ctrl이 한영키와 한자키로 사용 중이라면 hangeul과 hanja 키 이름을 사용해서 변경해야 하네요.
2023년 2월 12일에 내용 추가
버전이 바뀌면서 hangeul과 hanja 키 이름을 사용할 수 없는 것 같은데 키의 이름을 직접 지정해서 사용하면 되네요.
글 아래쪽에 자세한 내용을 적어 놓았습니다.
설정 파일은 예시를 대강 만들어서 설명하면..
아래와 같이 설정 파일을 만들고 실행하면 원래 키를 눌렀을 때 입력되는 키 1에 있는 키가 입력되어서 a를 누르면 b가 입력되고 b를 누르면 Ctrl + S가 입력됩니다.
@으로 시작하는 별명(alias)은 아래쪽의 defalias에 지정한 동작을 실행합니다.
' 키를 길게 누르면 원래 키를 눌렀을 때 입력되는 키 2로 바뀌어서 c 키를 눌렀을 때 음소거(Mute) 키가 입력됩니다.
' 키를 다시 길게 누르면 원래 키를 눌렀을 때 입력되는 키 1로 바뀝니다.
Insert 키를 누른 상태를 유지하고 있으면 일시적으로 원래 키를 눌렀을 때 입력되는 키 2로 바뀌어서 Insert 키를 누른 상태에서 c 키를 같이 누르면 음소거(Mute) 키가 입력됩니다.
(defcfg
)
;; 원래 키
(defsrc
a b c ' ins
)
;; 원래 키를 눌렀을 때 입력되는 키 1
(deflayer key1
b C-s _ @lyr2 @ins2
)
;; 원래 키를 눌렀을 때 입력되는 키 2
(deflayer key2
_ _ mute @lyr1 _
)
(defalias
lyr1 (tap-hold-press 200 200 ' (layer-switch key1))
lyr2 (tap-hold-press 200 200 ' (layer-switch key2))
ins2 (tap-hold-press 200 200 ins (layer-while-held key2))
)
그리고 키를 누른 횟수에 따라 각각 다른 동작을 실행하거나 고정키처럼 키를 누른 다음에 뗀 상태에서 다른 키를 눌렀을 때 동작하도록 할 수도 있네요.
아래와 같이 설정 파일을 만들면 Pause 키를 누른 횟수에 따라 Ctrl + T 또는 F11 또는 Ctrl + Shift + O를 입력합니다.
F1 키를 누르면 3초 동안 key2의 키가 입력되니 F1 키를 누른 다음에 뗀 상태에서 3초 안에 a 키를 누르면 Ctrl + Shift 키가 눌린 상태에서 오른쪽 화살표 키가 3번 입력됩니다.
참고로 Ctrl + Shift + 오른쪽 화살표 키는 텍스트에서 단어 선택 단축키입니다.(관련글: http://wp.me/po5hm-3P )
(defcfg
)
(defsrc
pause f1 a
)
(deflayer key1
@pse @fnk1 _
)
(deflayer key2
_ _ @cs1
)
(defalias
pse (tap-dance 200 (C-t f11 C-S-o))
fnk1 (one-shot 3000 (layer-while-held key2))
cs1 (macro C-S-(rght 200 rght 200 rght))
)
여러가지로 테스트를 해보니 아래와 같이 독특한 방식으로 키를 조작할 수 있네요.
메뉴 키를 한번 누르면 a가 입력되고 두번 누르면 b가 입력되고 세번 누르면 c가 입력되고 세번 누른 후에 바로 떼지 않고 조금 더 누르고 있다가 떼면 key2에 있는 키들을 입력할 수 있습니다.
Scroll Lock 키를 한번 누르면 Scroll Lock 키가 입력되고 Scroll Lock 키를 두번 누르면 a가 입력되고 Scroll Lock 키를 두번 누른 후에 계속 누르고 있으면 key3에 있는 키들을 입력할 수 있고 Scroll Lock 키를 세번 누르면 b가 입력됩니다.
(defcfg
)
(defsrc
menu scrlck
q w e
j k l
)
(deflayer key1
@menu1 @scrlck1
_ _ _
_ _ _
)
(deflayer key2
@menu2 _
r t y
_ _ _
)
(deflayer key3
_ _
_ _ _
C-x C-c C-v
)
(defalias
menu1 (tap-dance 200 (a b (tap-hold-press 200 200 c (layer-switch key2))))
menu2 (tap-dance 200 (a b (tap-hold-press 200 200 c (layer-switch key1))))
scrlck1 (tap-dance 200 (scrlck (tap-hold-press 200 200 a (layer-while-held key3)) b))
)
프로그램에 키의 이름이 없는 경우 아래와 같이 키의 이름을 직접 지정해서 사용할 수 있습니다.
프로그램 페이지의 Releases 링크에 들어간 후에 Windows key code tester 프로그램을 찾아서 받은 다음 실행하고 키보드의 키를 눌러 code: 오른쪽에 표시된 키 코드를 확인합니다.
확인한 키 코드를 다음과 같이 deflocalkeys-win을 이용하여 이름을 지정하여 사용하면 됩니다.
참고로 한영키는 키 코드가 21이고 한자키는 키 코드가 25네요.
(defcfg
)
(deflocalkeys-win
hg 21
hj 25
)
(defsrc
hg hj
)
(deflayer key1
a b
)
저는 프로그램을 실행하면 표시되는 창을 숨기려고 런처 프로그램 Splat을 이용했네요.
Splat에서 프로그램을 추가할 때 Launch state를 Hide로 선택하고 Arguments에 --cfg 설정 파일 이름을 입력합니다.
https://www.dcmembers.com/skwire/download/splat/
https://www.clien.net/service/board/lecture/7034296CLIEN