From 155f1c8b95ffb546484ceda113ed9312f68addab Mon Sep 17 00:00:00 2001
From: hogelog
Date: Mon, 11 May 2009 15:31:34 +0000
Subject: * fix hinttimeout bug.
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33246 d0d07461-0603-4401-acd4-de1884942a52
---
char-hints-mod2.js | 604 +++++++++++++++++++++++++++--------------------------
1 file changed, 311 insertions(+), 293 deletions(-)
diff --git a/char-hints-mod2.js b/char-hints-mod2.js
index cf07235..ca030ee 100644
--- a/char-hints-mod2.js
+++ b/char-hints-mod2.js
@@ -1,293 +1,311 @@
-// PLUGIN_INFO//{{{
-var PLUGIN_INFO =
-
- {NAME}
- character hint mode.
- hogelog
- 0.2.7
- 2.0pre 2008/12/12
- 2.0pre
- 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();
- let getStartCount = function() 0;
-
- function chars2num(chars) //{{{
- {
- let num = 0;
- hintchars = inputCase(hintchars);
- let base = hintchars.length;
- for(let i=0,l=chars.length;i0);
-
- return chars;
- } //}}}
- function getAdjustStartCount(base, count) //{{{
- {
- if(count < base) {
- return 0;
- } else if(count >= Math.pow(base, 2)) {
- return base;
- }
- var start = Math.floor(count / base);
- var adjust = count + start;
- var next_start;
- while(start != (next_start = Math.floor(adjust / base))) {
- adjust += start;
- start = next_start;
- }
- return start;
- } //}}}
- function getCharHints(win) //{{{
- {
- let hints = [];
- (function (win) {
- let elems = [elem for(elem in buffer.evaluateXPath('//*[@liberator:highlight="Hint" and @number]', win.document))];
- hints = hints.concat(elems);
- Array.forEach(win.frames, arguments.callee);
- })(win);
- return hints;
- } //}}}
- function showCharHints(hints) //{{{
- {
- let start = getStartCount(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);
- }
- }, //}}}
- processHints: function (followFirst) //{{{
- {
- // don't followFirst if processHints call from
- // charhints.original.onEvent(alt) in processHintInput
- let caller = arguments.callee.caller;
- if(caller == charhints.original.onEvent && caller.caller == processHintInput)
- return charhints.original.processHints(false);
-
- return charhints.original.processHints(followFirst);
- }, //}}}
- };
-
- 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.eval("processHints = plugins.charhints.processHints", hintContext);
-
- liberator.execute(":hi Hint::after content: attr(hintchar)", true, true);
- if(liberator.globalVariables.hintsio) {
- let hintsio = liberator.globalVariables.hintsio;
- Array.forEach(hintsio, setIOType);
- }
- if(liberator.globalVariables.hintchars) {
- hintchars = liberator.globalVariables.hintchars;
- }
- if(liberator.globalVariables.hintlabeling) {
- switch(liberator.globalVariables.hintlabeling) {
- default:
- case "s":
- getStartCount = function() 0;
- break;
- case "a":
- getStartCount = getAdjustStartCount;
- break;
- }
- }
- }; //}}}
- charhints.uninstall = function () //{{{
- {
- hints.show = charhints.original.show;
- hints.onEvent = charhints.original.onEvent;
- liberator.eval("onInput = plugins.charhints.original.onInput", hintContext);
- liberator.eval("processHints = plugins.charhints.original.processHints", hintContext);
-
- liberator.execute(":hi Hint::after content: attr(number)", true, true);
- }; //}}}
- }
- charhints.install();
-})();
-
-// vim: set fdm=marker sw=4 ts=4 et fenc=utf-8:
+// PLUGIN_INFO//{{{
+var PLUGIN_INFO =
+
+ {NAME}
+ character hint mode.
+ hogelog
+ 0.3.0
+ 2.0pre 2008/12/12
+ 2.1pre
+ 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();
+ let getStartCount = function() 0;
+
+ let timer = null;
+
+ function chars2num(chars) //{{{
+ {
+ let num = 0;
+ hintchars = inputCase(hintchars);
+ let base = hintchars.length;
+ for(let i=0,l=chars.length;i0);
+
+ return chars;
+ } //}}}
+ function getAdjustStartCount(base, count) //{{{
+ {
+ if(count < base) {
+ return 0;
+ } else if(count >= Math.pow(base, 2)) {
+ return base;
+ }
+ var start = Math.floor(count / base);
+ var adjust = count + start;
+ var next_start;
+ while(start != (next_start = Math.floor(adjust / base))) {
+ adjust += start;
+ start = next_start;
+ }
+ return start;
+ } //}}}
+ function getCharHints(win) //{{{
+ {
+ let hints = [];
+ (function (win) {
+ let elems = [elem for(elem in buffer.evaluateXPath('//*[@liberator:highlight="Hint" and @number]', win.document))];
+ hints = hints.concat(elems);
+ Array.forEach(win.frames, arguments.callee);
+ })(win);
+ return hints;
+ } //}}}
+ function showCharHints(hints) //{{{
+ {
+ let start = getStartCount(hintchars.length, hints.length);
+ for(let i=0,len=hints.length;i 0) {
+ // -100 to prevent the conflict with original timeout.
+ timer = setTimeout(function () {
+ if (hints.activeTimeout) {
+ clearTimeout(hints.activeTimeout);
+ hints.activeTimeout = null;
+ }
+ charhints.original.processHints(true);
+ }, timeout - 100);
+ }
+
+ } //}}}
+
+ var hintInput = "";
+ var charhints = plugins.charhints = {
+ show: function (minor, filter, win) //{{{
+ {
+ charhints.original.show(minor, filter, win);
+ hintInput = "";
+ let hints = getCharHints(window.content);
+ showCharHints(hints);
+ }, //}}}
+ 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) processHintInput(hintInput, hints);
+ }, //}}}
+ onEvent: function (event) //{{{
+ {
+ if(/^\d$/.test(events.toString(event))) {
+ charhints.onInput(event);
+ } else {
+ charhints.original.onEvent(event);
+ statusline.updateInputBuffer(hintInput);
+ }
+ }, //}}}
+ processHints: function (followFirst) //{{{
+ {
+ // don't followFirst if processHints call from
+ // charhints.original.onEvent(alt) in processHintInput
+ let caller = arguments.callee.caller;
+ if(caller == charhints.original.onEvent && caller.caller == processHintInput)
+ return charhints.original.processHints(false);
+
+ return charhints.original.processHints(followFirst);
+ }, //}}}
+ };
+
+ 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.eval("processHints = plugins.charhints.processHints", hintContext);
+
+ liberator.execute(":hi Hint::after content: attr(hintchar)", true, true);
+ if(liberator.globalVariables.hintsio) {
+ let hintsio = liberator.globalVariables.hintsio;
+ Array.forEach(hintsio, setIOType);
+ }
+ if(liberator.globalVariables.hintchars) {
+ hintchars = liberator.globalVariables.hintchars;
+ }
+ if(liberator.globalVariables.hintlabeling) {
+ switch(liberator.globalVariables.hintlabeling) {
+ default:
+ case "s":
+ getStartCount = function() 0;
+ break;
+ case "a":
+ getStartCount = getAdjustStartCount;
+ break;
+ }
+ }
+ }; //}}}
+ charhints.uninstall = function () //{{{
+ {
+ hints.show = charhints.original.show;
+ hints.onEvent = charhints.original.onEvent;
+ liberator.eval("onInput = plugins.charhints.original.onInput", hintContext);
+ liberator.eval("processHints = plugins.charhints.original.processHints", hintContext);
+
+ liberator.execute(":hi Hint::after content: attr(number)", true, true);
+ }; //}}}
+ }
+ charhints.install();
+})();
+
+// vim: set fdm=marker sw=4 ts=4 et fenc=utf-8:
--
cgit v1.2.3