当我单击 CTRL+B 时,将 CTRL+C 发送到 tty 的终端

当我单击 CTRL+B 时,将 CTRL+C 发送到 tty 的终端

我使用 Linux Mint 和“Terminal GNOME”。

我想在终端中使用 CTRL+C 来复制文本。很简单..我在“首选项”中设置了它,但我还需要以某种方式向应用程序发送“intr”信号。

我想让终端在单击 CTRL+B 而不是 CTRL+C 时发送“intr”信号。很简单..我用以下命令更改了 tty 设置:

stty intr ^B

一切都很好。

然后我发现当我打开由使用 CTRL+C 的人启动的“屏幕”时,我无法发送“intr”信号。它忽略我的 CTRL+B,并且 CTRL+C 被终端“复制”功能阻止。我与其他用户一起在服务器上工作,我无法告诉他们更改他们的 tty 配置。

是否有任何选项可以将终端中的 CTRL+B“单击”“连接”到 CTRL+C 单击(但不复制),因此底层 tty 将看到 CTRL+C,并且当我在键盘上单击 CTRL+C 时,我的终端将复制文本?

我可以使用其他终端应用程序,编译它,等等。


我在堆栈上阅读了很多教程/问题,但没有找到答案。还下载了一些适用于 Linux Mint 的流行终端应用程序,但没有一个应用程序可以选择“重新配置”信号快捷方式。

答案1

某些终端模拟器允许您重新定义按键发送的序列(例如,Konsole 在其配置文件首选项下,我很确定 XTerm 也可以在其 X 资源文件中执行此操作); GNOME 终端及其底层 VTE 终端仿真小部件不是其中之一,它们具有硬编码密钥。

如果您不介意重新编译和替换 VTE 库(最好使用与您的发行版相同的版本,具有相同的编译选项、补丁等 - 它可能被称为vte2.91,版本 0.48 - 0.52 左右),您可以轻松地修补在这个功能中。将其添加到src/keymap.cc类似定义旁边:

static const struct _vte_keymap_entry _vte_keymap_GDK_b[] = {
        {cursor_all, keypad_all, GDK_CONTROL_MASK, "\x03", -1},
        {cursor_all, keypad_all, 0, X_NULL, 0},
};

这是_vte_keymap[]

        {GDK_KEY_b,                     _vte_keymap_GDK_b},

相关内容