master ← topic_list_title_badges
merged 07:01PM - 12 Mar 26 UTC
## Summary
- add unread and unseen badges to topic list titles
- preserve wide t… opic-list row theming when badges are shown
- keep compact topic-list rows within width on narrow terminals
- add regression tests for badge rendering and width handling
## Verification
- ruby -c lib/termcourse/ui.rb
- bin/test
master ← notifications
merged 08:12PM - 12 Mar 26 UTC
## Summary
- add a notifications screen on `n`, with filters and table-style row… s
- add unread notification count to the status bar and keep it updated via MessageBus
- fix notification unread-state edge cases and add regression tests
## Verification
- ruby -c lib/termcourse/live_updates.rb
- ruby -c lib/termcourse/ui.rb
- bin/test
@Canapin теперь новая функция — c (составление) , так как n зарезервирована для уведомлений.
Возможно, следующим шагом займусь локализацией…
1 лайк
Локализация уже включена
В настоящее время поддерживаются языки es, fr, de и en.
С радостью приму pull-запросы для добавления других языков, но это довольно просто сделать — просто напишите, если вы используете это и какой язык вам нужен.
Также сообщите, если что-то переведено ужасно неправильно!
master ← localisation
merged 01:36PM - 13 Mar 26 UTC
## Summary
- add built-in UI localization for `en`, `fr`, `de`, and `es`
- add `… --lang` and `TERMCOURSE_LANG`, plus locale env detection and early help/usage localization
- update the README and add regression tests for locale selection and CLI help flows
## Verification
- ruby -c lib/termcourse/localization.rb
- ruby -c lib/termcourse/cli.rb
- ruby -c lib/termcourse/ui.rb
- bin/test
Я выкатил обновление кэширования, которое уменьшает количество запросов к серверу и использует обновления от MessageBus.
Это должно не только значительно улучшить производительность, но и снизить риск достижения лимитов запросов.
master ← cache_strat
merged 05:27PM - 15 Mar 26 UTC
## Summary
- cache topic lists and topics in-session to reduce repeated fetche… s
- apply incoming topic updates incrementally via MessageBus topic ids
- load missing topic post chunks on demand and reduce polling/refetch churn
## Verification
- ruby -c lib/termcourse/client.rb
- ruby -c lib/termcourse/live_updates.rb
- ruby -c lib/termcourse/ui.rb
- bin/test
Дайте знать, если возникнут какие-либо проблемы.
Я переписал код MessageBus и систему подписок — теперь значки уведомлений должны обновляться в реальном времени более надёжно.
Темы теперь будут получать новые сообщения в режиме «реального времени» без необходимости обновлять страницу.
Обратите внимание: для работы этой функции необходимо войти в систему, используя имя пользователя и пароль, так как требуется cookie сессии.
master ← fix/messagebus-reconnect-reliability
merged 01:44PM - 19 Mar 26 UTC
- Reworked live status updates to be MessageBus-first, with notification and PM … badges seeded from Discourse’s notification_channel_position instead of relying on steady-state HTTP polling.
- Replaced constant healthy-state badge polling with reconnect-triggered one-shot HTTP resync, while keeping HTTP fallback when live counts are still unseeded or MessageBus is unavailable.
- Added per-channel MessageBus cursor tracking for /latest, /new, /unread, /unread/:user_id, /notification/:user_id, and active /topic/:id subscriptions.
- Added a MessageBus watchdog that runs every 30s, detects stale clients after 240s without successful polls, and rebuilds the client cleanly.
- Added reconnect recovery that restores subscriptions from saved channel positions and requests list/topic refreshes when resume state is not trustworthy.
- Introduced a timeout-configured MessageBusHTTPClient wrapper with explicit open, read, and write timeouts.
- Fixed reconnect edge cases so badge seeding keeps retrying until live values are populated, and default -1 cursors are treated as non-resumable rather than trusted.
- Added live topic subscriptions for /topic/:id, so termcourse can react while you are inside a topic instead of only at the list level.
- Added live in-topic handling for new posts, including tail-follow behavior when you are already on the last loaded post.
- Added live in-topic handling for post edits, likes/unlikes, delete/recover-style updates via targeted single-post refreshes.
- Added topic refresh fallback for reload-style and stats-style topic events when incremental updates are not sufficient.
- Fixed topic reconnect behavior so revisiting a topic updates the stored topic cursor and failed topic refreshes stay pending until they succeed.
- Improved topic-view responsiveness by removing constant idle rerenders, rendering only the needed visible post blocks, caching rendered post blocks, and reducing debug I/O churn.
- Tightened temporary debug instrumentation so it is only active when TERMCOURSE_DEBUG=1.
- Clarified auth behavior in the README: realtime MessageBus features require login auth with a session cookie; API-key auth is HTTP-only and does not support live PM/topic updates.
- Added focused regression coverage for reconnect reliability, resumable cursors, topic refresh behavior, healthy-state no-poll behavior, and the custom MessageBus HTTP client wrapper.
Вы по-прежнему можете использовать доступ через API-ключ, но в этом случае вы не получите обновлений тем в режиме «реального времени».
1 лайк
Canapin
(Coin-coin le Canapin)
19.Март.2026 14:24:43
25
Круто, когда вы начнете работать над веб-интерфейсом, чтобы улучшить удобство использования? О, погодите-ка.
1 лайк
merefield
(Robert)
22.Апрель.2026 15:09:59
26
Termcourse теперь поддерживает изображения высокого разрешения на расширениях, где терминал поддерживает chafa, sixel и magick.
master ← add_full_window_high_quality_image
merged 03:03PM - 22 Apr 26 UTC
Коротко: если у вас Windows Terminal и установлены chafa и ImageMagick, всё работает:
К сожалению , как и во всём, что касается Apple, их поддержка проектов с открытым исходным кодом идёт немного медленно, поэтому пока что вы не можете использовать эту функцию в нативном терминале macOS Terminal.app.
Смотрите: https://www.arewesixelyet.com/
Возможно, вы найдёте более подходящий терминал для macOS…
1 лайк
merefield
(Robert)
17.Август.2026 20:41:49
27
Ну …
… Я перенес > termcourse на Go
master ← go_migration
merged 08:40PM - 17 Aug 26 UTC
## What changed
- replace the Ruby implementation with a Go 1.26.6 application
… - preserve the complete browsing, posting, authentication, realtime MessageBus, localization, theming, search, notification, and image feature set
- move terminal rendering onto the current Charm v2 stack
- add responsive incremental rendering, stronger color handling, and Kitty-first inline/fullscreen images with colored Chafa fallback
- retain the existing locale and screenshot assets
- replace Bundler/Ruby CI with formatting, vet, race-test, and build checks for Go
## Why
The Go migration provides a single compiled executable, lower runtime overhead, stronger concurrency and lifecycle handling, and substantially more terminal behavior delegated to maintained Charm components instead of bespoke rendering code.
## User impact
Existing configuration, credentials, themes, languages, navigation, posting, likes, search, notifications, realtime updates, and image controls remain available. The build and installation workflow changes from Ruby/Bundler to Go 1.26.6.
## Validation
- `go test ./...`
- `go test -race ./...`
- `go vet ./...`
- `go mod tidy -diff`
- `gofmt` clean
- Linux amd64 build
- Windows amd64 cross-build
- macOS arm64 cross-build
Почему
Переход на Go обеспечивает единый скомпилированный исполняемый файл, меньшую накладную нагрузку во время выполнения, более надежную обработку конкурентности и жизненного цикла, а также значительно больше поведения терминала передается на поддерживаемые компоненты Charm вместо собственного кода рендеринга.
Это привело к значительной чистке интерфейса и позволяет использовать управление мышью, даже на полосе прогресса темы!
Инструкции по установке/запуску обновлены здесь: GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token) · GitHub
4 лайка