Лайфхак клавиатуры для удобной навигации по тексту

С первых курсов еще колледжа меня заинтересовала тема человеко-машинных интерфейсов — взаимодействие человека и машины. Не многое, что нас окружает удобно или эргономично, но в силу стандарта имеет большее распространение. Одним из таких устройств я считаю клавиатуру. Нет, я не собираюсь критиковать qwerty-раскладку, подойду к вопросу шире. В частности расположение блока цифровых и позиционных клавиш справа от буквенной части очень неудобно, да и вынесение управляющих клавиш тоже не лучшая мысль.
Не буду растекаться мыслью по древу, а перейду к сути. Пришлось 1,5 дня вносить много правок в давно написанный код, и постоянный перенос руки с клавиш-стрелок на клавиши-буквы, мягко говоря, надоел. Пришла мысль: было бы удобней, если клавиши управления курсором были на буквенной части клавиатуры. Да, идея не нова, но из тех решений, что есть (в том числе и клавиатурные сочетания Emacs’a), ничего не понравились — не удобно.
После некоторых раздумий появился такой скетч:
image

Последний вариант оказался комфортным и практически не требующим запоминания.
Нажимать две и более модифицирующих клавиши не удобно, поэтому использовал CapsLock (раньше его использовал для запуска Enso Launcher’a, сейчас для переключения закладок Punto Switcher’ом). Клавиши стрелок курсора заняли буквы I, K, J и L; Del, Home, End, PageUp и PageDown — O, P, “;”, [ и ‘ соответственно. Insert’ом не пользуюсь и не стал его переносить, отдав предпочтения BackSpace’у, расположив его на клавиши буквы U. Также учел передвижение курсора с нажатым Shift’ом для выделения текста. А одновременное нажатие обоих Shift’ов теперь изменяет раскладку последнего введенного слова — горячая клавиша Break в Punto Switcher — до него тоже тянуться лень. Таким образом, получаем расширение функций CapsLock’а и удобную навигацию по тексту без переноса руки по клавиатуре. К слову, раскладка, при нажатии одновременно с капсом еще клавиш, остается той же что и до нажатия, одиночное нажатие так и осталось — смена раскладки.
Список сочетаний клавиш:
CapsLock + I — перемещение курсора вверх
CapsLock + K — вниз
CapsLock + J — влево
CapsLock + L — вправо
CapsLock + P — Home
CapsLock +; — End
CapsLock + [ — Page Up
CapsLock + ‘ — Page Down
эти клавиши также работают и с нажатым Shift’ом: CapsLock + Shift + I (и так далее).

CapsLock + O — Del
CapsLock + U — BackSpace
LShift + RShift — Break

Почему этот вариант удобен?
Набираю текст 10’пальцевым методом, и в процессе набора руки остаются в одной позиции над клавиатурой. В этом случае курсор управляется вверх-вниз — средним пальцем, влево-вправо — указательным и безымянным, как и на обычных клавишах (специально поспрашивал коллег — других вариантов не назвали). Расположение остальных — как на родных клавишах (кроме Del и Backspase, их, думаю, запомнить просто). CapsLock нажимается мизинцем левой руки. Все делается без сдвига рук.

Идея идеей, но без реализации — это только бумагомарательство. Для реализации вышеописанного функционала написал простой скрипт исполняемый программой AutoHotkey. Сам скрипт:

CapsLock & +VK49:: ;key i
GetKeyState state, Shift
if state = D
Send {Shift}+{Up}
else
Send {Up}
Return

CapsLock & +VK4b:: ;key k
GetKeyState state, Shift
if state = D
Send {Shift}+{Down}
else
Send {Down}
Return

CapsLock & +VK4A:: ;key j
GetKeyState state, Shift
if state = D
Send {Shift}+{Left}
else
Send {Left}
Return

CapsLock & +VK4C:: ;key l
GetKeyState, state, Shift
if state = D
Send {Shift}+{Right}
else
Send {Right}
Return

CapsLock & VK50:: ;key p
GetKeyState state, Shift
if state = D
Send {Shift}+{Home}
else
Send {Home}
Return

CapsLock & VKBA:: ;key ;
GetKeyState state, Shift
if state = D
Send {Shift}+{End}
else
Send {End}
Return

CapsLock & VKDB:: ;key [
GetKeyState state, Shift
if state = D
Send {Shift}+{PgUp}
else
Send {PgUp}
Return

CapsLock & VKDE:: ;key '
GetKeyState state, Shift
if state = D
Send {Shift}+{PgDn}
else
Send {PgDn}
Return

CapsLock & VK55:: Send {Backspace} ;key u
CapsLock & VK4F:: Send {Del} ;key o

LShift & RShift:: Send {Pause}


Скрипта для Linux не написал (еще не очень хорошо в нем ориентируюсь), если кому-то покажется эта идея интересной, и реализуют ее для Linux, буду благодарен. Пользуюсь этим решением второй день и очень доволен — удобно. Планирую еще расширить функционал. Картинку для скетча взял с сайта nabiraem.ru с разрешения администрации сайта.
Спасибо за внимание.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 44
  • 0
    А в чём удобство-то? Геймеры и без этого скрипта уже натренировались использовать подобные клавиши без стрелочек. Насчёт PgDown и остальных — это уже на любителя. С одной стороны, здорово унифицирорвать на разных клавиатурах (особенно на ноутах и нетбуках). Но с другой: неужели лень руку перенести? :) Или стоит задача скоростной работы с клавиатурой?

    P.S. бумагомаратель — так правильно писать. Просто глаза режет ваш вариант написания ;)
    • +1
      Геймеры геймерами, мало в каких игрушках меняется функционал клавиш в зависимости от обстоятельств (ошибаюсь?), на первой картинке я и вынес стрелки на знакомые с детства WSAD.
      После длительного процесса: напечатать — перейти на пару строк ниже — еще напечатать/поправить — повторить итерацию, стало лень, да =) Плюс решения еще оказался в абстрагированности от редактора.
      В решении для ноутбуков можно пойти дальше — что-то вроде командного режима (как в vi). Но над этим не думал — работаю в основном на десктопах.
      Опечатался, сейчас исправлю.
      • 0
        WASD не удобно, лучше ESDF (или для правой руки IJKL), чтобы пальцы в исходной позиции стояли
    • +10
      А vim вы расматривали? Если да, то чем не угодил? (или не обязательно имеено сам vim — некоторые IDE поддерживают его режим работы)
      • –1
        С Vim'ом состоялось пока кратковременное знакомство, но идея командного режима понравилась (сначала подумывал подобное сделать, но отказался в пользу более простого). Это решение абстрагировано от редактора, можно его применять во время написания и кода, и документации/работ в word/writer/google docs, и комментариев/постов на сайте…
        • +3
          Можно было использовать как стрелки именно HJKL — как принято в vim — было бы приближено к стандарту vim.
          • 0
            HJKL, имхо, не лучший вариант.
            Располагать клавиши, означающие разное направление на одной горизонтальной линии — как-то не юзерфрендли, равзве нет?
            • +1
              Смутило как раз то, что HJKL расположены в одной «строке» клавиатуры — интуитивно не понятно.
              • +1
                А home row «asdf» «jkl;» на одной строке вас не смущает? Я и для игрушек wasd с home «row» на awd поменял на ewdr с home row на qwer. Очень удобно.

                При чём тут вообще интуитивность? Вы же эту систему сами для себя сделали, уж разберётесь как нибудь. ИМХО лучше немного неинтуитивное расположение клавиш, чем пальцы враскорячку как с wasd или ijkl. Мозг приспособится, он ко всему приспосабливается, а вот пальцы лучше сохранить в первозданном виде.

                (так же nikitko выше)
                • 0
                  Про интуитивность: я как-то привык делать что-либо не только понятным для себя, но и чтобы другие люди (если им это интересно) могли пользоваться решением, и желателен низкий порог вхождения. Когда смотрю на какую-либо задачу возникает вопрос: а как это можно сделать лучше/эффективнее и при этом не испортив решения? Да, и мне же в первую очередь приходится учится работать с моим творением, и мысли «разберусь как-нибудь» не возникает =)
                • +3
                  Зато пальцы на вашей руке расположены «в одной строке» :)
        • +5
          Первая картинка так и тянет спросить: А распрыжка в вашей навигации есть? :D
          • +1
            Да, отсутствие распрыжки серьезная недоработка =D
          • +3
            Ух-ты, а здорово!

            Напоминает эту, к сожалению, практически мёртвую, но зато «железную» реализацию похожей идеи:
            www.guru-board.com/english/layout_en
            • 0
              Какая здоровская идея и реализация!
              • 0
                Вот мне тоже очень нравится: с такой штукой ни на клавиши курсора, ни даже за мышью бегать не надо.
                Есть слабая надежда, что проект-таки запустится (автор буквально три дня назад проявлял признаки жизни после почти годового молчания).
              • +1
                Это механика с N-key rollover.
                Отличная штука, но стоить будет не меньше 200 баксов, я думаю
              • +2
                vim mode действительно есть во многих редакторах и даже браузерах. =)
              • +3
                >> постоянный перенос руки с клавиш-стрелок на клавиши-буквы, мягко говоря, надоел.
                Ну это же не на мышку переносить —
                Кстати очень полезно использовать сочетания CTrl+→ для перехода сразу на слово.
                и также для выделения целого слова Ctrl+shift+→
                • +1
                  Над Ctrl+(стрелки) думал, пока не нашел лаконичного варианта вписать в концепцию с капсом как модификационной клавиши. Покамест остается в TODO.
                • +1
                  Очень удачное решение! На днях задумывался о подобной оптимизации, но планировал управляющие клавиши как на первом скриншоте, под wasd.
                  Теперь осталось только привыкнуть.

                  Кстати, было бы неплохо, если бы скрипт понимал комбинацию ctrl+backspace(delete).
                  • +1
                    А так же комбинации ctrl+shift+→, ctrl+→. Они дают значительный прирост при редактировании текста.
                    • +1
                      Немного поменял скриптик. Теперь u = home, o = end, p = delete,; = backspace. Стало еще удобнее :)
                      • +2
                        ctrl+backspace(delete) — спасибо, подумаю над этими клавишами…
                        ctrl+shift+→, ctrl+→ — здесь, как писал выше есть трабл: усложняется сочетание модифицирующих клавиш. Капс был выбран как более подходящий и простой вариант. Но подумаю как не усложняя добавить функционал этих сочетаний.

                        «Стало еще удобнее :) » мм, возможно. При расположении BSpace и Del воспользовался аналогией: BSpace удаляет символы до курсора — клавиша расположена до стрелки вверх, Del удаляет символы после курсора — расположен после стрелки вверх. В вашем варианте если поменять BSpace и Del, то будет примерно тоже.
                        • 0
                          При расположении BSpace и Del воспользовался аналогией:

                          На старой клавиатуре над стрелками влево-вправо были раположены хом и энд соответственно, сделал по этому же принципу.
                          Сейчас кнопки BSpace и Del достаточно близко и обычно нажимаются мизинцем, а вот хом-энд далековато, вот я и решил их переместить поближе к центру.
                    • +2
                      Отличный лайфхак. Думаю всем, кому доставляет дискомфорт перенос руки эта тема будет полезна. К тому же, замечено из таких вот сэкономленных секунд вскоре набегают минуты, потом часы и т.д.
                      Спасибо, попробую на днях применить, заодно мозжечок потренирую :)
                      • +1
                        Спасибо за отзыв.
                        Да, действительно прирост в скорости есть.
                      • +2
                        Чёрт побери, оказывается не я один настрадался с этими раскладками!
                        Вот тут англичане делают специальные клавиатуры, у них есть из чего выбрать, сам себе клаву оттуда заказывал :)
                        Правда такого как тут предложено у них нет вроде бы, но они и под заказ могут сделать если попросить.
                        • 0
                          Если бы производители клав вместо тупых «мультимедийных» клавиш взяли за привычку добавлять хотя бы 5-10 свободно программируемых, насколько это облегчило бы жизнь обычным офисным юзерам: геймерам и так нужно специфическое качество железа, а вот макросы полезны не только геймерам.
                          • +1
                            В принципе они все программируемы. У меня из всех F'ок только f5 чистая при том что есть и мультимедийные клавиши. Это больше от программ зависит что с F'ками делать. Да и с остальными также.
                          • 0
                            А есть интересные экземпляры, наподобие Black Left-Handed keyboard, подумывал сделать подобное (только с не перевернутым цифровым блоком).
                            С другой стороны функционал — это больше программная реализация. У меня обычная клавиатура Mitsumi Classic, другие, сколько пробовал, не нравятся (механические только более комфортными показались). Хотя это уже дело привычки.
                            • 0
                              А я долго искал тихую клавиатуру и чтобы без цифровой клавиатуры была (tenkeyless), а то всё равно так себя и не смог заставить ей пользоваться.
                              Вот здесь есть хорошее описание разных типов клавиш. Тактильного типа очень хороши, приятно нажимать и руки не устают.
                              К тому же tenkeyless клавиатура не только занимает меньше места на столе, но и становится ненужным перемещать руки на большое расстояние. Ну, емаксеры меня поймут :)
                          • 0

                            Нормально, что в объявлениях хоткеев вроде
                            
                                CapsLock & +VK49:: ;key i

                            пришлось убрать '+'? (Shift?):
                                ;key i
                                CapsLock & I::


                            Иначе вываливалось нечто вроде:
                            ---------------------------
                            AutoHotkey.ahk
                            ---------------------------
                            Error at line 38.
                            
                            Line Text: CapsLock & +VK49::
                            Error: Invalid hotkey.
                            
                            The script was not reloaded; the old version will remain in effect.
                            ---------------------------
                            ОК   
                            ---------------------------
                            
                            
                            • +1
                              Да, '+' это Shift. У меня почему-то CapsLock & +VK4A и CapsLock & VK4A обрабатывал как одно сочетание, поэтому все внес в один хоткей, а обработку нажатия shift'a вынес в if-else. Скрипт нормально работает. Может быть версии Autohotkey разные (проверял на 1.0.48.05, на работе не помню какая именно установлена).
                            • +1
                              Очень понравился концепт. JIKL на мой взгляд самая удобная из раскладок.
                              • 0
                                Упрощенный скрипт для раскладки IJKL

                                ; CapsLock navigation
                                Suspend On

                                i::Up
                                j::Left
                                k::Down
                                l::Right
                                u::Home
                                o::End
                                p::PgUp
                                `;::PgDn
                                a::Control

                                CapsLock::Suspend Off
                                CapsLock Up::Suspend On
                                • 0
                                  HJKI раскладка (+шифт). Кстати, хоткеи как в первом посте почему-то не работают, вероятно + надо убрать.
                                  CapsLock & u::
                                  GetKeyState state, Shift
                                  if state = D
                                  Send {Shift}+{Up}
                                  else
                                  Send {Up}
                                  Return

                                  CapsLock & j::
                                  GetKeyState state, Shift
                                  if state = D
                                  Send {Shift}+{Down}
                                  else
                                  Send {Down}
                                  Return

                                  CapsLock & h::
                                  GetKeyState state, Shift
                                  if state = D
                                  Send {Shift}+{Left}
                                  else
                                  Send {Left}
                                  Return

                                  CapsLock & k::
                                  GetKeyState, state, Shift
                                  if state = D
                                  Send {Shift}+{Right}
                                  else
                                  Send {Right}
                                  Return
                                  • 0
                                    «Кстати, хоткеи как в первом посте почему-то не работают, вероятно + надо убрать.»
                                    Возможно зависит от версии AutoHotkey. + обозначает клавишу Shift.
                                    • 0
                                      Так вроде бы у автора все все хоткеи с Caps Lock + стрелки работают с Shift. Тем более в этом же хоткее проверяется клавиша Shift.
                                  • 0
                                    эм, я хотел сказать HJKU раскладка.
                                    • 0
                                      Скрипта для Linux не написал (еще не очень хорошо в нем ориентируюсь), если кому-то покажется эта идея интересной, и реализуют ее для Linux, буду благодарен.

                                      Вот для xmodmap, например.

                                      HJKU раскладка (без шифта)

                                      keycode 37 = Mode_switch
                                      keysym h = h H Left 
                                      keysym k = k K Right
                                      keysym u = u U Up
                                      keysym j = j J Down
                                      

                                      xmodmap my_script

                                      Переделано отсюда superuser.com/questions/213051/remap-arrow-keys-to-winijkl-on-linux

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.