经过一番徒劳的黑客攻击后,我意识到了这一点。 。 。我需要正确映射 HHK 键盘,以便我可以使用各种元键。就这样,我开始了坠入地狱的旅程。
道格·帕尔默,不可靠的 XKB 配置指南
我正在尝试将 Konsole 配置为在启用应用程序键盘模式(例如,通过echoti smkx
)时从数字键盘发出 VT220 样式的转义序列。特别是,在所述条件下应输出以下控制序列:
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-VT220-Style-Function-Keys
必须意识到,修改TERM
环境变量与向 shell 撒谎有关终端的功能是一样的,通常应该避免。简单的设置TERM=xterm-vt220
是不够的,并且会导致意外的行为。
我有一个简单但部分的解决方案。 Konsole 允许以文件的形式配置其终端键绑定.keytab
。以下添加有效,保存到.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 中将数字键盘的按键重新绑定/
到不同的控制序列?或者,这是在不同级别(例如terminfo
、xkb
或xterm-keys
来自tmux
)运行的东西会更有效的点吗?也许我疯了?
来自其他勇敢的控制台指挥官的任何见解将不胜感激。
答案1
Konsole 忽略了这一点,因为它依赖于无法映射的硬编码键列表:
// 覆盖以下任何快捷方式,因为 // 终端需要它们 int keyCode = keyEvent->key() | 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: keyEvent->accept(); 返回真; } 返回假;