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

我的目标是build立一个terminal,其中一个命令行界面程序将按照键盘input的预期行事(该程序是最初为Windows编写的xharbour,但现在我想将它移植到linux)。 我select了xterm,因为它更简单,不需要禁用默认的terminal组合键。

用腻子大多数人物工作得很好,对于那些不使用autohotkey,一个ahk脚本,并做这项工作。 例如,对于Ctrl + F1: ^F1::SendInput ^[O5P

我尝试和修改,重新编译terminfo,改变它,并改变键盘types,但不能实现获得^ [O5P响应按Ctrl + F1在terminal。 如果你知道这样做的任何方式,请告诉我…我已经读了几百页,据说这样做,但所有这些变化没有任何影响或没有预期的效果。

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

  • xmodmap ,但对于键组合,它不工作
  • xdotool windowactivate xyztypes^ [O5P,这将返回单个字符的char代码
  • xmacro ,它不会将按键发送到其他窗口
  • ironahk ,我一开始就遇到了一个错误,试图运行example.ahk,在光手册中找不到我希望的命令。
  • bind '\e[1;5P":"\e[O5P"' ,这里第一个键码就是我当前inputctrl + f1时所得到的结果,并且是我希望通过这个组合得到的结果。
  • xbindkeys + xvkbd ,也没有帮助。

如果您已经知道,请帮助我,以某种方式进行pipe理(更改为组合键返回的关键代码)。

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

Solutions Collecting From Web of "更改由xterm为键组合生成的转义序列"

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

这里有个xterm的自定义转换表的好例子。 它可以被复制到你的$HOME/.Xdefaults$HOME/.Xdefaults ,它会在你下次登录的时候被加载。要立刻把它加载到你当前的会话中, xrdb -merge $HOME/.Xresources 。 这不会影响已经运行的任何xterm。 (你也许可以用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是Single Shift 3的缩写,是一个修改发送的下一个字符的序列,把它放在G3图形区域而不是标准字符区域。 这将修改5并直接发送P。 这不是,也从来不是一个好主意。

Ctrl-F1发送的正确信息是CSI 1;5 P ,一种CSI P (作为F1密钥)的形式,第二个参数设置为5(作为修改器位掩码)。