Это терминальное приложение (TUI), немного для развлечения… и пока оно находится на экспериментальной стадии!
| Описание | Терминальный интерфейс для просмотра и публикации в форумах Discourse: списки тем, полные представления тем, ответы, лайки, поиск и встроенный редактор. | |
| Ссылка на репозиторий | GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token) · GitHub | |
| Гид по установке | README.md в репозитории (раздел «Быстрый старт») | |
| Поддержка | Пожалуйста, рассмотрите возможность стать постоянным спонсором моей работы с открытым исходным кодом (Sponsor @merefield on GitHub Sponsors · GitHub) на уровне, который соответствует возможностям и потребностям вас или вашей организации, чтобы обеспечить проекту необходимое техническое обслуживание и гарантировать, что он будет продолжать работать на вашем сайте в будущем. |
Вам нравится termcourse? Пожалуйста, поставьте
на GitHub
Обзор
termcourse — это терминальный клиент для Discourse, переработанный в единый исполняемый файл на Go. Он может использовать легковесную браузерную сессию на основе cookie с именем пользователя/электронной почтой и паролем, включая MFA с TOTP и резервными кодами. Аутентификация по API-ключу доступна для сайтов, где интерактивный вход не подходит.
Интерфейс использует текущий стек Charm и работает как с клавиатурой, так и с мышью. Его навигация в стиле папок, контекстные фильтры, адаптивные панели, темизированные элементы управления, рендеринг Markdown и встроенные изображения разработаны для того, чтобы сделать просмотр форума комфортным, не покидая терминал.
Возможности
- Просмотр списков тем Latest, Hot, New, Unread, Top и Private Message, с переключением периодов для Top.
- Навигация по постоянным папкам Topics, Search, Notifications и Compose, с контекстными фильтрами второго уровня.
- Использование клавиатуры на всех этапах или нажатие вкладок, строк тем, элементов управления в нижней части и кнопок с подсветкой при наведении.
- Открытие видимых тем с помощью Enter или цифровых клавиш
1–0. - Чтение полных тем с ленивой загрузкой сообщений, компактными отрывками, раскрытием выбранных сообщений и адаптивной прокруткой.
- Клик по треку прогресса темы для перехода непосредственно к этой точке в потоке сообщений.
- Создание тем, выбор категорий, ответы на темы или отдельные сообщения, а также лайки и отмена лайков сообщений.
- Поиск сообщений и переход непосредственно к совпадающему сообщению в контексте его темы.
- Просмотр и фильтрация уведомлений, включая бейджи непрочитанных и личных сообщений.
- Создание многострочного контента с перемещением курсора, вставкой, переносом строк, поддержкой вставки и живой валидацией.
- Рендеринг GFM Markdown, включая ссылки, списки, цитаты, код, списки задач и таблицы.
- Отображение высококачественных встроенных и полноэкранных изображений с помощью графического протокола Kitty, с цветными символами
chafaилиviuв качестве портативных вариантов. - Получение обновлений в реальном времени списков тем, тем, уведомлений и личных сообщений при использовании сессии на основе cookie.
- Использование учетных данных для каждого сайта из переменных окружения или
credentials.yml, с запросом недостающих полей для входа. - Выбор из тем
default,slate,fairground,rustиhacker, добавление YAML-тем и переключение тем во время работы приложения. - Использование truecolor, 256-цветного или 16-цветного вывода с автоматическим определением возможностей терминала.
- Запуск интерфейса на английском, французском, немецком или испанском языке.
- Свободное изменение размера терминала: макеты, цвета, списки тем и изображения Kitty реагируют на доступное пространство.
- Просмотр времени повторной попытки, предоставляемого сервером, когда Discourse ограничивает частоту действия, с необязательной диагностикой HTTP, UI и изображений.
Установка и запуск
На Linux или macOS рекомендуемый установщик загружает предварительно собранную версию для текущей операционной системы и архитектуры, проверяет её контрольную сумму SHA-256 и указанную версию, а затем устанавливает её:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh | sh
termcourse your.discourse.host
Termcourse запрашивает имя пользователя и пароль, если учетные данные еще не были настроены. Ввод пароля скрыт.
Используйте termcourse --version, чтобы отобразить установленную семантическую версию; та же версия отображается в широком заголовке терминала.
Для локальной установки пользователя, не требующей sudo:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh |
TERMCOURSE_BIN_DIR="$HOME/.local/bin" sh
Каждый релиз GitHub предоставляет контрольные суммы SHA-256 и предварительно собранные архивы для Linux, macOS и Windows на архитектурах AMD64 и ARM64. Для Linux/macOS используется .tar.gz; для Windows — .zip. Для предварительно собранных релизов не требуется Go.
На Windows скачайте и проверьте установщик, а затем запустите его, не изменяя политику выполнения для всей системы:
Invoke-WebRequest https://raw.githubusercontent.com/merefield/termcourse/master/install-release.ps1 -OutFile install-release.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-release.ps1
По умолчанию он устанавливается в %LOCALAPPDATA%\Programs\termcourse\bin и выполняет ту же проверку контрольной суммы и версии. Установщики также могут зафиксировать версию релиза с помощью --version или -Version. Go 1.26.6 или новее требуется только при установке из исходного кода.
Чтобы собрать локальный исполняемый файл из выгрузки кода:
git clone https://github.com/merefield/termcourse.git
cd termcourse
make build
./termcourse your.discourse.host
Для многократного использования храните данные для входа в локальном .env или используйте credentials.yml для каждого хоста, описанный в README.
Вход по имени пользователя/паролю (рекомендуется)
Вход по имени пользователя/паролю обеспечивает обновления в реальном времени:
DISCOURSE_USERNAME="you@example.com" \
DISCOURSE_PASSWORD="your_password" \
termcourse your.discourse.host
Резервная аутентификация по API-ключу
DISCOURSE_API_KEY="your_key" \
DISCOURSE_API_USERNAME="your_username" \
termcourse your.discourse.host
См. актуальное README для настройки, тем, элементов управления, графических бэкендов и устранения неполадок.
Примечания по аутентификации
- Вход по имени пользователя/паролю следует потоку CSRF и cookie Discourse и обеспечивает обновления MessageBus в реальном времени.
- Поддерживаются MFA с TOTP и резервными кодами.
- Аутентификация по API-ключу сохраняет функциональность HTTP, но не устанавливает браузерную сессию в реальном времени.
- Некоторые сайты отключают или ограничивают скриптовый вход по имени пользователя/паролю; для таких сайтов используются учетные данные API.
Безопасность
- Termcourse не записывает запрашиваемые учетные данные или cookie сессии на диск; cookie сессии остаются в памяти.
- Запрос пароля не позволяет паролю попасть в историю оболочки.
- Постоянные учетные данные являются необязательными и остаются под контролем пользователя в переменных окружения или YAML-файлах.
- Диагностическое логирование включается по запросу, по умолчанию отключено и не записывает учетные данные или тела ответов.
Ограничения
- Сайты, запрещающие удаленные потоки входа, могут требовать аутентификации по API-ключу.
- Для обновлений в реальном времени требуется аутентификация по имени пользователя/паролю с использованием cookie.
- Качество встроенных изображений зависит от поддержки терминала; предпочтительным является Kitty, с рендерингом символов в качестве альтернативы.
- Оно находится в терминале.

Благодарности
Частично вдохновлено Dumbcourse: UI для старых браузеров, D-pad и малых экранов. ![]()






