00:00:00안녕하세요, 키보드의 잠재력을 극대화해 주는 오픈 소스 도구인 Kanata를 소개합니다.
00:00:03키를 짧게 누를 때와 길게 누를 때 서로 다른 키가 입력되게 하거나,
00:00:08키 하나로 여러 키 입력을 실행하고,
00:00:10사용자 지정 키 매핑을 위해 여러 레이어를 활용할 수도 있죠.
00:00:12저처럼 주로 키보드만 사용하려고 노력하는 사람에게는 정말 유용한 도구입니다.
00:00:16그런데 설정 구문이 왜 이렇게 생소할까요?
00:00:19그리고 왜 Karabiner나 'K'로 시작하는 다른 도구 대신 이걸 써야 할까요?
00:00:24구독 버튼 누르시고, 바로 알아보겠습니다.
00:00:27Kanata는 원주민 이로쿼이어로 '마을'이라는 뜻인데,
00:00:30사실 키보드와는 아무런 상관이 없습니다.
00:00:33하지만 저처럼 기계식 키보드에 관심이 많으시다면 QMK에 대해 들어보셨을 겁니다.
00:00:37QMK는 유명한 오픈 소스 키보드 펌웨어로,
00:00:39키 입력 신호가 컴퓨터에 전달되기 전에 키보드 단에서 리매핑을 해줍니다.
00:00:42Kanata는 QMK와 비슷하지만 소프트웨어 수준에서 작동합니다.
00:00:46그래서 노트북 키보드를 포함한 모든 키보드에서 사용할 수 있죠.
00:00:49또한 Rust로 작성되었기 때문에 속도가 매우 빠르고,
00:00:52타이핑할 때 지연 시간이 거의 느껴지지 않습니다.
00:00:55하지만 설정하는 과정이 아주 간단하지는 않습니다.
00:00:57Mac용 Karabiner와 함께 Kanata를 설치한 후에는,
00:01:00이 부분은 나중에 더 자세히 설명해 드릴게요.
00:01:02Lisp에서 영감을 받은 S-표현식 구문을 사용해 설정 파일을 작성해야 하거든요.
00:01:07제가 본 것 중 가장 특이한 설정 구문입니다.
00:01:11일반적으로 함수 이름을 괄호 밖에 쓰는 것과 달리,
00:01:16이 설정 파일에서는 괄호 안에 인자와 함께 함수 이름을 씁니다.
00:01:21함수를 중첩해서 쓰기 시작하면 훨씬 더 생소하게 느껴지는데,
00:01:24설정에서 이런 중첩 사용은 꽤 흔합니다.
00:01:26함수 이름이 괄호 밖에 있지 않고
00:01:30모든 것이 안에 들어가 있어서 처음에는 이해하기 좀 어려워 보이죠.
00:01:35그래도 익숙해지면 괜찮아집니다.
00:01:36단순한 키맵 예시로 'A' 키를 'X'로 매핑하고 싶다고 가정해 봅시다.
00:01:41먼저 defsource 함수로 소스 키인 'A'를 지정하고,
00:01:46최소 하나 이상의 deflayer 함수를 사용해 출력될 키를 지정합니다.
00:01:50이름은 'base'로 하고 인자로 'X'를 주겠습니다.
00:01:53설정 파일에 나열되지 않은 키들은 원래대로 작동합니다.
00:01:57'B'와 'C'를 추가해서 각각 'X'와 'Z'로 매핑하면 이런 모습이 됩니다.
00:02:02다행히 공백과 탭은 상관없기 때문에,
00:02:04보기 편하게 간격을 띄워서 가독성을 높일 수 있습니다.
00:02:08설정 파일로 할 수 있는 몇 가지 멋진 기능들이 더 있습니다.
00:02:10탭-홀 기능을 설정해서 살짝 누를 때와 길게 누를 때의 동작을 다르게 할 수 있습니다.
00:02:15제한 시간을 설정하고 매핑할 키를 추가하기만 하면 됩니다.
00:02:19이 경우 'A'를 짧게 누르면 'X'가 입력되고, 길게 누르면 'Left Shift'로 작동합니다.
00:02:24편의를 위해 defvar 함수로 변수를 등록할 수도 있습니다.
00:02:28자주 쓰는 값을 변수로 정하고 달러 기호($)로 참조하면 아주 편리합니다.
00:02:32홈 로우(Home row) 키들을 4개의 조합 키로 매핑할 때 완벽한 기능이죠.
00:02:36솔직히 처음엔 정말 이상해 보였지만,
00:02:39지금은 완전히 익숙해져서 다른 방식으로는 키보드를 못 쓰겠더라고요.
00:02:42또한 'editor' 같은 이름으로 새로운 deflayer를 만들 수도 있습니다.
00:02:46영상 편집 전용 레이어를 만들어 완전히 새로운 키맵을 할당하고,
00:02:51레이어 전환 키를 통해 간편하게 바꿀 수 있죠.
00:02:54레이어 전환 등을 활용해 더 멋진 걸 해보고 싶다면,
00:02:58다른 프로그램이 신호를 받을 수 있도록 Kanata의 TCP 서버를 활성화하면 됩니다.
00:03:03제 경우에는 SketchyBar가 Kanata의 신호를 듣도록 설정해서,
00:03:06레이어를 바꿀 때마다 데스크탑 상단에 표시되게 했습니다.
00:03:10이 정도 수준까지 설정하려면 꽤 많은 공을 들여야 하지만,
00:03:13AI의 도움을 받으면 그리 어렵지 않습니다.
00:03:16그런데 이 모든 게 대단하긴 해도, 왜 Karabiner Elements 대신 Kanata를 써야 할까요?
00:03:21Karabiner는 Kanata의 모든 기능은 물론 그 이상의 기능도 갖췄으니까요.
00:03:24특정 애플리케이션이나 키보드별 매핑 기능도 있고,
00:03:28직관적인 이벤트 뷰어로 키를 테스트할 수도 있죠.
00:03:30터미널 명령어가 익숙지 않은 분들을 위한 깔끔한 GUI도 제공합니다.
00:03:35하지만 저에게 Karabiner의 탭-홀 기능은 홈 로우 모드용으로 쓰기에 많이 부족했습니다.
00:03:40제대로 작동하게 하려고 정말 많은 조사와 설정을 거쳐야 했죠.
00:03:45겨우 성공해도 Kanata만큼 직관적이지 않았습니다.
00:03:49길게 누른 걸 짧게 누른 것으로 인식하는 일이 잦았거든요.
00:03:51반면 Kanata는 별다른 조정 없이도 이 기능을 완벽하게 처리해 줬습니다.
00:03:56그래서 다시 Karabiner로 돌아갈 필요를 못 느꼈죠.
00:03:59홈 로우 모드를 쓰고 싶다면 Kanata를 강력 추천합니다.
00:04:03물론 Kanata가 완벽하다는 건 아닙니다.
00:04:05사용하는 키보드가 다르고 키맵도 다르다면 각각의 설정 파일이 필요합니다.
00:04:09키보드 연결을 해제할 때마다
00:04:12해당 키맵으로 전환하는 명령어를 실행해야 하는 게 좀 번거롭죠.
00:04:15또 Karabiner에서는 가능했던 재생/일시정지 버튼을 F8로 매핑하는 방법을 못 찾았습니다.
00:04:22MX Master 마우스와 연동하기 위해서도 몇 가지 수정이 필요했고요.
00:04:26다행히 대부분의 문제는 코딩으로 해결할 수 있었고,
00:04:30나중에 이 해결책들을 오픈 소스로 공개할 수도 있습니다.
00:04:31Kanata 커뮤니티가 더 커졌으면 좋겠네요.
00:04:34여러분이 친구나 동료들에게 이 영상을 공유해 주시면 도움이 되겠죠?