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

时间:2012-08-07 06:55:12

标签: linux keyboard terminal autohotkey terminfo

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

使用putty大多数角色都能很好地运行,而对于那些没有使用autotykey的人来说,这是一个ahk脚本。例如,对于Ctrl + F1: ^F1::SendInput ^[O5P

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

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

  • xmodmap,但是对于关键组合,它不起作用
  • xdotool windowactivate xyz type ^ [O5P,返回单个字符的字符代码
  • xmacro,它不会向其他窗口发送击键
  • ironahk,我在开始尝试运行example.ahk时遇到错误,但在其轻量级手册中找不到我希望的命令。
  • bind '\e[1;5P":"\e[O5P"',这里的第一个键码是我当前输入ctrl + f1时所得到的以及我希望通过此组合获得的键码之后。没效果。
  • xbindkeys + xvkbd,也没有帮助。

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

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

2 个答案:

答案 0 :(得分:2)

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

xterm here的自定义转换表就是一个很好的例子。它可以复制到您的$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")'

答案 1 :(得分:0)

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

简而言之:ESC O,也称为单{3}}短片,是一个修改下一个字符发送的序列,将其置于G3图形区域而不是标准区域。这将修改5并直接发送P.这不是也不是一个好主意。

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