
對於我所嘗試的,.inputrc 中的“TAB”和“Ci”似乎意味著同一件事,無論我綁定到一個還是另一個都綁定。我知道最初是同一件事,而且這種行為是從舊時代繼承下來的,但現在,除了終端模擬器之外,所有 X 應用程式都使 Ci 和 TAB 按鍵之間存在差異。
那麼有沒有辦法在我按 TAB 鍵時運行終端命令(例如“完成”)並在按下“Ci”時運行另一個命令?
(同樣的問題適用於 Cm 和 ENTER、Cz、Cd 以及所有這些控制序列,我想透過原始綁定之外的其他方式發送這些控制序列,並將我自己的命令應用於這些珍貴的鍵綁定)
順便說一句,如果你能解釋一下從按鍵到 shell 解釋的過程,這將有助於我理解。現在我明白鍵盤事件由 Xmodmap 翻譯,然後由 .inputrc 翻譯,結果由 shell 或類似的東西解釋。
答案1
xmodmap
和之間沒有直接聯繫.inputrc
。
根據終端模擬器的不同,有幾種方法可以修改透過終端發送的金鑰。其中一些包括
然而,在正常情況下,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鍵有自己特殊的鍵符號,所以它不受此轉換的影響。