Это Terminal App (TUI), немного для развлечения… и на данном этапе немного экспериментальный!
Краткое описание
Терминальный интерфейс для просмотра и публикации на форумах Discourse со списками тем, полным просмотром тем, ответами, лайками, поиском и встроенным редактором.
Пожалуйста, рассмотрите возможность стать постоянным спонсором моей работы с открытым исходным кодом (Sponsor @merefield on GitHub Sponsors · GitHub) на уровне, соответствующем вашим возможностям и потребностям вашей организации, чтобы этот проект получил должное обслуживание и продолжал работать на вашем сайте в будущем.
Нравится termcourse? Пожалуйста, поставьте ему на GitHub
> termcourse — это клиент для Discourse, работающий в терминале. Он ведет себя как легковесная браузерная сессия с входом по куки (имя пользователя/электронная почта + пароль) и поддерживает TOTP/резервные коды для MFA. Также предусмотрен запасной вариант с использованием API-ключа для сайтов с ограниченным доступом или только с SSO.
Возможности
Просмотр списков тем: Последние / Популярные / Новые / Непрочитанные / Топ с циклическим переключением периода для Топ.
Открытие тем стрелками + Enter или цифровыми горячими клавишами (1-0) для первых 10 видимых тем.
Просмотр полных тем с прокручиваемыми постами, закрепленными заголовком/подвалом и индикатором позиции/прогресса поста.
Развертывание выбранных постов на полный контент; не выбранные посты показывают компактные выдержки.
Ответы на целые темы или конкретные посты.
Создание новых тем с заголовком, выбором категории и встроенным редактором тела.
Лайк/дизлайк постов с визуальным состоянием сердца для каждого поста.
Поиск по постам и прямой переход к соответствующему контексту темы/поста.
Встроенный редактор поддерживает перемещение курсора, вставку, новые строки, удаление символа и живой счетчик минимальной длины.
Рендеринг с учетом Markdown, включая обернутые ссылки и предварительный просмотр встроенных изображений (chafa / viu).
Замена эмодзи для распространенных токенов :emoji: и улыбок в стиле :).
Поддержка учетных данных для нескольких сайтов через переменные окружения и per-host credentials.yml (с запросом недостающих полей входа).
Вход по имени пользователя/паролю через куки-сессию с поддержкой MFA (TOTP + резервный код), плюс запасной вариант с API-ключом.
Темизация на основе YAML с встроенными темами (default, slate, fairground) и локальными переопределениями через theme.yml.
Реактивная перерисовка при изменении размера с настраиваемым интервалом опроса (TERMCOURSE_TICK_MS).
Опциональное логирование отладки для HTTP/авторизации и диагностики рендеринга UI.
Быстрый старт
См. актуальный README для получения дополнительной информации
git clone https://github.com/merefield/termcourse
cd termcourse
bundle install
Это довольно низкоуровневое решение, но оно работает.
Вам нужно установить viu или chafa — а это уже может стать отдельным проектом
В режиме высокого качества с chafa или с viu, Windows Terminal превосходит терминал macOS, так как поддерживает гораздо больше цветов (спасибо Microsoft!)
Примечания к выпуску: Рендеринг изображений (в терминале!)
Рендеринг изображений
Добавлены встроенные превью изображений в постах с выбором бэкенда:
Автоматически сначала пробует chafa, затем viu.
TERMCOURSE_CHAFA_MODE=stable|quality
stable: консервативный вывод для стабильности терминала.
quality: рендеринг символов с более высокой детализацией и цветопередачей.
Добавлен контроль высоты превью:
TERMCOURSE_IMAGE_LINES (по умолчанию: 14)
Применяется к высоте строки превью; полезно для настройки визуальной плотности.
Улучшено поведение соотношения сторон в viu:
Переход к рендерингу, ориентированному на строки (-h), для лучшего сохранения соотношения сторон.
Добавлены элементы управления фильтрами качества превью:
TERMCOURSE_IMAGE_QUALITY_FILTER=1 фильтрует шумные превью, состоящие только из блоков.
Установите значение 0, чтобы всегда показывать вывод рендерера.
Добавлен предел безопасности для загрузки изображений:
TERMCOURSE_IMAGE_MAX_BYTES (по умолчанию: 5242880)
Предотвращает влияние загрузок изображений чрезмерного размера на производительность.
Добавлена поддержка ссылок на изображения Discourse вида upload://…:
Автоматическое преобразование в /uploads/short-url/…
Улучшена очистка и стабильность терминала:
Сохраняет необходимые валидные SGR-коды цветов.
Удаляет дестабилизирующие управляющие и графические последовательности.
Предотвращает отображение фрагментов ANSI-escape-последовательностей как обычного текста.
Примечание: Я обнаружил один сайт, который блокирует удаленное использование имени пользователя и пароля, поэтому этот клиент не будет работать в такой ситуации (если только вы не являетесь владельцем сайта и не можете настроить API-ключ!). Предложения приветствуются, но на данный момент поддержка в таких случаях отсутствует.
Я не уверен, что буду использовать это в реальной жизни, я не вижу для себя пользы, но я попробовал, и это восхитительно. Мне нравится возможность взаимодействовать с форумной платформой нового поколения через примитивный, «голый» интерфейс.
Если вы приложите усилия для установки chafa или viu, вы теперь будете вознаграждены новой функцией: переключатель «полноэкранное окно» для изображений в постах. В Windows это особенно полезно благодаря широкой поддержке глубины цвета в приложении Windows Terminal.
Теперь в строке состояния списка тем в termcourse отображается всплывающее уведомление о непрочитанных личных сообщениях, и, как и в браузере, уведомления о прочтении отправляются по каждому сообщению по мере перемещения курсора.
Рендеринг был не очень хорошим… поэтому я его исправил… теперь интерфейс использует «рендеринг различий», что делает его намного быстрее и плавнее… он больше не перерисовывает весь экран при каждом движении курсора.
Пока я тестировал это только в Windows, поэтому, пожалуйста, сообщайте о любых проблемах — но это должно значительно помочь более медленным системам.
Я также добавил несколько тестов и GitHub CI! (и это супер быстро, потому что используется minitest)
Теперь реализована система уведомлений в реальном времени на базе MessageBus, которая сообщает о новых обновлениях в списке тем в строке состояния (так что вы можете нажать g для обновления):
Неплохая идея… Определённо стоит попробовать на каком-то этапе, чтобы посмотреть, можно ли разумно сблизить подходы … но, конечно, есть существенные различия в форматах, поэтому некоторые вещи могут остаться разными.