gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:49:20 24 4
gpt4 key购买 nike

我正在使用 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 一起用于调整 Pane 大小。

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

例如我的左箭头发送 ^[OD.我的 Control-Left 发送 ^[[5D]。但是我的上下键没有区别。我向下发送 ^[OB 和 Control-down 也发送 ^[OB。我的向上键也有同样的问题。有没有shift都是一样的。

某处是否有包含所有键和代码的列表,特别是带有 shift、control、alt/option 等修饰符的列表?

我如何找出预期的顺序以便发送所需的内容?

最佳答案

XTerm

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

… xterm recognizes function key modifiers which are parameters appended before the final character of the control sequence.

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

例子

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

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

Up 发送 ^[[A^[OA,所以 Shift+Up 应发送 ^[[1;2A(即切换到 CSI,并在最后一个字符前添加 1;2)

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

您可能还想查看各种终端仿真器的源代码,了解它们的作用。例如,tmux 的相关位在其 xterm-keys.c file 中.

配置

由于您的终端仿真器尚未发送您想要支持的所有序列,因此您必须对其进行配置。 OS X 附带的内置终端仿真器 Terminal 预配置了一些键,但您可能必须自己添加其中的大部分键。您可以调用 Terminal> Preferences... 菜单项,选择顶级 Settings 选项卡,选择适当的配置文件,并切换到其键盘标签。从那里您可以添加和删除键定义。例如,您可以使用 shift 定义 F2send string to shell: (sic) 然后键入 ESC[1;2Q进入字符串文本框(ESC会显示为\033,没问题)。

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

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

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

关于bash - 我如何找出我的终端需要发送的转义序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com