密钥如何传递到 emacs 和 gnome 终端?

密钥如何传递到 emacs 和 gnome 终端?

我想使用 Alt+6 切换到第 6 个 gnome 终端选项卡。但是当我在终端选项卡下的 emacs 中时,密钥将传递到 emacs,并且在终端上不起作用。

是先由终端捕获密钥,然后终端将其传递给 emacs 吗?

我不想更改 emacs 或 gnome 终端的键。有什么办法可以在 Alt+6 之前添加一个转义修饰键,使其不能在 emacs 上工作,但在 gnome 终端上工作?

谢谢!

答案1

旧版本的 gnome-terminal,在 Ubuntu Utopic 之前发布,用于实现“自动”“双重”行为。如果您至少有 6 个选项卡,则 Alt+6 将切换到第 6 个选项卡;否则它会将击键发送到内部运行的任何应用程序(例如 emacs)。

较新的版本(从 Ubuntu Vivid 开始)不再具有这种自动行为。 Alt+1 – Alt+9 默认绑定为切换选项卡,因此如果您没有打开足够的选项卡,则不执行任何操作。您可以在“编辑”->“首选项”->“快捷方式”中取消定义这些操作,或者将这些操作重新分配给您自己选择的其他键,在这种情况下,Alt+6 将被发送到应用程序 (emacs)。

或者,您也可以习惯按 Esc 6。

是先由终端捕获密钥,然后终端将其传递给 emacs 吗?

是的。终端无法知道在其内部运行的应用程序是否会处理“不”事件,并且在发送事件后也无法弄清楚。因此,相反的方法(让我们看看 emacs 是否对此做了什么,如果没有,则 gnome-terminal 切换选项卡)在设计上无法工作。

此设计的唯一例外是鼠标事件。如果应用程序对鼠标事件感兴趣,则需要提前向终端发出信号。如果是,则 gnome-terminal 向其发送事件,否则它会自行处理。

编辑:鼠标事件并不是唯一的例外:)我刚刚想到的另一件事是,当终端切换到备用屏幕(没有滚动条的屏幕;正如大多数全屏应用程序所做的那样)时,按键效果滚动条(例如 Shift+PageUp)也作为转义序列发送到应用程序。

相关内容