man v0.1.55

// ==UserScript==
// @name Minibuffer command man
// @namespace http://d.hatena.ne.jp/yheld
// @description man
// @include *
// ==/UserScript==

(function () {
	var w = window;
	var minibuffer = w.Minibuffer;

	var Store = {
		document: window.document,
	};

	var Keyboard = {
		dic: {
			 8: 'BS',
			 9: 'TAB',
			13: 'ENTER',
			27: 'ESC',
			32: 'SPACE',
			37: 'Left',
			38: 'Up',
			39: 'Right',
			40: 'Down',
		},

		getKeyName: function(event) {
			var name = String.fromCharCode(event.which).toLowerCase();
			return (event.ctrlKey) ? "C-"+name
				: (event.shiftKey) ? name.toUpperCase()
				: (event.altKey || event.metaKey) ? "M-"+name
				: Keyboard.dic[event.keyCode] || name;
		},
	};

	var getMinibufferContainer = function() {
		var doc = Store.document;
		return doc.getElementById('gm_minibuffer_container');
	}

	var getMinibufferInputArea = function(container) {
		var arg = null;
		if (container) {
			var input_area = container.lastChild;
			var arg = input_area.innerHTML;
		}
		return arg;
	};

	var hookingEnterKey = function(event) {
		var key = Keyboard.getKeyName(event);
		if (key.match(/ENTER/i)) man();
		if (key.match(/ESC/i)) delete_man();
		Store.document = w.document;
	};

	var man = function() { 
		var container = getMinibufferContainer();
		if (!container) return;

		var arg = getMinibufferInputArea(container);
		if (arg) {
			var args = arg.split(' ');
			var name = null, page = null, locale = null;
			if (!args[0].match(/man/i)) return;
			for (var i = 1; i < args.length; ++i) {
				if (args[i].match(/[0-9]/)) {
					page = args[i];
				} else if (args[i].match(/\S/) && i == 1) {
					locale = args[i];
				} else if (args[i].match(/\S/)) {
					name = args[i];
				}
			}
		}

		if (!name) {
			var result = document.createElement('div');
			result.id = 'gm_minibuffer_result';
			result.innerHTML = 'What manual page do you want? Please press [ESC] key e.g man 3 exec';
			container.appendChild(result);
			return;
		}

		GM_xmlhttpRequest({
			method: 'GET',
			url: 'http://man.cx/'+name+'('+page+')/'+locale,
			onload: function(res) {
				var entry = res.responseText;
				var manpages = document.createElement('div');
				manpages.innerHTML = entry;
				var divs = manpages.getElementsByTagName('div');
				for (var i = 0; i < divs.length; ++i) {
					if (divs[i].id.match(/manpage/i)) {
						var manpage = divs[i];
						break;
					}
				}
				var result = document.createElement('div');
				result.id = 'gm_minibuffer_result';
				result.innerHTML = manpage.innerHTML;
				container.appendChild(result);
			}
		});
	};

	var delete_man = function() {
		var container = getMinibufferContainer();
		var containers = container.childNodes;
		if (containers) {
			for (var i = 0; i < containers.length; ++i) {
				if (containers[i].id.match(/gm_minibuffer_result/i)) {
					container.removeChild(containers[i]);
					break;
				}
			}
		}
	};

	document.addEventListener('keypress', hookingEnterKey, true);
})();

未完成版。むりやり書いてみた。argumentsまで見れれば良いのに・・・

追記

あり?containerにプロパティが無いとか言われる・・・