Write in vain. — 写了也白写,白写也写。
naught /nɔːt/ —— 单音节古英语:无、零、無。 come to naught = 化为乌有。 这是一款相信"写作不必留下痕迹"的写作软件:打开,写,关闭。 不保存、不恢复、不留档。软件死了,一个按键让它活回来—— 无中生有。
English version: README.en.md.
- 极简美学:页面就是全部。没有工具栏、没有设置窗口、没有多余 的任何东西——「無」的界面只有纸。
- 禅意美学:写与灭是一体。质感不来自任何可调的东西,全部来自 画面本身——扫描线、磷光、余晖像呼吸一样自然起落。打开即写, 关闭即无。
- 死亡驱力:每一段在这里写下的文字都走向自己的消失。弗洛伊德 把这种朝向消解的本能叫作死亡驱力(Todestrieb)——naught 给了它 一个按键:死(⌃⌘N)。写完即死,文字不留尸体;再按生 (⌃⇧⌘N),空白的纸无中生有。
- 伊卡洛斯:写作者是伊卡洛斯,飞向意义之阳,蜡翼融化,坠回海面。 naught 不提供任何存档来缓冲这次坠落——它相信只有不给退路的写作 才会飞得够高。坠海即完成,无迹可寻。
- ADHD 友好:为注意力涣散的大脑设计的写作环境——单一任务 (没有标签页、没有通知、没有"要不要保存"的对话框)、即时的视觉 反馈(磷光辉光、块状光标、打字机节奏)把注意力锚在当下。写坏了 也不可惜——反正都会消失,所以没有完美主义陷阱。
naught(無) 是一台桌面写作仪器:打开就是一张空白纸,写的东西在 关窗的一刻化为乌有。草稿、灵感、推敲、宣言——一切写出来就是为了 消失的文字,都在这里。
按下 ⌘T,它又是一座 1975–1982 年的显像管陈列馆:屏幕变成那个 时代的机器。对着 1981 年的 Osborne 琥珀屏码字,写科幻时,显示器 就是那台时间机器。
| 机 | 原型 | 年代 | 磷粉 | 出厂字体 |
|---|---|---|---|---|
| 琥珀 | Osborne Executive 类便携机(便携写作机鼻祖) | 1981 | P3 琥珀 | Fusion Pixel(缝合怪中文像素字) |
| 绿磷 | IBM 5100(第一台便携计算机) | 1975 | P1 绿 | VT323 |
| C64 | Commodore 64 + 彩监(16 色 PETSCII 真彩) | 1982 | P22 三色 | Press Start 2P |
| 白磷 | IBM PC 5150(CGA 白字) | 1981 | P4 白 | Fixedsys Excelsior |
模拟的是画面现象,不是机器:只重现人眼隔着玻璃看显像管的那层 质感。无声音、无频闪、无任何"模拟器"部件。
模拟显像管(「显」)的物理拟真(配方与模型见 docs/crt-filter.md):
- 磷粉余晖:双指数衰减,按机型对照 P1/P3/P4/P22 实测标定;滚动残影 原位渐暗,新敲字符激发增亮后回落
- 束斑物理:亮度越高束斑越宽——亮字核心饱和、四周变软
- 2px 柔波扫描线、行扫描激励、真高斯辉光、入场暖机(暗→亮→过冲→ 回落)、滚动刷新带、噪声灰尘、玻璃暗角与对角反光带
- 光栅衍射:竖直亮边的红/蓝彩边;C64 是圆点三色阴罩(RGB 荧光粉栅, 3px 周期逐通道错相)——真彩机的三色结构,单色机没有
- 块状反相光标:整格闪烁的炽磷亮块,与 I 形光标同拍同睡
- 追随视角:锁定 = 复现鼠标离开窗口后的"完美视角";解锁 = 观察者 跟随鼠标(视差 + 扫描慢放)
- 全部效果跑在 GPU 上(QRhi·Metal 离屏渲染 + 回读);打字延迟优先
写作侧的独特件:
- 打字机速度打印:字符画逐行敲出(整页约 1.6s),不是一闪而过
- 画布与文字分层:画笔/橡皮擦只碰笔迹;笔迹随磷色与阴/阳变色, 与文字统一撤销/重做(100 步);按住 Shift 拖动 = 按住笔刷
- 立为图(⇧⌘A):选区立为字符画源图,可缩放、重勾;另有隐藏 功能:拖图片进窗口即整页字符画
- 编程高亮(⌘B):等宽字体 + 行号 + 语法高亮(KF6,可选依赖)—— 纯草稿,无运行、无保存
- 言 / 隔(⌘L / ⌘F):批量校对搭档——行头尾加「」/ 逐行隔空行
- 文本处理:四种线框、压行/还原、路径↔树、居中——作用于选区或 当前行/全文,一步撤销
- 字符缩放与笔刷缩放互不干扰、按住加速;锚定缩放"指哪大哪"
- 字体三级模型:出厂默认(删不掉)/ 经典库存(6 款,可删)/ 暂时 默认;自定义字体放进字体文件夹即用
打开,写。右键(Windows/Linux)或 macOS 菜单栏「项」= 全部功能入口。
⌘T 模拟显像管(琥珀) ⇧⌘M 换机(琥珀→绿→C64→白)
⌘B 编程高亮(等宽+行号+高亮) Esc 退出画笔/橡皮擦/编程高亮
⌘N 清空文字(可撤销) ⌃⌘N 死 ⌃⇧⌘N 生
macOS 上 ⌘ = Command;Windows/Linux 一律用 Ctrl(死/生 为 Ctrl+Win+N 与 Ctrl+Shift+Win+N)。菜单栏仅 macOS 有(「项」); Windows/Linux 的入口是右键菜单,项目一致。
| 功能 | 快捷键 |
|---|---|
| 编程高亮(编) | ⌘B |
| 模拟显像管(显) | ⌘T |
| 换机(四机循环) | ⇧⌘M |
| 追随视角锁定 | ⇧⌘T |
| 机器原生网格(80 列) | 显会话内 ⌘0 |
| 立为图(选区 → 字符画源图) | ⇧⌘A |
| 拖入图片 → 字符画 | 拖拽(隐藏功能) |
| 退出模式(画笔/橡皮擦/编程高亮) | Esc |
| 功能 | 快捷键 |
|---|---|
| 言(行头尾加「」,空行跳过) | ⌘L |
| 隔(逐行隔空行,幂等) | ⌘F |
| 单线框 / 双线框 / 圆角框 / 粗线框 | ⇧⌘G / ⇧⌘H / ⇧⌘U / ⇧⌘V |
| 压成一行 / 还原为多行 | ⇧⌘J / ⇧⌘K |
| 路径列表 → 树 / 树 → 路径列表 | ⇧⌘P / ⇧⌘R |
| 居中 | ⇧⌘C |
| 功能 | 快捷键 |
|---|---|
| 摹(全选并复制) | ⌘S |
| 空(清空文字,可撤销) | ⌘N |
| 阴(黑底)/ 阳(白底) | ⌘I / ⌘O |
| 涂(画笔)/ 擦(橡皮擦) | ⌘D / ⌘E |
| 消(清空全部笔迹) | ⇧⌘N |
| 按住笔刷 | 涂/擦中按住 Shift 拖动 |
| 功能 | 快捷键 |
|---|---|
| 字号放大 / 缩小 / 复位 | ⌘= / ⌘- / ⌘0(按住加速) |
| 笔刷加粗 / 变细 / 复位 | ⇧⌘= / ⇧⌘- / ⇧⌘0 |
| 自由缩放 | ⌘+滚轮 / 触控板捏合 |
| 横向滚动 | ⇧+滚轮 / 触控板横向平移 |
| 功能 | 快捷键 |
|---|---|
| 上一字体 / 下一字体 | ⇧⌘, / ⇧⌘. |
| 恢复默认字体 | 菜单 |
| 撤销 / 重做 | ⌘Z / ⌘Y |
| 软 Tab(4 空格) | Tab |
| 功能 | 快捷键 |
|---|---|
| 死(立即退出,无保存提示) | ⌃⌘N |
| 生(全局键重开,登录项代理持有) | ⌃⇧⌘N |
预构建产物在 Releases。macOS 包未公证:首次打开请 右键 → 打开;Windows 的 SmartScreen 选"更多信息 → 仍要运行"。
macOS 一条指令(装到 ~/Applications,进入启动台):
curl -fsSL https://raw.githubusercontent.com/2liver/naught/main/install/one.sh | sh
自定义目录:… | sh -s -- <目录>(仅默认目录会被启动台索引)。无法访问
GitHub 时先 export https_proxy=http://127.0.0.1:7897。
Windows(PowerShell 一条指令;强制 TLS 1.2,直连失败自动走镜像):
[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; $d='D:\naught'; md $d -Force|Out-Null; $base='https://github.com/2liver/naught/releases/download/v0.3.14/naught-windows.zip'; foreach($m in @('','https://gh-proxy.com/','https://ghproxy.net/','https://gh.ddlc.top/')){try{iwr ($m+$base) -OutFile "$d\n.zip" -ErrorAction Stop; break}catch{}}; Expand-Archive "$d\n.zip" -DestinationPath $d -Force
Linux(AppImage 单文件):
curl -fsSL https://github.com/2liver/naught/releases/latest/download/naught-linux.AppImage -o ~/.local/bin/naught && chmod +x ~/.local/bin/naught
需要 Qt 6.9+(含 ShaderTools)与 CMake。语法高亮为可选依赖 (KF6 SyntaxHighlighting;未装则「编」退化为等宽 + 行号):
cmake -S . -B build
cmake --build build
Qt 不在默认路径时加 -DCMAKE_PREFIX_PATH=<Qt 安装目录>/<版本>/<编译器>。
macOS 装进启动台:./install.sh。
--selftest:几何与行为回归门禁,CI 三平台强制通过。--bench:本地基准(离屏软件光栅;真机走 GPU 合成,数值更优): 2000 行文档打字 ≈ 0.5 ms/键,缩放 ≈ 0.2 ms/次,滚动 ≈ 3 ms/步; 模拟显像管下打字 ≈ 0.2 ms/键。锚定缩放的代价与锚点上方块数成正比。 已知边界:单行十万字(巨型粘贴)≈ 100 ms/次——QPlainTextEdit 的 块级重排固有特性,正常写作不受影响。
「無」字图标由思源宋体 Heavy 渲染(黑底白字,SIL OFL 1.1,见
resources/icon/OFL.txt)。重新生成:
cmake --build build --target naught_icon_tool
./build/naught_icon_tool <SourceHanSerifSC-Heavy.otf> build/icons
再把输出回填 resources/ 与 resources/icons/ 对应位置。
- docs/crt-filter.md —— 模拟显像管的配方与物理模型
- docs/fidelity-audit.md —— 各机型拟真度台账
- docs/roadmap.md —— 里程碑与开工流程
MIT © 2026 2liver(见 LICENSE)。内置字体各自持 OFL 等许可,
文本见 resources/fonts/ 与 resources/icon/OFL.txt。