Firefox: a Love Story
tl;dr 你应该使用 firefox 以及我打算不再使用 firefox。
me and browsers
等闲变却故人心,却道故人心易变。
那时候,没有一个人会因为使用 opera 而感到羞耻。opera 用户不会因为很多网站不支持 opera 而放弃 opera,opera 用户会因为很多网站不支持 opera 而放弃很多网站。It came as a shock, opera 竟然要抛弃 presto。是什么让从来不在乎自己市场份额一万年1%的 opera 发生如此大改变?Presto is what distinguishes opera from other browsers. 做为一个前 opera 用户,我多希望 presto 之后的世界里还有,一个 1g 内存还能轻松打开几十个标签的浏览器。opera 12.16 之后,我继续使用 opera 了一段时间,后来也终于放弃了这个 abandonware。我意识到我用的东西不是 at the whim of a for-profit cooperation 的重要性,如果 opera 是开源(自由)的,也许 classical opera 就能永存,不会是 slow death of unmaintianence.
少年不识其滋味,而今识尽其滋味
我跟你一样,一开始也不知道 firefox 有啥好。从第一次使用 firefox 的到爱上 firefox 我大约花了四年。这四年我根本就没有再使用过 firefox。我根本无法接受这么丑陋的浏览器。我第一次使用 firefox 是上了当,上了无数人的当,每个人都在说 firefox 的插件会让你的浏览器变得多强大,没有人说 firefox 的插件会让你的浏览器变得多丑陋。
下面主要要说的正是这些失去它们之后,我生活不能自理的插件(O Freunde, nicht diese Töne!)。Firefox 57 is coming. 很快这些插件就要死一大半了(不死也要残废),所以我打算不再使用 firefox(我打算加入地下组织,用 luakit, Pale Moon, qutebrowser 之类的非主流了)。但是你应该使用 firefox,因为隐私、自由以及爱。There are already many people elaborated on it.
- Fuck It, I’m Going Back to Firefox
- Why I’m Switching (Back) to Firefox
- Save Firefox! | Electronic Frontier Foundation
- Choose Firefox Now, Or Later You Won’t Get A Choice
tl;dr Web 是唯一真正开放的平台。我们需要 mozilla 这样的 non-profit organization 来保护我们的隐私与自由。We can not count on a benevolent dictator。今天 google 可以用 google docs 这些产品来不正当推广 chrome,明天不知道它要用 chrome 来做什么不可告人之事。
撇开 ideology,你也应该使用 firefox。Firefox 57 is every thing Chrome users ever wanted. It is blazingly fast. It just works. 你现在安装插件也不要重启了。即便很多插件 are crippled by firefox 57. 比起 chrome 来还是不知道高到哪里去了,see uBlock Origin Maintainer on Chrome vs. Firefox WebExtensions。
no alternative
It is safe to say opera 12 之后主流浏览器(i.e. 不断手断脚的)再也没有轻量级一说。It is equally safe to say firefox 56 之后主流浏览器(i.e. 不断手断脚的)再也没有可定制一说。But my quest from a lightweight, customizable browser will never end.
曾经沧海难为水,除却巫山不是云。
The most sanguine candidate is Vivaldi, except it is not libre!
取次花丛懒回顾,半缘修道半缘君。
用过 Firefox 之后很难再用其它浏览器了(也很难再用 firefox 57)。
没有插件?deal-breaker! 改个代理还要点100下鼠标。插件系统不够强大?deal-breaker! Chrome 的插件系统很垃圾(firefox 57也是),最简单的例子就是,插件必须要等网页加载完才能用,有些系统页面用不了插件,这样更改键盘快捷键会很什么意义,因为你经常发现你按了没反应。 所以大约基本只能选择 similar projects to qutebrowser.
all the good old things
下面就是我的 firefox 曾经装过啥,或曰,我的 firefox 即将不能装啥。
Add Bookmark Here ²
AutoPagerize
AutoPagerize 自动翻页。
Dorando keyconfig
Dorando keyconfig 更改快捷键。 firefox sb 关闭标签和关闭窗口的快捷键 ctrl+w 和 ctrl+q 很容易按错。据说用 dvorak 可以解决。
Easy Copy
Easy Copy 比如写文章的时候复制链接。也可用于复制所有链接,比如用来下载 youtube 视频。
Extension List Dumper 2
FlashGot
- 可以在劫持下载对话框,调用外部程序下载。用 aria2 尤其爽。
- sniff 流媒体,我的毛片就是这样收集起来的,关键是可以传递 cookies,不然的即使嗅探到了真正的播放地址也没用。
- sniff 流媒体,调用外部播放器播放,关键是可以传递 cookies,不然的即使嗅探到了真正的播放地址也没用。你可以使用 mpv 来播放网页视频。mpv 的参数如下。
[--http-header-fields=HEADERS] [--user-agent=UA] [--referrer=REFERER] [--cookies --cookies-file=CFILE] [URL]
FlashStopper
FlashStopper 阻止自动播放。
Form History Control
Form History Control 自动保存正在编辑的文本框。我以前一个帖子写到4点。不是我要发表的东西太深刻,只是我写着写着按了下 f5.
Greasemonkey
Greasemonkey stylish 可以改变网站外表,greasemonkey 可以用来网站的行为。
比如你经常上 imdb,你希望 imdb 能够直接链接到 netflix amazon video apple, piratebay or whatever。你可以用 IMDb: Link ‘em all!. 再比如说,狗日的百度网盘不让你直接下载大文件,你可以用 EX-百度云盘。还有Anti-Adblock Killer Continued. 以及一个不要乱点的网站 Sleazy Fork。
Habitica for your favorite browser
Habitica for your favorite browser gamify tasks. 上一次黃网死一滴血。
Pan
Pan 修改代理,不止是修改代理。可以使用 gfwlist,也用来拦截广告。我现在已经不再使用它,因为我发现我只用全局代理+黑名单。我发现没有一个代理管理插件支持全局代理+黑名单。最后我用的是firefox自身的代理系统+vimperator 插件,最后设置了一下快捷键。 can’t be happier.
Reddit Enhancement Suite
互联网上什么破事都有一个 wiki 页面。互联网上什么破事都有一个 subreddit。后来我才发现 reddit 是一个很好的黄网。我常去的 subreddits。
Redirect Remover
Redirect Remover 为了你妈的安全,老子就想直接打开网页。
Resurrect Pages
Resurrect Pages 404 拯救工具。
Sci-Hub Links
Searchonymous
Searchonymous google 个性搜索会使用算法将你访问过的网站排名提高,这样你没访问过的网站可能你永远都没有机会访问了。匿名搜索以避免回声室效应。我现在用的 duckduckgo + searchengineJump
Site Launcher
Site Launcher site launcher 不仅可以给网站设置快捷键,也可以用来运行 bookmarklet。比如你可以运行 pocket 的 bookmarklet,也可一键保存到onenote。
Sitzungs-Manager
Sitzungs-Manager must have。自动保存 sessions. 想象一下,100 多个网页还没看完。一小心全关了的感受。
Space Next
Space Next 每天你要点击多少次下一页?空格键翻页。
Stylish
Stylish 改变网站外观。
Stylish Sync
Tab Tree
Tab Tree 拖延癌晚期患者必备。
看视频的时候,用宽屏更好,因为眼睛是长在左右两边。但是看文字屏幕太宽很费劲。最好的文章宽度是稍微超过两眼直接看过去的距离,这样你既不需要移动太大视线,也可稍微略过一些两端的文字,进行速读。所以用 tab tree 把标签栏竖直摆放更利于阅读。 另一方面,竖直空间更大,可以避免这种情况。 One more thing,tab tree 能记住你现在打开的标签它爹是谁,你可以一键灭了它全族。比方说,你电脑出了故障,你可能要看很多网页才能找到解决方案,找到一个解决方案之后,前面打开的网页就全没用了。 此时,你可以一键灭了它全族。你也可以一键灭了下面的所有标签。
uBlock Origin
uBlock Origin 不要使用 ublock,使用 ublock origin。不要使用 adblock plus,使用 uclock origin。Android 上也可使。
User Agent Switcher
User Agent Switcher 总有一些狗日的网站领个券都要你用一下手机。总有些狗日的网站要你用 chrome。用这个可以伪装成你是 chrome 用户,伪装成你是手机用户。
Vimperator
Vimperator or Pentadactyl It was a killer app, killed by Mozilla。如果你只装一个插件,那么就装这个。
事实上,下面的配置都是针对 pentadactyl 的,vimperator 要稍做改动.
好处如下:
keyboard shortcuts
键盘快捷方式。一切都可以用键盘来操作。举几个例子,你应该一天要点很多次下一页,现在你只需要按下 ]] 就行了;你应该一天要很多次拖动 scroll bar,现在你只需要按下 23gg 就行了;你应该一天要切换很多次标签,现在你只需要按下 gt 就行了。 最妙的是的操作都是可以自定义的。
另外可以使用 key sequence 解决了 modifier keys 太少的问题。你从来没有见过 ctrl+x+a 这样的快捷键。因为 a 或者 x 不是 modifier key,同时按无效。vimperator 允许你使用 ctrl+x ctrl+a (先按 ctrl+x,再按 ctrl+a) 这样的快捷键,现在你有无穷种可能的键盘组合了,因为 ctrl+x ctrl+x ctrl+x ctrl+a 也是合法的。你可以像我一样定义 leader key.
javascript <<EOF
if (navigator.appVersion.indexOf("Mac") != -1) {
dactyl.execute('map <C-c> <Leader1>');
dactyl.execute('map <C-x> <Leader2>');
dactyl.execute('map <C-v> <Leader3>');
dactyl.execute('map <C-s> <Leader4>');
} else {
dactyl.execute('map <A-c> <Leader1>');
dactyl.execute('map <A-x> <Leader2>');
dactyl.execute('map <A-v> <Leader3>');
dactyl.execute('map <A-s> <Leader4>');
}
EOF
map <Leader1>s :pocket <CR>
map <Leader2>d :tabopen about:downloads<CR>
map <Leader3>m :javascript dactyl.clipboardWrite('[' + buffer.title + '](' + buffer.URL + ')', true)<CR>
map <leader4>l -js str=DOM.stringify(buffer.focusedFrame.getSelection()); str!=""?dactyl.execute("tabopen !libgen " + str):CommandExMode().open("tabopen !libgen ")
ui & interaction
vimperator 真正的强大之处在于它给你提供了一个独特的操作和管理 firefox 的方式。
比如 ex command。ex command 就是用 “:open url” 来打开 url。一开始可能并不见得比点下地址栏方便多少。ex command 命令的好处在于它可以 programmatically, automatically 实现很多功能。
举个例子,有一次我看到有人在 reddit 上求 sauce。我看那女的长得还行,打算回馈一下社区(据说这句可以忽略)。于是我根据截图的信息找到了官网。这破网站明星列表上居然连图片也没有,而且没有超链接(付费可见)。明星资料页有是有的,而且 url 尾部就是一个递增的数字。总共有 200 多个。一个一个打那不是要命。用命令行打开所有的网页是没问题的。问题在于用我的某个特定的 profile 的 private tab 打开这些网页。这时候 vimperator 出场了。我首先生成了一个内容类似如下的文件。
:tabopen https://prefix/1.html
:tabopen https://prefix/2.html
:tabopen https://prefix/3.html
"..."
:tabopen https://prefix/273.html
然后 source 该文件,done。It’s that simple. 用 vimperator greatly enhanced my productivity.
minimlism
completion
一百多个标签里的一个标签是什么感觉?
要快速找到某一个,真是要命。用 vimperator可以拯救你。
utilities
如果不用 vimperator 你可能一个最基本的任务也要安装上一个插件,甚至有时候你需要自己写一个插件。因为 vimperator 提供了很多实用的 utilities,用 vimperator 让你用最有效率的方式轻松办到这些事情。
如果你只需要复制当前 url,那你肯定会直接点击地址栏,然后 ctrl+c。但是你要复制标题的话,就没有什么好办法了。更别提你要复制 markdown 格式的链接。每一个如此简单的任务也需要安装一个插件,Firefox 肯定会臃肿不堪。用 vimperator 之后,你可以轻松定义你想要复制的任何格式,并定义快捷键。
map <Leader3>m :javascript dactyl.clipboardWrite('[' + buffer.title + '](' + buffer.URL + ')', true)<CR>
再比如,我经常需要运行某个脚本,参数可能是当前页面 url 或者当前页面标题。除去 vimperator,很难找到一个满意的插件(to be fair, external application button 之类的可以调用脚本,但是无法定义快捷键)。我每天需要从浏览器调用 mpv.sh,在 mpv 里看视频,sendemail.sh,将 url 发送到其它设备。
command! mpv -description "play current page in mpv" silent js io.run(FileUtils.getFile("Home", [".scripts", "mpv.sh"]).path, [buffer.URL])
再比如说,我经常要用 google 搜索某本书或某篇文章,这样我可以确定没有拼写错误。然后我再使用 libgen 或 scihub 下载。每次我都要先进行 priliminary search,复制正确的信息,再打开 libgen 或 scihub 网页,最后搜索并下载。整个过程非常麻烦。现在我只需要选中需要搜索的关键词,然后 alt+s l 即可。
map <leader4>l -js str=DOM.stringify(buffer.focusedFrame.getSelection()); str!=""?dactyl.execute("tabopen !libgen " + str):CommandExMode().open("tabopen !libgen ")
javascript
还是上面女明星的例子,我根本不需要生成一个文本文件,然后 source 它,这就是一个 for 循环的事啊。
:javascript for (i =0 ; i < 20 ; i++) {dactyl.execute(":tabopen https://prefix/" + i.toString())}
我真是太年轻了。
理论上,所有 firefox 插件能干的事情你都可以用 vimperator 插件来干。更改代理,更改 user agent 什么的都已经有人实现了。
Zotero
Zotero (not activated) another killer app.
Zotero Bibliography Locale Switcher
Zotero Bibliography Locale Switcher (not activated)
Zotero Scholar Citations
Zotero Scholar Citations (not activated)
ZotFile
ZotFile (not activated) 自动重命名。发送到平板。
Zutilo Dienstprogramm für Zotero
Zutilo Dienstprogramm für Zotero (not activated)
“1-Click YouTube Video Downloader”
“1-Click YouTube Video Downloader” (not activated)
Adblock Plus
Add to Wunderlist
Add to Wunderlist (not activated)
Alternative search
Alternative search (not activated)
APK Downloader
APK Downloader (not activated)
AutoProxy-ng
Bamboo Feed Reader
Bamboo Feed Reader (not activated)
Better Reader
betterFox - Make your browsing experience 15% faster.
betterFox - Make your browsing experience 15% faster. (not activated)
Brief
Cleanest Addon Manager
Cleanest Addon Manager (not activated)
Click-to-Play Manager
Click-to-Play Manager (not activated)
cliget
Copy as Org-mode
Copy as Org-mode (not activated)
Copy Plain Text 2
Copy Plain Text 2 (not activated)
Decentraleyes
Diigo Toolbar
Disconnect
Disconnect Search
Disconnect Search (not activated)
DOI Search
Download with Aria2
Download with Aria2 (not activated)
Download YouTube Videos as MP4
Download YouTube Videos as MP4 (not activated)
DownThemAll!
DownThemAll! (not activated) flashgot 加上这个就是下片神器。我现在用 flashgot + aria2. 主要的可以下载到 vps.
DownThemAll! AntiContainer
DownThemAll! AntiContainer (not activated)
EverSync - Sync bookmarks, backup your favorites.
EverSync - Sync bookmarks, backup your favorites. (not activated)
Exif Viewer
dox 别人必备。
External Video
External Video (not activated)
FaviconizeTab
Feed Sidebar
FireGestures
Firemacs
vimperator counterpart
Forest: stay focused, be present
Forest: stay focused, be present (not activated)
FoxyProxy Standard
FoxyProxy Standard (not activated)
Gmail™ Notifier (restartless)
Gmail™ Notifier (restartless) (not activated)
gooreplacer
Hacker News Feed
Hacker News Feed (not activated)
Hacker News Reader
Hacker News Reader (not activated)
HTTPS Everywhere
HTTPS Everywhere (not activated)
iMacros for Firefox
iMacros for Firefox (not activated)
JavaScript Deobfuscator
JavaScript Deobfuscator (not activated)
Keybinder
Keyboard Shortcut
Keyboard Shortcut (not activated)
Keyboard Surfing
Keyboard Surfing (not activated)
LeechBlock
Lesezeichen Tab
Lesezeichen Tab (not activated)
Media Keys
Menu Wizard
mpv-youtube-dl-binding
mpv-youtube-dl-binding (not activated)
Nimbus Screen Capture - editable screenshots.
Nimbus Screen Capture - editable screenshots. (not activated)
NoScript
Omnibar
OneTab
PassIFox
Paste and Go Key
Paste and Go Key (not activated)
Persistent “Magic” Password Generator :: [sebres-pwd-hasher]
Persistent “Magic” Password Generator :: [sebres-pwd-hasher] (not activated)
PiP Video
Prevent Tab Overflow
Prevent Tab Overflow (not activated)
Print Edit
Proxy Switcher
Proxy Switcher (not activated)
pwgen - Passwort Generator
pwgen - Passwort Generator (not activated)
QrCodeR
QuickFox Notes
QuickFox Notes (not activated)
Raindrop.io: “Save Button” for Web
Raindrop.io: “Save Button” for Web (not activated)
Random Agent Spoofer
Random Agent Spoofer (not activated)
RefControl
ScrapBook X
Secure Password Generator
Secure Password Generator (not activated)
Self-Destructing Cookies
Self-Destructing Cookies (not activated)
Send to aria2
ShortcutKey2URL
ShortcutKey2URL (not activated)
Silvermel and Charamel XT
change meSilvermel and Charamel XT (not activated)
Simplify Awesome Bar
Simplify Awesome Bar (not activated)
Speed Dial [FVD] - New Tab Page, Sync…
Speed Dial FVD - New Tab Page, Sync… (not activated)
Tab Grenade
Tab Memory Usage
Tab Memory Usage (not activated)
Tab Mix Plus
Telegram™ Desktop
Telegram™ Desktop (not activated)
TiddlyWiki for Firefox
TiddlyWiki for Firefox (not activated)
Tile Tabs
TooManyTabs
Tree Style Tab
Tree Style Tab (not activated) 拖延癌晚期患者必备,如果你跟我一样常年开着100 多个标签。