我正在使用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?
如何找出预期的序列是什么,以便我可以发送所需的内容?
的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 有机会“看到”您想要的组合键。
的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 有机会“看到”您想要的组合键。