net*_*haw 5 linux kde terminal konsole plasma5
经过一番徒劳的黑客攻击后,我意识到. . . 我需要正确映射 HHK 键盘,以便我可以使用各种元键。就这样开始了我堕入地狱的过程。
Doug Palmer,不可靠的 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"
Run Code Online (Sandbox Code Playgroud)
应用这些键绑定(以及可能存在的任何其他键绑定)后,konsole将发出与xterm启用应用程序键盘模式和 NumLock 时相同的控制序列。这些序列对于需要 VT220 仿真的应用程序非常有用,因为它们唯一地标识数字键盘上的击键,从而可以将任意功能绑定到它们。
我的配置中缺少一个常用的键盘键:/(Qt::Key_Slash)。Konsole 图形键绑定编辑器似乎无法识别对该键的任何引用,无论是按名称还是表示为文字。如果是手动写入.keytab文件,Konsole 将忽略它并且该行不会出现在 GUI 编辑器中。这在我的键盘上留下了一个非常烦人的漏洞,其中只有一个键顽固地无法编程。
我宁愿不xkb和朋友们混在一起;但是当然,vanillaxterm可以开箱即用地完成所有这些工作,这表明在这种情况下没有必要在如此低的级别上摆弄键绑定。相反,Konsole(或 QT)似乎正在 X 之上做一些独特而雪花的事情。
问题:是否可以在 Konsole 中将数字键盘的/键重新绑定到不同的控制序列?或者,这是点东西,在不同级别上运行(如terminfo,xkb或xterm-keys从tmux)会更有效?也许,我疯了吗?
其他勇敢的控制台指挥官的任何见解将不胜感激。
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();
返回真;
}
返回假;