// PLUGIN_INFO//{{{ var PLUGIN_INFO = {NAME} character hint mode. hogelog 0.2.0 2.0pre 2008/12/12 2.0a1 2009/1/27 18:56 http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/char-hints-mod2.js ; //}}} (function () { const DEFAULT_HINTCHARS = "HJKLASDFGYUIOPQWERTNMZXCVB"; const hintContext = hints.addMode; let hintchars = DEFAULT_HINTCHARS; let inputCase = function(str) str.toUpperCase(); let inputRegex = /[A-Z]/; let showCase = function(str) str.toUpperCase(); function chars2num(chars) //{{{ { let num = 0; hintchars = inputCase(hintchars); let base = hintchars.length; for(let i=0,l=chars.length;i0); return chars; } //}}} function getStartNum(base, count) //{{{ { let figure = 1; while((count/=base) >= 1.0) { ++figure; } return Math.pow(base, figure-1) - 1; } //}}} function getCharHints(win) //{{{ { let hints = []; (function (win) { let elems = [elem for(elem in buffer.evaluateXPath("//*[@liberator:highlight and @number]", win.document))]; hints = hints.concat(elems); Array.forEach(win.frames, arguments.callee); })(win); return hints; } //}}} function showCharHints(hints) //{{{ { let start = getStartNum(hintchars.length, hints.length); for(let i=0,len=hints.length;i0) processHintInput(hintInput, hints); }, //}}} onEvent: function (event) //{{{ { if(/^\d$/.test(events.toString(event))) { charhints.onInput(event); } else { charhints.original.onEvent(event); statusline.updateInputBuffer(hintInput); } }, //}}} }; if(!charhints.original) { charhints.original = { show: hints.show, onInput: liberator.eval("onInput", hintContext), onEvent: hints.onEvent, processHints: liberator.eval("processHints", hintContext), }; charhints.install = function () //{{{ { hints.show = charhints.show; hints.onEvent = charhints.onEvent; liberator.eval("onInput = plugins.charhints.onInput", hintContext); liberator.execute(":hi Hint::after content: attr(hintchar)", true, true); if(liberator.globalVariables.hintsio) { let hintsio = liberator.globalVariables.hintsio; for(let i=hintsio.length;i-->0;setIOType(hintsio[i])); } if(liberator.globalVariables.hintchars) { hintchars = liberator.globalVariables.hintchars; } }; //}}} charhints.uninstall = function () //{{{ { hints.show = charhints.original.show; hints.onEvent = charhints.original.onEvent; liberator.eval("onInput = plugins.charhints.original.onInput", hintContext); liberator.execute(":hi Hint::after content: attr(number)"); }; //}}} } charhints.install(); })(); // vim: set fdm=marker sw=4 ts=4 et fenc=utf-8: