Windows 或 Mac Cmd 鍵的終端鍵綁定的先例

Windows 或 Mac Cmd 鍵的終端鍵綁定的先例

Unix 終端發送低於 32 的 ASCII 代碼Ctrl+另一個鍵,至少有兩種發送「元」的方式(即添加前綴代碼 27 或設定 ASCII 字元的高位)。是否有先例可以對其他修飾鍵(例如“super”或 Windows 標誌鍵或 MacCmd鍵)的使用進行編碼?

我想Cmd在 iTerm2 中映射 + 箭頭鍵,但我不知道要為它們分配什麼代碼。我已經使用Option帶有箭頭鍵的“元”鍵。

答案1

當按下元時設定第 8 位元的約定相當古老,並且不再使用太多,或實際上在任何支援不僅僅是 ASCII 字元的現代終端中都不再使用。就這一點而言,前綴 ESC 的慣例如今也不常見。

32 個 ASCII 控製字元確實作為 ASCII 控製字元(代碼點小於 32)發送,但僅涵蓋 Ctrl-@、Ctrl-A 到 Ctrl-Z、ESC、Ctrl-\、Ctrl-]、Ctrl-^ 和Ctrl-_ 。任何其他字元(例如 Ctrl-4)在 ASCII 中都不存在,並且沒有透過終端發送它的約定。

基本上,底線是這樣的:任何不能作為普通字元發送的內容(即存在於支援現代 Unicode 終端的 Unicode 中)都必須作為轉義序列發送。轉義序列由有效的終端仿真協定定義。現今使用的幾乎所有終端模擬協定都源自或類似 VT100,且轉義序列可用於鍵盤上不作為字元存在的常用鍵:箭頭鍵、功能鍵等...

VT100 和相關的終端模擬協定不包含用於傳送修改按鍵的約定,甚至不包含 Shift 和 Control 等標準按鍵。在 tty 上執行的軟體無法區分 Enter 按鍵和 Shift-Enter 按鍵。它甚至無法區分 Enter 按鍵和 Control-M 按鍵。

這些修飾符序列不能透過終端傳輸的事實可以被認為是一件好事。例如,MacOS 終端應用程式可以聲明 ⌘V 擊鍵供自己使用(貼上),因為無論如何它都無法發送到 tty。

相關內容