Paul Collins wrote: > Apple keyboards have the Command keys (a.k.a. the Apple or "waffle" key) > in the positions normally occupied on PC keyboards by the Alt/AltGr keys, > and the Option or Alt keys in the position occupied by the so-called > Windows keys. Folks who have been using PC-type computers for too long > generally have insurmountable muscle memory in this regard. > > This patch adds a module parameter, defaulting to off, that swaps these keys. > > The same effect can also be achieved by changing the console and X > keymaps, but this approach does not scale. For example, I don't want to > have to learn how to reconfigure Wayland's keymaps when the future > arrives and we all start using it, and there may be applications I don't > know about that also read keyboard events directly. Hi, Where do you suggest that this option be documented? > Signed-off-by: Paul Collins <paul@xxxxxxxxxxxxx> > --- > drivers/hid/hid-apple.c | 21 +++++++++++++++++++++ > 1 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c > index 7ed94cf..63e9ee3 100644 > --- a/drivers/hid/hid-apple.c > +++ b/drivers/hid/hid-apple.c > @@ -40,6 +40,11 @@ module_param(fnmode, uint, 0644); > MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, " > "[1] = fkeyslast, 2 = fkeysfirst)"); > > +static unsigned int swapmodifiers = 0; > +module_param(swapmodifiers, uint, 0644); > +MODULE_PARM_DESC(fnmode, "Modifiers match labels or positions " > + "([0] = labels, 1 = positions)"); > + > struct apple_sc { > unsigned long quirks; > unsigned int fn_on; > @@ -123,6 +128,14 @@ static struct apple_key_translation apple_iso_keyboard[] = { > { } > }; > > +static struct apple_key_translation apple_swap_modifiers[] = { > + { KEY_LEFTALT, KEY_LEFTMETA }, > + { KEY_RIGHTALT, KEY_RIGHTMETA }, > + { KEY_LEFTMETA, KEY_LEFTALT }, > + { KEY_RIGHTMETA, KEY_RIGHTALT }, > + { } > +}; > + > static struct apple_key_translation *apple_find_translation( > struct apple_key_translation *table, u16 from) > { > @@ -199,6 +212,14 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input, > } > } > > + if (swapmodifiers) { > + trans = apple_find_translation(apple_swap_modifiers, usage->code); > + if (trans) { > + input_event(input, usage->type, trans->to, value); > + return 1; > + } > + } > + > if (asc->quirks & APPLE_ISO_KEYBOARD) { > trans = apple_find_translation(apple_iso_keyboard, usage->code); > if (trans) { > Thanks, -- ~Randy -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html