这是一个终端应用(TUI),纯属娱乐……目前还处于实验阶段!
喜欢 termcourse 吗?请在 GitHub 上
它
概述
> termcourse 是一个基于终端的 Discourse 客户端。它的行为类似于轻量级的浏览器会话,支持基于 cookie 的登录(用户名/电子邮件 + 密码),并支持 MFA 的 TOTP/备份代码。对于锁定或仅 SSO 的站点,还有一个 API 密钥备用方案。
特性
- 浏览最新/热门/新/未读/置顶主题列表,并循环切换置顶周期。
- 通过箭头键 + Enter 或数字热键 (1-0) 打开前 10 个可见主题。
- 查看完整主题,带有可滚动的帖子、固定的页眉/页脚以及帖子位置/进度条。
- 将选定的帖子展开为完整内容;未选中的帖子显示紧凑的摘要。
- 回复整个主题或特定帖子。
- 创建新主题,包括标题、分类选择器和内联正文编辑器。
- 使用帖子级别的视觉心形状态点赞/取消点赞帖子。
- 搜索帖子并直接跳转到匹配的主题/帖子上下文。
- 内联编辑器支持光标移动、插入、换行、退格键和实时最小长度计数器。
- 兼容 Markdown 的渲染,包括换行链接和内联图像预览支持 (chafa / viu)。
- 常见
:emoji: 标记和 :-) 风格笑脸的表情符号替换。
- 通过环境变量 + 每个主机的 credentials.yml(带有提示缺失登录字段的功能)支持多站点凭证。
- Cookie 会话用户名/密码登录,支持 MFA(TOTP + 备份代码),以及 API 密钥备用。
- YAML 驱动的主题设置,带有内置主题(默认、slate、fairground)和通过 theme.yml 进行的本地覆盖。
- 响应式大小调整重绘,具有可配置的轮询间隔 (TERMCOURSE_TICK_MS)。
- 用于 HTTP/身份验证和 UI 渲染诊断的可选调试日志记录。
快速入门
有关更多信息,请参阅最新的 README
git clone https://github.com/merefield/termcourse
cd termcourse
bundle install
用户名/密码(推荐)
bundle exec bin/termcourse your.discourse.host
API 密钥备用
DISCOURSE_API_KEY=“your_key” DISCOURSE_API_USERNAME=“your_username” \
bundle exec bin/termcourse your.discourse.host
身份验证说明
- 用户名/密码登录使用正常的浏览器式会话。
- 支持 TOTP 和备份代码的 MFA。
- 支持 API 密钥作为备用方案。
安全性
- 不存储凭据;Cookie 仅在内存中。
- 环境变量或回复提供的提示可避免密码出现在 shell 历史记录中。
- 日志记录是选择加入的,默认禁用。
限制
- 有些站点与用户名/密码不兼容,因为它们禁止脚本化的远程登录流程。
- 它存在于终端中
致谢
部分灵感来源于 Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) 
23 个赞
这样您就可以快速登录多个站点(显然每个标签页一次一个会话),我做出了以下改进:
termcourse 身份验证和配置改进
- 用户名/密码现在是默认登录路径。
- 您不再需要包含
https:// - 这是可选的
- 缺少登录字段会以交互方式提示(例如:已知用户名,缺少密码)。
- CLI 帮助包括核心环境变量和调试日志文件位置。
凭据和 ENV 行为
- 支持主机映射的凭据文件,查找顺序如下:
- TERMCOURSE_CREDENTIALS_FILE(如果设置)
- ./credentials.yml
- ~/.config/termcourse/credentials.yml
- 身份验证优先级:
- CLI 标志
- 来自 YAML 的主机凭据
- 通用 DISCOURSE_* 环境变量
- 交互式提示
- 对于身份验证:会提示缺少用户名/密码值。
- 对于 API 身份验证,API 用户名和密钥都必须解析为非空值。
调试
- HTTP/身份验证调试:TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
- UI 渲染调试:TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt
仓库卫生
- 添加了 credentials.example.yml 和 .env.example,其中包含对齐的示例。
- 为本地秘密文件添加了 .gitignore 条目:
3 个赞
这相当低保真,但它有效。
你需要安装 viu 或 chafa——这本身可能就是一个项目 
在 chafa 的高质量模式或使用 viu 时,Windows Terminal 优于 MacOS terminal,因为它支持更多的颜色(感谢微软!)
发布说明:图像渲染(在终端中!)
图像渲染
- 增加了带后端选择的内联帖子图像预览:
- 自动优先尝试
chafa,然后是 viu。
TERMCOURSE_CHAFA_MODE=stable|quality
stable:保守的输出,以确保终端稳定性。
quality:更高细节/颜色符号渲染。
- 增加了预览高度控制:
TERMCOURSE_IMAGE_LINES(默认:14)
- 适用于预览行高;有助于调整视觉密度。
- 改进了
viu 宽高比行为:
- 增加了预览质量过滤控制:
TERMCOURSE_IMAGE_QUALITY_FILTER=1 过滤掉嘈杂的纯色块预览。
- 设置为 0 始终显示渲染器输出。
- 增加了图像下载安全限制:
TERMCOURSE_IMAGE_MAX_BYTES(默认:5242880)
- 防止超大图像下载影响性能。
- 增加了对 Discourse
upload://... 图像链接的支持:
- 自动解析为
/uploads/short-url/....
- 改进了终端清理/稳定性:
- 在需要的地方保留有效的 SGR 颜色代码。
- 移除不稳定的控制/图形序列。
- 防止 ANSI 转义片段显示为纯文本。
注意:我发现有一个站点会阻止远程用户名/密码,因此在这种情况下此客户端将无法工作(除非您拥有该站点并可以设置 API 密钥!),欢迎提出建议,但目前不支持这些情况。
Canapin
(Coin-coin le Canapin)
5
我不确定我会在现实世界中使用它,我看不到它对我有什么用,但我试过了,它很令人愉快。我喜欢能够从一个裸机、原始的界面与下一代论坛平台进行交互。
在某种程度上,它在美学上非常令人愉悦。
1 个赞
是的,我想它可能在以下情况下有用:
- 您使用的是低保真平台时
- 在树莓派(Raspberry Pi)上捣鼓时(顺便说一下,尚未测试)
- 从服务器检查您是否在线……或者前端代码是否崩溃!

