Show GN: 레이어 기반 키맵핑 엔진 KeyZen
(github.com/Seungchan0325)설명
KeyZen은 빠르고, 적은 리소스를 사용하는 레이어 기반의 키 리맵핑 엔진입니다.
- 스택 기반의 키보드 레이어를 사용합니다.
- 로그인 즉시 실행 수준의 빠른 로그인 시 실행을 지원합니다.
- YAML 파일을 통해 어떻게 리맵핑할 것인지 구성할 수 있습니다.
자세한 설정 방법은 설정 가이드에서 확인할 수 있습니다.
KeyZen을 쓰면 좋은 상황
키보드를 사용할때 방향키가 F, J 같은 기준키와 멀리 떨어져 있어 흐름이 끊기는 문제가 있다면 Capslock + H, J, K, L을 Left, Down, Up, Right로 맵핑해보세요.
이전 단어(Ctrl + Left), 다음 단어(Ctrl + Right), 문장의 시작(Home), 문장의 끝(End)를 각각 W, E, P, O로 맵핑해보세요. 마우스에 손이 갈 상황이 감소합니다.
만들게된 이유
capslock이 사용빈도에 비해 너무 편한 위치에 있다는 것은 모두 공감하실 것입니다. 그래서 capslock 키와 조합하여 vim과 유사한 동작을 하기 위해 여러 방법을 찾아습니다. 원래는 이를 위해 autohotkey를 사용해왔는데 몇가지 문제점이 있었습니다.
- capslock 키의 상태가 정상적으로 연동이 안되는 문제가 있었습니다. 코드를 어떻게 짜느냐에 따라 달라질 수 있겠지만 저의 경우에는 capslock키를 누르지 않았는데도 눌렀다고 인식해 capslock를 연타해야하는 상황이 여럿있었습니다.
- 로그인 시 실행을 시작 프로그램 폴더에 두는 방식으로 활용했는데 이 경우 컴퓨터가 켜진지 몇 분은 지나야 실행이 되는 문제가 있었습니다.
대안으로 kanata와 같은 프로젝트를 찾아보기도 했지만 kanata의 경우에는 기능이 너무 방대하고 CPU 자원을 생각보다 많이 차지했고 로그인 시 실행을 지원하지 않았습니다. (autohotkey의 방법과 동일하게 시작 프로그램 폴더에 둘 수도 있겠지만 같은 문제가 발생합니다.)
또한 PowerToys의 Keyboard Manager는 Capslock + H = Left Arrow인 상황에서 Capslock 매 입력마다 함께 눌러야하는 문제가 있었습니다.
그래서 적은 리소스 사용량, 간편한 설정, 빠른 로그인 시 실행을 목적으로 KeyZen을 만들게 되었습니다.
기술적인 이야기
코드는 대부분 Codex를 사용하여 작성되었습니다. 10일 정도 사전 조사를 한 후에 Codex로 개발을 시작했는데 하루만에 끝나서 놀랐습니다.
러스트로 구현되었으며 windows api를 통해 키보드 훅을 설치합니다. 사용자 레벨에서 키보드 훅을 설치할지 아니면 드라이버를 통해 구현할지 고민했는데 키도드 훅 설치를 사용하였습니다. 키보드 훅은 작업 관리자와 같은 프로그램에서 작동하지 않는 문제가 있지만 드라이버 쪽을 건드리기엔 좀 위험할 수도 있다고 생각했습니다.