Это терминальное приложение (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 в репозитории (раздел Quickstart) | |
| Поддержка | Пожалуйста, рассмотрите возможность стать постоянным спонсором моей работы над open source проектами (Sponsor @merefield on GitHub Sponsors · GitHub) на уровне, соответствующем вашим ресурсам и потребностям, чтобы этот проект получал заслуженное обслуживание и продолжал работать на вашем сайте в будущем. |
Нравится termcourse? Поставьте
на GitHub
Обзор
termcourse — это терминальный клиент Discourse, переписанный в виде единого исполняемого файла на Go. Он может использовать легковесную сессию на основе файлов cookie в стиле браузера с именем пользователя/электронной почтой и паролем, включая MFA с TOTP и резервными кодами. Аутентификация по API-ключу доступна для сайтов, где интерактивный вход не подходит.
Интерфейс использует текущий стек Charm и работает как с клавиатурой, так и с мышью. Навигация в стиле папок, контекстные фильтры, адаптивные панели, тематические элементы управления, рендеринг Markdown и встроенные изображения созданы для того, чтобы сделать просмотр форума комфортным, не покидая терминала.
Возможности
- Просмотр списков тем: Последние, Популярные, Новые, Непрочитанные, Лучшие и Личные сообщения, с циклической сменой периода для Лучших.
- Навигация по постоянным разделам: Темы, Поиск, Уведомления и Создание, с контекстными фильтрами второго уровня.
- Использование клавиатуры на протяжении всего процесса или клики по вкладкам, строкам тем, элементам управления в подвале и кнопкам, подсвечиваемым при наведении.
- Открытие видимых тем с помощью клавиши Enter или цифровых клавиш
1–0. - Чтение полных тем с ленивой загрузкой постов, компактными выдержками, расширенными выбранными постами и адаптивной прокруткой.
- Клик по индикатору прогресса темы для прямого перехода к нужной точке в потоке постов.
- Создание тем, выбор категорий, ответы на темы или отдельные посты, а также лайки и отмены лайков.
- Поиск постов и прямой переход к найденному посту в контексте его темы.
- Просмотр и фильтрация уведомлений, включая значки непрочитанных и личных сообщений.
- Создание многострочного контента с перемещением курсора, вставкой, переносом строк, поддержкой вставки из буфера обмена и живой валидацией.
- Рендеринг GFM Markdown, включая ссылки, списки, цитаты, код, списки задач и таблицы.
- Отображение высококачественных встроенных и полноэкранных изображений с помощью графического протокола Kitty, с цветными символами
chafaилиviuв качестве переносимых альтернатив. - Получение обновлений в реальном времени для списков тем, тем, уведомлений и личных сообщений при использовании сессии на основе cookie.
- Использование учетных данных для каждого сайта из переменных окружения или файла
credentials.yml, с запросом недостающих полей для входа. - Выбор тем из
default,slate,fairground,rustиhacker, добавление YAML-тем и смена тем во время работы приложения. - Поддержка truecolor, 256 цветов или 16 цветов с автоматическим определением возможностей терминала.
- Запуск интерфейса на английском, французском, немецком или испанском языках.
- Свободное изменение размера терминала: макеты, цвета, списки тем и изображения Kitty адаптируются к доступному пространству.
- Отображение времени повторной попытки, предоставляемого сервером, когда Discourse ограничивает частоту запросов, с опциональной диагностикой HTTP, интерфейса и изображений.
Установка и запуск
Для установки из исходного кода требуется Go 1.26.6 или новее. Самый короткий путь:
go install github.com/merefield/termcourse/cmd/termcourse@latest
termcourse your.discourse.host
Termcourse запрашивает имя пользователя и пароль, если учетные данные еще не настроены. Ввод пароля скрыт.
Чтобы создать локальный исполняемый файл из клонированной репозитории:
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: старый интерфейс, удобный для браузера, на тупых/д-пад/маленьких экранах. ![]()






