發送 SIG* 的控制以外的密鑰?
我想交換 Ctrl 和 Super 以便我可以使用物理超級/元鍵進行複制/粘貼/全選/查找/等。沒有特定於應用程序的配置,這通常不存在。
但是,我想在物理控制鍵上保留 SIGINT、EOF、掛起等。
我嘗試過設置
URxvt.keysym.M-c: ^C
,並且我知道stty
可以將其更改為 eg^K
,但據我所知,它無法更改修飾鍵 - 無論是更改為不同的鍵符還是直接更改為鍵碼。這可能嗎?
將某些擊鍵轉換為信號是在非常低的級別執行的:它由核心中的通用終端驅動程序完成,當它在終端仿真器程序或物理終端硬體與終端中執行的程序之間進行中繼時。這個驅動程序只理解字元(我所說的字元,我的意思是字節——在設計這些介面時,多字節字元集還不是一個東西)。
大多數涉及修飾符而不是
Shift
功能鍵的擊鍵沒有對應的字元,因此終端必鬚髮送多字元轉義序列(以 ASCII轉義字元開頭)。請參閱bash - 使用 control+alt+space 的錯誤鍵序列綁定和鍵盤輸入和文本輸出如何工作?有關此主題的更多背景資訊。有些字元對應於
Ctrl
+letter
(ASCII控製字元),但沒有對應於Super
+letter
。Meta
+C
發送兩個字元的序列ESC
C
,而Super
+在大多數終端中預設C
發送C
。因此,您可以將Ctrl
+letter
(和一些標點符號)上的信號重新綁定到單字節可列印字元,僅此而已(也可以綁定到非 ASCII 字節,但這會對 UTF-8 造成嚴重破壞)。唯一的解決方案是將您的終端仿真器配置為發送
Ctrl
+C
用於您想要觸發 SIGINT 的任何擊鍵。對於 Rxvt,您在正確的軌道上,但^C
插入了兩個字元^
和C
,您需要 control-c 字元,您可以使用八進制轉義符指定它。此外M-c
是Meta
+C
,而不是Super
+C
;對於Super
+C
, runxmodmap -pm
,注意哪一個是 Super,並mod1
使用mod5
相應的數字作為修飾符,例如URxvt.keysym.5-c: \003