67 行

现在在 Tuff 里,不管当前开着什么,按 ⌘E 就会弹出一个输入框,Windows 和 Linux 上是 Ctrl+E,叫 CoreBox。它第一次出现在仓库里,是 2024 年 2 月 10 号差七分钟零点的一条提交,标题 feat: style optimized with core-box ready,主进程那边 67 行,界面那边 50 行。那时候项目还叫 TalexTouch。

那一版的盒子没有自己的窗口,它就是主窗口。快捷键一按,主窗口置顶、从任务栏里藏起来、显示出来,再通知页面给 body 加一个 core-box 的 class,整个界面就换成了一个输入框。很省事,也很粗糙。

2 月 15 号晚上 9 点多又来一条,addon: app addon ready。addon 当时的意思很朴素,就是一个吃关键词、吐结果的函数,第一个找的是装好的应用。不到两个小时后,另一条提交让这个搜索在 macOS、Linux、Windows 上各有了一份实现。16 号凌晨 1 点多,2.0.0-SNAPSHOT 的发布说明发出去了,里面有一节只写给 Windows 11:想要 Mica 效果,得自己把一个 .Node 结尾的库文件放进指定的目录,还要注意系统是多少位的。Attention 的第一条是 There are still many bugs, and there is no complete availability。这句我觉得是那份说明里最实在的。

借来的窗口

盒子借了十一天主窗口。2 月 21 号夜里 10 点多,有一条提交叫 feat: sprite box window and main window,sprite 大概是想写 split。盒子从主窗口里分出去,有了自己的窗口。为什么拆,提交信息没写。

能从 diff 里看到的,是拆之前的样子。每次弹出,主窗口要被置顶、藏任务栏图标、锁住大小和位置、缩成一条,挪到屏幕上方四分之一的地方;每次收起,再按原来记着的大小位置放回去。为了放得回去,代码一直在听主窗口的 move 和 resize,把宽高坐标写进配置,还有一个变量记着弹出之前主窗口是不是在前台。拆开以后这些就用不着了。新窗口的配置几乎是把主窗口那份整个复制过来,改了标题和最小尺寸,再把不可移动、不可缩放、不进任务栏写成固定选项。

但两个窗口加载的是同一份页面,等于整个前端多跑了一份,主进程发给页面的消息要带上窗口 id,页面再核对是不是给自己的。收起盒子的时候,代码先把窗口挪到屏幕外面一百万像素的地方,过半秒再 hide,为什么这么写,提交里也没说。同一条提交还新建了一个空文件,叫 division-box.ts,里面什么都没有。

两个设置

又过了三个多月,6 月 9 号夜里 10 点多,一条提交叫 feat: optimized box with new auto paste and auto clear func。同一天下午还有一条 box item render styles,管盒子里每一条结果怎么画。

盒子现在是个一直活着的窗口,收起来只是藏起来,上次输进去的字还在里面。auto clear 大概是这么冒出来的,提交信息只写了功能,没写原因。设置里多了两项,Auto paste 的说明是 Paste what you copied in searchbar,Auto clear 的说明是 Clear searchbar after box hidden。默认值分别是三分钟和十分钟:盒子弹出来时,要是三分钟之内复制过文字,就填进输入框,只填一次,图片不管;盒子收起超过十分钟,输入框清空。两项都做成了九档下拉框,从 Disabled 到 15 min,最后一档标着 15 min,值填的是 750 秒,差了两分半。

实现靠的是主进程里新加的一个循环,每秒读一次剪贴板,文字、二进制、图片各读一份。原来读 HTML 的那一行,在同一条提交里也被注释掉了。

月底

6 月 24 号晚上的提交,Fix the matching logic, optimize the order order,夹带了一个 vscode-profile 开头的 .cpuprofile 文件,文件名里的时间是 22 点 49 分,提交在七分钟后。26 号晚上,Reconstruct the search code,搜索的逻辑从 search-box.ts 里拆出来,新建了一个 133 行的 search-core.ts。

那几个月的提交信息错别字不少:feet(想写 feat),sprite,还有 order order。月底的最后一条是 feat: addon ready adapt hot reload,下午 4 点多,三个文件,加 22 行删 16 行。