# PaperTodo · 一张纸
**让桌面上有几张安静、可用、不打扰人的纸。**
一个极简的 Windows 桌面便签工具,只用 WPF 原生实现,没有主窗口、没有账号、没有管理器。
   
**语言:中文 | [English](README.en.md)**
---
## 预览
| 纸片 |
| :---: |
|
|
| Markdown 浏览 |
| :---: |
|
|
| 胶囊模式 | 高级胶囊 |
| :---: | :---: |
|  |  |
| 纸片可折叠为小胶囊,减少桌面占用。 | 折叠胶囊自动贴到屏幕边缘,悬浮时滑出。 |
---
## 设计理念
- **纸片优先** — 每张纸都是独立的无边框窗口,直接存在于桌面上,没有统一管理页。
- **即时使用** — 想记就写,完成就勾掉;位置、尺寸、置顶、内容都自动保存。
- **拒绝管理器** — 不做分类、标签、搜索、归档、同步、账号、统计、提醒。
- **原生实现** — 基于 WPF,不使用 WEB套壳,也不走 MSIX 复杂权限管理。
- **交互优先** — 轻不是低占用洁癖,而是操作路径轻、认知负担轻、界面干扰少。
> 拒绝长出非必要的交互层级和视觉焦点负担。
---
## 项目特色
- **多张独立纸片** — 每张纸是一个独立窗口。
- **一个应用,两种纸片**:
- **待办纸**:一行一个事项,可以勾选、编辑、删除、清理已完成。
- **笔记纸**:普通文本 + MD语法轻量高亮,支持三档 MD 伪渲染。
- **胶囊模式**(默认启用)— 点击纸片右上角可折叠成置顶小胶囊,减少桌面占用,需要时点击唤回。
- **胶囊自动贴边**(默认启用)— 折叠胶囊自动贴边排列;支持多屏,拖动单个胶囊就能换边或挪到别的屏幕。
- **交互层级最优化** — 常用操作大多一两步可达,不必层层点开。
- **脚本胶囊** — 笔记首行写入 `!p` / `!power` ,可快捷运行笔记中的脚本,充分发挥胶囊管理系统能力
- **待办关联笔记** — 可把笔记拖到待办项上建立关联;可直接打开关联笔记。
- **主题切换** — 支持跟随系统 / 浅色 / 深色三种模式。
- **四套配色方案** — 暖纸、墨、林、霞四套配色可即时切换。
- **多语言界面** — 中文、英文、日文、韩文,跟随系统语言。
- **开机自启动** — 可随 Windows 启动后台运行。
- **自定义图标** — 程序目录存在 `PaperTodo.ico` 时优先作为托盘图标,否则用内嵌图标。
- **数据安全** — 自动保存到程序目录 `data.json`,保留 `data.backup.json`;临时文件写入降低异常退出时的损坏风险。
- **原生纸片体验**:使用 WPF 原生控件实现,优雅高效流畅。
- **快捷参数启动**:通过启动参数即可显示、隐藏、切换和新建纸片,方便用快捷键工具或脚本调用。
---
## 纸片功能与操作手册
## 纸片
**基本操作**
- **移动与缩放**
- **置顶**:左上角的类型图标同时也是置顶开关
- **新建**:右上角可新建待办和笔记纸
- **外部编辑器打开**:点击 `MD` 按钮,用外部编辑器打开当前笔记(后缀可在设置中自定义)
- **设置标题**:可自定义纸片标题
**胶囊与贴边**
- **折叠胶囊**:纸片可折叠为置顶小胶囊,减少桌面占用,可便捷再次打开。
- **自动贴边**:折叠胶囊可自动停靠在屏幕边缘,悬浮时滑出。
- **多屏队列**:可把单个贴边胶囊拖到左侧、右侧或其他显示器,松手后自动加入对应屏幕边缘队列。
- **收起全部**:顶部主胶囊可一键收起 / 展开全部贴边胶囊,也可拖动调整所在队列的起始高度。
---
### 待办 (Todo)
适合当天任务、临时事项、桌面小清单。
**基本操作**
- **勾选完成**
- **新增事项**
- **拖动排序** — 按住右侧 `≡` 手柄上下拖动
- **拖拽删除** — 拖动事项到底部删除
- **粘贴多行** — 自动拆成多条事项,并清洗常见列表前缀
- **视觉大小** — 可在设置中选择小 / 中 / 大 / 特大四档显示大小
- **撤销 / 重做** — `Ctrl+Z` / `Ctrl+Y`
**关联笔记**:可把一张笔记从顶栏拖到待办项上建立关联。关联后,待办项后方会显示打开入口;开启“关联笔记显示名称”后,会显示笔记标题。
---
### 笔记纸 (Paper)
笔记纸不是 Markdown 编辑器,只是让一张纸能写得稍微清楚一点。
**格式快捷键**
- `Ctrl+B` — 加粗。
- `Ctrl+I` — 斜体。
- `Ctrl+K` — 插入超链接。
- `Ctrl+Z` / `Ctrl+Y` — 撤销 / 重做。
- `Ctrl + 滚轮` — 按 10% 步进缩放正文文字(点击右下角百分比恢复 100%)。
**支持的 Markdown**:标题 `#`~`######`、加粗 `**文本**`、斜体 `*文本*`、删除线 `~~文本~~`、无序列表 `-`、有序列表 `1.`、引用 `>`、分割线 `---` / `***` / `___`、行内代码 `` `code` ``、代码块 ` ``` `、超链接 `[文本](URL)`,以及少量单行内联 HTML 标签(`b/strong/i/em/s/del/u/code/a href`)。
**不支持**:图片、表格、附件、嵌入内容、块级 HTML、复杂块编辑器。
**外部编辑**:顶栏 `MD` 按钮可用系统默认 `.md` 编辑器打开临时文件
**自定义后缀**:顶栏 `MD` 按钮可改为 `.txt`、`.html`、`.bat` 等系统已关联后缀,由 Windows 关联程序处理临时文件。
**脚本胶囊**:笔记第一行写入 `!p` / `!power` 后,后续内容会作为 PowerShell 脚本运行。折叠成胶囊后显示闪电图标,左键运行,右键打开纸片继续编辑;使用 `!pf` / `!powerf` 可投递到常驻 PowerShell 进程。
---
## 设置
- **外观** — 主题、配色方案、待办视觉大小、标题最大字数、普通悬浮提示和动画开关。
- **全屏置顶策略** — 检测到外部全屏窗口时,可选择纸片和贴边胶囊临时避让,或保持在全屏画面之上。
- **待办与笔记** — 待办关联笔记、关联笔记显示名称、已关联笔记是否显示为胶囊。
- **顶栏按钮** — 可单独隐藏新建待办、新建笔记和外部打开按钮。
- **外部打开** — 自定义笔记临时文件后缀,用系统默认编辑器打开当前笔记。
- **脚本胶囊** — 优先使用 PowerShell 7、隐藏脚本运行窗口、启用常驻 PowerShell 进程。
- **胶囊** — 胶囊模式、自动贴边、多屏左右队列、展开时保留边缘胶囊、收起全部主胶囊。
---
## 托盘入口
PaperTodo 没有主窗口。托盘是唯一的全局入口。
### 托盘操作
- **双击托盘图标** — 显示并拉回全部纸片。
- **右键托盘图标** — 打开菜单(顶部显示当前版本号)。
- **设置** — 打开独立设置弹窗,集中主题、配色、MD 解析、自启动、顶栏按钮、待办关联笔记和胶囊选项。
- **删除纸片** — 列表行右侧 `×` 先切换为确认态,再选择「确认 / 取消」。
### 启动参数
可配置到外部快捷键工具、脚本或 Windows 快捷方式:
```text
PaperTodo.exe --show 显示并拉回全部纸片
PaperTodo.exe --hide 隐藏全部纸片(程序继续在托盘运行)
PaperTodo.exe --toggle 有显示则隐藏全部,全部隐藏则显示
PaperTodo.exe --new-todo 新建一张待办纸
PaperTodo.exe --new-note 新建一张笔记纸
PaperTodo.exe --exit 保存状态并退出
```
参数可省略 `--`,并支持少量别名(如 `open` = `show`,`quit` = `exit`)。
程序已运行时再次带参数启动不会创建第二个进程,而是把命令转发给当前实例;无参数再次启动则显示并拉回全部纸片。
---
## 数据与文件
数据保存在程序目录下:
```text
PaperTodo/
├─ PaperTodo.exe
├─ data.json 主数据文件
├─ data.backup.json 保存前备份,主文件损坏时用于恢复
└─ PaperTodo.ico 可选:存在时优先作为自定义托盘图标,否则用内嵌图标
```
> ⚠️ 不要把程序放在只读目录,否则可能无法保存数据。
---
## 下载与校验
GitHub Actions 构建两个 Windows x64 单文件 exe,直接作为 Release 资产发布:
- **`...-self-contained-compressed.exe`** — 自包含 .NET Runtime,单文件,ReadyToRun + 压缩。
- **`...-no-runtime-uncompressed.exe`** — 框架依赖 no-runtime 单文件,无压缩。
每个产物附带 `SHA256SUMS.txt` 与 Sigstore 签名(`.sig` / `.crt`)。
Release 发行说明从 [`CHANGELOG.md`](CHANGELOG.md) 自动提取对应 tag 的版本小节。
---
## 构建与依赖
```powershell
dotnet build -c Release
```
本地打包只生成 no-runtime 单文件;云端 Release 才同时发布自包含压缩版和 no-runtime 版。
- **Windows / .NET 10 / WPF** — 运行环境与 UI 框架。
- **[AvalonEdit](https://github.com/icsharpcode/AvalonEdit)** — 笔记纸文本编辑与 Markdown 轻量高亮。
- **[Hardcodet.NotifyIcon.Wpf](https://github.com/hardcodet/wpf-notifyicon)** — 托盘图标与菜单。
## 其他
感谢 [linux.do](https://linux.do/) 社区。
---
## Star 增长曲线
[](https://star-history.com/#snownico0722/PaperTodo&Date)