1

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

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

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

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

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

如果您已经知道,请帮助我,设法实现这一点(更改为组合键返回的键码)。

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

4

2 回答 2

3

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

这里有一个为 xterm 定制翻译表的好例子。它可以复制到您的$HOME/.Xdefaultsor$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")'
于 2012-08-07T18:06:32.897 回答
0

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

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

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

于 2012-08-13T20:26:03.297 回答