如何找出我的terminal需要发送的转义序列?

我使用osX上的terminal应用程序连接到Ubuntu(12.04我认为)。 我有terminal默认设置为xerm-256。 在这种模式下,当F2被按下时,terminal发送\ 033OQ的序列。 对于Shift-F2或Control-F2没有映射。 也没有为左移,右移,右移,左移,右移等设置序列。我需要这些键中的一些来在各种程序中不时地操作function。 以例如byobu为例。 Shift-F2和Control-F2用于垂直和水平分割屏幕。 在tmux中,箭头键用于移动和控制调整窗格的大小。

我的问题是,我不知道terminal应该发送什么序列。 我如何找出这些序列应该是什么? 我知道我可以按Control-v,然后按一个键来获取正在接收的代码,但这不是我所需要的。 我不需要看看发送了什么序列。 我需要知道我需要发送什么序列。

例如我的左箭头发送^ [OD。 我的控制左侧发送^ [[5D]。 但是,我的上下键没有区别。 我下来发送^ [OB和控制下来也发送^ [OB。 同样的问题,我的关键。 无论是否有转变,都是一样的。

有没有一个列表中的所有的关键和代码,特别是与修改器,如shift,control,alt / option?

我怎样才能找出预期的顺序是什么,这样我可以发送需要的东西?

的XTerm

既然你宣传你正在使用一个xterm (通过你的TERM值),你很可能想要安排发送xterm发送这些密钥的序列。 xterm的ctlseqs文档描述了PC风格功能键部分底部的这些特定修改的按键序列:

… xterm识别在控制序列的最后一个字符之前附加的参数的功能键修饰符。

2 Shift 3 Alt 4 Shift + Alt 5 Control 6 Control + Shift ⋮ 

例子

F5发送^[[15~ ,所以ShiftF5应该发送^[[15;2~ (即在最后一个字符之前加;2

箭头键和前四个功能键有点不同。 他们经常使用基于SS3的序列(从^[O )开始; 这些将需要改变为基于CSI的等价物(以^[[开始],因为SS3序列不能有参数。 此外,键的正常序列通常不具有数字参数,因此还会添加占位符(?) 1参数:

向上发送^[[A^[OA ,所以Shift + Up应该发送^[[1;2A (即切换到CSI,并且在最后字符之前加1;2

F1发送^[OP ,所以Shift + F1应该发送^[[1;2P (即切换到CSI,在最后一个字符之前加1;2

你可能也想看看各种终端模拟器的源代码,看看他们是做什么的。 例如, tmux的相关位在xterm-keys.c文件中 。

组态

由于您的终端仿真程序尚未发送您想要支持的所有序列,因此您必须对其进行配置。 OS X, Terminal附带的内置终端仿真器具有预配置的几个按键,但是您可能必须自己添加大部分按键。 您可以通过调用终端 > 首选项…菜单项,选择顶级设置选项卡,选择适当的配置文件,然后切换到其“ 键盘”选项卡来获取按键列表 。 从那里你可以添加和删除键的定义。 例如,你可以通过shift来定义F2send string to shell: (sic),然后在字符串文本框中输入ESC,然后键入[1;2QESC将显示为\033 ,这是可以的)。

注意:改变OptionRightOptionLeft的定义可能会影响一些程序(如shell和Emacs)如何处理这些击键。 默认配置发送ESC-f和ESC-b,这些是Emacs风格的击键,用于许多程序默认了解的后向字和前向字。 这个配置似乎倒退了, shell(和其他程序)应该被配置为识别正确的修改过的箭头键序列。

你可能也想尝试一个不同的终端模拟器。 iTerm 2内置了大多数这些修改的键的支持(可能不是Control + Fn的变体),所以手动配置会少一些。

另外请注意,OS X为某些ControlFx组合定义了一些系统范围的快捷方式(请参阅系统首选项键盘键盘快捷方式键盘和文本输入 )。 你将不得不禁用这些快捷方式,以确保终端iTerm有机会“看到”你想要的组合键。