我正在使用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?
如何找出预期的序列是什么,以便我可以发送所需的内容?
答案 0 :(得分:17)
由于您宣传您正在使用 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,终端附带的内置终端仿真器有一些预先配置的密钥,但您可能需要自己添加大部分密钥。您可以通过调用终端>来访问密钥列表首选项... 菜单项,选择顶级设置标签,选择相应的个人资料,然后切换到键盘标签。从那里,您可以添加和删除键定义。例如,您可以将F2
与shift
定义为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 有机会“看到”您所需的组合键。