为什么 .screenrc 键绑定 ^@a 映射到 ctrl+space?

为什么 .screenrc 键绑定 ^@a 映射到 ctrl+space?

在我的 .screenrc 中,我有以下节:

# Change command key to ctrl+space
escape ^@a

我在一个我找不到的论坛上发现了这个神奇的咒语;它允许我按 ctrl+space 来调用屏幕命令,因此ctrl+space c(或ctrl+space ctrl+c) 将创建一个新窗口,并且ctrl+space space(或ctrl+space ctrl+space) 将切换到最后一个窗口,等等。

这对于避免排除行首终端功能的问题非常有用ctrl+a,易于键入并且不会与任何标准键绑定冲突。

谁能解释一下这是为什么以及如何工作的?我已经搜索过https://www.gnu.org/software/screen/manual/screen.html对于该角色的任何参考@,没有发现任何相关内容。

答案1

对于很多终端程序(但不是每个),control-SPACE 都会发送 ASCII 00 字符 (NUL)。

You can see this, eg with od -cx and entering control-SPACE, RETURN, control_D. You'll see output similar to:

% od -cx
^@
0000000  \0  \n
           0a00
0000002

Control-@ 也是 NUL 字符(@ 是 ASCII 64,因此 control-@ 是 ASCII 00)。

因此,在屏幕内映射 control-@ 具有映射 control-SPACE 的效果...因为终端处理 control-SPACE 的方式。

相关内容