00:00:00Это Kanata — инструмент с открытым исходным кодом, раскрывающий потенциал вашей клавиатуры.
00:00:03Он позволяет, например, назначать разные действия на нажатие и удерживание клавиши,
00:00:08использовать одну клавишу для целой комбинации нажатий
00:00:10или создавать разные слои для кастомных раскладок.
00:00:12Это находка для таких людей, как я, которые стараются работать в основном на клавиатуре.
00:00:16Но что не так с этим странным синтаксисом конфигурации?
00:00:19И почему стоит выбрать именно его, а не Karabiner или другие инструменты на букву К?
00:00:24Подписывайтесь, и давайте во всем разберемся.
00:00:27Kanata — это индейское название деревни на языке ирокезов,
00:00:30что вообще никак не связано с клавиатурами.
00:00:33Но если вы фанат механики, то наверняка слышали о QMK —
00:00:37популярной открытой прошивке,
00:00:39которая переназначает клавиши прямо в контроллере до отправки сигнала в систему.
00:00:42Kanata работает так же, как QMK, но на программном уровне,
00:00:46поэтому поддерживает любые клавиатуры, даже встроенные в ноутбук.
00:00:49Благодаря тому, что она написана на Rust, программа работает очень быстро,
00:00:52и задержка при вводе практически не ощущается.
00:00:55Правда, настройка здесь не самая простая.
00:00:57Установив Kanata вместе с Karabiner для Mac (об этом я расскажу позже),
00:01:00вам придется писать конфиг, используя S-выражения в духе Lisp.
00:01:02Это, пожалуй, самый странный синтаксис, который я когда-либо видел.
00:01:07Вместо того чтобы писать имя функции перед скобками, как все привыкли,
00:01:11здесь оно пишется внутри скобок, сразу перед аргументами.
00:01:16Всё становится еще запутаннее, когда начинаешь использовать вложенные функции,
00:01:21а это в конфигурации встречается постоянно.
00:01:24Из-за того что названия функций находятся внутри скобок,
00:01:26код поначалу кажется очень сложным для восприятия.
00:01:30Но со временем к этому привыкаешь.
00:01:35Возьмем простой пример: допустим, я хочу, чтобы клавиша A работала как X.
00:01:36Я использую функцию «defsource», чтобы указать исходную клавишу A,
00:01:41и как минимум одну функцию «deflayer» для выходных значений.
00:01:46Назову этот слой «base» и передам аргумент X.
00:01:50Любая клавиша, не указанная в конфиге, работает как обычно.
00:01:53Добавление клавиш B и C с привязкой к X и Z выглядит вот так.
00:01:57К счастью, пробелы и табуляция не имеют значения,
00:02:02так что можно расставить клавиши так, чтобы код был читаемым.
00:02:04Вот еще несколько крутых фишек этого конфига.
00:02:08Можно настроить «tap-hold»: короткое нажатие делает одно, а удержание — другое.
00:02:10Указываем таймаут и клавиши, которые хотим привязать.
00:02:15В данном случае нажатие A выдаст X, а удержание сработает как левый Shift.
00:02:19Для удобства можно использовать «defvar», чтобы задать переменные,
00:02:24которые часто встречаются в коде, и обращаться к ним через знак доллара.
00:02:28Это идеально для «home row mods», когда клавиши среднего ряда становятся модификаторами.
00:02:32Честно говоря, сначала это кажется дикостью,
00:02:36но я настолько привык, что уже не представляю работу на обычной клавиатуре.
00:02:39Также можно создать новый слой «deflayer», например, под названием «editor»,
00:02:42специально для монтажа видео, с совершенно другой раскладкой,
00:02:46и переключаться на него отдельной клавишей.
00:02:51А если вы хотите чего-то совсем продвинутого при смене слоев,
00:02:54можно включить TCP-сервер Kanata, чтобы другие приложения могли его слушать.
00:02:58У меня, например, SketchyBar следит за Kanata,
00:03:03и при смене слоя информация об этом выводится в верхней части экрана.
00:03:06Да, пришлось написать немало строк кода, чтобы всё это настроить,
00:03:10но с этим вполне может помочь нейросеть.
00:03:13И всё же, зачем использовать Kanata, если есть Karabiner-Elements?
00:03:16Ведь он умеет всё то же самое и даже больше,
00:03:21включая привязку клавиш к конкретным приложениям и устройствам,
00:03:24наглядный просмотр событий для тестирования
00:03:28и удобный графический интерфейс для тех, кто не любит терминал.
00:03:30Лично для меня в Karabiner функция «tap-hold» работала очень плохо.
00:03:35Мне стоило больших усилий и долгого изучения документации, чтобы хоть как-то её настроить.
00:03:40Но даже тогда она работала нестабильно по сравнению с Kanata.
00:03:45Она постоянно путала удержания с обычными нажатиями.
00:03:49Kanata же идеально справляется с этим «из коробки» вообще без правок,
00:03:51и у меня нет никакого желания возвращаться на Karabiner.
00:03:56Так что, если вам нужны «home row mods», я советую Kanata.
00:03:59Но и у нее есть свои минусы.
00:04:03Для разных клавиатур с разными раскладками нужны отдельные файлы конфигурации.
00:04:05Это неудобно: при отключении клавиатуры
00:04:09нужно вручную вводить команду для переключения маппинга.
00:04:12Я также не нашел способа переназначить кнопку play/pause на F8,
00:04:15хотя в Karabiner это делалось элементарно.
00:04:20И пришлось немного повозиться, чтобы подружить Kanata с мышкой MX Master.
00:04:22К счастью, большинство проблем я решил с помощью нейросетей («vibe coding»),
00:04:26и, возможно, выложу эти решения в открытый доступ.
00:04:30Но мне бы очень хотелось, чтобы сообщество вокруг Kanata росло.
00:04:31И это видео может помочь, если вы поделитесь им с друзьями и коллегами, верно?
00:04:34which this video could help do if more people share it with their friends and colleagues, right?