VHKT — мой pet-проект для изучения горячих клавиш разных приложений

Введение

Горячие клавиши существенно ускоряют работу с GUI приложениями и говорят о профессиональном уровне владения ими, а для консольных программ зачастую просто являются необходимым условием их использования. Когда я осваивал Vim, я почувствовал потребность в каком-то интерактивном обучающем горячими клавишами инструменте и хотя есть встроенный vimtutor, справочные материалы как https://vim.rtorr.com/ и даже игры https://vim-adventures.com/ и https://renzorlive.github.io/vimmaster/, я решил написать свой небольшой проект. А после реализации первой версии, я решил добавить поддержку обучения горячим клавишам не только для Vim, но и для других программ, таких как Chrome и bash (список планируется расширять далее). Так появился VHKT Hot Keys Tutor («V» сначала, как легко догадаться, значила «Vim», а потом название стало рекурсивным акронимом). Надеюсь, проект будет полезен не только мне, поэтому делюсь.

Установка

В данный момент проект не добавлен в какой-либо репозиторий пакетов и для использования нужно выкачать его с GitHub https://github.com/Gim6626/vhkt:

$ git clone https://github.com/Gim6626/vhkt.git

и установить зависимости:

$ pip3 install -r requirements.txt

Конечно лучше это делать в виртуальное окружение, если это вам знакомо, иначе просто используйте команду выше.

Пример использования

Посмотрим на работу программы на примере обучения горячим клавишам для bash, для этого запустим:

$ python3 vhkt.py hotkeys/bash.yaml

В первую очередь после запуска отобразится приветственный экран:

далее случайным образом будут выбираться действия, для которых нужно выбрать правильное сочетание клавиш из списка, как здесь:

Если вы выбрали правильный вариант, вы увидите следующее сообщение:

В противном случае вам будет предложено показать правильный вариант:

Чтобы запомнить горячую клавишу или команду, необходимо ввести её правильно три раза. Ошиблись? Минус один, попробуйте ещё раз.

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

Краткая статистика вашего обучения отображается в верхней части экрана, а некоторые горячие клавиши управления самим приложением — в нижней, например, Ctrl+e для выхода.

Если вы не уверены в правильности горячей клавиши или команды, нажмите Ctrl+h и вы увидите подсказку:

Или, если вы нашли действие, которое не хотите запоминать, нажмите Ctrl+k, чтобы пропустить его, и вы увидите сообщение:

После завершения вы увидите следующее сообщение:

Затем вы можете перейти к изучению горячих клавиш другого приложения.

Внутренности

Стартовая точка приложения — скрипт vhkt.py, а основная логика сосредоточена в директории vhkt, в ней стоят внимание три файла:

  • basic.py — базовая логика хранения горячих клавиш и результатов обучения, а также самого процесса обучения;
  • filestorage.py — реализация абстрактных классов хранения горячих клавиш и результатов обучения, где хранилищем является YAML файл;
  • cursestui.py — реализация ncurses консольного интерфейса пользователя (файлы simpletext.py и cursestext.py содержат два других режима интерфейса, но больше не поддерживаются).

В папке tests планируется реализация тестового покрытия логики и интерфейса приложения, но сейчас там практически ничего нет.

Расширение

Пожалуй основная возможность расширения приложения — добавление поддержки других приложений. Для этого смотрите примеры из папки hotkeys/, создавайте подобные файлы для других приложений и просто укажите новый файл параметром vhkt.py.

Участие в проекте

В https://github.com/Gim6626/vhkt/issues уже есть небольшой список запланированных улучшений. Вы очень поможете проекту, если попробуете приложение и добавите туда свои пожелания или найденные проблемы, например запросы на файлы горячих клавиш для других приложений. А если захотите участвовать в разработке — пишите в Telegram @gim6626 или на почту gim6626@gmail.com, обсудим.