Клавиатура важнее мыши
Вы только что закончили задачу в терминале, скопировали результат, переключились в GUI-приложение — и теперь руки тянутся к мыши, чтобы вставить текст. Знакомо?
Посмотрите на любое «современное» веб-приложение: редактирование профиля требует пяти кликов мышью, потому что кнопка Save физически не имеет фокуса при Tab-навигации.
На прошлой неделе я наткнулся на пост, который призывал разработчиков перестать делать TUI (terminal user interfaces — терминальные интерфейсы) и сосредоточиться на GUI (graphical user interfaces — графических интерфейсах). Пост попал на главную страницу HN и вызвал бурную дискуссию.
GUI-фреймворки теоретически мощнее TUI. Значит ли это, что интерфейсы должны быть мышезависимыми?
Почему аргумент про tui не работает
Как активный пользователь терминала, я ценю все TUI, которые позволяют мне оставаться в командной строке. Но я хочу разобраться с повторяющимся аргументом в защиту терминальных интерфейсов, у которого, по-моему, нет твёрдого фундамента.
TUI чаще поддерживает клавиатуру. Но это не аргумент против GUI. Это диагноз для конкретных приложений.
Если случайно взять GUI и TUI — второй с большей вероятностью окажется полностью keyboard-driven. Но это не значит, что нужно выбирать TUI вместо GUI. Это значит, что у конкретных GUI проблемы с клавиатурной навигацией.
Keyboard Navigation Gap ─────────────────────── ┌────────────────────────┬─────────────┬───────────────────┬─────────────────────────────────┐ │ Действие │ Мышь │ Клавиатура │ Проблема │ ├────────────────────────┼─────────────┼───────────────────┼─────────────────────────────────┤ │ Навигация между полями │ Клик │ Tab / Shift+Tab │ Фокус не переходит? │ │ Открытие меню │ Клик │ Alt / F10 │ Меню не появляется? │ │ Выбор элемента в списке│ Клик │ Стрелки │ Список не реагирует? │ │ Закрытие диалога │ Клик на × │ Esc │ Кнопка × есть, Esc не работает │ └────────────────────────┴─────────────┴───────────────────┴─────────────────────────────────┘
Ничто не мешает GUI быть полностью keyboard-driven — так же, как TUI, или даже лучше.
На самом деле, гайдлайны многих GUI-фреймворков явно рекомендуют поддержку клавиатурной навигации для всего функционала. Например, GNOME Human Interface Guidelines заявляют: каждое действие должно быть доступно с клавиатуры так же, как с мышью. Можно перемещаться и взаимодействовать с любой частью интерфейса без мыши.
Я сам так работаю и не хочу иначе.
Как я делаю интерфейсы
Когда я сажусь за код, я делаю так, чтобы приложения были дружелюбны к клавиатуре.
Моё первое GUI-приложение, Klisi, я сразу строил keyboard-driven. Это заняло время, но не потребовало rocket science. Результат — лучший UX.
Vim, VS Code, Figma (частично) — примеры приложений, где клавиатура основной инструмент. Пользователи выбирают их не из эстетики, а из скорости.
Это не вопрос сложности. Это вопрос воли разработчика.
Keyboard-first workflow
───────────────────────
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Открыть │ ▶ │ Выполнить │ ▶ │ Закрыть │
│ приложение │ │ действие │ │ без мыши │
└──────────────┘ └──────────────┘ └──────────────┘
↑ ↑ ↑
Tab / Hotkey Enter / Space Esc
Чек-лист keyboard-driven интерфейса
Чек-лист: сработал ли ты на клавиатуре?
- Tab-навигация — покрывает все интерактивные элементы в логичном порядке.
- Видимый фокус — пользователь всегда видит, где он находится.
- Горячие клавиши — для 10–15 ключевых действий (
Ctrl+S,Ctrl+F,Ctrl+N). - Esc вместо мыши — все диалоги и модальные окна закрываются по
Esc. - Arrow keys — навигация внутри составных виджетов (списки, деревья, таблицы).
Если хотя бы один пункт не работает — интерфейс не keyboard-driven. Это не рекомендация, а критерий качества.
Вывод
GUI не обязан быть мышезависимым. Клавиатурная доступность — это не бонус, а базовое требование к качественному интерфейсу.
Если приложение нельзя полноценно использовать без мыши, проблема не в GUI как классе. Проблема в реализации.
Ссылки
- GUIs should be fully keyboard-driven — статья о том, почему GUI должен быть доступен с клавиатуры.
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.