AppsWire
AutoPrintCode v0.4.0

AutoPrintCode

AutoPrintCode

Агент для живых демонстраций кода. Он печатает заготовленный образец в любое окно (Блокнот, VS Code, веб-IDE, Jupyter) с позиции курсора, без ошибок и в заданном темпе, со звуком настоящей клавиатуры.

Для записи видеогайдов по программированию

Когда записываешь урок, приходится одновременно набирать код, объяснять и следить за кадром. AutoPrintCode берёт набор на себя:

  • Меньше дублей и монтажа. Код печатается без опечаток и без пауз на то, чтобы вспомнить следующую строку. Фрагмент получается с первого раза, не нужно вырезать ошибки и заминки.
  • Можно говорить, пока код набирается. Печать идёт сама. Хоткей Ctrl+F9 ставит её на паузу в любой момент, когда нужно что-то пояснить, и продолжает с того же места.
  • Зритель успевает следить. Код появляется постепенно в заданном темпе, а не вставляется целиком через Ctrl+V. Скорость подбирается под аудиторию: медленнее для новичков, быстрее для опытных.
  • Выглядит как живое программирование. Режим «Как человек» добавляет неровный ритм, паузы на обдумывание и опечатки, которые тут же исправляются. Звук настоящей клавиатуры поддерживает ощущение, что код набирают руками. Если звук пишется отдельно, его можно выключить.
  • Одинаковый темп от дубля к дублю. Неудачный фрагмент легко переснять кнопкой «Сначала» и склеить с остальными: ритм не будет отличаться.
  • Код урока по частям. Образец — это сценарий: условие, пояснения, подсказки и блоки кода по порядку. Выделенные строки печатаются отдельно, поэтому код можно показывать порциями, чередуя с объяснением. Переход к следующему блоку — Ctrl+F12, переключаться в окно программы не нужно.
  • Чистый код в кадре. В образце можно оставить комментарии-подсказки для себя, а с настройкой «Без комментариев» в редактор попадёт код без них.
  • Код в кадре — точно как в образце. Профиль IDE убирает автоскобки и автоотступы редактора. Не придётся исправлять что-то на записи.
  • В настоящих инструментах. Печать идёт в VS Code, Jupyter, Colab или Блокнот. Урок записывается в той же среде, в которой будет работать зритель.
  • Ничего лишнего не попадёт в кадр. Хоткеи не доходят до редактора. Если сменилось активное окно или вы случайно нажали клавишу, печать встаёт на паузу, а случайная клавиша в код не попадает.
  • Окно программы можно держать вне кадра. Например, на втором мониторе: всё управление идёт глобальными хоткеями.

Запуск

Нужны Windows и Python 3.10+.

git clone https://github.com/Recyavik/AUTO_PRINT_CODE.git
cd AUTO_PRINT_CODE
pip install -r requirements.txt
python app.py        # или run.bat — без консоли

Без git можно скачать архив: на странице репозитория Code → Download ZIP.

При первом запуске создаётся папка data/ с примером образца и звуками клавиш. Она не хранится в репозитории: у каждого своя база образцов и настроек.

Версия для браузера — интерфейс открывается страницей, печать идёт через локального помощника на Node.js: web\start.bat. Подробности — в web/README.md.

Как устроено

  • Образец — занятие: лента блоков сверху вниз. Блок — это текст (Markdown с ролью: условие, пояснение, подсказка) или код.
  • Образцы открываются во вкладках, чтобы быстро переключаться между ними: Ctrl+Tab, Ctrl+1…9, меню ☰.
  • Вся база хранится в одном файле data/templates.json, рядом лежит резервная копия .bak. Настройки — в data/settings.json.
  • Импорт: .ipynb (Jupyter), .md, .py, .json. Экспорт: .ipynb, .json. Тетрадка импортируется как есть: каждая ячейка становится блоком, порядок сохраняется. .py — весь файл одним блоком кода; если в нём есть ячейки # %% (VS Code, Spyder, Jupytext), каждая ячейка — отдельный блок, а # %% [markdown] — блок-пояснение.

Печать

  1. Щёлкните по блоку кода, и он станет активным (зелёная рамка). Если выделить строки, напечатаются только они. Выделение сохраняется в образце. Печать → Без комментариев (или галочка в настройках): комментарии # …, // …, /* … */ не печатаются — строки-комментарии пропускаются целиком, хвостовые отрезаются. Образец не меняется. Печать → Как человек (настройки — вкладка «Как человек»): неровный ритм (знакомые слова быстрее, Shift и цифры медленнее), паузы на обдумывание перед строками и новыми кусками кода, опечатки (соседняя клавиша, перестановка, двойное нажатие), которые замечаются через 0–2 буквы и исправляются Backspace. Опечатки бывают только в словах из букв — скобки, кавычки, отступы и Enter не задеваются, итоговый текст совпадает с образцом.
  2. Поставьте курсор в целевом окне.
  3. Ctrl+F9 запускает печать, повторное нажатие ставит на паузу, следующее продолжает.
