mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-02-18 21:15:45 +01:00
Microoptimize some stuff that turns out to need micro-optimizing.
This commit is contained in:
@@ -99,6 +99,8 @@ var EventHive = Class("EventHive", Contexts.Hive, {
|
|||||||
var Events = Module("events", {
|
var Events = Module("events", {
|
||||||
dbg: function () {},
|
dbg: function () {},
|
||||||
|
|
||||||
|
debug: false,
|
||||||
|
|
||||||
init: function () {
|
init: function () {
|
||||||
this.keyEvents = [];
|
this.keyEvents = [];
|
||||||
|
|
||||||
@@ -705,9 +707,11 @@ var Events = Module("events", {
|
|||||||
return Events.kill(event);
|
return Events.kill(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.processor)
|
if (this.processor) {
|
||||||
events.dbg("ON KEYPRESS " + key + " processor: " + this.processor,
|
if (events.debug)
|
||||||
event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
|
events.dbg("ON KEYPRESS " + key + " processor: " + this.processor,
|
||||||
|
event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
let mode = modes.getStack(0);
|
let mode = modes.getStack(0);
|
||||||
if (event.dactylMode)
|
if (event.dactylMode)
|
||||||
@@ -732,9 +736,11 @@ var Events = Module("events", {
|
|||||||
else if (!event.isMacro && !event.noremap && events.shouldPass(event))
|
else if (!event.isMacro && !event.noremap && events.shouldPass(event))
|
||||||
ignore = true;
|
ignore = true;
|
||||||
|
|
||||||
events.dbg("\n\n");
|
if (events.debug) {
|
||||||
events.dbg("ON KEYPRESS " + key + " ignore: " + ignore,
|
events.dbg("\n\n");
|
||||||
event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
|
events.dbg("ON KEYPRESS " + key + " ignore: " + ignore,
|
||||||
|
event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
|
||||||
|
}
|
||||||
|
|
||||||
if (ignore)
|
if (ignore)
|
||||||
return null;
|
return null;
|
||||||
@@ -822,11 +828,12 @@ var Events = Module("events", {
|
|||||||
return false;
|
return false;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
events.dbg("ON " + event.type.toUpperCase() + " " + key +
|
if (events.debug)
|
||||||
" passing: " + this.passing + " " +
|
events.dbg("ON " + event.type.toUpperCase() + " " + key +
|
||||||
" pass: " + pass +
|
" passing: " + this.passing + " " +
|
||||||
" replay: " + event.isReplay +
|
" pass: " + pass +
|
||||||
" macro: " + event.isMacro);
|
" replay: " + event.isReplay +
|
||||||
|
" macro: " + event.isMacro);
|
||||||
|
|
||||||
if (event.type === "keydown")
|
if (event.type === "keydown")
|
||||||
this.passing = pass;
|
this.passing = pass;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2008-2014 Kris Maglione <maglione.k at Gmail>
|
// Copyright (c) 2008-2015 Kris Maglione <maglione.k at Gmail>
|
||||||
//
|
//
|
||||||
// This work is licensed for reuse under an MIT license. Details are
|
// This work is licensed for reuse under an MIT license. Details are
|
||||||
// given in the LICENSE.txt file included with this file.
|
// given in the LICENSE.txt file included with this file.
|
||||||
@@ -14,7 +14,8 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
this.buffer = "";
|
this.buffer = "";
|
||||||
this.events = [];
|
this.events = [];
|
||||||
|
|
||||||
events.dbg("STACK " + mode);
|
if (events.debug)
|
||||||
|
events.dbg("STACK " + mode);
|
||||||
|
|
||||||
let main = { __proto__: mode.main, params: mode.params };
|
let main = { __proto__: mode.main, params: mode.params };
|
||||||
this.modes = Ary([mode.params.keyModes,
|
this.modes = Ary([mode.params.keyModes,
|
||||||
@@ -53,7 +54,6 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
notify: function () {
|
notify: function () {
|
||||||
events.dbg("NOTIFY()");
|
|
||||||
events.keyEvents = [];
|
events.keyEvents = [];
|
||||||
events.processor = null;
|
events.processor = null;
|
||||||
if (!this.execute(undefined, true)) {
|
if (!this.execute(undefined, true)) {
|
||||||
@@ -71,8 +71,9 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
execute: function execute(result, force) {
|
execute: function execute(result, force) {
|
||||||
events.dbg("EXECUTE(" + this._result(result) + ", " + force + ") events:" + this.events.length
|
if (events.debug)
|
||||||
+ " processors:" + this.processors.length + " actions:" + this.actions.length);
|
events.dbg("EXECUTE(" + this._result(result) + ", " + force + ") events:" + this.events.length
|
||||||
|
+ " processors:" + this.processors.length + " actions:" + this.actions.length);
|
||||||
|
|
||||||
let length = 1;
|
let length = 1;
|
||||||
|
|
||||||
@@ -91,7 +92,8 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
while (callable(action)) {
|
while (callable(action)) {
|
||||||
length = action.eventLength;
|
length = action.eventLength;
|
||||||
action = dactyl.trapErrors(action);
|
action = dactyl.trapErrors(action);
|
||||||
events.dbg("ACTION RES: " + length + " " + this._result(action));
|
if (events.debug)
|
||||||
|
events.dbg("ACTION RES: " + length + " " + this._result(action));
|
||||||
}
|
}
|
||||||
if (action !== Events.PASS)
|
if (action !== Events.PASS)
|
||||||
break;
|
break;
|
||||||
@@ -131,7 +133,8 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
// pass the event.
|
// pass the event.
|
||||||
result = Events.PASS;
|
result = Events.PASS;
|
||||||
|
|
||||||
events.dbg("RESULT: " + length + " " + this._result(result) + "\n\n");
|
if (events.debug)
|
||||||
|
events.dbg("RESULT: " + length + " " + this._result(result) + "\n\n");
|
||||||
|
|
||||||
if (result !== Events.PASS || this.events.length > 1)
|
if (result !== Events.PASS || this.events.length > 1)
|
||||||
if (result !== Events.ABORT || !this.events[0].isReplay)
|
if (result !== Events.ABORT || !this.events[0].isReplay)
|
||||||
@@ -140,7 +143,7 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
if (result === Events.PASS_THROUGH || result === Events.PASS && this.passUnknown)
|
if (result === Events.PASS_THROUGH || result === Events.PASS && this.passUnknown)
|
||||||
events.passing = true;
|
events.passing = true;
|
||||||
|
|
||||||
if (result === Events.PASS_THROUGH && this.keyEvents.length)
|
if (events.debug && result === Events.PASS_THROUGH && this.keyEvents.length)
|
||||||
events.dbg("PASS_THROUGH:\n\t" + this.keyEvents.map(e => [e.type, DOM.Event.stringify(e)]).join("\n\t"));
|
events.dbg("PASS_THROUGH:\n\t" + this.keyEvents.map(e => [e.type, DOM.Event.stringify(e)]).join("\n\t"));
|
||||||
|
|
||||||
if (result === Events.PASS_THROUGH)
|
if (result === Events.PASS_THROUGH)
|
||||||
@@ -148,10 +151,12 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
else {
|
else {
|
||||||
let list = this.events.filter(e => e.defaultPrevented && !e.dactylDefaultPrevented);
|
let list = this.events.filter(e => e.defaultPrevented && !e.dactylDefaultPrevented);
|
||||||
|
|
||||||
if (result === Events.PASS)
|
if (events.debug) {
|
||||||
events.dbg("PASS THROUGH: " + list.slice(0, length).filter(e => e.type === "keypress").map(DOM.Event.bound.stringify));
|
if (result === Events.PASS)
|
||||||
if (list.length > length)
|
events.dbg("PASS THROUGH: " + list.slice(0, length).filter(e => e.type === "keypress").map(DOM.Event.bound.stringify));
|
||||||
events.dbg("REFEED: " + list.slice(length).filter(e => e.type === "keypress").map(DOM.Event.bound.stringify));
|
if (list.length > length)
|
||||||
|
events.dbg("REFEED: " + list.slice(length).filter(e => e.type === "keypress").map(DOM.Event.bound.stringify));
|
||||||
|
}
|
||||||
|
|
||||||
if (result === Events.PASS)
|
if (result === Events.PASS)
|
||||||
events.feedevents(null, list.slice(0, length), { skipmap: true, isMacro: true, isReplay: true });
|
events.feedevents(null, list.slice(0, length), { skipmap: true, isMacro: true, isReplay: true });
|
||||||
@@ -176,14 +181,16 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
let actions = [];
|
let actions = [];
|
||||||
let processors = [];
|
let processors = [];
|
||||||
|
|
||||||
events.dbg("PROCESS(" + key + ") skipmap: " + event.skipmap + " macro: " + event.isMacro + " replay: " + event.isReplay);
|
if (events.debug)
|
||||||
|
events.dbg("PROCESS(" + key + ") skipmap: " + event.skipmap + " macro: " + event.isMacro + " replay: " + event.isReplay);
|
||||||
|
|
||||||
for (let input of this.processors) {
|
for (let input of this.processors) {
|
||||||
let res = input.process(event);
|
let res = input.process(event);
|
||||||
if (res !== Events.ABORT)
|
if (res !== Events.ABORT)
|
||||||
var result = res;
|
var result = res;
|
||||||
|
|
||||||
events.dbg("RES: " + input + " " + this._result(res));
|
if (events.debug)
|
||||||
|
events.dbg("RES: " + input + " " + this._result(res));
|
||||||
|
|
||||||
if (res === Events.KILL)
|
if (res === Events.KILL)
|
||||||
break;
|
break;
|
||||||
@@ -197,9 +204,11 @@ var ProcessorStack = Class("ProcessorStack", {
|
|||||||
processors.push(res);
|
processors.push(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
events.dbg("RESULT: " + event.defaultPrevented + " " + this._result(result));
|
if (events.debug) {
|
||||||
events.dbg("ACTIONS: " + actions.length + " " + this.actions.length);
|
events.dbg("RESULT: " + event.defaultPrevented + " " + this._result(result));
|
||||||
events.dbg("PROCESSORS:", processors, "\n");
|
events.dbg("ACTIONS: " + actions.length + " " + this.actions.length);
|
||||||
|
events.dbg("PROCESSORS:", processors, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
this._actions = actions;
|
this._actions = actions;
|
||||||
this.actions = actions.concat(this.actions);
|
this.actions = actions.concat(this.actions);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ var Map = Class("Map", {
|
|||||||
/** @property {boolean} Whether the RHS of the mapping should expand mappings recursively. */
|
/** @property {boolean} Whether the RHS of the mapping should expand mappings recursively. */
|
||||||
noremap: false,
|
noremap: false,
|
||||||
|
|
||||||
passThrough: true,
|
passThrough: false,
|
||||||
|
|
||||||
/** @property {function(object)} A function to be executed before this mapping. */
|
/** @property {function(object)} A function to be executed before this mapping. */
|
||||||
preExecute: function preExecute(args) {},
|
preExecute: function preExecute(args) {},
|
||||||
@@ -173,7 +173,9 @@ var Map = Class("Map", {
|
|||||||
var MapHive = Class("MapHive", Contexts.Hive, {
|
var MapHive = Class("MapHive", Contexts.Hive, {
|
||||||
init: function init(group) {
|
init: function init(group) {
|
||||||
init.supercall(this, group);
|
init.supercall(this, group);
|
||||||
this.stacks = {};
|
|
||||||
|
// Name clashes. Ugh.
|
||||||
|
this.stacks = new jsmodules.Map();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -224,9 +226,12 @@ var MapHive = Class("MapHive", Contexts.Hive, {
|
|||||||
* @returns {[Map]}
|
* @returns {[Map]}
|
||||||
*/
|
*/
|
||||||
getStack: function getStack(mode) {
|
getStack: function getStack(mode) {
|
||||||
if (!(mode in this.stacks))
|
if (!this.stacks.has(mode.id)) {
|
||||||
return this.stacks[mode] = MapHive.Stack();
|
let stack = MapHive.Stack();
|
||||||
return this.stacks[mode];
|
this.stacks.set(mode.id, stack);
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
return this.stacks.get(mode.id);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -239,8 +244,10 @@ var MapHive = Class("MapHive", Contexts.Hive, {
|
|||||||
*/
|
*/
|
||||||
get: function (mode, cmd, skipPassThrough = false) {
|
get: function (mode, cmd, skipPassThrough = false) {
|
||||||
let map = this.getStack(mode).mappings[cmd];
|
let map = this.getStack(mode).mappings[cmd];
|
||||||
if (!(skipPassThrough && map.passThrough))
|
|
||||||
return map;
|
if (skipPassThrough && map && !map.passThrough)
|
||||||
|
return null;
|
||||||
|
return map;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -284,8 +291,8 @@ var MapHive = Class("MapHive", Contexts.Hive, {
|
|||||||
delete stack.states;
|
delete stack.states;
|
||||||
map.names.splice(j, 1);
|
map.names.splice(j, 1);
|
||||||
if (map.names.length == 0) // FIX ME.
|
if (map.names.length == 0) // FIX ME.
|
||||||
for (let [mode, stack] of iter(this.stacks))
|
for (let [mode, stack] of this.stacks)
|
||||||
this.stacks[mode] = MapHive.Stack(stack.filter(m => m != map));
|
this.stacks.set(mode.id, MapHive.Stack(stack.filter(m => m != map)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -297,7 +304,7 @@ var MapHive = Class("MapHive", Contexts.Hive, {
|
|||||||
* @param {Modes.Mode} mode The mode to remove all mappings from.
|
* @param {Modes.Mode} mode The mode to remove all mappings from.
|
||||||
*/
|
*/
|
||||||
clear: function (mode) {
|
clear: function (mode) {
|
||||||
this.stacks[mode] = MapHive.Stack([]);
|
this.stacks.set(mode.id, MapHive.Stack());
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
Stack: Class("Stack", Array, {
|
Stack: Class("Stack", Array, {
|
||||||
@@ -680,7 +687,7 @@ var Mappings = Module("mappings", {
|
|||||||
};
|
};
|
||||||
function* userMappings(hive) {
|
function* userMappings(hive) {
|
||||||
let seen = new RealSet;
|
let seen = new RealSet;
|
||||||
for (let stack of values(hive.stacks))
|
for (let stack of hive.stacks.values())
|
||||||
for (let map of Ary.iterValues(stack))
|
for (let map of Ary.iterValues(stack))
|
||||||
if (!seen.add(map.id))
|
if (!seen.add(map.id))
|
||||||
yield map;
|
yield map;
|
||||||
|
|||||||
Reference in New Issue
Block a user