1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-04-03 20:33:33 +02:00

Fix <C-v>

This commit is contained in:
Kris Maglione
2009-05-28 17:38:12 -04:00
parent 474ce30ada
commit 5831b652f9

View File

@@ -435,7 +435,7 @@ function Events() //{{{
delete: ["Del"], delete: ["Del"],
escape: ["Esc", "Escape"], escape: ["Esc", "Escape"],
insert: ["Insert", "Ins"], insert: ["Insert", "Ins"],
left_shift: ["<"], left_shift: ["LT", "<"],
return: ["Return", "CR", "Enter"], return: ["Return", "CR", "Enter"],
right_shift: [">"], right_shift: [">"],
space: ["Space", " "], space: ["Space", " "],
@@ -865,17 +865,21 @@ function Events() //{{{
} }
}, },
splitKeys: function(keys) {
let re = /<.*?>|[^<]/g
let match;
while (match = re.exec(keys))
yield match[0];
},
canonKeys: function(keys) canonKeys: function(keys)
{ {
var res = [] var res = util.map(events.splitKeys(keys), function(key) {
for (var i = 0; i < keys.length; i++)
{
let key = [keys[i]];
let keyCode = 0; let keyCode = 0;
if (keys[i] == "<") if (key[0] == "<")
{ {
let [match, modifier, keyname] = keys.substr(i).toLowerCase().match(/<((?:[csma]-)*)(.+?)>/) || []; let [match, modifier, keyname] = key.toLowerCase().match(/^<((?:[csma]-)*)(.+?)>$/) || [];
if (keyname) if (keyname)
{ {
modifier = modifier.toUpperCase(); modifier = modifier.toUpperCase();
@@ -884,19 +888,18 @@ function Events() //{{{
let c = String.fromCharCode(keyCode); let c = String.fromCharCode(keyCode);
if (key.length == 0 && c == code_key[keyCode]) if (key.length == 0 && c == code_key[keyCode])
key = [c.toLowerCase()]; return c.toLowerCase();
else else
key = ["<"].concat(key, code_key[keyCode] || keyname, ">"); return ["<"].concat(key, code_key[keyCode] || keyname, ">");
i += match.length - 1;
} }
} }
else // a simple key else // a simple key
{ {
if (keys[i] != keys[i].toLowerCase()) if (key != key.toLowerCase())
key = ["<S-", keys[i].toUpperCase(), ">"]; return ["<S-", key.toUpperCase(), ">"];
return key;
} }
res.push(key); });
}
return util.Array.flatten(res).join(""); return util.Array.flatten(res).join("");
}, },
@@ -930,17 +933,16 @@ function Events() //{{{
{ {
liberator.threadYield(1, true); liberator.threadYield(1, true);
for (var i = 0; i < keys.length; i++) for (let key in events.splitKeys(keys))
{ {
let charCode = keys.charCodeAt(i); let charCode = key.charCodeAt(0);
let keyCode = 0; let keyCode = 0;
let shift = false, ctrl = false, alt = false, meta = false; let shift = false, ctrl = false, alt = false, meta = false;
let string = null; let string = null;
//if (keys[i] == "\\") // FIXME: support the escape key if (key[0] == "<")
if (keys[i] == "<" && !escapeKey) // start a complex key
{ {
let [match, modifier, keyname] = keys.substr(i).match(/<((?:[CSMA]-)*)(.+?)>/i) || []; let [match, modifier, keyname] = key.match(/^<((?:[CSMA]-)*)(.+?)>$/i) || [];
if (keyname) if (keyname)
{ {
keyname = keyname.toLowerCase(); keyname = keyname.toLowerCase();
@@ -976,7 +978,7 @@ function Events() //{{{
} }
else // a simple key else // a simple key
{ {
shift = keys[i] != keys[i].toLowerCase(); shift = key != key.toLowerCase();
} }
let elem = liberator.focus; let elem = liberator.focus;
@@ -991,6 +993,8 @@ function Events() //{{{
else else
evt.noremap = !!noremap; evt.noremap = !!noremap;
evt.isMacro = true; evt.isMacro = true;
// A special hack for liberator-specific key names.
if (string) if (string)
{ {
evt.liberatorString = string; evt.liberatorString = string;
@@ -998,13 +1002,13 @@ function Events() //{{{
} }
else else
elem.dispatchEvent(evt); elem.dispatchEvent(evt);
if (!this.feedingKeys) if (!this.feedingKeys)
break; break;
// stop feeding keys if page loading failed
// Stop feeding keys if page loading failed.
if (modes.isReplaying && !waitForPageLoaded()) if (modes.isReplaying && !waitForPageLoaded())
break; break;
// else // a short break between keys often helps
// liberator.sleep(50);
} }
} }
finally finally
@@ -1444,7 +1448,7 @@ function Events() //{{{
if (stop) if (stop)
{ {
input.buffer = ""; input.buffer = "";
return void killEvent(); return;
} }
stop = true; // set to false if we should NOT consume this event but let Firefox handle it stop = true; // set to false if we should NOT consume this event but let Firefox handle it
@@ -1473,7 +1477,7 @@ function Events() //{{{
// custom mode... // custom mode...
if (liberator.mode == modes.CUSTOM) if (liberator.mode == modes.CUSTOM)
{ {
hints.onEvent(event); plugins.onEvent(event);
return void killEvent(); return void killEvent();
} }
@@ -1486,8 +1490,6 @@ function Events() //{{{
|| (/^[0-9]$/.test(key) && !hints.escNumbers)) || (/^[0-9]$/.test(key) && !hints.escNumbers))
{ {
hints.onEvent(event); hints.onEvent(event);
event.preventDefault();
event.stopPropagation();
return void killEvent(); return void killEvent();
} }
@@ -1518,16 +1520,6 @@ function Events() //{{{
input.pendingMap = null; input.pendingMap = null;
} }
input.buffer = "";
inputBufferLength = 0;
let tmp = input.pendingArgMap; // must be set to null before .execute; if not
input.pendingArgMap = null; // input.pendingArgMap is still 'true' also for new feeded keys
if (key != "<Esc>" && key != "<C-[>")
{
if (modes.isReplaying && !waitForPageLoaded())
return;
}
// counts must be at the start of a complete mapping (10j -> go 10 lines down) // counts must be at the start of a complete mapping (10j -> go 10 lines down)
if (countStr && !candidateCommand) if (countStr && !candidateCommand)
{ {
@@ -1567,7 +1559,6 @@ function Events() //{{{
} }
else if (input.pendingMotionMap) else if (input.pendingMotionMap)
{ {
input.buffer = "";
if (key != "<Esc>" && key != "<C-[>") if (key != "<Esc>" && key != "<C-[>")
input.pendingMotionMap.execute(candidateCommand, input.count, null); input.pendingMotionMap.execute(candidateCommand, input.count, null);
input.pendingMotionMap = null; input.pendingMotionMap = null;
@@ -1620,7 +1611,7 @@ function Events() //{{{
} }
if (stop) if (stop)
killEvent() killEvent();
} }
finally finally
{ {