完全用 Linux 工作之《结合 Firefox 与 Taskwarrior 高效管理大量书签》

我的 Firefox 的收藏夹里面的东西越来越多了,逐渐面临一个大问题就是 Firefox 自带的标签功能太弱:

  • 只能使用树状结构,但是大部分网页属于不止一个分类,应该同时存在于多个节点下才方便查找。与此同时,用标签对同一个网页多次标记,然后用过滤来查找是一种更惬意且高效的方法 (=> Zotero & DEVNOthink)。
  • 不能记录时间,在收藏夹里面吃灰的书签,基本等于没必要看,而 Firefox 要清理起来就麻烦了,不能做 “删除所有年龄超过半年的标签” 的这种操作。
  • 不能标记重要性,有一些页面每次看都有新的体验,还有一些页面不看也罢,还有一些是学术性不想看也要看的
  • 不能对标签” 存档 “,没有办法看到已经删除的标签
  • 不能对标签做短的笔记
  • 需要类似 Pocket 的 “稍后阅读” 的功能,然而分离开 “稍后阅读” 与书签又没有意义
  • 不能模糊搜索

对现有的标签管理工具考察了一圈,发现对我的需求来说都很拉垮。

Firefox 有一些挺有意思的标签管理器,但是都没有突破 Firefox 本身标签的限制。相对好一点的是 Bookmarks Manager and Viewer :: add0n.com

而商业性的软件比如 Pocket 和 Instapaper 给大众设计的,总体上都是功能简略,几乎只能线性地一页一页地看,而且标签功能非常的简陋。

开源社区有不少优秀的解决方案,但和我的需求还是不符合,比如 buku 只能单纯地收集网页链接,搜索某个网页看演示确实华丽,但缺一些功能。ArchiveBox 还有 Shiori 都是停留在偏保存内容的方面。

更专业一点的 Zotero 还有 Paperpile 对于网页这种不太属于文档的东西,一些操作有一些麻烦。

其它的一些 Rationale 可以看我的 rant => https://moe.cat/web/statuses/107787421644190959

==== 正文 ====

考虑了一下,电脑里装的 taskwarrior 这个 todo 软件恐怕是这个星球上对我来说最高级的书签管理器。唯一缺少的一个部件是从浏览器保存书签的功能,所以我就写了一个。

安装过程就是安装一个 Firefox 插件,然后在本地启动一个监听的小脚本,具体看 README.md

https://github.com/shenlebantongying/Taskwarrior-Connector

插件的功能就是点击按钮,然后会自动抓取链接和标题,填一下标签就行了

然后从命令行里面用 task 就可以看到刚刚收集的网页了

打开 url

task 是按照 ID 来获取信息的,用子命令 _get 然后传递给 xdg-open 就行了

task _get {id}.url | xargs xdg-open

Bash 用户可以这样定义一个命令

taskopen () {
  task _get ${1}.url | xargs xdg-open
}

增读改删统计

task +tag_name add "标题/描述" url:"https://www.google.com"
task 9 # 获取 task 9 的详细信息
task 9 modify -tag_name “新的标题” # 修改 9 的标题,并删掉标签
task 9 done # 标记为完成,依旧存在于数据库,但不会显示在 report 里面
task 9 delete # 彻底从数据库中删除
task +tag_name count # 查询有 "tag_name" 标签的任务数量

上面的 taskopen() 可以结合一下,比如打开的页面就直接标记为 done

调整显示的项目

那个显示界面叫 report,格式是可以创建和调整的,这里创建一个看 bookmark 专用的 report

task config report.Web.description “Bookmarks” # 描述 -> bookmark
task config report.Web.columns “id,tags,description,url,urgency” # -> 显示的项目
task config report.Web.filter “status:pending” # 过滤并保留只有处于 pending 状态的东西
task config report.Web.sort “urgency-” # 按照 urgency 来统计

