kanata. Пример конфигурации
2025-04-23
·
6 мин. для прочтения
Kantata. Моя конфигурация.
Содержание
1 Стандартная клавиатура
- Настройка для полной клавиатуры.
- Сделана на основе Kenkyo (см. Клавиатура. Раскладка Kenkyo).
1.1 Общие настройки
- Базовая конфигурация.
- Разрешаем использование команд оболочки.
(defcfg danger-enable-cmd yes )
- Определяем переменные.
(defvar streak-count 3 streak-time 325 tap-timeout 200 hold-timeout 500 chord-timeout 50 tt $tap-timeout ht $hold-timeout )
1.2 Структура раскладки
- Структура раскладки:
(defsrc grv 1 2 3 4 5 6 7 8 9 0 - = bspc tab q w e r t y u i o p [ ] \ caps a s d f g h j k l ; ' ret lsft z x c v b n m , . / rsft lctl lmet lalt spc ralt rmet menu rctl )
1.3 Шаблон модификаторов
Цель: реализация Tap-Hold модификаторов (клавиша работает как символ при коротком нажатии и как модификатор при удержании).
Задаём шаблон:
(deftemplate charmod (char mod) (switch ((key-timing $streak-count less-than $streak-time)) $char break () (tap-hold-release-timeout $tap-timeout $hold-timeout $char $mod $char) break ) )
- Параметры:
key-timing $streak-count less-than $streak-time
— проверяет, нажата ли предыдущая клавиша (3-я по счёту) менее 250 мс назад. Если да, модификатор игнорируется, чтобы избежать ложных срабатываний при быстрой печати.- Проверка
key-timing
снижает ошибки при быстрой печати. tap-hold-release-timeout $tap-timeout $hold-timeout
:$tap-timeout
: время (мс) удержания для активации модификатора;$hold-timeout
: таймаут (мс) для возврата к символу, если модификатор не использован.
- Параметры:
1.4 Слой main
1.4.1 Виртуальные клавиши
- Зададим виртуальные клавиши.
(defvirtualkeys
Виртуальная клавиша shift
- Позволяет временно переключиться на базовый слой и активировать
Shift
для ввода заглавных букв/символов. shift
–— аналог включенияCaps Lock
.
shift (multi (layer-switch main) lsft)
(layer-switch main)
: активирует слой main (базовый слой) при нажатии клавишиshift
.lsft
: при удержании даёт левый Shift.
- Позволяет временно переключиться на базовый слой и активировать
Клавиша сброса
- Сбрасывает состояние:
- Отключает
shift
(если он активен). - Гарантирует, что после использования
shift
система вернётся к базовому слою без «залипания» модификаторов.
- Отключает
clear
–— аналог выключенияCaps Lock
.
clear (multi (layer-switch main) (on-press release-virtualkey shift)) )
- При нажатии клавиши
clear
:(layer-switch main)
: возвращает на базовый слой;
(on-press release-virtualkey shift)
: отпускает виртуальную клавишуshift
(если она была нажата).
- Сбрасывает состояние:
1.4.2 Аккорды основного слоя
w
+e
:Esc
(defchords mtl $chord-timeout (w ) w ( e) e (w e) esc )
i
+o
:BackSpace
(defchords mtr $chord-timeout (i ) i ( o) o (i o) bspc )
x
+c
:Tab
x
при удержании :AltGr
(defchords mbl $chord-timeout (x ) (t! charmod x ralt) ( c) c (x c) tab )
,
+.
:Enter
.
при удержании :AltGr
(defchords mbr $chord-timeout (, ) , ( .) (t! charmod . ralt) (, .) ret )
1.4.3 Карта слоя
- Зададим уровень
main
черезdeflayermap
. - Подключим ранее определённые аккорды:
(deflayermap (main)
w (chord mtl w)
e (chord mtl e)
i (chord mtr i)
o (chord mtr o)
x (chord mbl x)
c (chord mbl c)
, (chord mbr ,)
. (chord mbr .)
Home Row Mods
- kanata. Настройка Home Row Mods
- Используется макет
GACS
/◆⎇⎈⇧
. - Добавим описание Home Row Mods:
a (t! charmod a lmet) s (t! charmod s lalt) d (t! charmod d lctl) f (t! charmod f lsft) j (t! charmod j rsft) k (t! charmod k rctl) l (t! charmod l lalt) ; (t! charmod ; rmet)
Дополнительные управляющие клавиши
z (t! charmod z lctl) / (t! charmod / rctl)
Переключение на слой fumbol
v (t! charmod v (layer-while-held fumbol)) m (t! charmod m (layer-while-held fumbol))
Замена
Caps Lock
наCtrl
иEscape
- kanata. Клавиша Caps Lock
- Заменим
Caps Lock
на комбинацию:- простое нажатие:
Escape
; - долгое нажатие
Caps Lock
илиCaps Lock
+ другая клавиша:Ctrl
.;;;; CapsLock -> Esc, Ctrl ;; caps (t! charmod esc lctl) caps (tap-hold-press $tt $ht esc lctl)
- простое нажатие:
Использование XKB для переключения раскладок
- Один из подходов — использование XKB для переключения раскладок (см. Клавиатура. xkb).
- Несколько команд объединяются с помощью функции
multi
. - Переключаем с помощью команд оболочки (для Sway).
;; Switch language ralt (tap-hold-press $tt $ht (cmd swaymsg input 'type:keyboard' xkb_layout ru) ralt) lalt (tap-hold-press $tt $ht (cmd swaymsg input 'type:keyboard' xkb_layout us) lalt)
Использование пробела для переключения уровней
- Определяем поведение клавиши пробела (
spc
) с использованием Tap-Hold модификатора.
spc (t! charmod spc (multi (layer-switch extend) (on-release tap-virtualkey clear)))
t! charmod
— Tap-Hold модификатор:- Короткое нажатие (tap) → отправляет
spc
(пробел). - Удержание (hold) → активирует слой
extend
.
- Короткое нажатие (tap) → отправляет
multi
— выполняет несколько действий последовательно:(layer-switch extend)
— переключает на слойextend
при удержании.(on-release tap-virtualkey clear)
— при отпускании клавиши отправляет виртуальную клавишуclear
:- возвращает слой к
main
; - Отпускает все активные модификаторы (например,
Shift
).
- возвращает слой к
- Пример:
- Удерживаете пробел → попадаете на слой
extend
, где клавишиHJKL
могут работать как стрелки (←↓↑→). - Отпускаете пробел → автоматически возвращаетесь на базовый слой
main
, и модификаторы (вроде Shift) сбрасываются.
- Удерживаете пробел → попадаете на слой
- Преимущества:
- Пробел становится многофункциональной клавишей:
- Не занимает дополнительные клавиши для переключения слоёв.
- Избегает залипания слоя
extend
после использования.
- Подходит для навигации в тексте/коде без смещения рук с домашнего ряда.
- Пробел становится многофункциональной клавишей:
- Определяем поведение клавиши пробела (
Завершение
)
1.4.4 Слой extend
(deflayermap (extend)
e (layer-switch fumbol)
r (on-press press-virtualkey shift)
y ins
u home
i up
o end
p pgup
a lmet
s lalt
d lsft
f lctl
g comp ;; Enable if not MacOS.
h esc
j left
k down
l rght
; pgdn
z mute
x vold
c volu
v pp
n tab
m bspc
, spc
. del
/ ret
)
1.4.5 Слой fumbol
Аккорды слоя
(defchords ftl $chord-timeout (w ) f2 ( e) f3 (w e) esc ) (defchords ftr $chord-timeout (i ) f8 ( o) f9 (i o) bspc ) (defchords fbl $chord-timeout (x ) (t! charmod ` ralt) ( c) - (x c) tab ) (defchords fbr $chord-timeout (, ) [ ( .) (t! charmod ] ralt) (, .) ret )
Карта слоя
(deflayermap (fumbol) q f1 w (chord ftl w) e (chord ftl e) r f4 t f5 y f6 u f7 i (chord ftr i) o (chord ftr o) p f10 [ f11 ] f12 \ f13 a (t! charmod 1 lmet) s (t! charmod 2 lalt) d (t! charmod 3 lsft) f (t! charmod 4 lctl) g 5 h 6 j (t! charmod 7 rctl) k (t! charmod 8 rsft) l (t! charmod 9 lalt) ; (t! charmod 0 rmet) z (t! charmod lsgt lctl) x (chord fbl x) c (chord fbl c) v = b f11 n f12 m ' , (chord fbr ,) . (chord fbr .) / (t! charmod \ lctl) )