
开发者用 Claude 编写 Rust 和 GTK4 的 Mastodon 桌面客户端
来源标题:Show HN: Mastodon desktop client, made with Claude, using Rust and GTK4
开发者借助 Claude Code 用 Rust 和 GTK4 编写了一款 Linux 桌面 Mastodon 客户端,功能包括多账号 OAuth 登录切换、多种时间线与实时更新、发帖与投票及媒体上传等完整操作。该项目受 Mastodon 新版 Web UI 改版启发,已发布在 Hacker News 的 Show HN 板块。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
一个 Linux 桌面 Mastodon 客户端,用 Rust 和 GTK 4 编写。由 AI Sloperator 使用 Claude Code 创建。
多账号,支持 OAuth 登录、切换和登出(登出会撤销 token)
时间线:主页、本地、联邦、话题标签、列表、热门帖子、书签和收藏
通知、提及和私信会话
通过 streaming API 实时更新,带未读角标和“新内容”按钮
帖子:内容警告、敏感媒体封面、带替代文本的图片查看器、
链接卡片(右键可打开或复制链接,也可复制为 Markdown)、投票
(可投票)、带缩进回复的帖子串、翻译
操作:回复、转发、收藏、加书签、编辑、删除、删除并重新起草、
置顶、静音会话、复制链接或文本、举报
编辑器:按实例限制显示字数计数器、内容警告、
可见性、语言、媒体上传(文件选择器或粘贴)并支持替代文本、
投票,以及 Ctrl+Enter 发送;如果服务器慢或宕机,会显示该状态,
你可以取消或重试,而不会丢失帖子
个人资料:简介、已验证字段、关注或关注请求、新帖通知、
隐藏转发、静音、屏蔽、域名屏蔽、列表成员关系、关注者和正在关注
搜索账号、话题标签和帖子(其他服务器的 URL 会被解析)
探索(热门帖子、话题标签和新闻)、已关注的话题标签、关注请求、
列表管理、静音和屏蔽、资料编辑(包括头像和横幅)
关键词和话题标签过滤器:查看、添加、编辑和删除;匹配的帖子会
按各过滤器的设置折叠在警告后面或隐藏
任何服务器上的个人资料、帖子和话题标签链接都在应用内打开
侧边栏可以收缩为仅显示图标(底部按钮),标签以工具提示显示
键盘快捷键
按键
操作
Ctrl+N
新建帖子
F5 / Ctrl+R
刷新
Alt+Left / Esc / Backspace
返回
Ctrl+F
搜索
Ctrl+Enter
发送帖子
Ctrl+Q
退出
PgDn / Space
向下翻页
PgUp / Shift+Space
向上翻页
在不跳过任何内容的情况下,翻页会落在帖子的开头,并在高于窗口的帖子中
逐页浏览。在信息流顶部向上翻两次会检查新帖子;在线程任一端翻过两次
会检查新回复。Space 和 Backspace 在文本框中仍正常输入,
Backspace 在顶层页面不执行任何操作(没有可返回的地方)。
sudo apt install pkgconf libgtk-4-dev libsoup-3.0-dev
然后,使用来自 rustup 的稳定 Rust 工具链:
cargo build --release
./target/release/fedigoo
唯一的 crate 依赖是 GTK 绑定(gtk4)和 libsoup 绑定(soup3)及其自身的依赖。JSON 处理和 HTML 转换是内置的。HTTPS 使用 libsoup 和 glib-networking。
fedigoo # GTK 选择后端(遵循 GDK_BACKEND)
fedigoo --x11 # 强制使用 X11
fedigoo --wayland # 强制使用 Wayland
安装
./target/release/fedigoo --install
这会将可执行文件复制到 /.local/bin/fedigoo,并添加菜单项
(/.local/share/applications/com.aisloperator.FediGoo.desktop)和一个图标
(位于 ~/.local/share/icons/hicolor/ 下),因此 FediGoo 会出现在你的
应用程序菜单和坞站中。fedigoo --uninstall 会删除这些文件,
但不会动你的账号和设置。
通过欢迎屏幕登录。FediGoo 会在浏览器中打开你实例的
授权页面;将页面显示的代码粘贴回 FediGoo。
所有本地数据(账号、访问 token、OAuth 客户端注册、
偏好设置)位于 $XDG_CONFIG_HOME/fedigoo/config.json,通常为
~/.config/fedigoo/config.json。该文件创建时仅所有者有权限。
cargo test # 离线单元测试
cargo test -- --ignored # 同时访问公共 mastodon.social API
在没有显示器的情况下测试 UI,可以使用 GTK 的 Broadway 后端,
tools/broadway-input.py 会向它发送真实的指针和键盘输入(点击、
拖拽、快捷键)来替代 Web 浏览器。其文档字符串中有详细信息。
本节在每次发布前更新,基于参考系统上的构建:
Debian 13(trixie),amd64(x86_64),使用 Debian 自带的 GTK 4、libsoup 3
和其他系统库的软件包。
其中有多少是参考系统特有的,因列表而异:
这些是 Cargo.toml 中的依赖及其版本要求。
gtk4 以 gtk 名称导入,soup3 以 soup 名称导入。
这些是发布二进制直接链接的系统库,如
参考系统上 objdump -p 所报告。通过 crate 绑定,应用代码还会
调用 Pango 和 GDK,它们作为 GTK 的一部分加载。构建还需要
pkg-config 和 glib-compile-resources 工具以及 GTK 4 和 libsoup 3 开发
文件(Debian:pkgconf libgtk-4-dev libsoup-3.0-dev)。
这些是构建中的其他所有 crate(普通依赖和构建时依赖),
按本次更新时 x86_64 Linux 的 Cargo.lock 解析结果,
来自 cargo tree -e normal,build。如果某个 crate 出现多个版本,会列出所有
版本。在相同 Cargo.toml 要求下稍后执行 cargo update
可能解析出不同版本,从而引入不同 crate。其中一些
(如 system-deps、pkg-config、syn 和 toml)仅在编译时使用,
不属于二进制的一部分。
这些是由于上述直接依赖而加载的库,如 ldd
在参考系统上对发布二进制所报告,外加 GLib 和 GTK 在运行
时加载的模块,ldd 不会显示这些。具体集合取决于发行版
如何构建 GTK、GLib 和 libsoup,以及桌面环境,因此其他系统可能不同。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。