Pull to refresh

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

Reading time3 min
Views8.5K
С первых курсов еще колледжа меня заинтересовала тема человеко-машинных интерфейсов — взаимодействие человека и машины. Не многое, что нас окружает удобно или эргономично, но в силу стандарта имеет большее распространение. Одним из таких устройств я считаю клавиатуру. Нет, я не собираюсь критиковать 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 с разрешения администрации сайта.
Спасибо за внимание.
Tags:
Hubs:
+24
Comments44

Articles