极简的 X,加上一副键盘
minimal-x 是 X 网页版(x.com / twitter.com)的阅读扩展。它建立在 Minimal Theme for Twitter / X(MIT)之上,保留上游整套界面简化能力, 并补上上游一直没有的那件事:一套不用碰鼠标、一条接一条读完时间线的键盘。
- 纯本地运行,代码里没有任何网络请求
- 只申请
storage一个权限 - 基于上游 Minimal Theme for Twitter / X(MIT)
- 不上架商店 · 本地加载
本扩展只在本地以「开发者模式」加载,没有商店版可装,也没有下载入口 ——
安装步骤在下面 「装到自己浏览器上」一节。
需要 Chrome 105 或更高(2022 年 8 月起;用到了 :has(),更早的版本会装得上但部分功能静默失效)。
它做了什么先说最要紧的那一件
用键盘读时间线时,最烦的不是「跳到下一条」本身,而是跳过去之后那条被顶部挡住了一截 —— 你得再滚一下才能读到第一行。minimal-x 把目标帖对齐到头部下沿, 跳过去就能从第一个字开始读。
这个对齐做了很多轮才稳。页面上看着只是「一条推文贴到顶上」,实际要处理的情况包括: 用户自己用鼠标滚过、页面用触控板捏合放大过、切换过窗口、注意力环被宿主重渲染拆掉过…… 凡是认不准的时候,它宁可什么都不做,也不猜一个位置然后跳错。 这条「认不出就不动」的原则贯穿整个扩展。
核心能力带「本 fork 新增」标记的是上游没有的
键盘逐条浏览 本 fork 新增
JK 上下逐条,并把目标帖贴到视口顶部(瞬时对齐、没有平滑滚动那种拖影)。 上游扩展本身完全没有键盘导航这一族。
就地展开全文 本 fork 新增
正文被截断时按 e 直接展开当前这条,不必动鼠标、也不必进详情页再退回来。 并把 e 写进 X 自己的「键盘快捷键」面板 —— 免得过一阵忘了这个键是谁加的。
界面极简
移除推广帖与推荐、趋势栏、时间线标签页(为你推荐 / 正在关注…)、帖子浏览数、各种建议模块; 可以调时间线宽度、去掉时间线与帖子的边框。
面板里几乎每一项都能关
左侧导航栏 15 个入口可以逐个隐藏(首页 / 探索 / 通知 / 消息 / Grok / Premium / 职位…), 另有搜索栏、发推按钮、Inter 字体、Zen 写作模式、导航栏垂直居中、未读角标等开关。
宽屏与放大后仍然居中 本 fork 修
时间线列居中在你眼睛看到的可视区域里。触控板双指放大之后再刷新,也照样居中 —— 上游按「布局视口」算,捏合放大后会明显偏出去。
修好上游的「标题通知」 本 fork 修
打开后标题栏会显示未读数、标签页图标带上小红点。上游那版靠写死的图标编号匹配,X 换过一次图标名之后 它就整条静默失效了(开关按下去毫无反应、控制台一个字都不报)。
纯本地
没有后端、没有账号、没有统计与遥测,源码里没有任何发起网络请求的调用 —— 这是可以静态核查的事实, 不是一句承诺。设置只存在你本地(不参与浏览器账号同步)。
键盘本扩展只提供下面这几个键
| j k | 跳到下一条 / 上一条,并把目标帖贴到视口顶部 |
| e | 展开当前帖被截断的正文(只展开,不收起 —— 理由见常见问题) |
| ? | 打开 X 自己的「键盘快捷键」面板;中文输入法下按全角 ? 也能触发 |
只有这几个,是设计不是没做完。互动键(点赞 / 转发 / 回复 / 收藏)刻意不做 —— 它们要么会改动你账号里的数据,要么根本不在时间线上(收藏藏在「更多 ⋯」里)。 X 自己带的快捷键(发帖、点赞、私信…)本扩展也一概不接管, 按下去仍是你熟悉的那个行为。
设置面板点工具栏图标打开,名字与面板里一致
| 总开关 | 最上面那一个。关掉它,所有改动一起停,页面回到未装扩展的样子。 |
| 时间线 | 时间线宽度、Zen 写作模式、粘性头部、趋势栏、浏览数、推广帖、推荐关注、时间线标签页、时间线与帖子边框。 |
| 导航 | 左侧栏 15 个入口的逐项开关,加上 𝕏 标志、导航栏垂直居中、未读角标、Grok 抽屉按钮。 |
| 界面 | 阅读模式、Inter 字体、搜索栏、透明搜索栏、发推按钮、标题通知。 |
| 计数 | 回复 / 转发 / 点赞 / 关注四项数字的显示与隐藏。 |
| 高级 | 自定义 CSS —— 想临时改点什么,不用等扩展更新。 |
面板上那个版本行(标题下方)是本扩展的「自证」:版本 · 构建时间 · commit。
尾部带一个 + 表示构建那一刻工作区还有未提交的改动。
截图排查问题时,这一行能直接定位到具体是哪一次构建。
装到自己浏览器上开发者模式加载,四步
- 拿到本仓库的代码,装依赖并构建:
pnpm install→pnpm dev
看到日志里的Development extension ready at …/bundle/chrome-dev就是构建好了。 - 打开
chrome://extensions(Edge 是edge://extensions)。 - 右上角打开 开发者模式,点 加载已解压的扩展程序。
- 选择
bundle/chrome-dev这个目录。
必须选 bundle/chrome-dev,不能选仓库根目录。
选错会加载到一个「空壳」:扩展能装上、控制台也不报错,但功能全都不生效
—— 这是最容易白排查半小时的一个坑。
自查办法:打开 x.com,在页面控制台里看 document.documentElement 上有没有
data-mytwitter 这个属性。
常见问题点开看答案
装好了,按 J / K 没反应?
按顺序排除:
① 页面比扩展先存在。扩展只在页面加载时注入内容脚本,装扩展之前就开着的标签页里没有它
—— 刷新一次即可。
② 加载的是空壳目录。见上一节末尾的自查方法。
③ 焦点在输入框里。焦点在发帖框或评论框内时,单键一律不生效(否则打字就会跳条)——
这是刻意做的。
为什么 e 只能展开、不能收起?
因为 X 自己就没有「收起」这个能力 —— 帖子被截断时它给一个「显示更多」,展开之后没有回头路。 我们要做收起,只能自己往页面里写回一套夹子样式,于是屏幕上那个「已收起」是假的:X 的账本里它已经展开, 而我们让它看着像没展开。任何一次重新渲染、列表回收或刷新都可能把它打回原样,而那时官方那颗「显示更多」不会回来 —— 这一条就卡在假折叠态里,只能刷新页面。 ⇒ 宁可少一个键,也不造一套会骗人的状态。
中文输入法下这些键为什么还能用?
中文标点模式下 Shift+/ 上屏的是全角「?」而不是半角「?」, 浏览器收不到那个键。本扩展会把全角字符归一成半角再判断, 所以中文输入法开着也不用手动切回来。j / k / e 同理。
我的数据存在哪里?会被上传吗?
不会上传。本扩展没有后端、没有账号体系、没有统计与遥测,源码里没有任何发起网络请求的调用
—— 这是可以静态核查的事实。设置存在 chrome.storage.local,只在本机磁盘上,
不参与 Chrome 账号同步。它只申请 storage 一个权限,
不申请 tabs / cookies / webRequest / history 等任何其它权限。
它会替我发帖、点赞、转发吗?
不会,也没有这个能力。它只改变你自己浏览器里的页面显示:隐藏杂项、调整版式、接管键盘浏览。 按键全是单键,不存在需要组合键才能触发的写操作。唯一一个「会点东西」的键是 e, 而它点的是 X 自己那颗「显示更多」按钮 —— 仍然只是展开给你看。
它和商店里那个 Minimal Theme for Twitter / X 是什么关系?
后者是上游,由 Typefully 团队维护(最初作者 Thomas Wang),以 MIT 许可开源。 minimal-x 是它的一个非官方个人分支:保留上游的界面简化能力,加上自己需要的键盘族, 并修好上游那个静默失效的「标题通知」。 本分支由个人维护,与上游、与 X Corp. 均无隶属关系,也不代表上游的任何立场。
X 改版之后功能坏了怎么办?
X 平均每几周到几个月改一次前端,「某个功能突然失效」是必然会遇到的事,不是意外。 本扩展的判断逻辑刻意不依赖某一个写死的类名,而是认结构与几何证据 —— 这也是为什么它坏的时候通常是「一部分不灵」而不是「整片崩掉」。
关于来源、许可与商标
上游项目:Minimal Theme for Twitter / X —— 最初由 Thomas Wang 创作, 现由 Typefully 团队维护, 以 MIT 许可发布(Copyright 2022 Mailbrew Inc)。 MIT 许可允许修改与再分发,本分支据此保留上游的版权与许可声明。
minimal-x 是这个项目的非官方个人分支,不上架任何应用商店、不对外分发二进制包。 「Twitter」「𝕏」等名称与商标归其各自所有者(X Corp.)所有, 本分支与 X Corp. 无任何关联,也未获得其商标使用许可; 本页提及上游名称仅为说明来源。