通过更改为的xterm组合键所产生的转义序列(Change the escape sequence

2019-09-20 22:48发布

我的目标是建立在预期的键盘输入的命令行界面程序会表现得终端(该程序是用xharbour最初的Windows,但现在我想将它移植到Linux)。 我选择的xterm下手,因为它更简单,不需要禁用默认终端组合键。

用腻子大多数字符进行得很顺利,并为那些不这样做我用AutoHotkey的,一个AHK脚本,没有工作。 例如,对于按Ctrl + F1: ^F1::SendInput ^[O5P

我尝试和修改,重新编译的terminfo,改变了它,改变键盘类型,但不能达到以获取按Ctrl + F1在终端中的^ [O5P响应。 如果你知道这样做的任何改变的方式,请告诉我...我已阅读槽数百个据说这样做的网页,但所有这些变化并没有造成任何影响或没有预期的效果。

所以我离开了试图修改终端设置,以实现我按Ctrl + F1至^ [O5P目标,并尝试了一些命令和程序,将做同样的事情到AutoHotkey的:

  • xmodmap ,但对于组合键它不工作
  • xdotool windowactivate XYZ型^ [O5P,它返回单个字符的字符码
  • xmacro ,它不发送击键其他窗口
  • ironahk ,我会在一开始的错误权,试图运行example.ahk,但没有找到,我希望在其轻体力劳动的命令。
  • bind '\e[1;5P":"\e[O5P"' ,这里的第一个键码是按Ctrl + F1,而且我希望通过这样的组合,以获得一个后无效果,当我目前得到。
  • xbindkeys + xvkbd ,也没有任何帮助。

请帮助我,如果你已经知道了,不知何故管理来实现这一(更换密钥代码返回键组合)。

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

Answer 1:

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

有加入了xterm定制的转换表的一个很好的例子在这里 。 它可以被拷贝到你的$HOME/.Xdefaults$HOME/.Xresources ,它会在您下次登录时加载。要立即加载到当前会话中, xrdb -merge $HOME/.Xresources 。 这不会影响已在运行任何的xterm。 (你也许可以改变运行的xterm用的转换表editres ,但是这更多的麻烦比它的价值。)

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

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


Answer 2:

没有直接回答这个问题,但ESC O 5 P是一个相当-说错话了终端被发送。

简而言之: ESC O ,否则所谓SS3短单移3,是修改发送下一个字符,把它在G3图形区域而不是标准的一个序列。 这将改变5并直接发送在P。 这是不是和从未有过的好主意。

正确的事发送对Ctrl-F1CSI 1;5 P ,一种形式的CSI P (为F1键)设置为5的第二个参数(为改性剂的位掩码)。



文章来源: Change the escape sequence generated by xterm for key combinations