在 Konsole keytab 中模拟 VT220 转义序列

在 Konsole keytab 中模拟 VT220 转义序列

经过一番徒劳的黑客攻击后,我意识到了这一点。 。 。我需要正确映射 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 中将数字键盘的按键重新绑定/到不同的控制序列?或者,这是在不同级别(例如terminfoxkbxterm-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();
    返回真;
}
返回假;

相关内容