如何找出终端需要发送的转义序列?

时间:2013-09-28 01:37:33

标签: bash ubuntu terminal tmux byobu

我正在使用osX上的终端应用程序连接到ubuntu(我认为是12.04)。我的终端默认设置为xerm-256。在此模式下,终端在按下F2时发送\ 033OQ序列。但是对于Shift-F2或Control-F2没有映射。 Shift-Left,Shift-Right,Control-Left,Control-Right等也没有设置序列。我需要其中一些键来在各种程序中不时地操作功能。以例如byobu为例。 Shift-F2和Control-F2用于垂直和水平分割屏幕。在tmux中,箭头键与shift和control一起用于调整窗格大小。

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

例如我的左箭头发送^ [OD。我的Control-Left发送^ [[5D]。但是我的上下键没有区别。我发送^ [OB和Control-down也发送^ [OB。与我的密钥相同的问题。无论有没有班次都是一样的。

是否有一个列表,其中包含所有键和代码,特别是修饰符,如shift,control,alt / option?

如何找出预期的序列是什么,以便我可以发送所需的内容?

1 个答案:

答案 0 :(得分:17)

的XTerm

由于您宣传您正在使用 xterm (通过您的TERM值),您很可能希望安排发送 xterm 将发送的序列这些钥匙。 xterm 中的ctlseqs文档描述了PC-Style Function Keys部分底部的这些特定修改后的密钥序列:

  

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

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

实施例

F5 发送^[[15~,因此 Shift - F5 应发送^[[15;2~(即添加;2在最后一个角色之前)

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

向上发送^[[A^[OA,因此 Shift + 向上应发送^[[1;2A(即切换到CSI,并在最终字符前添加1;2

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

您可能还想查看各种终端模拟器的源代码,看看他们做了什么。例如, tmux 的相关位在xterm-keys.c file中。

配置

由于您的终端仿真器尚未发送您想要支持的所有序列,因此您必须对其进行配置才能执行此操作。 OS X,终端附带的内置终端仿真器有一些预先配置的密钥,但您可能需要自己添加大部分密钥。您可以通过调用终端>来访问密钥列表首选项... 菜单项,选择顶级设置标签,选择相应的个人资料,然后切换到键盘标签。从那里,您可以添加和删除键定义。例如,您可以将F2shift定义为send string to shell:(原文如此),然后在字符串文本框中键入 ESC ,后跟[1;2Q ESC 将显示为\033,这没关系。

注意:更改 Option - Right Option - Left 的定义可能会影响某些程序的方式(例如,shell和Emacs)使用那些击键。默认配置发送ESC-f和ESC-b,它们是用于后向词和前向词的Emacs样式击键,许多程序默认会理解这些键击。这个配置对我来说似乎是倒退的;应该将shell(和其他程序)配置为识别正确修改的箭头键序列。

您可能还想尝试使用其他终端模拟器。 iTerm 2内置支持大多数这些修改过的密钥(可能不是Control + Fn变体),因此手动配置的内容会更少。

另请注意,OS X为某些 Control - Fx 组合定义了一些系统范围的快捷方式(请参阅系统偏好设置键盘键盘快捷键键盘和文字输入)。您必须禁用其中一些快捷方式,以确保终端 iTerm 有机会“看到”您所需的组合键。