在火狐 17 以前,我可以这样子访问我本地的 Python 文档的:
jar:file:///home/lilydjwg/docs/Python/python.zip!/index.html
访问的实际上是一个 zip 文件中的内容。网页这种纯文本的东西压缩率高,35M 的 Python 3.3 文档,压缩后只有 7.1M。一来节省磁盘空间(我的 /home 分区己用 98% 了 TwT),二来读取快。
可是,自从火狐 17 开始,虽然 jar: 协议依旧支持,但是似乎其中的部分或者全部 JavaScript 脚本不会被执行。最明显的是,Python 这种用 Sphinx 制作的文档的搜索功能没了!
在拒绝升级火狐很长一段时间之后,Arch 把火狐 16 要用的库文件升级了……于是只好换回未压缩的一大堆文件。可问题是,我以前在火狐地址栏输入re
就有 Python 正则表达式模块的文档的补全、输入py m
就有 Python 标准库模块列表的补全,地址转换后,这些历史记录里的地址就全失效啦。
现在想想,其实我可以使用 Redirector 插件搞定的。但当时没想到,也是想更根本地解决问题,便直接修改火狐的地址记录数据库了。
此数据库是 SQLite3 数据库,位于火狐配置目录下的places.sqlite3
文件中。moz_places
表中记录了历史记录和书签中的项目的 URL 地址,只修改它就可以了。但问题是,这不像我当初 MediaWiki URL 路径中去掉index.php
那样,用replace
函数就可以搞定:
UPDATE OR REPLACE moz_places SET url = REPLACE(url, '/index.php', '') WHERE url LIKE 'http://localhost/wiki/index.php/%';
我需要正则表达式!
于是找到了这个 glib_replace 模块,支持使用 glib 的正则表达式来进行替换。下回来编译成 .so
文件后这样子用:
SELECT load_extension('./glib_replace.so'); UPDATE OR REPLACE moz_places SET url = regex_replace('^jar:((?:.(?![^/]+\.zip!))+)(/[^/]+)\.zip!(.*)$', url, '\1\2\3') WHERE url LIKE 'jar:file:///home/lilydjwg/docs/Python/python%';
跑完就好啦!
PS: 如果你的 URL 中有 %
字符,记得在 like
操作符参数中转义成 %%
哦~