termcourse:从终端读取和发布到 Discourse 实例

这是一个终端应用(TUI),纯粹为了好玩……目前还处于实验阶段!

:information_source: 摘要 一个用于浏览和发帖到 Discourse 论坛的终端 UI,具有主题列表、完整主题视图、回复、点赞、搜索和一个内置的撰写器。
:hammer_and_wrench: 仓库链接 GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: 安装指南 仓库中的 README.md(快速入门部分)
:heart: 赞助 请考虑以适合您或您组织资源和需求的方式,成为我开源工作的持续赞助者(https://github.com/sponsors/merefield),以确保此项目获得应有的维护,并能继续为您的网站服务。

喜欢 termcourse 吗?请在 GitHub 上 :star:

概述

> termcourse 是一个基于终端的 Discourse 客户端。它的行为类似于一个轻量级的浏览器会话,支持基于 cookie 的登录(用户名/电子邮件 + 密码),并支持 MFA 的 TOTP/备份代码。对于锁定或仅 SSO 的站点,还有一个 API 密钥备用方案。

特性

  • 浏览“最新”、“热门”、“新”、“未读”、“最热”主题列表,并循环切换“最热”的时间范围。
  • 通过箭头键 + Enter 或数字快捷键 (1-0) 打开前 10 个可见的主题。
  • 查看完整主题,带有可滚动的帖子、固定的页眉/页脚以及帖子位置/进度条。
  • 将选定的帖子展开为完整内容;未选中的帖子显示紧凑的摘要。
  • 回复整个主题或特定帖子。
  • 创建新主题,包括标题、分类选择器和内联正文撰写器。
  • 对帖子进行点赞/取消点赞,并具有每个帖子的视觉心形状态。
  • 搜索帖子并直接跳转到匹配的主题/帖子上下文。
  • 内联撰写器支持光标移动、插入、换行、退格键和实时最小长度计数器。
  • 兼容 Markdown 的渲染,包括换行链接和内联图像预览支持 (chafa / viu)。
  • 常见 :emoji: 标记和 :-) 风格笑脸的表情符号替换。
  • 通过环境变量 + 每个主机的 credentials.yml(带有提示缺失登录字段的功能)支持多站点凭证。
  • Cookie 会话用户名/密码登录,支持 MFA(TOTP + 备份代码),以及 API 密钥备用。
  • YAML 驱动的主题设置,内置主题(默认、板岩、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) :clap:

16 个赞

这样您就可以快速登录多个站点(显然每个标签页一次一个会话),我做出了以下改进:

termcourse 身份验证和配置改进

  • 用户名/密码现在是默认登录路径。
  • 您不再需要包含 https:// - 这是可选的
  • 缺少登录字段会以交互方式提示(例如:已知用户名,缺少密码)。
  • CLI 帮助包括核心环境变量和调试日志文件位置。

凭据和 ENV 行为

  • 支持主机映射的凭据文件,查找顺序如下:
    1. TERMCOURSE_CREDENTIALS_FILE(如果设置)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • 身份验证优先级:
    1. CLI 标志
    2. 来自 YAML 的主机凭据
    3. 通用 DISCOURSE_* 环境变量
    4. 交互式提示
  • 对于身份验证:会提示缺少用户名/密码值。
  • 对于 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 条目:
    • .env
    • credentials.yml
2 个赞

这相当低保真,但它有效。

你需要安装 viuchafa——这本身可能就是一个项目 :slight_smile:

chafa 的高质量模式或使用 viu 时,Windows Terminal 优于 MacOS terminal,因为它支持更多的颜色(感谢微软!)

发布说明:图像渲染(在终端中!)

图像渲染

  • 增加了带后端选择的内联帖子图像预览:
    • 自动优先尝试 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 转义片段显示为纯文本。

注意:我发现有一个站点会阻止远程用户名/密码,因此在这种情况下此客户端将无法工作(除非您拥有该站点并可以设置 API 密钥!),欢迎提出建议,但目前不支持这些情况。

我不确定我会在现实世界中使用它,我看不到它对我有什么用,但我试过了,它很令人愉快。我喜欢能够从一个裸机、原始的界面与下一代论坛平台进行交互。

在某种程度上,它在美学上非常令人愉悦。

1 个赞

是的,我想它可能在以下情况下有用:

  • 您使用的是低保真平台时
  • 在树莓派(Raspberry Pi)上捣鼓时(顺便说一下,尚未测试)
  • 从服务器检查您是否在线……或者前端代码是否崩溃!:smiley:
  • 对于一个非常基于文本的 Discourse 站点……
  • ……以及作为一种技术好奇心 :slight_smile:

我一直想用 Terminus 在我的手机上测试一下……

3 个赞

好的,可能是今天的最后一次更新:

  • 界面现在可以响应窗口大小调整了 :tada:
  • 顶部栏说明中的内容有所改进
  • 键 1 到 (1)0 现在会打开主题列表中的相应编号主题

请记住运行 git pull 来获取更新。

2 个赞

伙计,我现在得开始做我的 ASCII 艺术品了!!
¯\_(ツ)_/¯

2 个赞

我添加了一个完全可定制的主题系统,“fairground”是这样的:

“slate”是这样的:

详情请见 README :graduation_cap:

4 个赞

好的,各位,一些劲爆的 :tangerine: 更新来了:

  • 添加对私信的支持 - 连按两次 f 键 :tada:
  • 随着宽度扩展,逐步为“类别”、“用户”、“查看次数”添加额外的列
  • 调整垂直分隔线的主题
  • 更新了 README