- 对于一个非常基于文本的 Discourse 站点……
- ……以及作为一种技术好奇心

我一直想用 Terminus 在我的手机上测试一下……
3 个赞
mcmcclur
(Mark McClure)
8
伙计,我现在得开始做我的 ASCII 艺术品了!!
¯\_(ツ)_/¯
3 个赞
我添加了一个完全可定制的主题系统,“fairground”是这样的:
“slate”是这样的:
详情请见 README 
5 个赞
termcourse 现在在主题列表状态栏中有了未读私信 (PM) 状态弹出窗口,就像浏览器客户端一样,当您移动光标时,它会逐条发布已读通知。
2 个赞
欢迎提交拉取请求(PR)或分享颜色代码,我会将其添加到示例主题的 yml 文件中 
2 个赞
https://github.com/merefield/termcourse/pull/2
所以渲染效果非常糟糕……我已经修复了它……用户界面现在具有差异渲染,因此速度更快、更流畅……它不再在每次光标移动时都重绘整个屏幕。
到目前为止我只在 Windows 上测试过,所以请反馈任何问题——但这应该能显著帮助较慢的系统。
我还添加了一些测试和 GitHub CI!
现在有了一个基于 MessageBus 的实时通知系统,当主题列表有新更新时(这样你就可以按 g 刷新):
接下来可能会研究主题已读徽章……
Canapin
(Coin-coin le Canapin)
19
太棒了!
为什么不使用与 Discourse 相同的键盘快捷键呢?这样体验会更无缝 
1 个赞
不是个坏主意……这绝对值得在某个阶段进行一次审查,看看是否可以将事物合理地拉得更近一些
……但不同媒介之间当然存在一些显著差异,所以有些事情可能仍然不同。
1 个赞