Хоткей Действие
Ctrl+F9 старт / пауза / продолжить
Ctrl+F10 начать сначала
Ctrl+F11 стоп
Ctrl+F12 / Ctrl+Shift+F12 следующий / предыдущий блок кода

Все хоткеи можно сменить в ⚙ Настройки. Они глобальные: срабатывают в любом окне и до самого окна не доходят.

Защита во время печати

  • Сменилось активное окно — печать встаёт на паузу.
  • Нажата клавиша или кнопка мыши — печать встаёт на паузу, а случайная клавиша не попадает в код. Хоткеи приложения работают как обычно. Перехват ввода включается только на время печати; что именно было нажато, не записывается.
  • Окно запущено от администратора — печать не начнётся, приложение покажет предупреждение. Windows молча отбрасывает ввод в такие окна, поэтому AutoPrintCode тоже нужно запустить от администратора.

Профили окна

  • Блокнот / простое поле — текст печатается как есть.
  • IDE (VS Code, веб-IDE, Jupyter) — компенсирует «умный» редактор:
  • перед закрывающей скобкой или кавычкой и перед Enter стирается то, что редактор сам дописал справа (автоскобки, автокавычки), и закрываются подсказки автодополнения;
  • после Enter снимается автоотступ, а отступ печатается точно как в образце. С настройкой «Отступы набирать клавишей Tab» отступ набирается нажатиями Tab, по одному на каждые 4 пробела образца, как это делает человек. Не подходит для простых полей ввода в браузере (там Tab переводит фокус) и редакторов с отступом в 2 пробела.

Профиль рассчитан на печать в конец строки или в пустую строку: текст справа от курсора на текущей строке будет стёрт.

Проверено в настоящих редакторах

Редактор Python JavaScript
Блокнот Windows 11 (оба профиля) ✓ —
VS Code, настройки по умолчанию ✓ ✓
Monaco (редактор Colab) ✓ ✓
CodeMirror 6 (редактор JupyterLab 4) ✓ ✓

✓ — совпадение с образцом символ в символ при 1500 симв/мин. Образец включает автоотступы, вложенные скобки, тройные кавычки, f-строки, шаблонные строки и кириллицу.

Не проверено: JetBrains, HTML-файлы в VS Code (автозакрытие тегов — лучше отключить html.autoClosingTags).

Надёжность ввода

Мин. интервал нажатий (Настройки → Печать, по умолчанию 30 мс). При 8–12 мс Блокнот Windows 11 терял и переставлял символы, при 30 мс набор точный. Если в каком-то редакторе пропадают символы — увеличьте интервал.

Обновления

Программа сама проверяет релизы на GitHub (⚙ Настройки → Обновления):

Настройка Варианты
Проверять автоматически вкл / выкл
Как часто при каждом запуске · раз в день · раз в неделю
Найдя новую версию только сообщить · скачать и предложить перезапуск · скачать и установить при выходе
Бета-версии предлагать pre-release или нет

Вручную: Справка → Проверить обновления… или «Проверить сейчас» в настройках. Новая версия показывается кнопкой ⬆ в строке состояния и в меню трея. В окне обновления видно, что нового, и можно выбрать «Обновить и перезапустить», «Пропустить эту версию» или «Позже».

  • Во время печати обновление не ставится, а уведомления не всплывают.
  • Папка data/ не меняется. Если файлы программы не удалось заменить, всё возвращается как было.
  • Если изменился requirements.txt, новые библиотеки ставятся через pip до замены файлов. Если pip не справится, программа останется на старой версии.
  • Если программа скачана через git clone, она обновляется через git: забирает тег релиза и переходит на него, история репозитория остаётся целой. Если вы меняли файлы программы, обновление не установится и правки останутся на месте. Если программа скачана архивом ZIP, файлы заменяются из архива релиза.

Как выпустить версию. Поднимите __version__ в autoprint/__init__.py, сделайте коммит и опубликуйте на GitHub релиз с тегом vX.Y.Z (номер тот же, что в __version__). Описание релиза программа покажет как «Что нового». Если отметить релиз как pre-release, его получат только те, кто включил бета-версии. Если номер в теге не совпадает с __version__, программа откажется ставить такой релиз.

Звук клавиш

Звуки — записи настоящих клавиатур: обычной офисной и механических (тактильная, линейная, глухая «thock», щелчковая). Каждое нажатие звучит вместе с отпусканием клавиши, пробел и Enter ниже и громче обычных клавиш. Громкость регулируется ползунком рядом с кнопкой 🔊 в главном окне, звук выбирается в ⚙ Настройки → Звук. Все записи под лицензией CC0, авторы указаны в autoprint/sounds/SOURCES.md.

Журнал

data/logs/autoprint.log (Файл → Открыть журнал работы). Пишутся служебные события: старт, пауза и её причина, целевое окно, ошибки. Набираемый текст и нажатия клавиш в журнал не попадают. Если что-то сработало не так на занятии — пришлите этот файл.

Тесты

cd tests/pages && npm i && npm run build && cd ../..
python tests/run_editors.py notepad vscode browser

Тест сам открывает редакторы и печатает в них. Во время прогона не трогайте клавиатуру и мышь. Тестовые данные пишутся в tests/_run, рабочая data/ не используется.