// PLUGIN_INFO//{{{
var PLUGIN_INFO =
{NAME}
character hint mode.
hogelog
0.1.1
2.0pre 2008/12/12
2.0a1
2008/12/22 14:57:34
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 showCharHints() //{{{
{
function showHints(win)
{
for(let elem in buffer.evaluateXPath("//*[@liberator:highlight and @number]", win.document))
{
let num = elem.getAttribute("number");
let hintchar = num2chars(parseInt(num, 10));
elem.setAttribute("hintchar", showCase(hintchar));
if(isValidHint(hintchar))
validHints.push(elem);
}
Array.forEach(win.frames, showHints);
}
validHints = [];
showHints(window.content);
} //}}}
function isValidHint(hint) //{{{
{
if(hintInput.length == 0 ) return false;
return inputCase(hint).indexOf(hintInput) == 0;
} //}}}
function setIOType(type) //{{{
{
switch (type)
{
case "I":
inputCase = function(str) str.toUpperCase();
inputRegex = /[A-Z]/;
break;
case "i":
inputCase = function(str) str.toLowerCase();
inputRegex = /[a-z]/;
break;
case "O":
showCase = function(str) str.toUpperCase();
break;
case "o":
showCase = function(str) str.toLowerCase();
break;
}
} //}}}
var hintInput = "";
var validHints = [];
var charhints = plugins.charhints = {
show: function (minor, filter, win) //{{{
{
charhints.original.show(minor, filter, win);
hintInput = "";
showCharHints();
}, //}}}
onInput: function (event) //{{{
{
let eventkey = events.toString(event);
if(/^\d$/.test(eventkey)) {
commandline.command += eventkey;
}
let hintString = commandline.command;
commandline.command = hintString.replace(inputRegex, "");
charhints.original.onInput(event);
for(let i=0,l=hintString.length;i0) {
let numstr = String(chars2num(hintInput));
// no setTimeout, don't run nice
setTimeout(function () {
for(let i=0,l=numstr.length;i