`
marlonyao
  • 浏览: 252693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Vimperator插件Autoproxy

阅读更多
AutoProxy可以用来方便地管理、切换代理,可能再没有哪有国家比我的祖国更需要这个东西了。但我还是觉得切换起来不够方便,所以就写了一个vimperator的插件。使用方式:
:autoproxy(或:ap) [auto|disable|global]

auto,disable,global是AutoProxy的三种模式,输入命令时可以只输入第一个字母。

代码并不长,就直接包含了:
// only set string value
function setPreferenceValue(branch, name, value) {
	var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(branch);
	var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
	str.data = value;
	prefs.setComplexValue(name, Components.interfaces.nsISupportsString, str);
}
function getPreferenceValue(branch, name) {
	var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(branch);
	if (prefs.prefHasUserValue(name)) {
		return prefs.getComplexValue(name, Components.interfaces.nsISupportsString).data;
	} else {
		return null;
	}
}
commands.addUserCommand (["autoproxy", "ap"], "change autoproxy status",
	function (args) {
		if (args.length == 0) {	// print current autoproxy status
			var mode = getPreferenceValue("extensions.autoproxy.", "proxyMode");
			liberator.echo("proxyMode is " + mode);
		} else {
			var arg = args[0].toLowerCase();
			var mode;
			if (arg.indexOf('d') == 0) {
				mode = 'disabled';
			} else if (arg.indexOf('a') == 0) {
				mode = 'auto';
			} else if (arg.indexOf('g') == 0) {
				mode = 'global';
			} else {
				liberator.echoerr("mode should be one of 'disabled', 'auto' or 'global'");
			}
			setPreferenceValue("extensions.autoproxy.", "proxyMode", mode);
			liberator.echo("set proxyMode to " + mode);
		}
	}, {
		argCount: "?",
	}
);


将文件保存为autoproxy.js放在$HOME/.vimperator/plugin就可以了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics