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にプロパティが無いとか言われる・・・