Зачем нам десять пальцев

Немного про управлении в приложениях

Alexey “Averrin” Nabrodov
8 min readJan 15, 2018

Это статья не про новомодные жесты, sexy ui controls и прочее. Это статья про вещи, которые старше меня, про power users и софт, который одни любят, а другие ненавидят.

Итак, начнем с распространенного софта. Речь пойдет исключительно про десктоп и веб. Вы пробовали пользоваться каким либо мессенджером не используя мышь? Вообще, в двух из трех используемых мной мессенджерах нет кнопки “отправить”. Тем не менее, знание поведения сочетаний Enter и Shift+Enter еще не дает полной власти над программой. Особенно, когда они поменяны местами (привет, Wrike!). Вы знаете, как переключиться на другой чат? А на последнее непрочитанное? Например Slack и Discord поддерживают замечательное клавиатурное сочетание Ctrl+K, которое открывает селектор чатов. С помощью него можно быстро перейти как к непрочитанным, так и к любому другому, чье имя вы знаете. А вот Telegram на такое не способен. Правда, если скинуть с окна ввода фокус, нажав на Esc, то в фокусе окажется поиск, который сработает похожим образом. Про Skype я вообще молчу. У них мало того, что хоткеев мало, так они еще и не описаны внутри программы.

Вот так это выглядит в Discord

А для чего они вообще нужны? Нет, если ты вальяжно сидишь в кресле, в одной руке мышка, а в другой — бокал мерло, то да, не за чем. А если ты печатаешь двумя руками, перескакивая с одного приложения на другое и ведешь одновременно три диалога, то подобные вещи становятся определяющими. И хотя последнее время ПО делается для одноруких любителей картиночек и огромных шрифтов, софт так или иначе делают люди более прошаренные и нет-нет, да и оставят что-то удобное. По ошибке, не иначе.

Зачем нам операционная система

Все, что я буду дальше писать с теми или иными ограничениями и болью можно сделать и в Windows, но для того чтобы понять концепцию, я опишу свое рабочее окружение.

В интернетах частенько можно встретить скриншоты “красиво” настроенных рабочих столов. Некоторые (особенно этим грешат арчеводы) даже пишут рядом с ними слова вроде minimalistic. *делает кислое выражение лица*

Мое окружение после загрузки выглядит как два пустых монитора. Понятно, что обои просто не нужны, раз их никогда не видно. Но у меня в дополнение к этому нет и никаких панелей. Основной способ переключения приложений — хоткеи. Я пользуюсь очень ограниченным набором софта, все программы у меня подвязаны на находящиеся под пальцами кнопки. Если вдруг надо запустить, а потом и переключаться на что-то новое или постороннее, есть Rofi, который одновременно и лаунчер и переключалка с возможностью поиска.

Если не брать в расчет текстовые редакторы (а я говорю, про программерские), то остается в общем-то только браузер. Тут все просто, ставишь что-то вроде cVim, Tridactyl и так далее. Они не только дают огромное количество удобных хоткеев и контролов для перехода по вкладкам и закладкам, но и реализуют такую чудесную вещь, как Hint Mode. Эта концепция позволяет с помощью клавиатуры кликать по элементам страницы. Скрипт находит все кликабельные и элементы и назначает им сочетание из пары букв из тех что уже под пальцами. Тоже безумно удобно и быстро. Случаются, правда особо упоротые сайты (привет, Wrike!), где этот режим не работает из-за несемантичности верстки, но во основном проблем не возникает.

cVim HintMode

Уже только это может неплохо сократить накладные расходы работы за компьютером в силу того, что хоткеи работают на подкорке. Со стороны может показаться, что пользоваться хоткеями — это сложно и надо помнить очень много, но это не так. Спросите ближайшего программиста или дизайнера. Может оказаться, что он даже не помнит, какие буквы включены в какое-то из сочетаний, которое он использует раз в 10 минут. Спинной мозг очень сокращает путь от желания что-то сделать и результата.

Концепции управления, о которых вы, вероятно, не знаете

