mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-04-11 16:13:34 +02:00
Allow <Uxxxx> key names.
--HG-- extra : rebase_source : 659bc3b0faab56e52c584e514411fa7cacd8af77
This commit is contained in:
@@ -1978,7 +1978,8 @@ const Dactyl = Module("dactyl", {
|
|||||||
dactyl.version = addon.version + " (created: @DATE@)";
|
dactyl.version = addon.version + " (created: @DATE@)";
|
||||||
});
|
});
|
||||||
|
|
||||||
services.add("commandLineHandler", "@mozilla.org/commandlinehandler/general-startup;1?type=" + config.name);
|
if (!services.get("commandLineHandler"))
|
||||||
|
services.add("commandLineHandler", "@mozilla.org/commandlinehandler/general-startup;1?type=" + config.name);
|
||||||
|
|
||||||
let commandline = services.get("commandLineHandler").optionValue;
|
let commandline = services.get("commandLineHandler").optionValue;
|
||||||
if (commandline) {
|
if (commandline) {
|
||||||
|
|||||||
@@ -250,25 +250,28 @@ const Events = Module("events", {
|
|||||||
util.threadYield(1, true);
|
util.threadYield(1, true);
|
||||||
|
|
||||||
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
|
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
|
||||||
let elem = dactyl.focus || window.content;
|
delete evt_obj.type;
|
||||||
let evt = events.create(doc, "keypress", evt_obj);
|
for (let type in values(["keydown", "keyup", "keypress"])) {
|
||||||
|
let elem = dactyl.focus || buffer.focusedFrame;
|
||||||
|
let evt = events.create(doc, type, evt_obj);
|
||||||
|
|
||||||
if (typeof noremap == "object")
|
if (isObject(noremap))
|
||||||
for (let [k, v] in Iterator(noremap))
|
update(evt, noremap);
|
||||||
evt[k] = v;
|
else
|
||||||
else
|
evt.noremap = !!noremap;
|
||||||
evt.noremap = !!noremap;
|
evt.isMacro = true;
|
||||||
evt.isMacro = true;
|
|
||||||
// A special hack for dactyl-specific key names.
|
// A special hack for dactyl-specific key names.
|
||||||
if (evt_obj.dactylString || evt_obj.dactylShift) {
|
if (!evt_obj.dactylString && !evt_obj.dactylShift)
|
||||||
evt.dactylString = evt_obj.dactylString; // for key-less keypress events e.g. <Nop>
|
elem.dispatchEvent(evt);
|
||||||
evt.dactylShift = evt_obj.dactylShift; // for untypeable shift keys e.g. <S-1>
|
else {
|
||||||
events.onKeyPress(evt);
|
evt.dactylString = evt_obj.dactylString; // for key-less keypress events e.g. <Nop>
|
||||||
|
evt.dactylShift = evt_obj.dactylShift; // for untypeable shift keys e.g. <S-1>
|
||||||
|
events.onKeyPress(evt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
elem.dispatchEvent(evt);
|
|
||||||
|
|
||||||
if (!this.feedingKeys)
|
if (!this.feedingKeys)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -387,9 +390,11 @@ const Events = Module("events", {
|
|||||||
modifier = modifier.toUpperCase();
|
modifier = modifier.toUpperCase();
|
||||||
keyname = keyname.toLowerCase();
|
keyname = keyname.toLowerCase();
|
||||||
evt_obj.dactylKeyname = keyname;
|
evt_obj.dactylKeyname = keyname;
|
||||||
|
if (/^u[0-9a-f]+$/.test(keyname))
|
||||||
|
keyname = String.fromCharCode(parseInt(keyname.substr(1), 16));
|
||||||
|
|
||||||
if (keyname && !(keyname.length == 1 && modifier.length == 0 || // disallow <> and <a>
|
if (keyname && (unknownOk || keyname.length == 1 || /mouse$/.test(keyname) ||
|
||||||
!(unknownOk || keyname.length == 1 || this._key_code[keyname] || keyname == "nop" || /mouse$/.test(keyname)))) { // disallow <misteak>
|
this._key_code[keyname] || keyname == "nop")) {
|
||||||
evt_obj.ctrlKey = /C-/.test(modifier);
|
evt_obj.ctrlKey = /C-/.test(modifier);
|
||||||
evt_obj.altKey = /A-/.test(modifier);
|
evt_obj.altKey = /A-/.test(modifier);
|
||||||
evt_obj.shiftKey = /S-/.test(modifier);
|
evt_obj.shiftKey = /S-/.test(modifier);
|
||||||
@@ -448,7 +453,7 @@ const Events = Module("events", {
|
|||||||
*/
|
*/
|
||||||
toString: function toString(event) {
|
toString: function toString(event) {
|
||||||
if (!event)
|
if (!event)
|
||||||
return "[instance events]";
|
return toString.supercall(this);
|
||||||
|
|
||||||
if (event.dactylString)
|
if (event.dactylString)
|
||||||
return event.dactylString;
|
return event.dactylString;
|
||||||
@@ -515,6 +520,8 @@ const Events = Module("events", {
|
|||||||
// or if the shift has been forced for a non-alphabetical character by the user while :map-ping
|
// or if the shift has been forced for a non-alphabetical character by the user while :map-ping
|
||||||
if ((key != key.toLowerCase() && (event.ctrlKey || event.altKey || event.metaKey)) || event.dactylShift)
|
if ((key != key.toLowerCase() && (event.ctrlKey || event.altKey || event.metaKey)) || event.dactylShift)
|
||||||
modifier += "S-";
|
modifier += "S-";
|
||||||
|
if (/^\s$/.test(key))
|
||||||
|
key = let (s = charCode.toString(16)) "U" + "0000".substr(4 - s.length) + s;
|
||||||
else if (modifier.length == 0)
|
else if (modifier.length == 0)
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,6 +283,11 @@
|
|||||||
<k name="K0"/> through <k name="K9"/> represent keys on the
|
<k name="K0"/> through <k name="K9"/> represent keys on the
|
||||||
numeric keypad.
|
numeric keypad.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<k name="Uxxxx"/>, where <em>xxxx</em> is any 4 hexadecimal
|
||||||
|
digits, represents the character at that Unicode codepoint.
|
||||||
|
For instance, <k name="U263a"/> represents ☺.
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -298,7 +303,7 @@
|
|||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
These prefixes can be combined however you see fit, though you
|
These prefixes man be combined however you see fit, though you
|
||||||
should note that within angle brackets all alphabetic characters
|
should note that within angle brackets all alphabetic characters
|
||||||
are read as lowercase. Uppercase characters can only be
|
are read as lowercase. Uppercase characters can only be
|
||||||
specified with the <em>S-</em> modifier. The following key
|
specified with the <em>S-</em> modifier. The following key
|
||||||
|
|||||||
@@ -73,8 +73,7 @@ const Services = Module("Services", {
|
|||||||
let res = Cc[classes][meth || "getService"]();
|
let res = Cc[classes][meth || "getService"]();
|
||||||
if (!ifaces)
|
if (!ifaces)
|
||||||
return res.wrappedJSObject;
|
return res.wrappedJSObject;
|
||||||
ifaces = Array.concat(ifaces);
|
Array.concat(ifaces).forEach(function (iface) res.QueryInterface(iface));
|
||||||
ifaces.forEach(function (iface) res.QueryInterface(iface));
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user