Keyboard
將 Escape 鍵變成一個修飾符,在點擊時仍充當 Escape
我使用平鋪視窗管理器(目前是 xMonad),因此我需要一個充當視窗管理“控制鍵”的鍵。每當我使用帶有 Windows/Super/Mod4 鍵的鍵盤時,我將左 Windows 鍵用作該鍵,而我的右 Windows 鍵用作 Compose/Multi_key。
但是,我也有幾個(
$$ very $$舊的)沒有任何 Windows 鍵的鍵盤(即它們是無鍵的),並且我沒有任何可以(舒適地)用作我的“WM 控制鍵”的鍵。過去,因為 xMonad 允許這樣做,所以我使用 Control+Alt 作為我的“WM 控制鍵(組合)”,但一段時間後我注意到,這會干擾(一些)Emacs(移動命令),所以這不是一個選項了。因此,我認為我可以通過以下方式使用我的 Escape 鍵:
- 如果我按住 Ecs,它的作用就像 Mod4
- 如果我點擊 Esc,它將充當 Escape
AFAIK,按住 Escape 並不會正常執行任何操作,所以我認為這樣做可能是個好主意。然後我嘗試通過使用來實現這一點
xmodmap
:clear Mod4 add Mod4 = Super_L Escape
我所期望的:Super_L 仍然充當 Super,而 Escape 現在是一個額外的 Super。下一步將是
xcape
用來獲取(一些)舊的 Escape 鍵行為。我得到了什麼(的輸出
xmodmap
):xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d), Hyper_L (0xcf) mod3 Scroll_Lock (0x4e), Mode_switch (0xcb) mod4 Escape (0x9), y (0x34), Super_L (0x85), Super_L (0xce) mod5 ISO_Level3_Shift (0x5c)
我不明白的是:
- 為什麼
y
突然也設置為 Mod4?- 為什麼 Escape 仍然可以用作 Escape(按下一次)和Super(按下時;我在嘗試測試更改時注意到了這一點),儘管此時我還沒有使用過
xcape
。這是一個錯誤
xmodmap
,還是我使用xmodmap
不正確?我懷疑是後者,但是有人可以幫助我實現我想要做的事情嗎?更多資訊(希望不是無關緊要的):
- 我目前的作業系統是 Arch Linux
- 我對使用其他軟體的解決方案持開放態度,例如
xkb
,xdotool
等。- 我目前正在使用德國 QWERTZ 佈局(即 ISO,而不是 ANSI),有時使用Neo(其中,AFAIK 被實現為
de
鍵映射/佈局的另一種變體;請參見localectl
下面的輸出)- 我希望我的解決方案能夠獨立於鍵盤/硬體工作:如果我更換鍵盤,我不想更改任何配置文件。
- 在任何人建議之前:將 Super 映射到 Capslock 不是一個選項,因為我有時使用 Neo 佈局,它使用 Capslock 作為其第 3 層修改器之一,它也用於第 5 層和第 6 層。這也意味著我希望這個解決方案也獨立於鍵盤佈局,因此我可以輕鬆地在 Neo 和 QWERTZ 之間切換。
- 我仍然願意接受其他建議。我唯一的要求:對任何其他程序(例如 Emacs 或 Vim)沒有/最小的干擾,並且用作我的“WM 控制鍵”的鍵(組合)應該位於我的鍵盤左側,因為大多數其他我用來控制 WM 的鍵位於鍵盤的右側(例如 h、j、k、l、…)。
在任何更改之前,即我目前的情況,
xmodmap
輸出:xmodmap: up to 2 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d), Hyper_L (0xcf) mod3 Scroll_Lock (0x4e), Mode_switch (0xcb) mod4 Super_L (0x85), Super_L (0xce) mod5 ISO_Level3_Shift (0x5c)
我目前
.Xmodmap
是:add Mod3 = Scroll_Lock
並
localectl
說:System Locale: LANG=de_DE.UTF-8 LC_COLLATE=C VC Keymap: de-latin1-nodeadkeys X11 Layout: de,de X11 Model: pc105 X11 Variant: nodeadkeys,neo X11 Options: compose:rwin,grp:ctrls_toggle
我為此使用xcape。將密鑰映射到
Super_L
Xmodmap 中,並xcape -e 'Super_L=Escape'
在 XMonad 啟動時執行。