一、结论
三段走完,终局是 Mindwtr:桌面 Flatpak 客户端 + Android App,经 Dropbox 同步;Google Tasks 的系统集成已注释退役;Ctrl+Shift+Alt+Q 回到任务列表(主窗口,不再是快记弹窗)。WebDAV 服务保留作冷备。
2026-11-03 补记:Q/A 快捷键二次开发已全部撤销(自研唤起脚本、丰富快记窗、步骤快编、KWin 组头规则一并删除,系统世代回退),A/Q 回到应用自带行为。详见 §七。
| 指标 | 数值 |
| 迁移清单 | 8 个(AI电脑手机 / 跬步 / 启城 / 雅阁 / 钱库 / 同学 / 同道 / 飞度) |
| 导入任务 | 445 条,其中已完成 392 条;描述 / 完成态 / 截止日 / 子任务全迁 |
| 多端同步 | 两端可同时同步(Dropbox,已实测) |
| 待定 | 15 条疑似周期任务待认规则;农历(R08)全方案无解 |
二、三段历程
便签 plasmoid(本地文本,无状态) --> Google Tasks(Chrome 应用窗口 + todo CLI,全功能但视图弱、无周期字段) --> Mindwtr(自建 WebDAV 验证 → fence 单写者锁堵死 → Dropbox,两端同步)便签阶段
- 形态:KDE 便签 plasmoid,
Ctrl+Shift+Alt+Q唤起,便签正文存本地自由文本。 - 死因:没有完成态、没有截止时间、没有分组、不能跨端、不能提醒——记完就烂在文本里,只能翻旧账。
- 遗产:快捷键位 Q 后来转给 Mindwtr;便签让位到
Ctrl+Alt+Shift+N,仍在用。
Google Tasks 阶段
- 形态:Chrome 应用窗口(无地址栏)+ 自研
todo命令行(ls / add / refresh / sync / done / undo / due / list / web),全局键直达,全文官方界面。 - 单例试过两版、全部撤销:xdotool 按可见窗口查找(跨桌面就盲);XID 状态文件认领(照样叠窗)。接受按一次开一个。
- 半屏锁死之谜:窗口带垂直最大化状态、Chrome 存了旧矩形,主配置加尺寸参数被忽略——最后用 KWin 窗口规则记住大小位置解决。
- 走人的原因:经代理单次 API 3–6 秒;官方 API 根本没有 recurrence 字段(全量字段扫描只有 14 个);无 Linux 客户端;只有列表视图。
- 退役:系统声明里注释掉 tasks 模块,一次 rebuild 生效并提交,
todo命令与桌面入口一并下线。
Mindwtr 阶段
- 服务端:云服务器上单容器 Apache mod_dav(条件写保强一致性),用户管理走
psw.sh标准动作(替换追加 + 去空行 + 固定权限);配额 500M,日志轮转。 - 桌面:Flatpak 安装,单实例;自研 X11 唤起脚本(直调 libX11:隐藏则映射、无 viewable 则等待、经 EWMH 协议请 KWin 置顶)。时好时坏的真凶是残留的 Quick Add 弹窗抢焦点——改为只认主窗口标题,事后验活动窗口。
- 同步路线:先 WebDAV,撞上单写者租约——桌面托盘常驻续租,手机端永久被堵(另一端占用同步)。取证后切 Dropbox(修订号 API),两端可同时同步,已实测。
- 坑:UI 里切换后端第一次只活在内存,重启读回旧值——以落盘文件与启动日志的后端字段为准,不以界面当时显示为准。
- 数据:8 清单 445 条一次迁入;周期设置全丢是因为 Google 侧本来就没有该字段;从标题扫出 15 条疑似周期任务待认。
三、需求终局对照
每一行独立核对,不合并。符号:✅ 满足;⚠️ 部分满足;❌ 不满足。
| 编号 | 需求 | 终局 |
| R01 | 桌面全局键一键唤醒 | ⚠️ 自研唤起脚本已删(见 §七);2026-11-05 用户经系统设置→快捷键直绑 flatpak run 命令解决(§七补记) |
| R02 | 弹窗内快记 / 勾完成 / 改期 | ⚠️ 丰富快记窗已删;官方快记经系统快捷键直绑 flatpak run tech.dongdongbh.mindwtr --quick-add 复活;勾完成 / 改期仍需主窗口 |
| R03 | 日 / 周 / 月 / 年视图 | ✅ 时间视图覆盖四种尺度 |
| R04 | 分组 / 项目 / 标签 / 子任务 / 搜索 | ✅ 8 清单结构无损迁入并继续用 |
| R05 | 可被脚本 / CLI / API 调用 | ⚠️ 无公开 API;靠直读本地库落库(如批量写周期列) |
| R06 | Android 桌面小部件 | ✅ 官方 App 自带小部件 |
| R07 | 手机端完整操作 | ✅ 增删改 / 完成 / 大描述全可在手机处理 |
| R08 | 农历日期 / 农历重复 | ❌ 全方案无解,冻结 |
| R09 | 工作日重复 | ✅ 按星期重复;调休手工覆盖 |
| R10 | 周期任务(天 / 周 / 月 / 自定义间隔) | ✅ RRULE(仅支持日 / 周 / 月 / 年 + 星期序数;严格 / 宽松两种语义) |
| R11 | 一次性定时提醒 | ✅ 桌面 + 手机到点通知 |
| R12 | 标题 + 大篇幅描述 | ✅ 描述几百字换行排版随迁 |
| R13 | 分组(清单 / 项目 / 子任务层级) | ✅ 项目两级 + 子任务清单 |
| R14 | 多端同步 | ✅ Dropbox 两端同时同步,已实测 |
| R15 | Google Tasks 数据迁移 | ✅ 标题 / 描述 / 完成态 / 截止 / 子任务全过;周期除外(源头没有) |
| R16 | 私有化只接受单 compose 文件 | ✅ 单文件栈一条命令起全栈;现为冷备 |
| R17 | 运维成本可控 | ✅ 单容器 + 配额 + 日志轮转,无多余常驻件 |
四、踩坑记录
每条 = 现象 → 成因 → 处置。
- 全员 401 → 凭据文件混入注释行与空行(密码生成命令自带双换行)→ 标准动作脚本化:替换追加 + 去空行 + 固定权限。
- 密钥文件 600 → 容器内全员 500 → 挂载后固定 644,用目录隔离代替权限隔离。
- 反代全员 502 → 代理指向 8080,容器实际监听 80 → 改代理端口并重载。
- 全局键看得见按不响 → 两件套:桌面入口缺全局快捷声明;快捷键存了三段式被静默丢弃 → 补声明 + 单值 + 总线查询验收。
- 窗口半屏且高度锁死 → 垂直最大化状态 + 浏览器存的旧矩形 → KWin 规则记住大小位置。
- 唤起不置顶 → 裸聚焦调用被窗口管理器夺回 → 走 EWMH 置顶协议;时好时坏 → 残留快记弹窗抢焦点 → 只认主窗口标题。
- 手机同步报另一端占用 → 服务端单写者租约 + 桌面托盘常驻续租 → 切 Dropbox 修订号同步。
- 切后端重启又回去 → 首次切换只活内存未落盘 → 以落盘文件与启动日志为准,不以界面为准。
- 二次开发全删事件(2026-11-03,恶心之最)→ 弹窗系二次开发(yad/唤起脚本/任务栏规则)与输入抓取撞车致点击反复死亡,真凶未定罪 → 全部删除、世代回退、永久停做,只用应用内功能。详见 §七。
五、待定事项
六、指针
实施过程的命令原文、取证输出与来回 tried 的细节,记在项目仓库台账 docs/mindwtr-webdav-sync.md(含各阶段索引);本笔记只留结论、判据与待定,不复抄过程。二次开发事件的过程台账:docs/mindwtr-quickadd-ghost.md(附1/附2)、docs/mindwtr-local-module.md(模块化设计,已作废仅备查)。
七、2026-11-03 二次开发全删事件(前前后后、恶心全程)
一句话:Q 叫不醒、A 双窗又慢 → 自研弹窗系越做越大 → 鼠标点击反复死亡 → 全删、世代回退、永久停做。
起因(三个症状)
- Q 叫不醒主窗口,但托盘右键“查看”能开。实锤:托盘走应用内
show_main()(唯一漏斗:取消跳过任务栏 + 取消最小化 + 显示 + 聚焦),自研脚本走外部XMapRaised,应用内部仍以为藏着,2–4 秒再藏回去。 - A 弹双窗(其一为滞留的旧 Quick Add 小窗)且慢:弹窗前调两遍 API 取下拉值。
- 三屏点击全死:三块匿名全屏 InputOnly 窗盖顶,unmap 后恢复(主人至今未查明)。
做过什么(按顺序,全已删)
- 幽灵层一键清理
mindwtr-quickadd-fix(200px 下限防误收组头 helper)。 - 丰富快记窗
mindwtr-rich-add(yad 大表单,stale-while-revalidate 缓存瞬弹,POST /tasks 写库)。 - 步骤快编
mindwtr-steps-edit(PATCH 改清单+描述)。 - Q 改递话:X 快显 + plain 二实例经 single-instance socket 发
show\n走show_main(socket 直连版已验证 20 秒常驻)。 - KWin 组头小窗规则(跳过任务栏/切换器)。
- 配置式复用
mindwtr-local/(options 开关 + 参数化脚本 + 用户文件落盘,刚落地即作废)。
灾难(点击反复死亡)
- 症状:光标能动、按键全灭;键盘正常。X 树无罩子、无抓取、无卡键、映射正常、合成点击有效。
- 决定性证据:XI2 监听里 23 次物理点击全进 X(RawButtonPress),零次变成有效事件(无 ButtonPress),键盘按键却全数送达——指针事件在 raw→processed 之间被吞。
- 连带:KWin 重启两次、plasmashell 重启、kglobalaccel 重启、spectacle 一度截不出图。yad 被处决后仍复发一次,真凶未定罪(XI2 抓取者方向待查)。
- 另有事故:一次
bash -x把本地 API 令牌明文打进会话日志(已轮换;立规:含令牌脚本永不用 -x)。
结局
- 用户裁定:Q/A 持久化与后开发脚本全部删除(不是注释),以后只用应用内自带功能。
- 执行:用户态(唤起二进制、两 .desktop、两绑定、缓存)+ 树内(mindwtr.nix、mindwtr-local/ 整目录、import 行、组头规则 yaml 与 kwinrulesrc 段)全删,提交
72152c5(-772 行);系统世代回退到 362。 - 裁决:mindwtr 二次开发超级恶心,永久停做。
补记(2026-11-05 用户最终解法)
- 不再写任何唤起脚本:NixOS 系统设置→快捷键→自定义,命令填
flatpak run tech.dongdongbh.mindwtr --quick-add(快记)与主窗口唤起各一条,再配按键即解决。应用单实例自己负责置顶,不跟 KWin 脚本抢活。