以前一直用firefox的一个叫做proxyselect的插件切换代理服务器,马马虎虎倒也能用。 不过往往是先点一次启用代理,Google搜索了之后,马上又禁用,因为国内的网址绕道去 美国再连回来还是慢。终于今天不想再忍了,于是找到了这个vimperator的插件。
装上这个插件之后,vimperator就多了个:proxy
的命令,接下来在.vimperatorrc
里加上这么几句:
let mapleader=','
map <leader>p :proxy manual<CR>:echo "PROXY ON"<CR>
map <leader>d :proxy direct<CR>:echo "PROXY OFF"<CR>
这样就可以用,p
和,d
切换代理服务器了。
上文提到的这个插件不算新,好多年了的样子。同样的,在vimperator的github plugin repo里,还 有几个类似的,不过都是日本人写的,文档稍差。
嫌这样还麻烦?好吧,又多RTFM和Google了一下:
javascript <<EOF
function proxy_toggle() {
if ( options.getPref("network.proxy.type") == 0 ) { // direct connect?
liberator.execute('proxy manual');
liberator.echo("PROXY ON");
} else {
liberator.execute("proxy direct");
liberator.echo("PROXY OFF");
}
}
EOF
map <leader>p :javascript proxy_toggle()<CR>
如果是用Pentadactyl的,或许上面的liberator
要改成dactyl
才能用。
这样就只用,p
就可以在开关代理之间切换了。
那么,现在问题是,如果不输入下,p
,我都不知道有没有开代理了。既然折腾了这么半
天,也不在乎多折腾那么一点,对不?以下是最终版:
javascript <<EOJS
e = document.createElement('label');
e.id = 'liberator-status-proxy';
e.style.fontWeight = 'bold'
document.getElementById('liberator-status').appendChild(e);
statusline.addField("proxy", "Proxy status", "liberator-status-proxy",
function (node, state) { node.value = state ? " 🌐 " : " 🌏 " ; })
function update_proxy_status() {
state = ( options.getPref("network.proxy.type") == 0 );
statusline.updateField('proxy', state);
}
function proxy_toggle() {
if ( options.getPref("network.proxy.type") == 0 ) { // direct connect?
liberator.execute('proxy manual');
liberator.echo("PROXY ON");
}else {
liberator.execute("proxy direct");
liberator.echo("PROXY OFF");
}
update_proxy_status();
}
EOJS
set status="input,location,bookmark,history,tabcount,position,proxy"
map <leader>p :javascript proxy_toggle()<CR>
效果如图。如果发现emoji显示不正常,也可以把上面代码的emoji改成汉字什么的。