2022-11-04 12:36:58

by Aditya Garg

[permalink] [raw]
Subject: [PATCH] HID: apple: Swap Control and Command keys on Apple keyboards

From: Aditya Garg <[email protected]>

This patch allows users to swap the control and command keys. This can be
useful for the Mac users who are used to using Command instead of Control
in macOS for various commonly used shortcuts.

Signed-off-by: Aditya Garg <[email protected]>
---
drivers/hid/hid-apple.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
index c671ce946..86188e803 100644
--- a/drivers/hid/hid-apple.c
+++ b/drivers/hid/hid-apple.c
@@ -59,6 +59,12 @@ MODULE_PARM_DESC(swap_opt_cmd, "Swap the Option (\"Alt\") and Command (\"Flag\")
"(For people who want to keep Windows PC keyboard muscle memory. "
"[0] = as-is, Mac layout. 1 = swapped, Windows layout.)");

+static unsigned int swap_ctrl_cmd;
+module_param(swap_ctrl_cmd, uint, 0644);
+MODULE_PARM_DESC(swap_ctrl_cmd, "Swap the Control (\"Ctrl\") and Command (\"Flag\") keys. "
+ "(For people who are used to Mac shortcuts involving Command instead of Control. "
+ "[0] = No change. 1 = Swapped.)");
+
static unsigned int swap_fn_leftctrl;
module_param(swap_fn_leftctrl, uint, 0644);
MODULE_PARM_DESC(swap_fn_leftctrl, "Swap the Fn and left Control keys. "
@@ -308,7 +314,15 @@ static const struct apple_key_translation swapped_option_cmd_keys[] = {
{ KEY_LEFTALT, KEY_LEFTMETA },
{ KEY_LEFTMETA, KEY_LEFTALT },
{ KEY_RIGHTALT, KEY_RIGHTMETA },
- { KEY_RIGHTMETA,KEY_RIGHTALT },
+ { KEY_RIGHTMETA, KEY_RIGHTALT },
+ { }
+};
+
+static const struct apple_key_translation swapped_ctrl_cmd_keys[] = {
+ { KEY_LEFTCTRL, KEY_LEFTMETA },
+ { KEY_LEFTMETA, KEY_LEFTCTRL },
+ { KEY_RIGHTCTRL, KEY_RIGHTMETA },
+ { KEY_RIGHTMETA, KEY_RIGHTCTRL },
{ }
};

@@ -407,6 +421,13 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
code = trans->to;
}

+ if (swap_ctrl_cmd) {
+ trans = apple_find_translation(swapped_ctrl_cmd_keys, code);
+
+ if (trans)
+ code = trans->to;
+ }
+
if (code == KEY_FN)
asc->fn_on = !!value;

--
2.34.1



2022-11-14 23:00:06

by Jiri Kosina

[permalink] [raw]
Subject: Re: [PATCH] HID: apple: Swap Control and Command keys on Apple keyboards

On Fri, 4 Nov 2022, Aditya Garg wrote:

> From: Aditya Garg <[email protected]>
>
> This patch allows users to swap the control and command keys. This can be
> useful for the Mac users who are used to using Command instead of Control
> in macOS for various commonly used shortcuts.
>
> Signed-off-by: Aditya Garg <[email protected]>

Applied, thanks.

The number of module parameters the apple driver has been acquiring over
years is becoming a little bit worrisome ... I am not sure that the actual
users are keeping track. Is there any userspace utlizing it in a friendly
manner?

--
Jiri Kosina
SUSE Labs


2022-11-16 13:46:17

by Aditya Garg

[permalink] [raw]
Subject: Re: [PATCH] HID: apple: Swap Control and Command keys on Apple keyboards


> Applied, thanks.
>
> The number of module parameters the apple driver has been acquiring over
> years is becoming a little bit worrisome ... I am not sure that the actual
> users are keeping track.

I guess the Arch wiki on Apple keyboards does a good job to keep users updated.

https://wiki.archlinux.org/title/Apple_Keyboard

> Is there any userspace utlizing it in a friendly
> manner?

I work for the t2linux community involving users with T2 Macs, and I guess the previous module parameters in the driver were being used by the users. Although I ain't aware about any softwares which make using these parameters easy, although I guess a simple bash script placed in /usr/bin can be made to make things easy. I had made a similar one for the Touch Bar driver for the Macs (the driver shall be sent to you soon btw!)

We also have tools like xmodmap which can do the same function as these module parameters do, and if used, we actually don’t need the module parameters. But these tools are a bit unreliable and a bit difficult to set up as compared to module parameters, as per the feedback received from various Mac users.

I guess I was able to clarify what all you asked :)

Regards
Aditya

> —
> Jiri Kosina
> SUSE Labs
>