然后使用`task Web 就可以直接看到链接和标题,如果使用像 Konsole,Kitty,WezTerm 之类的高级终端可以直接点开链接

按标签过滤

只显示有 scheme 标签,并且用 Web 的 report 来显示

做笔记

task {id} annoate "something"

可以 task {id} 里面看到笔记的时间和内容。并且 annoate 一下,会自动把 urgency 提高一些

task +ANNOTATED 可以过滤出所有有笔记的条目

和其它 Unix 工具的组合

fzf 模糊搜索!

task Web | fzf

Jq 批处理

例子使用 task 的导出 JSON 配合 jq 打开所有带 scheme 标签的所有页面

task +scheme export | jq ".[] .url" -r | grep -v null | xargs -n 1 xdg-open

导出所有带 scheme 的标签的条目 -> 只保留每个条目的 url -> 反向 grep 不是 null 的 -> 用 xdg-open 打开

多设备同步

用的 Syncthing 同步一下 ~/.task/ 就可以,反正那几个设备总会碰面,单人使用又不会有冲突,分布式同步,姿势比 Firefox 的账号同步不知道高到哪里去了 :nerd_face:

偶尔用 Git 存一个备份,taskwarrior 的数据都是纯文本的 json。

~TO BE CONTINUED

Task 具体怎么用还需要看 https://taskwarrior.org/docs/

欢迎尝试使用,提 bug,交流经验或者咨询某些功能。。。

5赞

感觉现在很少用书签了,除了经常访问的网页放书签工具栏方便访问外,其它网页一般都是比较需要反复研究的网页,扔 Zotero 里 + 网页快照保证长期可用,Zotero 写好翻译器其实挺方便的。

看了一下您的需求,感觉不像是需要收藏夹的,而是把稍后阅读 +todo 软件结合起来?感觉有点意思。

1赞

之前想着用一个独立的书签管理器来管理跨浏览器书签问题,想到了用 keditbookmarks 来统一管理,但用了一阵子也是卡在无法从 “主流浏览器” 直接保存书签的功能(Konqueror 应该可以).

ArchiveBox 我试的时候保存网页卡很久,就算保存成功了也是缺胳膊少腿,最后保存网页的工具还是选择了成功率更高的 SingleFile.

1赞

我有个新点子,我可以改成一个浏览器的工具栏上调用的调用系统命令的通用工具

→ 点击按钮就会发送一串东西到命令行

→ 用户可以定义模板,而且可以插入某些浏览器相关的值

比如说弄一个通用的 taskwarrior 导入工具,只需要定义一个

task +{custom.tags} add "{page.title}" url:"{page.url}"

→ 或者让用户自己定义一段 javascirpt 来生成需要的命令。用户点击一下,就会 eval() 那段代码,然后用预先定义的 send-to-local-shell 执行本地的命令。

这样就可以一劳永逸地让 Firefox 适配所有本地上的工具,扩展性无敌。

1赞

既然是在收藏夹里,我假定你所说的「标签」实际上是指的书签。

只能使用树状结构

火狐的书签支持添加标签的呀。

不能记录时间

其实有记录添加时间、修改时间和最后访问时间的。在「我的足迹」(Ctrl-Shift-O)里可以显示。排个序,然后就可以多选删除了。不过这里大量删东西会比较慢

不能对标签” 存档 “,没有办法看到已经删除的标签

我不明白「存档」和添加到一个叫「存档」的目录或者标签有何区别。已经删除的书签当然是看不到的,不然还叫啥删除呢。

不能模糊搜索

「模糊搜索」这个概念本就很模糊。火狐地址栏是可以对书签按 URL、标题或者标签或者它们的组合进行多子串匹配的。

另外火狐的书签在早期是有注释功能的。好像是因为没多少人用又影响运行效率所以被删除了。

2赞

这个用扩展应该能做到的。

刚发现,哈哈哈,之前没有注意到 :sweat_smile::sweat_smile::sweat_smile:

有一点点,就是”(伪) 删除 “形式的 “存档” 会阻止他们出现在搜索结果里面。