Что такое home row mods?
Сначала давайте разберем этот термин. "home row mods" относится к средней строке алфавитных клавиш. На английской клавиатуре QWERTY это будут клавиши
ASDFGHJKL;.
Эта строка называется "домашним" рядом, потому что, если следовать технике слепой печати, это ряд клавиш, на котором должны находиться ваши пальцы. Накладки или углубления на клавишах F и J помогают вернуть пальцы в домашнее положение, не глядя на клавиатуру — это особенно важно для относительно больших клавиатур, которые требуют, чтобы вы перемещали руки, чтобы нажимать некоторые клавиши, например, Backspace или стрелочные клавиши на классической клавиатуре TKL, что может сбить вас с домашней позиции.
Теперь про термин "mods". Что вообще значит "mods"? В этом случае, "mods" это "модификатор", например такие кнопки как ⇧ Shift, ⎈ Control, ⎇ Alt, и ◆ GUI. Еще у нас есть модификатор WinKey на Windows, Command на MacOS или Super/Meta в Linux и BSD.
Это означает, что "home row mods" заключаются в размещении модификаторов в домашнем ряду.
Как это возможно? Означает ли это, что буквы/символы домашнего ряда меняются местами с клавишами-модификаторами? Конечно, нет!
У модификаторов есть неиспользованный потенциал. Они полезны нам тогда, когда мы их зажимаем. Но они не делают ничего полезного, когда их нажимают (т.е. нажимают и отпускают) (Для примера попробуйте нажать и отпустить кнопку Shift. И вы увидите, что не произошло никакого полезного действия.)
Исключением является клавиша Win/Super, которая открывает меню «Пуск» в Windows и Gnome, а также клавиша Alt, которая вызывает меню в графических приложениях — но благодаря программному обеспечению, такому как QMK, мы можем превратить эти модификаторы мгновенного переключения в клавиши с двойной ролью, которые действуют как модификаторы при удерживании, но действуют как другие клавиши при нажатии. Это позволяет нам делать больше с меньшими затратами.
Функциональности, которую QMK дает этим клавишам, называется "mod-tap". Mod-tap — это подмножество клавиш с двойной ролью. Другие программные продукты, которые также реализуют эту функциональность, называют это по-разному. Поэтому нам действительно следует говорить "mod-tap для домашнего ряда", но в повседневной речи обычно используется "моды домашнего ряда".
Теперь мы знаем что такое моды домашнего ряда; это практика превращения клавиш домашнего ряда в mod-tap. Нам еще предстоит выяснить почему следует использовать моды домашнего ряда.
Зачем использовать home row mods?
Причины, по которым кто-либо может выбрать использование модов домашнего ряда, довольно просты. Клавиатура больше не используется исключительно для ввода текста. Она также используется для навигации и управления компьютером, запуска программ, форматирования текста, выполнения макросов, увеличения и уменьшения масштаба, изменения... гимнастика для активации комбинаций клавиш. Вы не только играете в "Твистер" своими пальцами, но и напрягаете самый слабый палец, чтобы удерживать необходимые модификаторы.
Очевидно, что пишущие машинки не имели ни одной из этих функций. Они могли только печатать. Модификаторы клавиш, которые мы так часто используем сейчас, были добавлены позже, как бы в качестве запоздалой мысли, поверх классической раскладки пишущей машинки, которая досаждает нам и по сей день. Было решено уменьшить ширину пробела, чтобы освободить место для модификаторов клавиш, которые были необходимы в компьютерную эпоху.
В результате вам нужно делать всевозможные гимнастические движения пальцами, чтобы вызывать сочетания клавиш. Вы не только играете в Twister пальцами, вы еще и напрягаете самый слабый палец больше всего, чтобы удерживать необходимые модификаторы.
Такой подход к сочетаниям клавиш представляет некоторые биомеханические проблемы. Эти аккорды могут потребовать чрезмерного вытягивания, чрезмерного сгибания или растопыривания пальцев и могут потребовать неудобных статических мышечных нагрузок в дополнение к неудобному положению руки, особенно отклонению запястья. Все это может привести к кумулятивным травматическим расстройствам, как объяснил Верн Путц-Андерсон в своей книге под названием «Кумулятивные травматологические расстройства: руководство по заболеваниям опорно-двигательного аппарата верхних конечностей», опубликованной в 1988 году.
В ваших интересах найти решение, рискуя однажды получить RSI и Emacs мизинцем. Это особенно важно для программистов, поскольку большая часть их использования клавиатуры заключается не в наборе символов, а в запуске команд с помощью множества различных сочетаний клавиш. Хотя любой опытный пользователь любого приложения, а не только программист в своем текстовом редакторе, широко использует сочетания клавиш.
Модификаторы домашнего ряда — это лучшее решение этой проблемы модификаторов. Тот факт, что есть четыре модификатора, каждый из которых имеет левую и правую версию, идеально соответствует восьми пальцам, лежащим на домашнем ряду. Мы можем поместить модификатор под каждый палец и отразить его на обеих руках.
Разве не здорово иметь ВСЕ модификаторы под рукой? Не требуется никаких движений, растягиваний или напряжения. Этот быстрый доступ к аккордам модификаторов очень удобен и позволяет смешивать выполнение сочетаний клавиш с потоком набора текста, тогда как раньше требовалось переключение контекста, чтобы остановить написание текста, переместить руки в угол(ы) клавиатуры, вызвать нужное сочетание клавиш и затем вернуться в исходное положение, чтобы продолжить слепой набор текста.
Другое преимущество того, что все модификаторы выстроены в ряд и каждый из них выделен для определенного пальца, заключается в том, что вы можете с легкостью активировать ЛЮБОЕ сочетание клавиш. Ctrl+Shift+GUI+Alt, также иногда называемое Hyper, — это безумие на стандартной клавиатуре, но с модификаторами домашнего ряда это тривиально: просто удерживайте четыре пальца руки на клавишах, на которых вы уже лежите. Выделение определенного пальца для каждого из четырех модификаторов также значительно сокращает количество повторяющихся движений, которые должен выполнять ваш мизинец для всех сочетаний клавиш. Модификаторы домашнего ряда также выгодны для больших пальцев, поскольку они освобождают их для чего-то другого, например, переключения слоев или даже букв. Фактически, модификаторы домашнего ряда и клавиши большого пальца слоя идеально подходят. Это позволяет очень легко сочетать слои и модификаторы вместе, не заставляя пальцы искривлять или использовать один и тот же палец.
Наконец, домашние рядные моды (или вариации этой концепции, о которых мы поговорим далее в статье) — это (часть) секретного соуса, позволяющего сделать все эти крошечные клавиатуры без внешних колонок для мизинцев, которые вы всегда считали слишком маленькими, чтобы ими можно было пользоваться,… на самом деле удобными.
Теперь, когда семантика ясна, давайте поговорим о некоторых интересных комбинациях модификаторов на домашнем ряду, чтобы дать вам идеи для ваших собственных.
Как использовать home row mods?
Прежде чем мы сможем обсудить детали технической реализации, давайте кратко поговорим о порядке модификаций домашнего ряда.
Home row порядок
Как следует расположить модификаторы в домашнем ряду? У вас есть несколько вариантов.
Чтобы было легче понять, давайте сначала договоримся об общей терминологии.
Имя модификатора | Сокращение | Символ |
---|---|---|
Shift | S | ⇧ |
Control | C | ⎈ |
Alt/Option | A | ⎇ |
GUI/Win/Command | G | ◆ |
No modifier/mod-tap | _ | _ |
Это означает, что настройка модов домашнего ряда, показанная на обложке этой записи в блоге, может быть записана как ◆⎇⇧⎈__⎈⇧⎇◆ при использовании символов или как GASC__CSAG когда используем буквенные обозначения. Однако, поскольку mod-taps на правой руке симметричны mod-taps на левой руке, правую руку можно опустить. Конечные подчеркивания также можно опустить, чтобы в итоге получить следующую запись: GASC/◆⎇⇧⎈.
Теперь, когда семантика ясна, давайте поговорим о некоторых интересных порядках модификаций домашнего ряда, чтобы дать вам несколько идей для вашего собственного использования.
SCGA/⇧⎈◆⎇
Если бы кто-то перенес стандартизированную раскладку модификаторов в одномерную линию, это было бы то, что надо. Это может показаться знакомым и, следовательно, потенциально более простым для изучения, но имейте в виду, что, за исключением модификаторов Shift, все модификаторы теперь используют другой палец, чем тот, к которому вы привыкли.
Более того, это неудачное распределение модификаторов с точки зрения частоты их использования. Если предположить, что вы не используете Caps Lock или Shift Lock[^2], Shift — это намного наиболее используемый модификатор. Обычно неразумно позволять мизинцу брать на себя всю эту нагрузку. Хотя, если позволить мизинцу заниматься Shift, это вариант, который потребует наименьшего обмена руками при наборе строки заглавных букв. Такой порядок также помещает Alt и GUI в незаслуженно хорошее место. Указательный и средний пальцы — самые сильные из четырех пальцев, кроме большого, но Alt и GUI не являются наиболее часто используемыми модификаторами для пользователей Windows, Linux и BSD.
GASC/◆⎇⇧⎈
Это макет, который можно найти на обложке этой статьи, и который используется в большинстве примеров. По сравнению с порядком SCGA, это гораздо более разумно с точки зрения использования самых сильных пальцев для самых распространенных модификаторов в операционных системах, отличных от MacOS. Действительно, если вы отсортируете четыре модификатора по их частоте в Windows и/или Linux, вы обнаружите: GUI < Alt < Control < Shift. Наблюдательные из вас заметят, что это не относится к GASC/◆⎇⇧⎈. Почему Control и Shift поменялись местами? Есть несколько причин, которые могут оправдать этот выбор:
- Указательный палец — это палец, который отвечает за наибольшее количество буквенных клавиш, поэтому, если вы используете указательный палец для удержания Shift, вам придется поменять руки, если вы хотите нажать любую из шести клавиш — или семи клавиш, если вы находитесь на доске с разнесенными рядами и набираете C левым указательным пальцем, — за которые отвечает указательный палец. Если вы из тех, кто не хотел бы слишком часто менять руки при наборе заглавных букв, это может быть для вас интересно. Однако помните о частоте букв. В большинстве альтернативных раскладок внутренние столбцы индексов заполнены редкими клавишами, в то время как клавиши среднего пальца домашнего ряда назначены очень распространенным буквам, таким как «E».
- Размещение Shift между Control и Alt довольно изящно. Он позволяет легко играть аккорды Ctrl+Shift и Alt+Shift (наиболее распространенная комбинация модификаторов) с помощью соседних пальцев. Этого нельзя сделать, если Shift находится на указательном пальце. Удерживание двух модификаторов, которые находятся на расстоянии одной или двух клавиш друг от друга, не является идеальным.
- Одновременно с Shift mod-tap в домашнем ряду можно также иметь другие клавиши, похожие на Shift, которые используются вместо mod домашнего ряда для заглавных букв, например, Caps Lock или Shift thumb key. При этом Shift home row mod-tap обычно используется только в сочетании с другими модификаторами, чаще всего Control и Alt. Следовательно, в свете пункта 2, его лучшее место — в столбце среднего пальца.
- Расположение GUI рядом с Alt позволяет легко использовать GUI+Alt+Стрелки, сочетание клавиш, используемое в некоторых DE для переключения между виртуальными рабочими столами/рабочими пространствами. GUI помещается на мизинец, поскольку это, как правило, наименее используемый модификатор (если только вы не используете тайловый оконный менеджер, который требует много сочетаний клавиш GUI).
- Указательным пальцам и так приходится иметь дело со всеми щелчками мыши и перетаскиваниями поверх всех этих дополнительных внутренних клавиш, к которым он должен тянуться, поэтому у вас может возникнуть соблазн дать ему немного передышки, избавив его от удержания клавиши для всех ваших нужд Shift.
Это отлично работает на клавиатурах с ортогональным и вертикальным расположением строк, но если вы используете клавиатуру с расположением строк в шахматном порядке, вы можете обнаружить, что внезапно не можете копировать и вставлять текст одной рукой.
GACS/◆⎇⎈⇧
GACS — это порядок, который вы придумываете, когда хотите назначить наиболее часто используемые модификаторы самым сильным и самым подвижным пальцам, а наименее часто используемые модификаторы — самым слабым. GACS предназначен для тех, кто отвечает на пункт 1 маркированного списка GASC, говоря, что включение большего диапазона сочетаний клавиш Ctrl+Буква для одной руки важнее, чем больший диапазон заглавных букв, которые вы можете набирать одной рукой.
GACS также, что примечательно, является порядком, используемым в самой известной эргономичной раскладке QMK, включающей модификации домашних рядов: Miryoku.
Неочевидное преимущество наличия Shift в индексном столбце заключается в том, что это может помочь минимизировать случайные заглавные буквы при прокрутке клавиш. Вы не можете иметь случайные заглавные буквы при прокрутке внутрь, если последняя клавиша, которую вы прокручиваете, нажата указательным пальцем. Очевидно, что это не относится к прокруткам наружу, но они, как правило, медленнее, и это лучше, чем иметь Shift в середине и рисковать в обоих направлениях.
Если вы не определились, выбирайте GACS/◆⎇⎈⇧, это надежный выбор.
CAGS/⎈⎇◆⇧
А что, если вместо этого использовать MacOS? Ранжирование GUI < Alt < Control < Shift не отражает использование модификаторов в MacOS. Оно даже не использует правильные термины! Более подходящим ранжированием модификаторов по их использованию в MacOS было бы Ctrl < Option < Command < Shift. Таким образом, порядок модификаторов домашней строки, задуманный с учетом этого ранжирования, будет CAGS/⎈⎇◆⇧. CAGS для MacOS то же, что GACS для Windows/Linux/BSD.
Надеюсь, эти четыре примера дадут вам лучшее представление о том, что стоит за концепцией порядка в том, как различные мод-тапы располагаются в домашнем ряду. Вам нужно учитывать частоту модификаторов, силу пальцев и ловкость, а также взаимодействие между различными модификаторами и влияние временной потери доступа к столбцу клавиш при удержании мода домашнего ряда.
Конечно, это не исчерпывающий список всех возможных перестановок модификаторов вдоль восьми клавиш home. На самом деле, изменение порядка — не единственное, что вы можете сделать.
Тем не менее, несмотря на то, что я много писал о различных порядках модификаторов домашнего ряда, в конечном итоге, это действительно не так уж и важно. Просто выберите тот, который вам нравится, и играйте с ним. Если вы уже привыкли к определенному порядку, не позволяйте вышеперечисленным пунктам убедить вас изменить его. Когда вы начинаете, прагматичный вопрос о том, как выложить модификаторы в домашнем ряду, может показаться важным, но это впечатление неуместно.
Имплементация
Для лучшего опыта домашних модов я искренне рекомендую механическую клавиатуру на базе QMK. На момент написания статьи QMK поддерживает более 2935 клавиатур! Большая часть из которых — это клавиатуры DIY.
В следующем разделе мы рассмотрим реализацию модификаций домашнего ряда на клавиатуре на базе QMK со всеми необходимыми настройками для ее корректной работы.
Для тех из вас, у кого нет платы на базе QMK (или тех, кому не хватает модификаций домашнего ряда при наборе текста на ноутбуке или любой другой клавиатуре, отличной от QMK), вы найдете руководство по реализации модификаций домашнего ряда с помощью KMonad сразу после этого раздела о QMK.
Использование home row mods с QMK
Как уже было сказано, способ создать клавишу с двойной ролью — это использовать то, что называется "mod-tap" в QMK. Клавиша mod-tap, MT(mod, kc)
, ведет себя как модификатор, когда она удерживается, и как обычный код клавиши, когда нажимается. Другими словами, это позволяет нам иметь клавишу, которая отправляет "a", когда вы просто нажимаете ее, но функционирует как клавиша Shift или Control, когда вы удерживаете ее. Обратите внимание, что тот факт, что мы превратили A в mod-tap, не делает невозможным использование сочетаний клавиш с буквой "A". Вы все равно можете использовать Shift+A или Alt+A без проблем. Однако, в зависимости от того, какой модификатор вы решили назначить на A, вам нужно будет использовать противоположную руку, чтобы совместить этот модификатор с A.
Позвольте мне объяснить на примере. Давайте вашей раскладке клавиатуры, это сделает невозможным использование сочетания клавиш
Эта настройка, преобразованная в код, будет выглядеть примерно так:
MT(MOD_LGUI, KC_A), MT(MOD_LALT, KC_S), MT(MOD_LSFT, KC_D), MT(MOD_LCTL, KC_F),
MT(MOD_RCTL, KC_J), MT(MOD_RSFT, KC_K), MT(MOD_LALT, KC_L), MT(MOD_RGUI, KC_SCLN)
Или если бы кто-то использовал сочетания клавиш, описанные здесь:
LGUI_T(KC_A), LALT_T(KC_S), LSFT_T(KC_D), LCTL_T(KC_F),
RCTL_T(KC_J), RSFT_T(KC_K), LALT_T(KC_L), RGUI_T(KC_SCLN)
Как вы можете видеть в этом примере, A — это LGUI
mod-tap. Это означает, что нажатие клавиши произведет «a», а удержание ее активирует левый модификатор GUI. Если бы это был единственный модификатор GUI mod-tap в вашей раскладке, это сделало бы невозможным запуск сочетания клавиш GUI+A . Вот где зеркалирование всех модификаторов с другой стороны оказывается полезным. Если вы хотите сделать GUI+A, вам придется удерживать MT(MOD_RGUI, KC_SCLN)
, т. е. клавишу точки с запятой в нашем примере, и нажать MT(MOD_LGUI, KC_A)
, т. е. нашу клавишу A.
Если вам интересно, почему в этом примере для модификатора клавиши L вместо RALT
используется LALT
, нажмите здесь, чтобы перейти к разделу о руках-модификаторах и возможных ошибках с модификатором Right Alt.
Настройки конфигурации Tap Hold
Настройка параметров удержания нажатия — это настоятельно рекомендуемый шаг для использования модов home row без выдергивания волос. Таким образом, требуется локальная среда разработки QMK, поскольку онлайн-конфигуратор в настоящее время не поддерживает параметры конфигурации. Если вы еще не настроили среду сборки QMK, следуйте инструкциям, изложенным в этом руководстве.
Разобравшись с этим, переходим к самой сложной части: пониманию различных настроек конфигурации удержания нажатия.
Я настоятельно рекомендую вам внимательно прочитать официальную страницу документации QMK, посвященную настройкам конфигурации удержания нажатия.
Закончив чтение по этой ссылке, вернитесь сюда для более подробного объяснения каждого параметра конфигурации удержания нажатия и их связи с модами домашней строки.
По умолчанию
Поскольку QMK не может читать ваши мысли и предсказывать будущее, он не может решить, нажать или удерживать ли в тот момент, когда вы впервые нажимаете физическую клавишу. Оба нажатия и удерживания включают событие нажатия клавиши mod-tap, поэтому для принятия решения о нажатии или удерживании требуется дополнительное событие.
В случае настроек по умолчанию дополнительным событием является отпускание клавиши mod-tap или окончание срока нажатия, в зависимости от того, что произойдет раньше.
Вы можете думать об этом так: удерживали mod-tap дольше, чем указано в термине нажатия? Активировать модификатор. Нажали клавишу и отпустили ее до истечения срока нажатия? Это определение QMK «tap», отправьте письмо!
Пока ваши пальцы не задерживаются на клавишах дольше, чем указано в термине нажатия, вы не получите случайных активаций мода.
Настройки по умолчанию являются рекомендуемым режимом для модов домашнего ряда.
Если вы читали старые посты о модах домашнего ряда, вы могли встретить комментарии, призывающие вас включить IGNORE_MOD_TAP_INTERRUPT
для комфортного использования модов домашнего ряда, поскольку старое поведение мод-тапов по умолчанию было похоже на «[удерживать нажатие другой клавиши](#удерживать нажатие другой клавиши)», но начиная с версии QMK 0.21, выпущенной 28 мая 2023 года, поведение по умолчанию было изменено, а устаревшая опция IGNORE_MOD_TAP_INTERRUPT
удалена.
Период нажатия (Tapping Term)
Период нажатия (Tapping Term) — это важная концепция, которую нужно понять для модификаций домашнего ряда. Как мы только что увидели в предыдущем разделе, период нажатия помогает различать нажатие и удерживание.
Период нажатия сам по себе является очень простой вещью для понимания. Это просто период времени, выраженный в миллисекундах, который определил пользователь. Таймер запускается при каждом нажатии клавиши и постоянно проверяет, истек ли срок нажатия для этой клавиши или нет. Таймер останавливается, когда клавиша отпускается. Хорошо отметить, что каждая нажатая клавиша отслеживается определенным, другим таймером, так сказать. Когда вы нажимаете A, запускается таймер, но нажатие другой клавиши, например O, не ускоряет таймер, который был запущен при нажатии A.
Поскольку нажатие определяется как действие нажатия и отпускания клавиши в пределах термина tapping, термин tapping можно рассматривать как временное окно, в течение которого вам нужно отпустить клавишу, чтобы зарегистрировать нажатие. С другой стороны, его также можно рассматривать как минимальное количество времени, в течение которого клавиша должна быть нажата, чтобы зарегистрировать удержание.
Таким образом, хороший срок нажатия, который вам подходит, — это тот, который предотвращает случайные активации модов и обеспечивает мгновенную активацию предполагаемых модов. Это тонкий баланс.
Срок нажатия можно настроить глобально и для каждой клавиши, чтобы он вам подходил. Обычно люди выбирают что-то между 150 мс и 220 мс, при этом настройка QMK по умолчанию для срока нажатия установлена на 200 мс. Не бойтесь увеличивать или уменьшать срок нажатия по своему усмотрению.
На этом мы завершаем основные настройки конфигурации удержания нажатия для модов домашнего ряда. Не пытайтесь использовать моды домашнего ряда с безумным TAPPING_TERM
. Вам будет плохо, если вы это сделаете, и вы выйдете из этого с мыслью, что "моды домашнего ряда не для меня".
Условие быстрого нажатия (Quick Tap Term)
Первая в списке и важная настройка удержания нажатия для модов домашней строки - это QUICK_TAP_TERM
, или, как я предпочитаю называть ее DOUBLE_PRESS_AUTO_REPEAT_TERM
.
В ходе обычного использования компьютера вы будете переключаться между набором и вызовом сочетаний клавиш. Когда модификаторы находятся в домашней строке, рано или поздно вы почувствуете необходимость нажать клавишу домашней строки, чтобы набрать букву, а затем нажать ту же клавишу, чтобы активировать модификатор. Однако поведение по умолчанию для быстрого нажатия с последующим удержанием - это автоматическое повторение функции нажатия мод-тапа.
Это означает, что если вы используете LSFT_T(KC_L)
, например, и хотите набрать "camelCase", вы в итоге получите "camelllllllllllllllllcase". Причина в том, что вы нажимаете LSFT_T(KC_L)
, чтобы получить "l", а затем сразу после этого удерживаете ту же клавишу LSFT_T(KC_L)
, чтобы активировать Shift, чтобы набрать заглавную "C" в "camelCase".
Эта проблема возникает из-за того, что второе нажатие клавиши mod-tap происходит до того, как истекает QUICK_TAP_TERM
, инициированное первым нажатием клавиши mod-tap. Как видите, название параметра вводит в заблуждение, поскольку параметр на самом деле не касается быстрых нажатий, а касается двойных нажатий одной и той же клавиши.
Чтобы избежать этой проблемы, вам следует уменьшить QUICK_TAP_TERM
со значения по умолчанию TAPPING_TERM
до гораздо меньшего значения или даже до 0, чтобы полностью отключить функцию автоповтора. Это позволит вам активировать функцию удержания вместо этого при удержании клавиши с двойной функцией после ее нажатия. Больше никаких случайных повторений букв при быстром наборе текста!
Допустимое удержание (Permissive Hold)
Документация - https://docs.qmk.fm/#/tap_hold#permissive-hold
Второе в списке — "допустимое удержание". Это опция, которая добавляет еще один способ активации функции удержания для клавиш с двойной ролью.
Допустимое удержание активирует модификатор, когда другая клавиша нажата и отпущена, пока клавиша модификатора удерживается, независимо от срока нажатия. Это означает, что эта опция позволяет пользователю активировать сочетание клавиш с клавишей модификатора до окончания срока нажатия.
Рассмотрим следующий случай:
Клавиша | Статус |
---|---|
RCTL_T(N) | Нажата |
RGUI_T(O) | Нажата |
RGUI_T(O) | Отпущена |
RCTL_T(N) | Отпущена |
Всё это в 200 мс. Тем не менее, люди с высоким временем нажатия не единственные, кто может получить выгоду от этой опции. Быстрые печатники, привыкшие к быстрым нажатиям и прокруткам, могут включить эту опцию для более быстрых активаций модификаторов и, таким образом, обойти необходимость ждать окончания времени нажатия, чтобы модификаторы начали действовать. Это особенно полезно для Shift.
На английском это ситуация, когда вы нажимаете O, удерживая N. Это также можно назвать «вложенным нажатием». Если все это происходит до окончания термина нажатия, вывод, предполагая, что прерывания mod-tap игнорируются, будет «no». Сравните это со сценарием, когда разрешено разрешающее удержание, где вывод вместо этого будет Ctrl+O.
Как вы можете видеть, здесь предполагается, что если пользователь нажимает другую клавишу, удерживая одну или несколько клавиш mod-tap, он не выполняет набор текста и, таким образом, хочет вместо этого вызвать сочетание клавиш. Термин нажатия здесь не имеет значения.
Следовательно, эта опция позволяет использовать домашние ряды модификаторов с нажатым сроком, намного превышающим 200 мс. Хотя люди с высоким нажатым сроком — не единственные, кто может извлечь выгоду из этой опции. Те, кто быстро печатает и привык к быстрым нажатиям и перекатываниям, могут включить эту опцию для более быстрой активации модификаторов и, таким образом, обойти необходимость ожидания нажатого срока для вступления модификаторов в силу. Это особенно полезно для Shift.
В связи с тем, что разрешающее удержание... более разрешающее в том, что считается удержанием, оно упрощает запуск модификаторов, поэтому могут произойти непреднамеренные активации модификаторов, если вышеупомянутый случай — это то, что вы часто делаете при обычном наборе текста. В зависимости от вашего стиля печати разрешающее удержание может принести больше вреда, чем пользы.
Как и во многих других настройках удержания нажатия, существует глобальная настройка PERMISSIVE_HOLD
и опция для каждой клавиши, метко названная PERMISSIVE_HOLD_PER_KEY
.
Hold on Other Key Press
Основная логика «удержания при нажатии другой клавиши» довольно проста. Была ли нажата другая клавиша, пока пользователь удерживал клавишу mod-tap? Если это так, то это сочетание клавиш; примените модификатор к этой нажатой клавише. А что, если вместо этого не было нажато ни одной клавиши, пока пользователь удерживал клавишу mod-tap? Ну, если пользователь нажимает и отпускает клавишу сама по себе, не нажимая никаких других клавиш между ними, это должно означать, что пользователь хотел функцию нажатия mod-tap, поскольку нет смысла нажимать клавишу-модификатор отдельно.[^4] Достаточно просто, не так ли? Если вы хотите активировать функцию удержания, просто нажмите другую клавишу, удерживая клавишу mod-tap.
Вот в чем проблема с этим подходом, если использовать моды домашнего ряда. Нам нравится представлять набор текста как нажатие последовательности клавиш по отдельности, по порядку. Однако между нажатием и отпусканием каждой клавиши есть некоторое перекрытие. Особенно при наборе на высокой скорости. Например, при наборе слова "no" мы редко нажимаем и полностью отпускаем N перед нажатием O. Попробуйте! Если вы не охотник, вот как вы, скорее всего, наберете "no":
Клавиша | Статус |
---|---|
N | Нажата |
O | Нажата |
N | Отпущена |
O | Отпущена |
Теперь представьте, если бы N и O были бы оба mod-tap — это было бы так, если бы вы использовали home row mods на Colemak, как в анимации выше. С настройками HOLD_ON_OTHER_KEY_PRESS
это плохие новости. Действительно, набор текста включает в себя много таких перекатов, когда вы нажимаете следующую букву, прежде чем полностью отпустите предыдущую.
По этой причине HOLD_ON_OTHER_KEY_PRESS
настоятельно не рекомендуется для home row mods.
Retro Tapping
Помните, как я говорил, что нет особой пользы в нажатии и отпускании модификатора самого по себе? Мод-тапы (аб)используют это свойство, но, как оказалось, мод-тапы сами по себе обладают тем же свойством. Если вы удерживаете мод-тап дольше, чем время нажатия, а затем отпускаете его, не нажимая никаких других клавиш между ними, ваша клавиатура QMK отправит событие нажатия и отпускания модификатора на ваш компьютер; не слишком отличающееся от нажатия базовой клавиши-модификатора. Если это кажется вам расточительным, то позвольте мне познакомить вас с ретро-тапом.
Когда мод-тап удерживается долгое время и отпускается сам по себе, ретро-тап активирует функцию нажатия после отпускания модификатора мод-тапа.
Например, если вы нажмете и удержите LGUI_T(KC_A)
дольше, чем время нажатия, а затем отпустите его сами, то хост-компьютер, к которому подключена ваша клавиатура QMK, сначала увидит нажатие KC_LGUI
, когда вы удерживаете mod-tap дольше, чем время нажатия, а затем хост-компьютер получит уведомление о том, что KC_LGUI
отпускается, когда вы убираете палец с LGUI_T(KC_A)
на клавиатуре. Это поведение по умолчанию для mod-tap, удерживаемых и отпускаемых сами по себе. То, что делает retro tap, — это отправка KC_A
, как только KC_LGUI
отпускается/неактивен.
Таким образом, Retro Tap дает еще один способ вызвать функцию нажатия mod-taps. С этой опцией вы можете обойтись очень коротким сроком нажатия.
Однако этот конкретный пример подчеркивает потенциальную проблему с retro tap. Во многих популярных средах рабочего стола меню «Пуск» вызывается нажатием клавиши GUI. Пользователь такого типа среды рабочего стола, который хотел бы отправить «a» ретро-нажатием LGUI_T(KC_A)
, случайно откроет меню «Пуск» и введет «a» в его строке поиска.
Что, если вы используете другой способ вызвать меню «Пуск»? У вас все еще будет проблема с клавишей Alt, которая используется для навигации по меню графических приложений. Вы можете избежать случайных всплывающих окон меню при ретро-нажатии alt mod-taps, отключив эту функцию в настройках приложений. Например, в Firefox это можно сделать, зайдя в about:config
и установив ui.key.menuAccessKeyFocuses
на false
. Однако приложения редко предлагают возможность отключения поведения нажатия Alt.
Модификаторы Alt и GUI — не единственная проблема, подумайте также о мыши. Прошивка, работающая на вашей клавиатуре, не может определить, что вы нажали или прокрутили колесико мыши, удерживая клавишу mod-tap. Все, что она видит, это то, что вы удерживали mod-tap дольше, чем время нажатия, и отпустили ее, не нажав никаких других клавиш между ними. Как мы теперь знаем, это сигнал для прошивки активировать функцию нажатия рассматриваемого mod-tap, если включено ретро-нажатие. Ctrl+Левый щелчок, чтобы открыть ссылку в новой вкладке, или Shift+Колесо прокрутки, чтобы прокрутить вбок, таким образом, будут сопровождаться непреднамеренными буквами.
Чтобы противостоять этому, QMK позволяет вам определить DUMMY_MOD_NEUTRALIZER_KEYCODE
в config.h
, который будет отправлен между событиями регистрации и отмены регистрации удерживаемой клавиши mod-tap. Таким образом, программы на вашем компьютере больше не будут интерпретировать подавление mod, вызванное ретро-tapping, как одиночное нажатие клавиши-модификатора и, таким образом, не будут ложно запускать нежелательное действие.
Естественно, чтобы этот метод был эффективным, вы должны выбрать DUMMY_MOD_NEUTRALIZER_KEYCODE
, для которого не привязаны никакие сочетания клавиш. Рекомендуемые значения: KC_RIGHT_CTRL
или KC_F18
. Обратите внимание, что DUMMY_MOD_NEUTRALIZER_KEYCODE
должен быть базовым, неизмененным, HID-кодом клавиши, поэтому значения вроде KC_NO
, KC_TRANSPARENT
или KC_PIPE
также известные как S(KC_BACKSLASH)
не допускаются.
По умолчанию нейтрализуются только левый Alt и левый GUI. Если вы хотите изменить список применимых масок модификаторов, используйте следующее в config.h
:
#define MODS_TO_NEUTRALIZE { <mod_mask_1>, <mod_mask_2>, ... }
Примеры:
#define DUMMY_MOD_NEUTRALIZER_KEYCODE KC_RIGHT_CTRL
// Neutralize left alt and left GUI (Default value)
#define MODS_TO_NEUTRALIZE { MOD_BIT(KC_LEFT_ALT), MOD_BIT(KC_LEFT_GUI) }
// Neutralize left alt, left GUI, right GUI and left Control+Shift
#define MODS_TO_NEUTRALIZE { MOD_BIT(KC_LEFT_ALT), MOD_BIT(KC_LEFT_GUI), MOD_BIT(KC_RIGHT_GUI), MOD_BIT(KC_LEFT_CTRL)|MOD_BIT(KC_LEFT_SHIFT) }
Retro Shift
Retro Shift основывается на функциональности Retro Tap, чтобы объединить Auto Shift с mod-taps.
Retro Shift позволяет вам получить смещенное состояние mod-tap, отпустив клавишу mod-tap после окончания термина нажатия, аналогично Auto Shift, которая выдает смещенное состояние базовой клавиши, если она удерживалась дольше, чем AUTO_SHIFT_TIMEOUT
.
С Auto Shift и Retro Shift вы можете уверенно искоренить все клавиши Shift из вашей раскладки клавиатуры.[^7]
Если вы беспокоитесь о том, что недостатки, которые преследуют Retro Tap, присутствуют и в Retro Shift, не беспокойтесь. Как говорится в документации, «если RETRO_SHIFT
определено для значения, время удержания, превышающее это значение, не приведет к нажатию при отпускании. Это позволяет удерживать модификаторы для комбинирования с щелчками мыши без генерации нажатий при отпускании».
Вот и все о доступных настройках конфигурации удержания нажатия QMK. Подводя итог, можно сказать, что есть только одна важная настройка удержания нажатия: TAPPING_TERM
. Даже в этом случае, скорее всего, вам даже не придется ее настраивать, так как значение по умолчанию подойдет большинству пользователей.
Помимо этого, существует еще одна очень часто рекомендуемая настройка: QUICK_TAP_TERM
. Не позволяйте названию ввести вас в заблуждение, она касается не быстрых нажатий, а поведения клавиши, если вы дважды нажмете ее в течение определенного временного окна. Рекомендуется установить ее на 0 или другое очень низкое значение.
PERMISSIVE_HOLD
может быть полезна, если у вас очень высокий срок нажатия. Если у вас низкий срок нажатия, PERMISSIVE_HOLD
обычно приводит к многочисленным пропускам, если только вы не очень последовательны в своем стиле печати, поэтому ее не рекомендуется использовать.
Хотя это ничто по сравнению с количеством пропусков, которые вы получите с HOLD_ON_OTHER_KEY_PRESS
. Модификации домашнего ряда практически непригодны для использования с этой опцией.
Что касается RETRO_TAPPING
, то на первый взгляд он может показаться привлекательным, но у него есть множество проблем, которые делают его непригодным для модификаций домашнего ряда.
Начало работы с home row mods на QMK
Вооружившись всеми этими знаниями, мы теперь можем добавить моды домашней строки в нашу раскладку и прошить ее на нашу плату.
Давайте начнем с настроек конфигурации удержания нажатия. Скопируйте и вставьте эти строки в ваш файл config.h
(создайте файл в вашей личной папке раскладки клавиш, если он еще не существует):
// Configure the global tapping term (default: 200ms)
#define TAPPING_TERM 200
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
#define QUICK_TAP_TERM 0
После этого откройте keymap.c
и преобразуйте все клавиши домашнего ряда в клавиши mod-tap. У вас есть несколько вариантов сделать это. В любом случае, лучше всего использовать псевдонимы, поскольку соглашение заключается в том, чтобы все названия кодов клавиш были строго длиной менее 8 символов, чтобы сохранить аккуратную, выровненную и читаемую раскладку в файле keymap.c
. Это невозможно, если вы используете что-то вроде MT(mod, kc)
или LMOD_T(kc)
. Например, потенциальные псевдонимы для US QWERTY с порядком GASC/◆⎇⇧⎈ могут быть следующими:
// Left-hand home row mods
#define HOME_A LGUI_T(KC_A)
#define HOME_S LALT_T(KC_S)
#define HOME_D LSFT_T(KC_D)
#define HOME_F LCTL_T(KC_F)
// Right-hand home row mods
#define HOME_J RCTL_T(KC_J)
#define HOME_K RSFT_T(KC_K)
#define HOME_L LALT_T(KC_L)
#define HOME_SCLN RGUI_T(KC_SCLN)
Если вам кажется, что HOME_letter слишком расплывчато, ничто не мешает вам сделать что-то вроде этого:
// Left-hand home row mods
#define GUI_A LGUI_T(KC_A)
#define ALT_S LALT_T(KC_S)
#define SFT_D LSFT_T(KC_D)
#define CTL_F LCTL_T(KC_F)
// Right-hand home row mods
#define CTL_J RCTL_T(KC_J)
#define SFT_K RSFT_T(KC_K)
#define ALT_L LALT_T(KC_L)
#define GUI_SCLN RGUI_T(KC_SCLN)
Примечание: не переопределяйте SFT_T
, так как у вас есть Shift/T mod-tap. SFT_T
уже используется в основном коде QMK как псевдоним для LSFT_T(kc)
, и его переопределение в вашей раскладке вызовет ошибки компиляции. Вместо этого рекомендуется использовать #define SHFT_T LSFT_T(KC_T)
.
После этого нужно просто заменить все основные KC_letter
, расположенные в домашней строке в LAYOUT
вашего keymap.c
, на псевдонимы mod-taps, которые вы определили.
Tips & Tricks {#tips-and-tricks}
Quick swift taps
Самый важный совет, который я могу дать, — привыкайте печатать быстрыми, стремительными нажатиями. Цель состоит в том, чтобы сократить время между нажатием и отпусканием до минимума. Не сосредотачивайтесь на нажатии клавиш, а на нажатии клавиш. Нажатие и отпускание должны ощущаться как одно единое действие, так же, как вы нажимаете WinKey, когда хотите открыть меню «Пуск» в Windows.
Для некоторых людей переход к модам домашней строки немного раздражает, потому что они привыкли удерживать клавишу немного меньше, чем задержка повтора клавиши, которая по умолчанию установлена на 500–1000 мс в большинстве операционных систем.
Можно провести параллели между задержкой повтора клавиши и термином нажатия. В обоих случаях отпускание клавиши до истечения задержки приведет к появлению одной единственной буквы. В этом случае возникает соблазн сказать, что человек, привыкший к задержке повтора клавиши в 500 мс, должен увеличить термин нажатия по умолчанию с 200 мс до 500 мс. Это можно рассматривать как обмен автоматического повтора нажатия клавиши на активацию модификатора. Это, безусловно, поможет избежать случайных модификаторов. Если пользователь никогда случайно не автоматически повторяет клавиши, то он случайно не активирует модификатор. В теории все это звучит хорошо и здорово, но на практике вы поймете, что удерживать клавишу ≥500 мс на самом деле довольно долго.
Я хочу сказать, что чем быстрее вы нажимаете, тем больше вы можете позволить себе сократить время нажатия, что в результате позволяет вам активировать сочетания клавиш гораздо быстрее.
Прежде чем вы поймете неправильно, я хочу прояснить, что я не говорю вам увеличивать скорость WPM. Под "быстрыми" нажатиями я подразумеваю избегание удержания клавиш нажатыми без необходимости долго. Не задерживайте пальцы на клавишах. Речь идет не о сокращении времени, необходимого для ввода следующего символа. Вы можете делать перерыв в 10 секунд перед вводом каждого символа и достичь значительно более низкого показателя WPM, но вы все равно можете быстро нажимать на отдельную клавишу.
Хотя не исключено, что обучение быстрому нажатию может привести к более быстрому показателю WPM в долгосрочной перспективе.
Нахождение оптимальной точки
Прежде чем искать советы по поиску наилучшего значения для термина нажатия, я настоятельно рекомендую вам сначала отключить «Hold on Other Key Press». Слишком много людей совершают ошибку, бесконечно настраивая термин нажатия в надежде, что в конечном итоге они найдут золотое число, которое позволит им использовать моды домашнего ряда без случайностей. Вы можете увеличивать или уменьшать термин нажатия сколько угодно, но это не поможет с прокручивающимися буквами, если ваши мод-нажатия не настроены на игнорирование прерываний.
Если они настроены, но вы все равно иногда получаете случайные альфа или модификаторы, вот что вы можете попробовать.
Прежде всего, когда начинаете с модов домашнего ряда, лучшей базовой линией будет термин нажатия, который слишком высок, чем тот, который слишком низок. Поэтому, если у вас много случайных активаций мода, увеличьте термин нажатия, чтобы попасть в зону, где у вас скорее будут случайные альфа.
Когда вы там, цель состоит в том, чтобы постепенно уменьшать срок нажатия, чтобы приблизиться к оптимальной настройке.
Метод, который вы можете использовать, чтобы оценить, где вы находитесь, — просто попытаться набрать текстовый отрывок полностью строчными буквами в текстовой области, найденной в конце этого совета. Он будет предупреждать вас каждый раз, когда вы активируете модификатор. Если вы обнаружите, что у вас появляются заглавные или пропущенные буквы по всей доске, постарайтесь быть более внимательными к тому, как вы нажимаете клавиши (см. быстрые быстрые нажатия). Если адаптация вашего стиля печати не помогает, то увеличьте срок нажатия. Если вы считаете, что конкретная клавиша mod-tap является особенно проблемной, рассмотрите возможность включения срока нажатия на клавишу и увеличьте срок нажатия для этой клавиши.
Для настроек на клавишу рекомендуется определить их относительно глобального срока нажатия. А именно, предпочитайте return TAPPING_TERM ± offset
вместо return SOME_ABSOLUTE_VALUE
. Причина в том, что в случае специальных терминов per key важно не столько абсолютное значение, сколько его отношение к более распространенной глобальной настройке. По мере того, как вы будете чувствовать себя более комфортно с модификаторами домашней строки, вы можете обнаружить, что можете еще больше уменьшить термин нажатия, и если вы это сделаете, вам захочется, чтобы настройки per key двигались вместе с риском сделать их слишком длинными (или короткими).
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LALT_T(KC_S):
return 130; // Not recommended
case SFT_T(KC_F):
return TAPPING_TERM + 50; // Recommended
default:
return TAPPING_TERM;
}
}
При этом вам не понадобится много времени, чтобы начать раздражаться от необходимости редактировать config.h
, перекомпилировать прошивку и прошивать ее на плату в любое время, когда вы захотите подправить термин отвода, даже немного, во время этого упражнения. Именно по этой причине фантастический человек, известный под псевдонимом "precondition", создал три новых квантовых ключа, которые позволяют вам подстраивать термин отвода на лету.
Key | Description |
---|---|
DT_PRNT | "Dynamic Tapping Term Print": Types the current tapping term, in milliseconds |
DT_UP | "Dynamic Tapping Term Up": Increases the current tapping term by 5ms |
DT_DOWN | "Dynamic Tapping Term Down": Decreases the current tapping term by 5ms |
Чтобы использовать их, включите функцию в rules.mk
с DYNAMIC_TAPPING_TERM_ENABLE = yes
.
Как только вы сможете легко вводить длинные строки строчных букв, следующим шагом будет практика на тексте, содержащем заглавные буквы.
Если вы получаете случайные лишние символы при попытке ввести заглавные буквы, уменьшите срок нажатия (или рассмотрите возможность использования permissive hold).
Промойте и повторяйте, пока не будете удовлетворены.
Используйте левые и правые модификаторы, но остерегайтесь AltGr!
Давайте сначала поговорим о RALT
(правый Alt, AltGr).
Причина, по которой вам нужно следить за RALT
, заключается в том, что, хотя большинство правых версий модификаторов действуют точно так же, как их левые аналоги, это не обязательно относится к ⎇ Alt. Везде, кроме США,[^8] правый Alt становится AltGr, который используется как кратковременное переключение слоев для доступа к дополнительным символам. Помните об этом при составлении правых модификаторов домашней строки, иначе вас может ждать сюрприз!
Если этот странный случай вас беспокоит, вы можете либо использовать американскую раскладку(и), которая не делает различий между левым и правым Alt, либо использовать левую версию модификаторов для всех модификаторов домашней строки. Разделение левых и правых модификаторов, как это сделано в примере, показанном в начале "Использование модификаторов домашней строки с QMK" и в выводе генераторов кода модификаторов домашней строки, не является строго необходимым для функционирующей настройки, но это дает некоторые преимущества.
Во-первых, это позволяет плавно переходить от одного модификатора к его аналогу. Что я имею в виду? Допустим, вы хотите создать, используя настройку модификаторов домашней строки, показанную ниже, заглавную "Q", которая, как мы предположим, находится на левой стороне вашей клавиатуры. Чтобы сделать это, представьте, что вы сначала удерживаете MT(MOD_LSFT, KC_F)
, чтобы активировать Shift, но затем вы понимаете, что это неправильный Shift (правильная техника слепой печати рекомендует использовать противоположную руку при сдвиге букв).
Чтобы исправить это, нажмите и удерживайте MT(MOD_RSFT, KC_J)
, не убирая палец с MT(MOD_LSFT, KC_F)
, а затем, удерживая MT(MOD_RSFT, KC_J)
нажатым, отпустите MT(MOD_LSFT, KC_F)
.
На этом этапе вы теперь удерживаете Shift только правой рукой и можете нажать Q, чтобы получить "Q".
Если вместо этого ваша клавиша J была MT(MOD_LSFT, KC_J)
, вы бы не смогли этого сделать. Если вы удерживаете оба Shift mod-tap, а затем отпускаете тот, что на левой половине клавиатуры, удержание Shift mod-tap на правой стороне теряет все свои эффекты, когда вы поднимаете левый средний палец. Это ничего не делает. Итак, когда вы нажимаете Q, удерживая правую клавишу Shift mod-tap, вы получите строчную букву «q».
Единственный способ правильно перепрыгивать модификаторы, когда они оба запрограммированы на отправку одного и того же модификатора, — полностью отпустить неправильный mod-tap, который вы нажали первым, прежде чем нажать и удерживать правильный, на противоположной руке.
Однако есть одна загвоздка. Если вы сразу поймете, что это неправильная рука для использования модификатора, вы инстинктивно полностью отпустите неправильный mod-tap, чтобы перепрыгнуть на правильный. Если вы отпустите неправильный mod до термина нажатия, что весьма вероятно, если только вы не будете медленно ловить себя на использовании неправильной руки для модификатора, это будет расценено прошивкой как нажатие и, таким образом, отправит код клавиши нажатия, «f» в нашем случае. Таким образом, делая это, вы подвергаете себя риску случайных альфа при перепрыгивании модификаторов.
Подведем итог, проблема с использованием одной и той же версии Shift для обеих рук:
- Удерживайте левую клавишу Shift home row
- Удерживайте правую клавишу Shift home row
- Отпустите левую клавишу Shift home row
- Удерживая правую клавишу Shift home row, нажмите случайные буквы левой рукой
- Буквы не заглавные
Во-вторых, различие между модификаторами home row левой руки и модификаторами home row правой руки может быть полезным, если вы хотите обнаружить роллы при наборе текста. Для получения дополнительной информации см. трюк "rolled modifiers cancellation".
Putting home row mods on (almost) all layers
Если у вас есть только моды домашней строки на базовом слое и вы хотите применить модификатор к клавише, которая находится в слое, вам нужно будет следовать строгому времени и последовательности нажатий клавиш, чтобы это сработало. Во-первых, вам нужно будет удерживать клавишу домашней строки нажатой дольше, чем ваш срок нажатия, затем активировать слой, к которому вы хотите получить доступ, не отпуская модификатор домашней строки, и, наконец, нажать клавишу на слое.
Для большей свободы вы можете рассмотреть возможность превращения домашней строки на других ваших слоях в мод-нажатия. А еще лучше, посмотрите, можете ли вы позволить себе использовать обычные коды клавиш-модификаторов на домашней строке вместо этого. Например, у многих людей навигационный слой мгновенно активируется с помощью клавиши большого пальца с чистыми клавишами-модификаторами на домашней строке левой руки и клавишами со стрелками на правой руке.
При переносе модов домашней строки через ваши слои потратьте минуту, чтобы подумать, действительно ли вам нужны моды домашней строки на определенном слое. Хотя это может быть полезно на слое навигации или акцентов, это, вероятно, не очень полезно для включения в слой символов, поскольку вы вряд ли почувствуете необходимость использовать Ctrl+! или Alt+".
Отключение home row mods во время игр
Модификации домашнего ряда и видеоигры не очень хорошо уживаются. Легко понять, почему. Если A, S, D действуют как модификаторы при удержании, вы не рискуете далеко продвинуться в видеоигре, если используете WASD для перемещения. Также были сообщения о том, что функция нажатия мод-нажатия не работает надежно с некоторыми видеоиграми.
Распространенное решение этой проблемы — создать игровой слой, в котором вы избавляетесь от модификаций домашнего ряда.
Shift thumb keys
Не путать с методом ввода японского языка с помощью большого пальца.
Модификатор Shift не похож на все остальные. Если он не сопряжен с другим модификатором, он больше похож на переключатель слоев, чем на клавишу, которую мы можем использовать для выполнения сочетаний клавиш. В двухпалатных шрифтах он используется для заглавных букв, и даже однопалатные шрифты, которые не различают регистр, такие как арабский и корейский, также используют Shift для доступа к дополнительным графемам.
Будучи такой важной и часто используемой клавишей переключения «слоя», модификатор Shift является отличным кандидатом на клавишу большого пальца.
Использование клавиши большого пальца обходит некоторые ограничения Shift домашнего ряда. Если у вас есть эргономичная клавиатура с хорошим кластером большого пальца, у вас есть возможность разместить выделенную клавишу Shift в удобном положении, тем самым освободив себя от присущих временных ограничений мод-тапов.
Если вы выделяете клавишу большого пальца только для отправки Shift и ничего больше, вы можете даже полностью отказаться от аккордов, используя клавишу Shift [One-Shot]. В качестве дополнительного преимущества, One-Shot Shift также позволяет вам искоренить случайную избыточную заглавную букву, которая происходит, когда вы удерживаете Shift немного дольше и отправляете два заглавных символа вместо одного при написании слов заглавными буквами, например, в предложении: "THe Grand DUchess Anna PEtrovna oF russia".
Однако важной проблемой с обычной или одноразовой клавишей Shift для большого пальца является то, что она требует выделения клавиши только для этого использования, что не идеально, когда вы стремитесь к низкому ходу пальца и/или не любите терять исходное положение большого пальца. Для тех, кого это беспокоит, клавиша Shift mod-tap для большого пальца все равно может оказаться полезной.
Mod-tap для отдыхающих клавиш(и) большого пальца home дает вам то же преимущество, что и mod-tap для клавиш home row: устранение движения пальца/руки, необходимого для активации модификатора.
В любом случае вы должны быть готовы обменять клавишу слоя большого пальца на клавишу Shift для большого пальца; для некоторых это будет решающим фактором.
Что касается вопроса о том, сохранять ли Shift mod-tap для домашнего ряда, это решать вам. Некоторые могут утверждать, что избыточные клавиши Shift основного ряда бесполезны, в то время как другие используют клавиши Shift исключительно для заглавных букв и используют клавиши Shift основного ряда для всего остального (символы Shift, команды Vim Shift, сочетания клавиш, комбинации аккордов с другими модификаторами, ...).
Use Caps Lock
Caps Lock — предмет многих шуток, и многие считают его бесполезным или даже раздражающим. Однако для пользователей модов Home Row, у которых нет Shift на мизинцах или больших пальцах, это хорошее решение для ввода строк заглавных букв. Это позволяет избежать неловкой смены рук, которая происходит при удерживании Shift активным, используя противоположную руку, чтобы освободить другую руку от удержания Shift, чтобы позволить ей набрать определенную клавишу.
Тем не менее, он все еще не заслуживает того, чтобы быть размещенным на внешней позиции Home Row.
Если вы хотите пойти на шаг дальше, вы можете проверить Caps Word, которая работает как клавиша Caps Lock, которая автоматически отключается, как только вы закончите вводить слово.
Если вы когда-либо использовали Caps Lock для записи MACRO_IDENTIFIER в режиме вставки и забыли выключить его перед возвращением в обычный режим в Vim и вызвали последующий хаос, прежде чем осознали свою ошибку, то это идеальное решение.
Mechanical switch type
Легкие тактильные переключатели или переключатели с щелчком помогают совершать короткие, легкие, резкие нажатия, а обратная связь маскирует задержку нажатия при отпускании.
Using non-basic keycodes in mod-taps
В отличие от KMonad, QMK не допускает небазовые коды клавиш, такие как смещенные коды клавиш (например, KC_DLR
) и пользовательские коды клавиш в mod-tap. Если вы попытаетесь передать небазовый код клавиши в функцию MT()
, произойдут неожиданные вещи, поскольку она попытается преобразовать специальный код клавиши, который вы передали, в тип данных uint8_t
.
В случае сочетания клавиш, такого как KC_DLR
(которое является просто псевдонимом для S(KC_4)
) или ALGR(KC_COMMA)
, или сочетания клавиш, включающего более одного модификатора, такого как S(A(KC_2))
, все примененные модификаторы к нажатой клавише будут удалены, и вы получите только неизмененный базовый код клавиши при нажатии mod-tap. Хотя функция удержания все равно будет работать точно так, как и ожидалось. Таким образом, нажатие MT(MOD_LALT, KC_DLR)
вернет "4" на клавиатуре US QWERTY, а нажатие RCTL_T(S(A(KC_2)))
вернет "2" вместо "€" на MacOS US.
Что касается пользовательских кодов клавиш/макросов, то вывод, который вы получите, будет зависеть от положения пользовательского кода клавиши в вашем перечислении custom_keycodes
и количества включенных квантовых кодов клавиш. Значение SAFE_RANGE
определяется перечислением quantum_keycodes
, найденным в qmk_firmware/quantum/quantum_keycodes.h
.
Самый первый пользовательский код клавиши/макрос в перечислении всегда назначается SAFE_RANGE
. Попытка использовать его в mod-tap может привести к KC_ENTER
при нажатии. Следующий пользовательский код клавиши в вашем перечислении (которому будет присвоено значение SAFE_RANGE+1
), вопреки всем шансам, не произведет ваш ожидаемый макрос при нажатии в контексте mod-tap, но вместо этого может выдать код клавиши KC_ESCAPE
. И он идет вниз по [списку кодов клавиш], обычно начиная с блока пунктуации. В этой ситуации, приведенной в качестве примера, SAFE_RANGE+5
произведет KC_EQUAL
и т. д. при приведении к uint8_t
.
Естественно, это может немного разочаровать. Особенно, если вы хотите поместить home row mods на что-то вроде слоя символов.
Не бойтесь! Поскольку существует трюк, который не заставит вас отказаться от идеи использования небазовых кодов клавиш в mod-tap или перекодировать всю логику mod-tap с нуля.
Идея трюка заключается в том, чтобы создать клавишу mod-tap как обычно и позволить QMK естественным образом справиться с функцией удержания mod-tap, а также с выбором между нажатием и удержанием, но переопределить обычное поведение нажатия с помощью нашего пользовательского кода в process_record_user
.
При создании клавиши mod-tap с помощью встроенной функции QMK MT()
вам нужно выбрать фиктивный код клавиши для функции нажатия, который вы точно никогда не будете использовать. Это может быть любая из функциональных клавиш в диапазоне 13–24 или код клавиши, который не поддерживается всеми основными операционными системами, например KC_LANG6
или KC_CRSEL
, или фиктивный пользовательский код клавиши, созданный исключительно для этой цели. Независимо от того, что вы выберете, ОС никогда не получит фиктивный код клавиши с вашей клавиатуры.
Допустим, мы хотим создать клавишу mod-tap, которая действует как модификатор Command/GUI при удержании и отправляет "#" (Shift+3) при нажатии. Любой из следующих вариантов является хорошим кандидатом:
#define GUI_HASH MT(MOD_LGUI, KC_F23)
#define CMD_HASH LGUI_T(KC_LANG6)
enum custom_keycodes {
MT_POUND = SAFE_RANGE
};
#define HOME_HASH CMD_T(MT_POUND)
Примечание: MT(MOD_LGUI, kc)
, LGUI_T(kc)
, and CMD_T(kc)
являются эквивалентными
Чтобы было легче читать, я настоятельно рекомендую использовать псевдонимы. Как вы можете знать, с первого взгляда, что MT(MOD_LGUI, KC_F23)
на самом деле выведет "#" при нажатии и не отправит F23?
Может возникнуть соблазн использовать LGUI_T(KC_HASH)
, и это все равно будет работать, но вам нужно понимать, что LGUI_T(KC_HASH)
то же самое, что LGUI_T(S(KC_3))
, который, как объяснялось ранее, преобразуется в LGUI_T(KC_3)
. Это означает, что если вы переопределите поведение нажатия по умолчанию для LGUI_T(KC_HASH)
, вы также переопределите поведение LGUI_T(KC_3)
. По этой причине не рекомендуется так делать.
Следующим шагом будет написание случая для нашего недавно созданного специального mod-tap в операторе switch функции process_record_user
.
case HOME_HASH:
if (record->event.pressed && record->tap.count > 0) {
// send advanced keycode, etc.
// the 16 bit version of the `tap_code` function is used here
// because KC_HASH is a non-basic keycode.
tap_code16(KC_HASH);
// do not continue with default tap action
// if the MT was pressed or released, but not held
return false;
}
break;
Наконец, все, что осталось сделать, это поместить HOME_HASH
в нужное место в макете и прошить новую раскладку клавиатуры на плату.
Примечание: с момента написания руководства идеи этого раздела нашли свое место в официальной документации QMK: "Intercepting Mod-Taps".
Combined mod-taps on the lower row
Этот совет особенно полезен, если вы используете KMonad на клавиатуре без N-key rollover, которая прибегает к блокировке, чтобы предотвратить фантомные нажатия — QMK-совместимые клавиатуры не страдают от проблем с фантомными нажатиями, поскольку они в основном механические клавиатуры, использующие диоды. Если предыдущее предложение прозвучало для вас как техническая тарабарщина, прочитайте эту страницу вики Deskthority, чтобы узнать больше о том, что означают все эти термины.
Сосредоточив все модификаторы в середине альфа-блока, вы с гораздо большей вероятностью столкнетесь с пропущенными нажатиями клавиш в результате фантомной блокировки. А именно, вы можете заметить, что вы не можете использовать Ctrl+Shift+T с помощью модификаторов домашней строки. В таком случае выделенный Ctrl+Shift mod-tap может оказаться очень полезным. Учитывая тот факт, что эта проблема чаще всего возникает на клавиатуре с разнесенными рядами, вы можете интуитивно разместить объединенные mod-tap между модами домашнего ряда в нижнем ряду.
Как показано здесь на этой 60% ANSI-клавиатуре с порядком модов домашнего ряда GACS/◆⎇⎈⇧.
Rolled modifiers cancellation
Давайте рассмотрим ситуацию, когда кто-то использует домашние моды на раскладке клавиатуры, которая отдает предпочтение роллам. Самая известная раскладка клавиатуры, ориентированная на роллы, — это Colemak, поэтому мы будем использовать следующую настройку домашних модов в качестве примера.
Давайте представим, что этот пользователь Colemak стремится к самому низкому значению нажатий на своих Shift mod-taps, чтобы быстрее и отзывчивее вводить заглавные буквы. Он так низко опустился на значении нажатий на своих Shift mod-taps, что при прокрутке S и T получается "T" вместо ожидаемого "st". Та же история с прокрутками E и N. Если в остальном он доволен значением нажатий на своих Shift mod-taps, что он может сделать, чтобы помочь себе быстро и точно набрать "The first event", не заканчивая "The firT evNt" вместо этого?
Возникает соблазн сказать, что ему следует использовать TAPPING_TERM_PER_KEY
и увеличить срок нажатия его Shift mod-taps, чтобы уменьшить случайные активации mod, но, помимо биграмм "st" и "en", этот пользователь удовлетворен скоростью активации Shift для любой другой комбинации букв. Увеличение срока нажатия, вероятно, поможет с прокаткой "st" и "en", но это также немного повлияет на каждую другую биграмму, включающую "s" или "e".
Этот гипотетический пользователь может либо приспособиться к этому сам, либо, если он действительно этого хочет, он может адаптировать прошивку под себя.
Для этого он может использовать этот изящный фрагмент кода в process_record_user
, который использует разницу между левым Shift и правым Shift:
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RCTL_T(KC_N):
/*
This piece of code nullifies the effect of Right Shift when tapping
the RCTL_T(KC_N) key.
This helps rolling over RSFT_T(KC_E) and RCTL_T(KC_N)
to obtain the intended "en" instead of "N".
Consequently, capital N can only be obtained by tapping RCTL_T(KC_N)
and holding LSFT_T(KC_S) (which is the left Shift mod tap).
*/
/*
Detect the tap.
We're only interested in overriding the tap behavior
in a certain cicumstance. The hold behavior can stay the same.
*/
if (record->event.pressed && record->tap.count > 0) {
// Detect right Shift
if (get_mods() & MOD_BIT(KC_RSHIFT)) {
// temporarily disable right Shift
// so that we can send KC_E and KC_N
// without Shift on.
unregister_mods(MOD_BIT(KC_RSHIFT));
tap_code(KC_E);
tap_code(KC_N);
// restore the mod state
add_mods(MOD_BIT(KC_RSHIFT));
// to prevent QMK from processing RCTL_T(KC_N) as usual in our special case
return false;
}
}
/*else process RCTL_T(KC_N) as usual.*/
return true;
case LCTL_T(KC_T):
/*
This piece of code nullifies the effect of Left Shift when
tapping the LCTL_T(KC_T) key.
This helps rolling over LSFT_T(KC_S) and LCTL_T(KC_T)
to obtain the intended "st" instead of "T".
Consequently, capital T can only be obtained by tapping LCTL_T(KC_T)
and holding RSFT_T(KC_E) (which is the right Shift mod tap).
*/
if (record->event.pressed && record->tap.count > 0) {
if (get_mods() & MOD_BIT(KC_LSHIFT)) {
unregister_mods(MOD_BIT(KC_LSHIFT));
tap_code(KC_S);
tap_code(KC_T);
add_mods(MOD_BIT(KC_LSHIFT));
return false;
}
}
/*else process LCTL_T(KC_T) as usual.*/
return true;
}
return true;
};
Если у вас другая настройка, потому что вы не используете Colemak и не используете порядок модов домашней строки GASC/◆⎇⇧⎈, но хотите использовать этот трюк, вот параметры, которые вам нужно изменить:
Пусть LSFT_T(l_s_letter)
будет равен вашей левой домашней строке Shift mod-tap, LMOD_T(l_letter)
будет равен вашей левой домашней строке non-Shift mod-tap (это может быть любой мод, который будет зависеть от того, что вы разместили рядом с вашей домашней строкой Shift mod-tap), и наоборот для правой руки; RSFT_T(r_s_letter)
, RMOD_T(r_letter)
.
case RMOD_T(r_letter):
if (record->event.pressed && record->tap.count > 0) {
if (get_mods() & MOD_BIT(KC_RSHIFT)) {
unregister_mods(MOD_BIT(KC_RSHIFT));
tap_code(r_s_letter);
tap_code(r_letter);
add_mods(MOD_BIT(KC_RSHIFT));
return false;
}
}
return true;
case LMOD_T(l_letter):
if (record->event.pressed && record->tap.count > 0) {
if (get_mods() & MOD_BIT(KC_LSHIFT)) {
unregister_mods(MOD_BIT(KC_LSHIFT));
tap_code(l_s_letter);
tap_code(l_letter);
add_mods(MOD_BIT(KC_LSHIFT));
return false;
}
}
return true;
{% endhighlight %}
Этот трюк заключается в отмене эффекта нажатия Shift mod-tap в домашней строке на соседнем нажатии mod-tap в домашней строке, но ничто не мешает вам отменить эффект нажатия не-Shift mod-tap в домашней строке на другой клавише, которая вообще не является mod-tap. Его можно обобщить.
Возвращаясь к примеру Colemak, представьте, что у вас есть повторяющиеся случайные активации mod при выполнении RGUI_T(KC_O)
+KC_U
при прокрутке ключей для биграммы "ou". Вы можете добавить случай в свой process_record_user
для KC_U
, где вы проверяете состояние mod для RGUI
и переопределяете поведение по умолчанию, отправляя "ou" вместо GUI+U.
Тем не менее, я хочу уточнить, что этот трюк определенно не нужен для приятного опыта модов домашней строки. Я упомянул об этом здесь только для того, чтобы привести еще один пример, почему вам может понадобиться различать правые и левые моды домашней строки. Вам не нужно заходить так далеко.
Однако, если вы хотите пойти еще дальше, [Manna Harbour], создатель макета Miryoku, работает над новой опцией конфигурации под названием «Двусторонние комбинации». Эта опция заставляет вас комбинировать моды на одной руке с нажатиями на противоположной руке. Она может уменьшить случайные моды. Когда она включена, последнее удержание mod-tap будет преобразовано в нажатие mod-tap, если на той же руке нажата другая клавиша.
Более подробную информацию об этой новой развивающейся опции можно найти по следующим ссылкам:
Для еще одного применения этого трюка можно также обратиться к Стивену Хему "rolling qmk modifiers".
Using mod-taps in combos
При определении комбинаций, включающих клавиши с двойной ролью, обязательно используйте полное имя клавиши с двойной ролью, а не только ее код нажатия. Это распространенная ошибка.
const uint16_t PROGMEM A_S_COMBO[] = {KC_A, KC_S, COMBO_END}; // ❎ Incorrect
const uint16_t PROGMEM A_S_COMBO[] = {LGUI_T(KC_A), LALT_T(KC_S), COMBO_END}; // ✅ Correct
Alternatives
Что делать, если ничего из вышеперечисленного вам не подходит? Вы понимаете, что означают все настройки конфигурации «тап-удержание», вы поигрались с ними, вы прочитали все советы и рекомендации, но вы все еще не можете привыкнуть к модам «домашний ряд», несмотря на то, что вам нравится сама концепция... Что еще можно попробовать?
Alternative home row mods layout
Классическая схема расположения модов «домашний ряд» размещает все мод-нажатия на дополнительных клавишах клавиатур для слепого набора — «домашних клавишах», как показано ниже фиолетовым цветом.
Это оптимальное расположение для слепых печатающих, потому что они научились по умолчанию класть туда пальцы. Таким образом, перемещение пальца для нажатия любого из четырех модификаторов равно нулю.
Однако, если мы готовы расширить определение «домашнего ряда», включив в него не только клавиши для отдыха, но и весь средний ряд клавиатуры, мы можем начать представлять себе альтернативные макеты модов домашнего ряда.
Во-первых, можно сместить все мод-тапы наружу.
Это смутно напоминает клавишу Ctrl в стиле HHKB, где клавиша, которая обычно была бы Caps Lock на стандартных клавиатурах, вместо этого отображается на Ctrl.
Как бы то ни было, в этой раскладке очевидны два недостатка:
- Мизинцы выполняют двойную функцию, когда дело доходит до активации модификаторов: A,; и Caps Lock,'
- В случае, если вам нужно объединить два внешних модификатора домашнего ряда, вся рука должна сместиться на 1u наружу от домашнего положения, чтобы позволить безымянному пальцу удерживать A или ;
Поэтому, возможно, лучше пойти другим путем и перевести модификаторы домашнего ряда внутрь..
Хотя второй недостаток по сути все еще присутствует, первый недостаток смягчается полной разгрузкой слабых мизинцев и передачей сильных указательных пальцев для выполнения дополнительных мод-тапов.
Теперь вы можете подумать, что разгрузка мизинцев — это хорошо, но что делать, если вам не нравится боковое движение?
Другие ненавистники мизинца, стоящие за «Сбалансированной легкой раскладкой клавиатуры» (BEAKL) представили концепцию «домашнего блока», в которой индексные клавиши нижнего ряда (V и M на иллюстрации) имеют гораздо более благоприятные показатели в рейтингах усилия нажатия, чем внутренние индексные клавиши домашнего/среднего ряда (G и H), поскольку указательный палец короткий, и его удобнее сгибать, чем разгибать. Та же концепция используется в Workman и Colemak-DH.
Это означает, что мы можем использовать домашние блоковые моды.
Мизинец остается неиспользованным для модификаторов в этой модификации, и нажатие четвертого mod-tap указательными пальцами более удобно, но выравнивание модификаторов по вертикали может быть проблематичным.
Если у вас нет клавиатуры, удобной для стенографии[^9], на которой легко делать вертикальные комбинации, вам будет трудно комбинировать указательные модификаторы одной рукой.
Наконец, для разнообразия, давайте поговорим об альтернативной раскладке модификаторов домашнего ряда, которая не страдает от проблемы сочетания mod-tap.
Основная причина расположения mod-tap в классической раскладке модификаторов домашнего ряда заключается в том, что эти клавиши — те, на которых вы должны отдыхать в состоянии ожидания. Тем не менее, если вы используете QWERTY или любую из ее национальных производных на клавиатуре, которая не имеет столбчатого шахматного расположения, вы можете обнаружить, что на самом деле отдыхаете на этих клавишах:
Безымянный и средний пальцы длиннее коротких мизинцев и указательных пальцев, так почему же вы должны заставлять их находиться на одной горизонтальной линии? Кроме того, «e», «i» и «o» встречаются чаще, чем «s», «d», «k» или «l».
Хотя на этом этапе мы бахромим на модах верхнего ряда...
Upper/Lower row mods
Простая модификация, которую вы можете сделать, — это перевести модули домашней строки вверх или вниз. Они остаются очень легкодоступными, и в зависимости от используемой альфа-раскладки случайные осечки случаются реже, поскольку ряд занимают более редкие n-граммы, что сокращает количество наборных роликов, включающих клавиши mod-tap.
Например, перевод модулей домашней строки вниз — это хороший способ предотвратить случайные осечки, вызванные набором соседних клавиш. Вы вряд ли встретите слово, содержащее «xcv», «qkj» или «,.vbh». Вообще говоря, нижний ряд клавиш заполнен редкими буквами и символами. Это наблюдение применимо не только к альтернативным оптимизированным раскладкам, таким как Dvorak или Turkish F, но и к QWERTY!
Естественно, этот трюк полезен для уменьшения количества осечек, только если вы переведете mod-tap в ряд, содержащий менее частые клавиши, чем домашний ряд. Таким образом, перевод mod-tap на QWERTY в этом отношении был бы контрпродуктивным.
Home row mod-combos
Слишком легко удерживать одну клавишу немного дольше, чем хотелось бы, и активировать потенциально разрушительное действие, которое потом придется исправлять. А что, если нам нужно нажать больше одной клавиши? Модификаторы будут активироваться только в том случае, если одновременно удерживается определенная комбинация соседних (или не) клавиш. Идея заключается в том, что сложнее случайно удерживать две или более клавиш одновременно.
Хотя существует всего около 4!=24 возможных порядков модификаторов домашнего ряда, если мы ограничимся средним рядом и отразим порядок на обеих руках, количество возможностей резко возрастет, если мы начнем рассматривать комбинации модификаторов домашнего ряда.
S+D для левого Alt, J+K для правого GUI, F+J для Control, J+K+L для Control+Shift, ...
Однако большинство возможных комбинаций на самом деле не подходят для этой работы. Вам нужно будет отразить комбо-моды на обеих руках по той же причине, по которой зеркально отображаются мод-тапы домашнего ряда, и вам нужно будет иметь возможность играть аккорды всех четырех модификаторов одной рукой.
У вас возникнут проблемы, если вы захотите вставить что-то из буфера обмена с помощью Ctrl+V, но оба ваших указательных пальца будут заняты удержанием F и J для активации Ctrl. Аналогичная ситуация возникает, если вы хотите открыть диспетчер задач с помощью Ctrl+Alt+Del, но ваши настройки таковы, что, хотя вы можете активировать Ctrl и Alt слева с помощью D+F и S+F соответственно, вы не можете удерживать S+D+F для Ctrl+Alt, потому что это уже используется для более распространенного Ctrl+Shift, потому что S+D — это Shift.
Следовательно, вам в конечном итоге придется нажимать Ctrl на левой руке и Alt на правой. Теперь представьте, что вы поместили Del на слой, на правую индексную клавишу домашней строки. Поскольку ваш правый указательный палец слишком занят активацией Alt в тандеме с правым безымянным пальцем, у вас буквально нет возможности открыть диспетчер задач, чтобы закрыть это неотвечающее приложение. Даже если вы поменяете руки и будете использовать левую для Alt, а правую для Ctrl, проблема останется. Все, что вы можете сделать сейчас, это прибегнуть к использованию мыши и пересмотреть дизайн раскладки клавиатуры.
Это показывает, что объединение комбо-модов домашней строки — более сложная проблема дизайна, чем может показаться на первый взгляд.
Sticky Combos
Решение этой проблемы сочетания — использовать липкие комбинации. Вместо того чтобы мгновенно активировать модификаторы, удерживая две или более клавиш, вы нажимаете клавиши, составляющие комбинацию, все в пределах термина комбинации, и модификатор применяется к любому базовому коду клавиши, который вы вводите следующим.
Липкий/одноразовый модификатор используется только в том случае, если следующий введенный вами код клавиши не является переключением слоя или самим модификатором. Это означает, что вы можете последовательно комбинировать произвольное количество модификаторов и переключателей слоев.
Если вернуться к нашему примеру Ctrl+Alt+Del, вы можете привязать свою комбинацию к Ctrl, затем привязать свою комбинацию к Alt с помощью липких комбинаций и, наконец, комфортно активировать слой Fn для доступа к Del.
Кроме того, эта альтернатива представляет собой большое преимущество доступа ко всем модификаторам в домашнем ряду без необходимости удерживать клавиши в течение длительного времени. Учитывая тот факт, что это комбинации, вам не нужно обращать внимание на конкретный порядок, в котором вы нажимаете клавиши, составляющие аккорд, а липкость модификаторов, предоставляемая функциональностью One-Shot QMK, позволяет вам последовательно комбинировать модификаторы и базовые коды клавиш, один за другим.
Combo misfires
Самый большой недостаток всех вышеупомянутых пунктов заключается в том, что домашние ряды мод-комбо еще более склонны к осечкам, чем домашние ряды мод-тапов. Все, что нужно для срабатывания комбо, — это зарегистрировать событие нажатия для всех клавиш комбо в любом порядке в пределах термина комбо.
На самом деле, не стоит обманываться идеей, что вы с меньшей вероятностью нажмете несколько клавиш одновременно, чем будете удерживать одну клавишу немного дольше. Вы не можете точно настроить, когда и как комбо активируется, как вы можете сделать с помощью мод-тапов, с помощью настроек конфигурации удержания тапа, таких как PERMISSIVE_HOLD
— хотя PR [#8591] добавляет полдюжины новых настроек конфигурации комбо, которые будут интересны всем, кто хочет использовать домашние ряды мод-комбо. Безразличие комбинаций к порядку нажатия клавиш также не позволяет вам использовать продвинутые трюки, такие как отмена прокрученных модификаторов для помощи при случайных модификациях.
Если вы хотите нажать две клавиши, составляющие комбинацию, вы должны дождаться окончания термина комбинации после нажатия первой клавиши, прежде чем нажимать следующую. Если вы не определили термин комбинации в config.h
, он возвращается к значению глобального термина нажатия, которое обычно будет колебаться около 200 мс для большинства пользователей. Естественно, первое и единственное, что вы можете сделать, это уменьшить термин комбинации до более разумного значения; по крайней мере, менее 100 мс.
Даже если вы уменьшите термин комбинации до 70, 50 или даже менее 30 миллисекунд, mod-combo домашнего ряда действительно жизнеспособны только на QWERTY. Чтобы привести яркий пример, давайте рассмотрим THE-1, альфа-макет, в значительной степени основанный на печатных роликах или «сплатах», как их называет автор.
Было бы довольно сложно использовать домашние ряды мод-комбо на таком макете. Вам пришлось бы либо нажимать каждую клавишу домашнего ряда отдельно, что убивает весь смысл этой оптимизации макета для сплат, либо уменьшить термин комбо до такого низкого значения, что будет трудно надежно активировать модификаторы, когда они вам нужны.
Chording with thumb keys
Идея состоит в том, чтобы выбрать клавишу большого пальца — эргономичная клавиатура не нужна, пробел тоже подойдет — с помощью которой вы будете нажимать каждую клавишу Home, чтобы создать модификатор.
Возможны два типа реализации: первый с переключением слоев, второй с комбинациями.
Layers
Возможно, более простой и гибкий метод — использовать назначенную клавишу большого пальца в качестве клавиши слоя, которая активирует слой, где домашняя строка состоит из чистых клавиш-модификаторов. Это может быть мгновенное переключение, нажатие слоя, переключение, нажатие слоя-переключение, одноразовая клавиша слоя... Что бы вы ни выбрали, использование сведется к следующему:
- Нажмите клавишу большого пальца слоя
- Активируйте нужные вам модификаторы, нажав соответствующие клавиши домашней строки
- Деактивируйте слой с помощью модификаторов домашней строки (продолжайте удерживать клавиши нажатыми на шаге 2)
- Нажмите базовый код клавиши, к которому вы хотите применить модификатор(ы)
- Отпустите все модификаторы
Если вам не нравится удерживать клавиши, вы можете позволить себе использовать одноразовые моды, поскольку модификаторы находятся на слое. Этот подход был популяризирован пользовательским пространством Каллума Окли. Чтобы максимально использовать этот альтернативный подход, не используйте клавиши переключения слоев. Только «чистые» клавиши переключения слоев, такие как MO(layer)
, устраняют необходимость в термине нажатия.
Combos
Эта альтернатива также включает в себя комбинации, как в home row mod-combos, но эта гораздо ближе к тому, как работают классические home row mods.
Во-первых, способ расположения модов (order, layout) по сути такой же, как в классических home row mods. Единственное большое отличие заключается в том, что большой палец участвует в определении того, когда клавиша home row должна действовать как модификатор, а когда она должна действовать как обычная клавиша буквы/цифры/пунктуации.
Использование этой реализации менее замысловато, чем реализация слоев. Если вам нужен модификатор, просто нажмите соответствующую клавишу home row и назначенную клавишу большого пальца вместе в пределах комбо-терминала. Поскольку аккорд с клавишами большого пальца — это то, что сообщает прошивке о вашем желании инициировать сочетание клавиш, время удержания не имеет значения. Как только прошивка обнаружит комбинацию, модификатор(ы) активируются.
В идеале клавиша большого пальца, используемая в аккордах, не должна быть клавишей, за которой часто следует или которой предшествует клавиша домашнего ряда, например пробел. Все в духе сокращения случайных осечек при обычном наборе текста.
Одна из замечательных особенностей этого метода заключается в том, что вам не нужно удерживать все клавиши комбинации. Вы можете нажать все клавиши, составляющие комбинацию, чтобы вызвать ее, а затем удерживать нажатой только одну клавишу комбинации, чтобы поддерживать модификатор активным, тем самым освобождая другие пальцы.
Перекрывающиеся комбинации раньше не поддерживались, поэтому все, что вам нужно было определить, — это комбинация для каждого из 8 модификаторов; аккорд нескольких модов домашнего ряда автоматически вызывал бы все требуемые комбинации. В то время как с новыми улучшениями комбинаций вам нужно будет указать комбинацию для
1. <kbd>Ctrl</kbd>
2. <kbd>Alt</kbd>
3. <kbd>Shift</kbd>
4. <kbd>GUI</kbd>
5. <kbd>Ctrl</kbd>+<kbd>Alt</kbd>
6. <kbd>Ctrl</kbd>+<kbd>Shift</kbd>
7. <kbd>Ctrl</kbd>+<kbd>GUI</kbd>
8. <kbd>Alt</kbd>+<kbd>Shift</kbd>
9. <kbd>Alt</kbd>+<kbd>GUI</kbd>
10. Shift+GUI 11. Ctrl+Alt+Shift 12. Ctrl+Alt+GUI 13. Ctrl+Shift+GUI 14. Alt+Shift+GUI 15. Ctrl+Alt+Shift+GUI
То же самое с другой стороны. Таким образом, мы рассматриваем всего 30 комбинаций, если предполагаем только одноручные комбинации модификаторов. Однако, если мы отбросим это ограничение и захотим быть очень исчерпывающими и включить возможность сделать что-то столь безумное, как LCtrl+LGUI+LAlt+RAlt+RCtrl+RShift+RGUI, нам понадобится 255 комбинаций.
Tap dances
Tap dances могут предложить образный уровень защиты от непреднамеренных активаций модов. Там, где в мод-тапах требуется только удержание, вы можете закодировать степ таким образом, что вам нужно будет дважды нажать, а затем удерживать клавишу, чтобы он зарегистрировался как модификатор.
Итог
Подводя итог, можно сказать, что домашние рядовые моды — это неортодоксальный, инновационный способ эргономичного использования модификаторов. С правильным программным обеспечением его можно использовать на любой клавиатуре, и он полезен независимо от физической раскладки.[^10] Потребуется немного практики и времени, чтобы привыкнуть к печати с домашними рядовыми модами, но результат того стоит.
||enter||