Кроме уже упомянутого Hint Mode, от которого непосвященным обычно сносит башню, есть еще пара вещей, которая решает проблемы большого количества хоткеев.

Как мы держим руки, когда печатаем? ФЫВА-ОЛДЖ. Двигать руки к стрелкам, потом обратно, или того хуже запоминать безумное количество сочетаний альта, шифта и контрола, все это отбивает желание пользоваться хоткеями. Но у вас нет другого пути, если вы хотите работать продуктивно. Первое решение — однокнопочные хоткеи. Например программист большую часть времени перемещается по коду, максимум немного исправляет его, а не пишет безостановочно. И насколько удобнее было бы разместить навигацию прямо под пальцами! Знакомьтесь, VimKeys. Концепция опирается на “режимы”, подробнее о которых позже. Суть в том, что если в программе есть пользовательский ввод текста, то он вынесен в отдельный режим, а в базовом режиме нажатия на буквы обрабатываются как хоткеи. Например перемещение повешенное вместо стрелок на hjkl. Я не буду распинаться про богатство навигации вима, но представте, насколько такие сочетания клавиш удобнее “растопырок” с двумя-тремя модификаторами.

Обычно в массовых программах сотни функций (если считать всю навигацию, переключение настроек, и прочего), при этом всего пара десятков из них доступна из меню и мало пересекающиеся с этим пара десятков (а то и меньше) — хоткеями. А представте себе программерский софт или тот же фотошоп? Если все повесить на разные хоткеи, то если и клавиатура не закончится, то мозг может начать взрываться. Однако же большая часть функций контекстнозависимая. Ну то есть зачем нам выделение и удаление текста, если не происходит ввод. Ну и так далее.

Для подобного разделения есть режимы. Это может быть 2–3 неявных режима как в обычных приложениях. Это могут быть явные режимы вроде того как это сделано в виме, или десятки “режимов” как в емаксе. Режимы могут включаться и выключаться в зависимости от открытых файлов, сфокусированных контролов или включаться хоткеями. Они могут перекрываться, вытеснять друг друга, выполнять какие-то действия на вход или выход и так далее. Например, некотороые программы поддерживают vim mode, который позволяет переключаться между режимом редактирования и “visual mode”, в котором работают однокнопочные хоткеи. Конечно, это в основном относится к специфическим программерским или консольным программам, но если этим пользуются те, кто может сделать как угодно, разве вам не интересно попробовать?

Еще вариант, который в сущности работает как “мини режимы”. Допустим, у вас есть набор функций, объединенных одной “категорией”. Раскидывать 20+ функций, включая редкоиспользуемые по контрол+шифт+альт+вин+что-нибудь? Неа. Допустим, у нас есть десяток функций комментирования. Комментирование строк, регионов, раскоментирование, блочное, с копированием… Так давайте сделаем, хоткей, например, “Ctrl+c, l”. Да, сначала нажимаем Ctrl+c, а затем l. Первое нажатие включает режим, в котором существуют только хоткеи комментирования, которые, возможно, недоступны в других режимах. По следующему нажатию режим отключается. Успешно, или не найдя соответствующего хоткея. Так можно делать и вложенные категории, создавая хоткеи из трех и более нажатий. Они, кстати, запоминаются куда лучше модификаторов. Это называется Leader Key. Возьмем к примеру мой редактор Spacemacs (это особым образом настроенный emacs). В нем главным лидер-клавишей является пробел. Он открывает корневую категорию сочетаний. Затем уже согласно мнемонике там разложены другие функции. А по еще одному нажатию пробела открывается строка ввода для поиска функций по названию. Вим так же широко использует подобный прием, начиная с “,” — как бы “главного” лидера, заканчивая тем, что многие функции являются “микро режимами”, то есть состоят из двух букв, вторая из которых указывает, например, на область использования, вроде строки, слова или абзаца. Visual Studio, хоть и не очень хороша с точки зрения хоткеев, тоже не брезгует этим, используя Ctrl+k в качестве лидера. Жаль только спейсмакс показывает варианты доступных сочетаний после нажатия соответствующего лидера. Хотя, кажется, есть и другие Space* конфигурации и для vim, atom и sublime text.

