待办事务mindwtr

一、结论

三段走完,终局是 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;靠直读本地库落库(如批量写周期列)
R06Android 桌面小部件✅ 官方 App 自带小部件
R07手机端完整操作✅ 增删改 / 完成 / 大描述全可在手机处理
R08农历日期 / 农历重复❌ 全方案无解,冻结
R09工作日重复✅ 按星期重复;调休手工覆盖
R10周期任务(天 / 周 / 月 / 自定义间隔)✅ RRULE(仅支持日 / 周 / 月 / 年 + 星期序数;严格 / 宽松两种语义)
R11一次性定时提醒✅ 桌面 + 手机到点通知
R12标题 + 大篇幅描述✅ 描述几百字换行排版随迁
R13分组(清单 / 项目 / 子任务层级)✅ 项目两级 + 子任务清单
R14多端同步✅ Dropbox 两端同时同步,已实测
R15Google 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 脚本抢活。