Unlaw 3.15.0: Reminders и Canvas в ul desk, Ping Pong и новый ul git

Что нового в Unlaw 3.15.0. Apple Reminders и холст в стиле Excalidraw в ul desk, Ping Pong против бота или вдвоём и ul git, который сам создаёт репозиторий и пушит.

Вышел Unlaw 3.15.0. Обновиться можно командой ul update. В релиз вошло и то, что готовилось как 3.14.0: отдельно эта версия не выходила.

ul git: от пустой папки до репозитория на GitHub одной командой

Раньше ul git умел только add, commit и push. Теперь это полноценный помощник для работы с хранилищами кода.

  • ul git push "сообщение": add, commit и push сразу. Если сообщение не написать, команда спросит его. Новая ветка публикуется сама.
  • ul git init: создаёт репозиторий на ветке main, по файлам проекта понимает язык (Python, Rust, C++, Node) и дописывает .gitignore. Мои строки в .gitignore не трогает, а .env, ключи и .DS_Store игнорирует всегда.
  • ul git init --connect github: сразу создаёт приватный репозиторий на GitHub и пушит первый коммит. Так же работают gitlab, codeberg и свой сервер Gitea.
  • ul git connect принимает любой адрес: URL, короткую запись gh:я/проект или просто папку на диске. Перед пушем проверяет SSH-ключ и, если его нет, предлагает создать и открывает страницу, куда его вставить.
  • ul git mirror add: запасное хранилище. После этого каждый push уходит и туда.
  • ul git undo отменяет последний коммит и оставляет изменения на месте. ul git undo --list показывает коммиты ветки и отмечает незапушенные, а ul git undo "часть сообщения" возвращает к нужному коммиту. Запушенные коммиты команда не трогает и подсказывает git revert.
  • ul git pr пушит ветку и открывает pull request, ul git open открывает страницу репозитория.

Ещё есть защита от секретов. Если в коммит попадает .env, приватный ключ, сертификат или файл больше 50 МБ, команда убирает его из коммита, объясняет почему и останавливается.

Перед релизом я отдал этот код на отдельную проверку безопасности и закрыл всё, что она нашла. Главное: токен GitLab или Codeberg теперь хранится в Keychain отдельно для каждого сервера и уходит только туда, для которого его сохранили. При сохранении токен вводится в окно самого Keychain и не появляется в списке процессов.

ul git status и ul git pull я убрал: для этого есть обычный git.

ul desk: Apple Reminders

В ul desk появился отдельный слой с Apple Reminders. Каждый список становится колонкой, каждое напоминание карточкой, и правки идут в обе стороны: добавил, изменил, перетащил в другой список, отметил выполненным, и это сразу видно в Reminders и на других устройствах через iCloud. Мои доски в Markdown этот слой не трогает.

Работает через EventKit, поэтому даже большие списки открываются быстро. При первом запуске macOS спросит разрешение для терминала.

Новые доски теперь по умолчанию лежат в одной папке: ul desk new работа создаёт работа.md там, а не в текущей директории.

ul desk: Canvas

Новая вкладка Canvas: холст, похожий на Excalidraw. Можно рисовать от руки, ставить прямоугольники, эллипсы, ромбы, стрелки, текст, карточки и группы, соединять карточки линиями и экспортировать картинку в PNG.

Файлы сохраняются в открытом формате JSON Canvas, поэтому тот же холст открывается в Obsidian Canvas. Рисунки хранятся в том же файле так, что Obsidian их просто пропускает и ничего не ломает.

Ping Pong

В аркаде ul game седьмая игра: настольный теннис в духе старых автоматов, до 11 очков.

  • Играть можно против бота или вдвоём на одной клавиатуре: левый игрок на W/S, правый на стрелках.
  • Угол отскока зависит от того, куда мяч попал в ракетку, а каждый удар ускоряет его.
  • Бот реагирует с задержкой и иногда промахивается, но двигается не быстрее человека. Сложность проверяет тест: против одного и того же игрока бот на easy берёт меньше четверти очков, а на hard больше половины.
  • Чтобы двое могли держать клавиши одновременно, нужен терминал с протоколом клавиатуры kitty: Ghostty, kitty, WezTerm. В ul desk это работает в любом браузере.

Запустить: ul game pingpong.

Исправления

  • ul zip -p с 7-Zip из Homebrew больше не спрашивает пароль второй раз прямо в терминале.

Ссылки

← Все посты