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


我正在使用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。我的控制左派发^ [[5D]。但是我的上下键没有区别。我发送^ [OB和Control-down也发送^ [OB。与我的密钥相同的问题。无论有没有班次都是一样的。

是否有一个包含所有键和代码的列表,特别是修改器,如shift,control,alt / option?

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


2847
2017-09-28 01:37


起源



答案:


的XTerm

既然您正在宣传您正在使用的 的xterm (通过您的TERM值),您很可能希望安排发送序列 的xterm 会发送这些钥匙。该 ctlseqs 来自的文件 的xterm 描述了底部的这些特定修改的密钥序列 PC风格的功能键 部分:

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

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

例子

F5 发送 ^[[15~所以 转移 - F5 应该发送 ^[[15;2~ (即加 ;2 在最后一个角色之前)

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

向上 发送 ^[[A 要么 ^[OA所以 转移+向上 应该发送 ^[[1;2A (即切换到CSI,并添加 1;2 在最后一个角色之前)

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

您可能还想查看各种终端仿真器的源代码,看看他们做了什么。例如,相关位 TMUX 在它的 xterm-keys.c 文件

组态

由于您的终端仿真器尚未发送您想要支持的所有序列,因此您必须对其进行配置才能执行此操作。 OS X附带的内置终端仿真器, 终奌站,有几个键预先配置,但你可能必须自己添加大部分。您可以通过调用来访问密钥列表 终奌站 > 优先… 菜单项,选择顶级 设置 选项卡,选择适当的配置文件,并切换到它 键盘 标签。从那里,您可以添加和删除键定义。例如,您可以定义 F2 同 shift 至 send string to shell: (原文如此)和类型 退出 其次是 [1;2Q 进入字符串文本框( 退出 将显示为 \033,这没关系)。

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

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

另请注意,OS X有一些系统范围的快捷方式已定义 控制 - FX 组合(见 系统偏好键盘键盘快捷键键盘和文本输入)。您必须禁用其中一些快捷方式以确保这一点 终奌站 要么 的iTerm 有机会“看到”您想要的组合键。


16
2017-09-28 04:59



哇!这正是我所需要的。我去过xterm文档但是在你解释它之前对我没有意义。 - user1757006


答案:


的XTerm

既然您正在宣传您正在使用的 的xterm (通过您的TERM值),您很可能希望安排发送序列 的xterm 会发送这些钥匙。该 ctlseqs 来自的文件 的xterm 描述了底部的这些特定修改的密钥序列 PC风格的功能键 部分:

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

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

例子

F5 发送 ^[[15~所以 转移 - F5 应该发送 ^[[15;2~ (即加 ;2 在最后一个角色之前)

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

向上 发送 ^[[A 要么 ^[OA所以 转移+向上 应该发送 ^[[1;2A (即切换到CSI,并添加 1;2 在最后一个角色之前)

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

您可能还想查看各种终端仿真器的源代码,看看他们做了什么。例如,相关位 TMUX 在它的 xterm-keys.c 文件

组态

由于您的终端仿真器尚未发送您想要支持的所有序列,因此您必须对其进行配置才能执行此操作。 OS X附带的内置终端仿真器, 终奌站,有几个键预先配置,但你可能必须自己添加大部分。您可以通过调用来访问密钥列表 终奌站 > 优先… 菜单项,选择顶级 设置 选项卡,选择适当的配置文件,并切换到它 键盘 标签。从那里,您可以添加和删除键定义。例如,您可以定义 F2 同 shift 至 send string to shell: (原文如此)和类型 退出 其次是 [1;2Q 进入字符串文本框( 退出 将显示为 \033,这没关系)。

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

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

另请注意,OS X有一些系统范围的快捷方式已定义 控制 - FX 组合(见 系统偏好键盘键盘快捷键键盘和文本输入)。您必须禁用其中一些快捷方式以确保这一点 终奌站 要么 的iTerm 有机会“看到”您想要的组合键。


16
2017-09-28 04:59



哇!这正是我所需要的。我去过xterm文档但是在你解释它之前对我没有意义。 - user1757006