更改 xterm 为组合键生成的转义序列



我的目标是设置一个终端,其中命令行界面程序将按照键盘输入的预期运行(该程序最初是用xharbour编写的,用于Windows,但现在我想将其移植到linux)。我选择了 xterm 开始,因为它更简单,无需禁用默认的终端组合键。

使用

腻子,大多数字符都可以很好地工作,对于那些不工作的角色,我使用自动热键,一个ahk脚本,可以完成这项工作。例如,对于 Ctrl+F1: ^F1::SendInput ^[O5P

我尝试并修改,重新编译terminfo,更改它并更改键盘类型,但无法在终端中按Ctrl + F1获得^[O5P响应。如果您知道进行此更改的任何方法,请告诉我...我已经阅读了数百页,据说可以这样做,但所有这些更改都没有产生任何效果或不是预期的效果。

所以我离开了尝试修改终端设置以实现我的 Ctrl+F1 到 ^[O5P 目标,并尝试了一些类似于 autohotkey 的命令和程序:

  • xmodmap ,但对于组合键它不起作用
  • xdotool窗口激活 xyz 类型 ^[O5P,这将返回单个字符的字符代码
  • xmacro,它不会将击键发送到其他窗口
  • ironahk ,我在尝试运行 example.ahk 时一开始就遇到了错误,并且在其轻型手册中找不到我想要的命令。
  • bind 'e[1;5P":"e[O5P"',这里的第一个键代码是我目前在键入 ctrl+f1 时获得的,在我希望通过此组合获得的键码之后。没有效果。
  • xbindkeys+xvkbd,也无济于事。

如果您已经知道,请帮助我,以某种方式设法实现这一目标(更改为组合键返回的键代码)。

我使用最新的 CentOS 和 Ubuntu 进行测试。

xterm可以通过修改其转换表配置为在按下某些键时发送自定义字符串。转换表是由 xrdb 命令管理的 X 资源数据库的一部分。

这里有一个为 xterm 自定义转换表的很好的例子。它可以复制到您的$HOME/.Xdefaults$HOME/.Xresources,并在您下次登录时加载。要立即将其加载到当前会话中,请xrdb -merge $HOME/.Xresources 。这不会影响任何已经在运行的 xterms。(您可以使用 editres 更改正在运行的 xterm 的转换表,但这比它的价值更麻烦。

要为 xterm 的单个实例提供自定义转换表,请使用 -xrm 选项,如

xterm -xrm 'XTerm.VT100.translations: #override Ctrl<Key>Left: string(0x1b) string("b") n Ctrl<Key>Right: string(0x1b) string("f")'

直接回答问题,但对于终端发送来说ESC O 5 P是一件完全错误的事情。

简而言之:ESC O ,也称为 SS3单班 3 的缩写,是一个修改发送的下一个字符的序列,将其放在 G3 图形区域而不是标准图形区域中。这将修改 5 并直接发送 P。这不是,也从来都不是一个好主意。

发送Ctrl-F1的正确内容是 CSI 1;5 P ,一种CSI P形式(是 F1 键),第二个参数设置为 5(作为修饰符位掩码)。

相关内容

  • 没有找到相关文章

最新更新