Spacemacs после нажатия “лидера”

Но на некоторые функции и не надо иметь хоткеи. Помните сочетание Ctrl+L в мессенджерах. А что если выводить такое же окошко, но не для навигации, а для функций? Кажется, молодое поколение называет это Command Palette. Так можно найти функции, о существовании которых ты и не знал, например поискав по ключевому слову. Это особенно удобно для разнообразных плагинов. Некоторые программы поддерживают внутренние скриптовые языки, а бывает что и в целом написаны так, что все действия программы доступны для вызова по имени.

Немного личного опыта и размышлений

Это моя домашняя клавиатура

Даже избегая разговора про продуктивность, скорость печати и так далее, описанные мною концепции обычно подкреплены и тем, что весь функционал доступен с клавиатуры, и тем, что даже не зная где она расположен в интерфейсе и его точной формулировки, все равно можно быстро получить к нему доступ. Меня вот очень раздражает разбираться в хитросплетениях менюшек и настроечных диалогов.

Если вернуться к разговору про ОС, то задумайтесь вот над чем: часто ли у вас приложение не в полное окно? Окей, я обычно пользуюсь более чем одним монитором, но все равно у меня одновременно на экранах не больше трех-четырех приложений. Я не меняю их положение на экране, максимум распахиваю или перемещаю между мониторами. Очевидно, все это удобнее делается хоткеями. У меня даже заголовков окон нету. Я и так знаю, как они называются, а кнопки свернуть и закрыть мне не нужны.

В целом, все что имеет отношение к клавиатурным сочетаниям на Windows решается с помощью программы AutoHotKeys. Однако я сейчас раздумываю (то есть уже написал маленький proof-of-concept) о том, чтобы сделать что-то вроде VimMode поверх системы, то есть реально перехватывая нажатия и превращая их в нужные мне коды. Заодно, я разбираюсь с тонкостями реализации описанных выше концепций. Когда у тебя есть только коды клавиш, такие вещи как нажат ли модификатор, или было ли до этого нужное тебе нажатие, или было ли это нажатие или отпускание, все это приходится реализовывать самому.

У тотального использования хоткеев есть один недостаток: очень привыкаешь. В момент, когда что-то недоступно с клавиатуры или программа не поддерживает навигацию по hjkl, мозг бунтует. Одно из средств, которым я решаю эту проблему: одинаково настроенные клавиатуры дома и на работе. Более того, моя клавиатура поддерживает некоторые хитрости. Например, для случаев, когда приложения не поддерживают привычные мне хоткеи я могу настроить их прямо внутри клавиатуры. Например, у меня под левым большим пальцем кнопка Esc, которая служит для переключения режимов в Vim. Это, наверное, самая используемая клавиша на левой половине клавиатуры. Но у нее есть и второе действие. Когда она зажата, она активирует “псевдо-контрл” режим. Я, например, привык подтверждать действия не с помощью Enter, а нажимая Ctrl+j. Так вот, в этом режиме J отправляет в систему код нажатия энтера. Так же сделано для Ctrl+n и Ctrl+p, которые эмулируют соответственно стрелки вверх и вниз. Чтобы не утомлять вас описаниями всех тонкостей моей клавиатуры, остановлюсь на том, что переключение раскладки у меня тоже делается всего одной кнопкой.

Один мой товарищ, которого я когда-то соблазнил разжиться такой же клавиатурой, периодически благодарит меня за это, отмечая, что когда надо пользоваться новой программой, он не запоминает хоткеи, а назначает их в визуальном редакторе на нужные ему кнопки и работает в более привычном режиме.

Наверное, сейчас я закончу этот поток сознания, вернувшись к теме, когда и если я таки разовью свою мысль с глобальными режимами хоткеев. Спасибо за внимание.

--

--

No responses yet