为了不让一个临时念头打断工作,我做了一个快捷键 Todo

0 阅读6分钟

我经常遇到这样一种时刻:代码刚写到一半,脑子里突然冒出一句“下午要检查一下线上支付日志”。

这件事并不复杂,甚至只需要十几个字就能记下来。但如果我想把它放进常用的任务管理软件,往往要先离开编辑器,找到软件窗口,进入某个列表,点击新增,再考虑截止日期、分类和优先级。等这一套动作做完,我原来的思路也差不多断了。

不记录,几分钟后可能忘掉;认真记录,又会打断当前工作。

我想做“浮光 Todo”,就是因为这个很小、却每天重复出现的问题。

01-capture-flow.png

真正的问题不是没有 Todo 软件

市面上并不缺少优秀的任务管理工具。它们可以管理项目、文档、团队、日历和复杂的工作流,功能远比我自己做的工具完整。

但在“快速记下一件刚想到的事情”这个瞬间,功能越多,有时反而意味着入口越深。

我把自己的使用摩擦总结成了三点。

第一,记录入口太深。很多产品默认用户已经进入应用,并且愿意花时间整理任务。但我的实际场景通常是正在使用另一个软件,只想用几秒钟保存一句话。

第二,任务很容易从视线里消失。任务记录完成后,软件一关,事情也跟着藏了起来。对于今天必须处理的小事,我需要的不是一张更复杂的看板,而是一个始终能看见、又不会太抢眼的小窗口。

第三,管理任务本身可能变成新的工作。当列表、标签、项目、状态和自动化规则越来越多,我会开始花时间维护系统,而不是完成任务。

所以这个项目从一开始就没有打算成为另一个大型项目管理平台。它只想解决一句话:

想到一件事时,三秒内记下来;真正工作时,今天的事情始终可见。

我给它定下的三个目标

第一个目标是“一步打开录入”。在 macOS 上按下 ⌘⇧Space,屏幕中央直接出现输入框,而且光标已经在里面。输入内容,按下回车,任务保存,窗口消失,我继续刚才的工作。

整个过程应该只有一次快捷键、一次输入和一次回车。用户不需要先选择项目,也不应该被一个复杂表单拦住。

第二个目标是“常驻但不打扰”。今天的待办通过一个半透明悬浮窗展示。它可以始终置顶,也可以调节透明度、锁定位置、收起或临时隐藏。需要时它在眼前,不需要时又不会像一个完整应用窗口那样占据注意力。

第三个目标是“本地优先”。第一版不需要账号,不依赖服务器,也不要求联网。任务保存在本机,可以备份、导出和重新导入。对于一个个人效率工具来说,这既降低了使用门槛,也减少了不必要的系统复杂度。

这三个目标后来也成了取舍功能的标准:如果一个功能让记录变慢、让桌面更吵,或者让本地数据变得难以掌控,那么它就不应该急着进入第一版。

为什么最后做成了三个窗口

最早的想法只是一个快捷输入框。但很快我发现,“捕获”和“整理”是两种完全不同的状态。

正在工作时,我只想记录,不想做决定;有空整理时,我才愿意补充日期、调整分类或者处理历史任务。如果把这些能力全部塞进同一个界面,快速输入框迟早会变成另一个缩小版的主窗口。

于是浮光 Todo 被拆成了三个窗口。

快速添加窗口只负责捕获。它足够小,打开后自动聚焦,回车完成保存。输入“明天 10:00 提交设计稿 #工作”,它可以识别日期、时间和标签;如果只是输入“整理需求文档”,没有明确日期,它就先进入收集箱,留给以后整理。

悬浮窗只负责提醒和快速操作。它展示当天全部待办,可以直接完成任务,也可以打开主窗口。窗口顶部左侧是拖动锚点,右侧保留锁定、收起和隐藏等控制。即使收起,标题和按钮仍然存在。

主窗口负责完整管理。搜索、筛选、排序、收集箱、今天、已完成、归档、回收站和设置都放在这里。它不追求随叫随走,而是服务于用户真正准备整理任务的时刻。

系统托盘则把三者连接起来。即使主窗口被关闭,应用仍在后台响应快捷键。再次点击 Dock 图标时,应用会恢复上一次关闭的主窗口或悬浮窗,而不是机械地永远打开同一个页面。

系统托盘
   ├── 快速添加:捕获
   ├── 悬浮窗口:提醒
   └── 主窗口:整理

01-three-window-overview.png

第一版更重要的是边界

做 Todo 产品很容易不断增加功能:子任务、重复任务、日历视图、团队协作、云同步、移动端……每一个需求看上去都合理。

但如果第一版同时追求这些能力,最初那个“一步打开录入”的目标很可能被淹没。

所以我先保留一条最短的任务路径:记录、查看、完成、归档和本地保存。再补上真正影响日常使用的能力,例如全局快捷键、悬浮窗、收集箱、筛选排序和数据备份。

有些减法同样重要。没有实际功能的用户头像被移除了;“快速添加到今天还是收集箱”的全局选项也被取消,改为根据输入中有没有明确日期自动判断。设置页面不需要搜索任务,那个输入框就不展示。

这些变化让我越来越确定:轻量工具的“简单”不是功能少,而是用户在每个时刻只看到自己需要的那部分。

现在,浮光 Todo 已经实现了我最初想要的体验:一个念头出现时,我不用离开正在做的事情,就能把它安全地放到稍后处理的地方。

不过,一个看起来简单的输入框,背后并不简单。它需要全局快捷键、多个原生窗口、焦点管理、本地持久化和跨窗口数据同步。

下一篇,我会拆开这套实现,聊聊我是怎样用 Vue、TypeScript、Pinia 和 Tauri,把一个输入框变成一个真正可以在 macOS 上运行的桌面应用。