.inputrc 中 TAB 和 Ci 的單獨映射

.inputrc 中 TAB 和 Ci 的單獨映射

對於我所嘗試的,.inputrc 中的“TAB”和“Ci”似乎意味著同一件事,無論我綁定到一個還是另一個都綁定。我知道最初是同一件事,而且這種行為是從舊時代繼承下來的,但現在,除了終端模擬器之外,所有 X 應用程式都使 Ci 和 TAB 按鍵之間存在差異。

那麼有沒有辦法在我按 TAB 鍵時運行終端命令(例如“完成”)並在按下“Ci”時運行另一個命令?

(同樣的問題適用於 Cm 和 ENTER、Cz、Cd 以及所有這些控制序列,我想透過原始綁定之外的其他方式發送這些控制序列,並將我自己的命令應用於這些珍貴的鍵綁定)

順便說一句,如果你能解釋一下從按鍵到 shell 解釋的過程,這將有助於我理解。現在我明白鍵盤事件由 Xmodmap 翻譯,然後由 .inputrc 翻譯,結果由 shell 或類似的東西解釋。

答案1

xmodmap和之間沒有直接聯繫.inputrc

根據終端模擬器的不同,有幾種方法可以修改透過終端發送的金鑰。其中一些包括

  • 修改 X 鍵盤配置(xkb
  • 修改為給定事件發送的鍵碼(xmodmap
  • 特定於終端的事物,例如translationsxterm 使用的資源。

然而,在正常情況下,control/I發送一個tab字符,因為這是幾乎所有終端的設定方式。

使用xkb,您可以(原則上)更改鍵盤的功能。反過來,X 應用程式會偵測按鍵按下和釋放事件,並將其轉換為按鍵符號。 xev對於顯示事件很有用。在 X 中運行的終端模擬器取得一系列事件,(使用 X 庫呼叫)它可以將其轉換為字元。在這種情況下,Atab只是另一個字元。

xmodmap在此過程中的作用是對 X 鍵盤配置進行臨時更改。

如果您碰巧使用xterm,該translations資源提供了很多可配置性。這是該產品的一個特點X 工具包,它允許您將各種按鍵組合與 xterm 的內建操作相關聯。預設的鍵綁定列在手動的。您可以覆蓋或新增這些綁定。您可以在多個位置設定資訊($HOME/.Xdefaults例如,儘管它很容易變得混亂)。例如,我設定了XAPPLRESDIR環境變數指向我的使用者目錄,其中包含自訂的應用程式預設檔。在一個命名中XTerm,我可以用它來改變結果ctrl/I

*VT100*translations:    #override \n\ 
    Ctrl ~Shift<Key>I:string("??")

因為該tab鍵有自己特殊的鍵符號,所以它不受此轉換的影響。

相關內容