在 Konsole keytab 中模擬 VT220 轉義序列
經過一點徒勞的黑客攻擊後,我意識到. . . 我需要正確映射 HHK 鍵盤,以便可以使用各種元鍵。就這樣開始了我下地獄的旅程。
> > Doug Palmer,一個不可靠的 XKB 配置指南 > > >
我正在嘗試將 Konsole 配置為在啟用應用程序鍵盤模式時(例如 by
echoti smkx
)從數字鍵盤發出 VT220 樣式的轉義序列。特別是,以下控制序列應該是所述條件下的輸出:http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-VT220-Style-Function-Keys
必須知道,修改
TERM
環境變數與向 shell 謊報終端功能相同,通常應避免。簡單的設置TERM=xterm-vt220
是不夠的,並且會導致意外的行為。我有一個簡單但部分的解決方案。
.keytab
Konsole 允許以文件的形式配置其終端鍵綁定。以下添加是有效的,保存到.local/share/konsole/VT220.keytab
:keyboard "VT220" key 0+KeyPad+AppCursorKeys : "\EOp" key 1+KeyPad+AppCursorKeys : "\EOq" key 2+KeyPad+AppCursorKeys : "\EOr" key 3+KeyPad+AppCursorKeys : "\EOs" key 4+KeyPad+AppCursorKeys : "\EOt" key 5+KeyPad+AppCursorKeys : "\EOu" key 6+KeyPad+AppCursorKeys : "\EOv" key 7+KeyPad+AppCursorKeys : "\EOw" key 8+KeyPad+AppCursorKeys : "\EOx" key 9+KeyPad+AppCursorKeys : "\EOy" key ++KeyPad+AppCursorKeys : "\EOk" key *+KeyPad+AppCursorKeys : "\EOj" key .+KeyPad+AppCursorKeys : "\EOn" key -+KeyPad+AppCursorKeys : "\EOm" key Enter+KeyPad : "\EOM"
應用這些鍵綁定(以及可能存在的任何其他鍵綁定)後,將發出與啟用應用程序鍵盤模式和 NumLock 時
konsole
相同的控制序列。xterm
這些序列對於期望 VT220 仿真的應用程序很有用,因為它們可以唯一地辨識來自數字鍵盤的擊鍵,從而可以將任意功能綁定到它們。我的配置中缺少一個常用的鍵盤鍵:
/
(Qt::Key_Slash)。Konsole 圖形鍵綁定編輯器似乎無法辨識對該鍵的任何引用,無論是按名稱還是以文字表示。如果手動將其寫入.keytab
文件,Konsole 將忽略它並且該行將不會出現在 GUI 編輯器中。這在我的鍵盤上留下了一個非常煩人的漏洞,其中一個鍵是頑固地無法程式的。我寧願不
xkb
和朋友一起陷入困境;但當然,vanillaxterm
開箱即用地完成了所有這些工作,這表明在這種情況下,沒有必要在如此低的級別上擺弄鍵綁定。相反,Konsole(或 QT)似乎在 X 之上做了一些獨特的和雪花的事情。**問題:**是否可以在 Konsole 中將數字小鍵盤的鍵重新綁定
/
到不同的控制序列?或者,這是否是在不同級別(如 、 或 from )執行的東西terminfo
會xkb
更xterm-keys
有效tmux
的點?或許我瘋了?其他勇敢的控制台指揮官的任何見解將不勝感激。
Konsole 忽略了這一點,因為它依賴於無法映射的硬編碼鍵列表:
// 覆蓋以下任何快捷方式,因為 // 終端需要它們 int keyCode = keyEvent->key() | 修飾符; 開關(鍵碼){ // 列表取自 QLineEdit::event() 程式碼 案例 Qt::Key_Tab: 案例 Qt::Key_Delete: 案例 Qt::Key_Home: 案例 Qt::Key_End: 案例 Qt::Key_Backspace: 案例 Qt::Key_Left: 案例 Qt::Key_Right: 案例 Qt::Key_Slash: 案例 Qt::Key_Period: 案例 Qt::Key_Space: 鍵事件->接受(); 返回真; } 返回假;