kanata. Пример конфигурации

2025-04-23 · 6 мин. для прочтения

Kantata. Моя конфигурация.

Содержание

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.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
  1. Виртуальная клавиша shift

    • Позволяет временно переключиться на базовый слой и активировать Shift для ввода заглавных букв/символов.
    • shift –— аналог включения Caps Lock.
    shift (multi (layer-switch main) lsft)
    
    • (layer-switch main) : активирует слой main (базовый слой) при нажатии клавиши shift.
    • lsft : при удержании даёт левый Shift.
  1. Клавиша сброса

    • Сбрасывает состояние:
      • Отключает 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 .)
  1. 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)
    
  1. Дополнительные управляющие клавиши

    z (t! charmod z lctl)
    / (t! charmod / rctl)
    
  1. Переключение на слой fumbol

    v (t! charmod v (layer-while-held fumbol))
    m (t! charmod m (layer-while-held fumbol))
    
  1. Замена 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)
        
  1. Использование 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)
      
  1. Использование пробела для переключения уровней

    • Определяем поведение клавиши пробела (spc) с использованием Tap-Hold модификатора.
    spc (t! charmod spc (multi (layer-switch extend) (on-release tap-virtualkey clear)))
    
    • t! charmod — Tap-Hold модификатор:
      • Короткое нажатие (tap) → отправляет spc (пробел).
      • Удержание (hold) → активирует слой extend.
    • multi — выполняет несколько действий последовательно:
      • (layer-switch extend) — переключает на слой extend при удержании.
      • (on-release tap-virtualkey clear) — при отпускании клавиши отправляет виртуальную клавишу clear:
        • возвращает слой к main;
        • Отпускает все активные модификаторы (например, Shift).
    • Пример:
      • Удерживаете пробел → попадаете на слой extend, где клавиши HJKL могут работать как стрелки (←↓↑→).
      • Отпускаете пробел → автоматически возвращаетесь на базовый слой main, и модификаторы (вроде Shift) сбрасываются.
    • Преимущества:
      • Пробел становится многофункциональной клавишей:
        • Не занимает дополнительные клавиши для переключения слоёв.
        • Избегает залипания слоя extend после использования.
      • Подходит для навигации в тексте/коде без смещения рук с домашнего ряда.
  1. Завершение

    )
    

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

  1. Аккорды слоя

    (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
    )
    
  1. Карта слоя

    (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)
    )
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.