Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

Jun 28, 2007 (Thu)

vimperator の command を userChrome.js拡張する 20:54 はてなブックマーク - vimperator の command を userChrome.js で拡張する - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。


/*
 * [
 *     0: [all names of this command],
 *     1: usage,
 *     2: short help
 *     3: helptext
 *     4: function (arguments in this order: args, special, count, modifiers)
 *     5: completefunc
 * ]
 */
setTimeout(function () {
	// for reloading uc.js
	if (g_commands._orig_g_commands) {
		g_commands = g_commands._orig_g_commands.concat();
	} else {
		g_commands._orig_g_commands = g_commands.concat();
	}
	showStatusbarMessage("Loading Additional Commands...", STATUSFIELD_URL);

	const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
	var proxySetting = [
		function Disable () {
			prefs.setIntPref("network.proxy.type", 0);
		},
		function LocalSocks () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.socks", "localhost");
			prefs.setIntPref("network.proxy.socks_port", 10080);
		},
		function ArrogationCharlotte () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.http", "charlotte");
			prefs.setIntPref("network.proxy.http_port", 5432);
		},
		function ArrogationLocal () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.http", "charlotte");
			prefs.setIntPref("network.proxy.http_port", 5432);
		},
		function School () {
			prefs.setIntPref("network.proxy.type", 1);
			prefs.setCharPref("network.proxy.http", "proxy");
			prefs.setIntPref("network.proxy.http_port", 8081);
		},
	];

	g_commands.push([
		["proxy"],
		["proxy {setting name}"],
		"Change proxy settings.",
		"",
		function (args, special, count) {
			var name = args;
			for (var i = 0; i < proxySetting.length; i++) {
				if (proxySetting[i].name.toLowerCase() == name.toLowerCase()) {
					proxySetting[i]();
					showStatusbarMessage("Loading Setting " + name, STATUSFIELD_URL);
					break;
				}
			}
		},
		function (filter) {
			g_completions = [];
			g_substrings  = []; // これやらないと変な補完される?
			proxySetting.forEach(function ($_) {
				if ($_.name.toLowerCase().indexOf(filter.toLowerCase()) == 0) {
					g_completions.push([$_.name, ""]);
				}
			});
			return g_completions;
		}
	]);

}, 500);

vimperator は Chrome Window のグローバル変数を汚染しまくる。(g_commands とか g_ からはじまるやつはグローバル変数。g_substring を補完関数初期化しないと変な補完がされる。なんてこった)

拡張が実行される順序がよくわからないので setTimeout してる。

help は g_commands から自動生成されているので、うえのがちゃんとロードされると、ヘルプページの最後に :proxy の説明がでてくるよ!

 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク