При печати руки сдвигаются или отгибается кисть к клавишам Shift, Backspace, стрелкам. Это неизбежные перемещения, даже если вы печатаете вслепую. В свое время я задался вопросом, а насколько эти движения неизбежные. С помощью autohotkey написал скрипт, который переназначил Shift прямо под мизинцы, то есть на клавиши «A» и «;». Теперь мне не надо было изгибать кисть к шифтам, чтобы печатать заглавные буквы и спецсимволы. Затем я переназначил Backspace, затем Enter, как самые часто используемые клавиши, требующие изгибания кисти вправо. И так за пару месяцев я полностью перенес все функциональные клавиши на слои. Ушел от autohotkey и нейросетью написал программу на C#. Ощущения от работы за компьютером сильно изменились. И обычный способ печати для меня теперь крайне не эффективен. А затем я перешел на Zorin OS. Написал скрипт для keyd с таким же функционалом переназначения клавиш. Спустя еще пару месяцев, решил попробовать переназначить управление мышкой тоже на клавиши домашнего ряда. Keyd не поддерживал управление мышкой на том уровне, что я хотел. И после некоторых поисков я нашел Kanata, которая позволила написать скрипт с управлением мышкой. Теперь управление курсором и скролл текста тоже на домашнем ряде. И если раньше для навигации по тексту я много стучал по клавишам в слое стрелок, то теперь в слое мышки я могу двигать курсор с меньшим количеством нажатий. Данную технику печати на клавиатуре, когда все функции управления уже под пальцами, я назвал zero reach typing. Переводится как печать с нулевыми дотягиваниями пальцами. Далее приведу скрипт и картинки с пояснениями как работает скрипт. Так как скрипт зависит от типа клавиатуры, то будет две версии скрипта: для ANSI клавиатуры (клавиша Enter стоит горизонтально); для ISO клавиатуры (клавиша Enter стоит вертикально).
ANSI клавиатура:
(defcfg process-unmapped-keys yes);; ============================================================================;; PHYSICAL KEY DEFINITIONS (ANSI 104-key layout);; Maps the actual physical keys on your keyboard;; ============================================================================(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 rctl);; ============================================================================;; VIRTUAL KEYS;; Custom virtual key definitions for complex actions;; vclick = virtual click (used for mouse layer);; ============================================================================(defvirtualkeys vclick mltp);; ============================================================================;; ALIASES - COMPLEX ACTION DEFINITIONS;; ============================================================================(defalias ;; -------------------------------------------------------------------------- ;; SMART MODIFIERS (Home Row Mods) ;; tap-hold-press parameters: ;; 1st (200): tap-repress-timeout - window in ms for detecting tap re-press ;; 2nd (200): hold-timeout - ms before hold action activates automatically ;; NOTE: If another key is pressed before this timeout, ;; the hold action activates IMMEDIATELY ;; 3rd (a/s/l/;): tap-action - the letter produced on quick tap ;; 4th (lsft/lctl/rctl/rsft): hold-action - modifier activated on hold ;; -------------------------------------------------------------------------- a-ashift (tap-hold-press 200 200 a lsft) semishift (tap-hold-press 200 200 ; rsft) s-sctrl (tap-hold-press 200 200 s lctl) l-lctrl (tap-hold-press 200 200 l rctl) ;; -------------------------------------------------------------------------- ;; LAYER ACTIVATION KEYS ;; tap-hold-press parameters: ;; 1st (200): tap-repress-timeout in milliseconds ;; 2nd (200): hold-timeout in milliseconds ;; 3rd (j/k/d/f/m/i): tap-action - the letter typed on quick tap ;; 4th (layer-while-held <layer>): hold-action - activates layer while held ;; -------------------------------------------------------------------------- j-nav (tap-hold-press 200 200 j (layer-while-held nav)) k-ksel (tap-hold-press 200 200 k (layer-while-held ksel)) d-syms (tap-hold-press 200 200 d (layer-while-held syms)) f-num (tap-hold-press 200 200 f (layer-while-held num)) m-ctrlnav (tap-hold-press 200 200 m (layer-while-held ctrlnav)) i-scroll (tap-hold-press 200 200 i (layer-while-held scroll)) ;; -------------------------------------------------------------------------- ;; MOUSE LAYER WITH CLICK ON RELEASE ;; multi: executes multiple actions in sequence ;; - layer-while-held mouse: activates mouse layer while 'u' is held ;; - on-release tap-vkey vclick: triggers mouse click when 'u' is released ;; -------------------------------------------------------------------------- u-mouse (tap-hold-press 200 200 u (multi (layer-while-held mouse) (on-release tap-vkey vclick))) ;; -------------------------------------------------------------------------- ;; MOUSE MOVEMENT WITH ACCELERATION ;; movemouse-accel-<direction> parameters: ;; 1st (10): interval - milliseconds between cursor movement updates ;; 2nd (800): max-speed - maximum cursor speed in pixels per update ;; 3rd (1): acceleration - rate at which speed increases ;; 4th (5): max-acceleration - maximum acceleration limit ;; -------------------------------------------------------------------------- mm-up (movemouse-accel-up 10 800 1 5) mm-down (movemouse-accel-down 10 800 1 5) mm-left (movemouse-accel-left 10 800 1 5) mm-right (movemouse-accel-right 10 800 1 5) ;; -------------------------------------------------------------------------- ;; SCROLL ACTIONS (Mouse Wheel Emulation) ;; mwheel-<direction> parameters: ;; 1st (100): interval - milliseconds between scroll events ;; 2nd (120): distance - scroll amount per event ;; NOTE: 120 units = one standard mouse wheel notch ;; This provides smooth, natural scrolling behavior ;; -------------------------------------------------------------------------- scroll-up (mwheel-up 100 120) scroll-down (mwheel-down 100 120) scroll-left (mwheel-left 100 120) scroll-right (mwheel-right 100 120));; ============================================================================;; BASE LAYER - Default typing layer;; @symbol references the aliases defined above;; ============================================================================(deflayer base grv 1 2 3 4 5 6 7 8 9 0 - = bspc tab q w e r t y @u-mouse @i-scroll o p [ ] \ caps @a-ashift @s-sctrl @d-syms @f-num g h @j-nav @k-ksel @l-lctrl @semishift ' ret lsft z x c v b n @m-ctrlnav , . / rsft lctl lmet lalt spc ralt rmet rctl);; ============================================================================;; NAVIGATION & EDITING LAYER (activated by holding J);; Provides arrow keys, Home/End, Backspace, Delete, and common shortcuts;; Key: (multi lmet spc) = Win+Space for keyboard layout switching;; ============================================================================(deflayer nav _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ up (multi lmet spc) _ _ _ _ _ _ _ _ _ _ home left down right end _ j bspc del ret _ _ _ C-z C-x C-c C-v _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; TEXT SELECTION LAYER (activated by holding K);; Same as navigation but with Shift modifier for text selection;; ============================================================================(deflayer ksel _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S-up _ _ _ _ _ _ _ _ _ _ _ S-home S-left S-down S-right S-end _ _ k _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; SYMBOLS LAYER (activated by holding D);; Provides quick access to common symbols and punctuation;; ============================================================================(deflayer syms _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S-9 S-' S-0 ; _ _ _ _ _ _ d _ _ _ - S-= S-- = _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; NUMPAD LAYER (activated by holding F);; Provides numeric keypad functionality on the right side;; ============================================================================(deflayer num _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 7 8 9 0 _ _ _ _ _ _ _ f _ _ 4 5 6 _ _ _ _ _ _ _ _ _ _ 1 2 3 _ _ _ _ _ _ _ _ _);; ============================================================================;; CTRL NAVIGATION LAYER (activated by holding M);; Word-by-word navigation and deletion using Ctrl modifier;; ============================================================================(deflayer ctrlnav _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ C-up _ _ _ _ _ _ _ _ _ _ _ C-home C-left C-down C-right C-end _ _ C-bspc C-del _ _ _ _ _ _ _ _ _ _ m _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; MOUSE MOVEMENT LAYER (activated by holding U);; Controls cursor movement with acceleration;; e=up, s=left, d=down, f=right, p=right click (mrtp);; ============================================================================(deflayer mouse _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @mm-up _ _ _ u _ _ mrtp _ _ _ _ _ @mm-left @mm-down @mm-right _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; SCROLL LAYER (activated by holding I);; Controls mouse wheel scrolling;; e=scroll up, s=scroll left, d=scroll down, f=scroll right;; ============================================================================(deflayer scroll _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @scroll-up _ _ _ _ i _ _ _ _ _ _ _ @scroll-left @scroll-down @scroll-right _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
ISO клавиатура
(defcfg process-unmapped-keys yes);; ============================================================================;; PHYSICAL KEY DEFINITIONS (ISO 105-key layout);; Maps the actual physical keys on ISO keyboards;; Differences from ANSI: Enter key position, backslash key, 102d key;; ============================================================================(defsrc grv 1 2 3 4 5 6 7 8 9 0 - = bspc tab q w e r t y u i o p [ ] ret caps a s d f g h j k l ; ' bksl lsft 102d z x c v b n m , . / rsft lctl lmet lalt spc ralt rmet rctl);; ============================================================================;; VIRTUAL KEYS;; Custom virtual key definitions for complex actions;; vclick = virtual click (used for mouse layer);; ============================================================================(defvirtualkeys vclick mltp);; ============================================================================;; ALIASES - COMPLEX ACTION DEFINITIONS;; ============================================================================(defalias ;; -------------------------------------------------------------------------- ;; SMART MODIFIERS (Home Row Mods) ;; tap-hold-press parameters: ;; 1st (200): tap-repress-timeout - window in ms for detecting tap re-press ;; 2nd (200): hold-timeout - ms before hold action activates automatically ;; NOTE: If another key is pressed before this timeout, ;; the hold action activates IMMEDIATELY ;; 3rd (a/s/l/;): tap-action - the letter produced on quick tap ;; 4th (lsft/lctl/rctl/rsft): hold-action - modifier activated on hold ;; -------------------------------------------------------------------------- a-ashift (tap-hold-press 200 200 a lsft) semishift (tap-hold-press 200 200 ; rsft) s-sctrl (tap-hold-press 200 200 s lctl) l-lctrl (tap-hold-press 200 200 l rctl) ;; -------------------------------------------------------------------------- ;; LAYER ACTIVATION KEYS ;; tap-hold-press parameters: ;; 1st (200): tap-repress-timeout in milliseconds ;; 2nd (200): hold-timeout in milliseconds ;; 3rd (j/k/d/f/m/i): tap-action - the letter typed on quick tap ;; 4th (layer-while-held <layer>): hold-action - activates layer while held ;; -------------------------------------------------------------------------- j-nav (tap-hold-press 200 200 j (layer-while-held nav)) k-ksel (tap-hold-press 200 200 k (layer-while-held ksel)) d-syms (tap-hold-press 200 200 d (layer-while-held syms)) f-num (tap-hold-press 200 200 f (layer-while-held num)) m-ctrlnav (tap-hold-press 200 200 m (layer-while-held ctrlnav)) i-scroll (tap-hold-press 200 200 i (layer-while-held scroll)) ;; -------------------------------------------------------------------------- ;; MOUSE LAYER WITH CLICK ON RELEASE ;; multi: executes multiple actions in sequence ;; - layer-while-held mouse: activates mouse layer while 'u' is held ;; - on-release tap-vkey vclick: triggers mouse click when 'u' is released ;; -------------------------------------------------------------------------- u-mouse (tap-hold-press 200 200 u (multi (layer-while-held mouse) (on-release tap-vkey vclick))) ;; -------------------------------------------------------------------------- ;; MOUSE MOVEMENT WITH ACCELERATION ;; movemouse-accel-<direction> parameters: ;; 1st (10): interval - milliseconds between cursor movement updates ;; 2nd (800): max-speed - maximum cursor speed in pixels per update ;; 3rd (1): acceleration - rate at which speed increases ;; 4th (5): max-acceleration - maximum acceleration limit ;; -------------------------------------------------------------------------- mm-up (movemouse-accel-up 10 800 1 5) mm-down (movemouse-accel-down 10 800 1 5) mm-left (movemouse-accel-left 10 800 1 5) mm-right (movemouse-accel-right 10 800 1 5) ;; -------------------------------------------------------------------------- ;; SCROLL ACTIONS (Mouse Wheel Emulation) ;; mwheel-<direction> parameters: ;; 1st (100): interval - milliseconds between scroll events ;; 2nd (120): distance - scroll amount per event ;; NOTE: 120 units = one standard mouse wheel notch ;; This provides smooth, natural scrolling behavior ;; -------------------------------------------------------------------------- scroll-up (mwheel-up 100 120) scroll-down (mwheel-down 100 120) scroll-left (mwheel-left 100 120) scroll-right (mwheel-right 100 120));; ============================================================================;; BASE LAYER - Default typing layer (ISO layout);; @symbol references the aliases defined above;; Note: ret and bksl positions differ from ANSI layout;; ============================================================================(deflayer base grv 1 2 3 4 5 6 7 8 9 0 - = bspc tab q w e r t y @u-mouse @i-scroll o p [ ] ret caps @a-ashift @s-sctrl @d-syms @f-num g h @j-nav @k-ksel @l-lctrl @semishift ' bksl lsft 102d z x c v b n @m-ctrlnav , . / rsft lctl lmet lalt spc ralt rmet rctl);; ============================================================================;; NAVIGATION & EDITING LAYER (activated by holding J);; Provides arrow keys, Home/End, Backspace, Delete, and common shortcuts;; Key: (multi lmet spc) = Win+Space for keyboard layout switching;; ============================================================================(deflayer nav _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ up (multi lmet spc) _ _ _ _ _ _ _ _ _ _ home left down right end _ j bspc del ret _ _ _ _ C-z C-x C-c C-v _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; TEXT SELECTION LAYER (activated by holding K);; Same as navigation but with Shift modifier for text selection;; ============================================================================(deflayer ksel _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S-up _ _ _ _ _ _ _ _ _ _ _ S-home S-left S-down S-right S-end _ _ k _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; SYMBOLS LAYER (activated by holding D);; Provides quick access to common symbols and punctuation;; ============================================================================(deflayer syms _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S-9 S-' S-0 ; _ _ _ _ _ _ d _ _ _ - S-= S-- = _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; NUMPAD LAYER (activated by holding F);; Provides numeric keypad functionality on the right side;; ============================================================================(deflayer num _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 7 8 9 0 _ _ _ _ _ _ _ f _ _ 4 5 6 _ _ _ _ _ _ _ _ _ _ 1 2 3 _ _ _ _ _ _ _ _ _ _);; ============================================================================;; CTRL NAVIGATION LAYER (activated by holding M);; Word-by-word navigation and deletion using Ctrl modifier;; ============================================================================(deflayer ctrlnav _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ C-up _ _ _ _ _ _ _ _ _ _ _ C-home C-left C-down C-right C-end _ _ C-bspc C-del _ _ _ _ _ _ _ _ _ _ m _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; MOUSE MOVEMENT LAYER (activated by holding U);; Controls cursor movement with acceleration;; e=up, s=left, d=down, f=right, p=right click (mrtp);; ============================================================================(deflayer mouse _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @mm-up _ _ _ u _ _ mrtp _ _ _ _ _ @mm-left @mm-down @mm-right _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);; ============================================================================;; SCROLL LAYER (activated by holding I);; Controls mouse wheel scrolling;; e=scroll up, s=scroll left, d=scroll down, f=scroll right;; ============================================================================(deflayer scroll _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @scroll-up _ _ _ _ i _ _ _ _ _ _ _ @scroll-left @scroll-down @scroll-right _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
Как пользоваться.




Созданная мной техника печати радикально уменьшает движения рук и напряжения кистей от изгибания. Техника отшлифована полугодовым использованием (кроме слоя мышки). Предлагаю вам попробовать эту технику. Я брал линейку и замерял расстояние от правого мизинца до клавиши Backspace и другие расстояния, а потом попросил нейросеть посчитать какой пробег рук исключается моей техникой в год. И она насчитала 218 километров в год для вайбкодера занятого мелкими правками, против 6 с моей техникой. И даже если нейросеть ошиблась в десять раз, это все равно значимая цифра. Лично для меня один из самых главных плюсов этой техники — это полное исключение изгибания кистей при нажатии шифтов.
ссылка на оригинал статьи https://habr.com/ru/articles/1086448/