Пример конфигурации раскладки клавиатуры
2025-04-23
·
6 мин. для прочтения
Моя раскладка клавиатуры.
Содержание
1 Стандартная клавиатура
- Настройка для полной клавиатуры.
- Сделана на основе Kenkyo (см. Клавиатура. Раскладка Kenkyo).
1.1 Настройка на основе kanata
1.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.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.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.1.4 Слой main
Виртуальные клавиши
- Зададим виртуальные клавиши.
(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(если она была нажата).
- Сбрасывает состояние:
Аккорды основного слоя
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:Tabxпри удержании :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 )
Карта слоя
- Зададим уровень
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 для переключения раскладок
- kanata. Русская раскладка
- Используется XKB для переключения раскладок (см. Клавиатура. xkb).
- Несколько команд объединяются с помощью функции
multi. - Для переключения на английский используем правый
Alt. - Для переключения на русский язык используется левый
Alt.;;; Switch language ;;;; ralt -> RU; lalt -> EN
Переключение с помощью команды оболочки
- Переключаем с помощью команд оболочки (для Sway).
;; 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) - При этом перестаёт работать переключение языка на уровне окна (https://github.com/artemsen/swaykbdd).
- Переключаем с помощью команд оболочки (для Sway).
Переключение путём отправки комбинации клавиш
- Установим опцию xkb:
xkb_layout "us,ru" xkb_options "grp:lctrl_lwin_rctrl_menu" - Комбинация
Ctrl+Left Winпереключает на первую раскладку. - Комбинация
Ctrl+Menuпереключает на вторую раскладку. - Переключаем путём отправки комбинации клавиш:
ralt (tap-hold-press $tt $ht (multi rctl menu) ralt) lalt (tap-hold-press $tt $ht (multi lctl lmeta) lalt)
- Установим опцию xkb:
Использование пробела для переключения уровней
- Определяем поведение клавиши пробела (
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.1.5 Слой 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.1.6 Слой 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) )