mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-02-10 20:35:46 +01: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@)";
|
||||
});
|
||||
|
||||
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;
|
||||
if (commandline) {
|
||||
|
||||
@@ -250,25 +250,28 @@ const Events = Module("events", {
|
||||
util.threadYield(1, true);
|
||||
|
||||
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
|
||||
let elem = dactyl.focus || window.content;
|
||||
let evt = events.create(doc, "keypress", evt_obj);
|
||||
delete evt_obj.type;
|
||||
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")
|
||||
for (let [k, v] in Iterator(noremap))
|
||||
evt[k] = v;
|
||||
else
|
||||
evt.noremap = !!noremap;
|
||||
evt.isMacro = true;
|
||||
// A special hack for dactyl-specific key names.
|
||||
if (evt_obj.dactylString || evt_obj.dactylShift) {
|
||||
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);
|
||||
if (isObject(noremap))
|
||||
update(evt, noremap);
|
||||
else
|
||||
evt.noremap = !!noremap;
|
||||
evt.isMacro = true;
|
||||
|
||||
// A special hack for dactyl-specific key names.
|
||||
if (!evt_obj.dactylString && !evt_obj.dactylShift)
|
||||
elem.dispatchEvent(evt);
|
||||
else {
|
||||
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)
|
||||
break;
|
||||
|
||||
@@ -387,9 +390,11 @@ const Events = Module("events", {
|
||||
modifier = modifier.toUpperCase();
|
||||
keyname = keyname.toLowerCase();
|
||||
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>
|
||||
!(unknownOk || keyname.length == 1 || this._key_code[keyname] || keyname == "nop" || /mouse$/.test(keyname)))) { // disallow <misteak>
|
||||
if (keyname && (unknownOk || keyname.length == 1 || /mouse$/.test(keyname) ||
|
||||
this._key_code[keyname] || keyname == "nop")) {
|
||||
evt_obj.ctrlKey = /C-/.test(modifier);
|
||||
evt_obj.altKey = /A-/.test(modifier);
|
||||
evt_obj.shiftKey = /S-/.test(modifier);
|
||||
@@ -448,7 +453,7 @@ const Events = Module("events", {
|
||||
*/
|
||||
toString: function toString(event) {
|
||||
if (!event)
|
||||
return "[instance events]";
|
||||
return toString.supercall(this);
|
||||
|
||||
if (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
|
||||
if ((key != key.toLowerCase() && (event.ctrlKey || event.altKey || event.metaKey)) || event.dactylShift)
|
||||
modifier += "S-";
|
||||
if (/^\s$/.test(key))
|
||||
key = let (s = charCode.toString(16)) "U" + "0000".substr(4 - s.length) + s;
|
||||
else if (modifier.length == 0)
|
||||
return key;
|
||||
}
|
||||
|
||||
@@ -283,6 +283,11 @@
|
||||
<k name="K0"/> through <k name="K9"/> represent keys on the
|
||||
numeric keypad.
|
||||
</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>
|
||||
|
||||
<p>
|
||||
@@ -298,7 +303,7 @@
|
||||
</ol>
|
||||
|
||||
<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
|
||||
are read as lowercase. Uppercase characters can only be
|
||||
specified with the <em>S-</em> modifier. The following key
|
||||
|
||||
@@ -73,8 +73,7 @@ const Services = Module("Services", {
|
||||
let res = Cc[classes][meth || "getService"]();
|
||||
if (!ifaces)
|
||||
return res.wrappedJSObject;
|
||||
ifaces = Array.concat(ifaces);
|
||||
ifaces.forEach(function (iface) res.QueryInterface(iface));
|
||||
Array.concat(ifaces).forEach(function (iface) res.QueryInterface(iface));
|
||||
return res;
|
||||
}
|
||||
catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user