我最近一直在摆弄 Gnome Terminal,试图自定义按下 Ctrl-C 时发生的情况(我希望它在选择文本时复制,否则发送 SIGINT,但这不是问题的一部分),但我似乎无法弄清楚在堆栈中哪里可以识别 Ctrl-C(或者如果 Ctrl-C 被重新绑定,那么在哪里可以识别 Ctrl-Shift-C)。
那么,哪个库或程序负责实际处理该键盘组合?
答案1
对于CtrlC,终端仿真器仅发送单字节 0x03。
CtrlA–CtrlZ分别发送字节 0x01–0x1A(十进制 1–26);此外,Ctrlspace是 0x00,Ctrl[是 0x1B,Ctrl\是 0x1C,Ctrl]是 0x1D,Ctrl^(或者通常根本Ctrl6不用 Shift,假设是美国键盘布局)是 0x1E,并且Ctrl_(或者通常Ctrl-不用 Shift)是 0x1F。
这些字节由内核根据以下规定进行特殊解释和处理:终端线路纪律检查的输出stty -a
,它可能包含intr = ^C
,这意味着CtrlC(字节0x03)是中断字符。
stty
有关更多详细信息,请参阅、、termios
的手册页ioctl
以及ioctl_tty
相关的网络搜索匹配项(包括术语“linedisciplinary”)。
答案2
您所问的问题取决于两个因素;
- 你选择的 shell
- (Gnome) 终端中的偏好设置
发现什么是现在在 Gnome 终端中分配到CTRL+C
。在打开的会话中,选择编辑>优先>快捷方式
就您的登录 shell 而言;CTRL+C
( ^C
) 几乎总是被分配TERM
或HUP
(挂断)。