且听疯吟 在此记录扯淡的青春
A Wox plugin let you search firefox bookmarks

关于 Wox

最初是看到 V2EX 上的一个帖子 v2ex.com/t/93922,然后作者真的去写了并且发布在 Github 上了。
Windows 上的快速启动软件已经很多了,但是不管从功能、界面乃至理念来讲和 Alfred 都相去甚远,尤其是 Workflow 的概念。
Wox 现在发布了第一个 beta 版本,看上去已经很不错了,希望这个项目能坚持下去吧。

Wox.Plugin.FirefoxBookmarks

Wox 的插件开发也比较简单,可以参考文档。写了个搜索 Firefox 书签的插件。
原理是读取 Firefox 书签,然后根据参数查询返回结果。

首先我们要获取到 Firefox Profile 的位置。Firefox 支持多个 Profile,我们可以获取到默认的 Profile 。Firefox Profile 路径及配置都保存在 %appdata%\Mozilla\Firefox\profiles.ini 中。打开这个配置文件可以看到每个 Profile 配置包含的参数:"IsRelative" 值为 "0" 代表绝对路径,"1" 代表相对路径;"Default=1" 代表默认启动的 Profile。
虽然可以通过引入 WindowsAPI (即 [DllImport("kernel32")])来解析 ini 配置文件,不过无需如此小题大做,毕竟只需要找到其中一行即可。下面是一个读取 Firefox 默认 Profile 的方法:

这种读取方法对某些 Portable 版本无效,所以同时也提供了手动配置路径的方法。

Firefox 书签以及历史记录都保存在 Profile 里的 places.sqlite 中。其表结构可以参考 developer.mozilla.org/en-US/docs/The_Places_database
其中 moz_bookmarks 表中存储了书签及书签文件夹,且通过外键 fk 和 moz_places 关联。
Sqlite 的查询语法基本和标准 SQL 相同,比如:

SELECT moz_places.url, moz_bookmarks.title,parent.title as parent
FROM moz_bookmarks
JOIN moz_places ON moz_places.id = moz_bookmarks.fk
JOIN moz_bookmarks as parent ON parent.id = moz_bookmarks.parent
WHERE moz_bookmarks.type = 1

PS. 另一个快速切换电源计划的插件 Wox.Plugin.PowerPlan