在 Gnome 终端 / Ubuntu 12.04 中禁用 Shift+Home、Shift+End 键绑定

在 Gnome 终端 / Ubuntu 12.04 中禁用 Shift+Home、Shift+End 键绑定

如何在 Gnome Terminal/Ubuntu 12.04 中禁用 Shift+Home、Shift+End 键绑定?(它们滚动到顶部/底部)。

我已经尝试过了:

  1. 禁用 Gnome 终端键盘快捷键中的快捷键(没有可用的快捷键)。

  2. 查看了 gconf-editor:gnome-terminal 和 metacity 快捷方式(在这里找不到 Shift+Home 或 Shift+End 快捷方式)。

  3. 为不同的模式运行 gsettings,例如“gsettings list-recursively org.gnome.desktop.wm.keybindings” - 这里没有这样的快捷方式。

  4. 尝试了 CompizConfig 设置中的键绑定。这里也没有运气。

还有其他方法可以禁用 Ubuntu 中 Gnome 终端的键盘快捷键吗?

答案1

Gnome Terminal 确实有预定义的操作绑定到Shift + HomeShift + End。然而,这种行为并不是由 GT 决定的,而是由 GT 所基于的 VTE 决定的。据我所知,这个方面是不可配置的,修复它的唯一方法是修补 VTE。我在我的博客文章中描述了如何做到这一点修复 Ubuntu 13.04 中 Gnome 终端中的 Ctrl-Home、Ctrl-End、Shift-Home 和 Shift-End 快捷键。以下大部分内容都是该帖子的复制粘贴。

我基本上要做的就是遵循经典的来自的指示这个答案。我根据自己的具体情况进行了更改。

笔记:以下说明基于我手头的 Ubuntu 13.04,但我认为它们可以应用于该发行版的其他版本(可能只需进行一些微小的改动)。

Ubuntu 13.04 中有两个libvte*软件包。因此,首先我必须找出 Gnome Terminal 所依赖的软件包:

$ apt-cache depends gnome-terminal | grep libvte

所需的版本是libvte-2.90-9。我下载了源代码:

$ apt-get source libvte-2.90-9

然后我修改了一下:

$ cd vte3-0.34.2 
$ vim src/vte.c

在这里我必须找到不需要的快捷方式,它们出现在这条评论后面:

/* Keypad/motion keys. */

所以我删除了下一条评论之前的所有内容:

/* Let Shift +/- tweak the font, like XTerm does. */

事实证明,删除这些快捷方式还不够,因为这个 VTE 的错误所以我申请了补丁在对该错误的评论中提到:

--- a/src/keymap.c
+++ b/src/keymap.c
@@ -284,6 +284,8 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_Home[] = {
    {cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "1~", -1, X_NULL},
    {cursor_all, keypad_all, fkey_hp, 0, _VTE_CAP_ESC "h", -1, X_NULL},
    {cursor_all, keypad_all, fkey_nothpvt, 0, X_NULL, 0, "kh"},
+   {cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "H", -1, X_NULL},
+   {cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "H", -1, X_NULL},
    {cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };

@@ -291,6 +293,8 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_End[] = {
    {cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, "@7"},
    {cursor_all, keypad_all, fkey_vt220, 0, _VTE_CAP_CSI "4~", -1, X_NULL},
    {cursor_all, keypad_all, fkey_notvt220, 0, X_NULL, 0, "@7"},
+   {cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "F", -1, X_NULL},
+   {cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "F", -1, X_NULL},
    {cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };

@@ -507,6 +511,8 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_KP_End[] = {
    {cursor_all, keypad_default, fkey_vt220, 0, "1", 1, X_NULL},
    {cursor_all, keypad_app, fkey_notvt220, 0, _VTE_CAP_CSI "4~", -1, X_NULL},
    {cursor_all, keypad_app, fkey_vt220, 0, _VTE_CAP_SS3 "q", -1, X_NULL},
+   {cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "F", -1, X_NULL},
+   {cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "F", -1, X_NULL},
    {cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };

@@ -568,6 +574,8 @@ static const struct _vte_keymap_entry _vte_keymap_GDK_KP_Home[] = {
    {cursor_all, keypad_default, fkey_vt220, 0, "7", 1, X_NULL},
    {cursor_all, keypad_app, fkey_notvt220, 0, _VTE_CAP_CSI "1~", -1, X_NULL},
    {cursor_all, keypad_app, fkey_vt220, 0, _VTE_CAP_SS3 "w", -1, X_NULL},
+   {cursor_default, keypad_all, fkey_default, 0, _VTE_CAP_CSI "H", -1, X_NULL},
+   {cursor_app, keypad_all, fkey_default, 0, _VTE_CAP_SS3 "H", -1, X_NULL},
    {cursor_all, keypad_all, fkey_all, 0, X_NULL, 0, X_NULL},
 };

@@ -1279,6 +1287,8 @@ _vte_keymap_key_get_modifier_encoding_method(guint keyval)
    case GDK_KEY (Right):
    case GDK_KEY (Insert):
    case GDK_KEY (Delete):
+   case GDK_KEY (Home):
+   case GDK_KEY (End):
    case GDK_KEY (Page_Up):
    case GDK_KEY (Page_Down):
    case GDK_KEY (KP_Up):
@@ -1287,6 +1297,8 @@ _vte_keymap_key_get_modifier_encoding_method(guint keyval)
    case GDK_KEY (KP_Right):
    case GDK_KEY (KP_Insert):
    case GDK_KEY (KP_Delete):
+   case GDK_KEY (KP_Home):
+   case GDK_KEY (KP_End):
    case GDK_KEY (KP_Page_Up):
    case GDK_KEY (KP_Page_Down):
    case GDK_KEY (F1):

没有发生任何冲突。

然后我重建了该包:

$ sudo apt-get build-dep libvte-2.90-9
$ dch -i # here I updated the version to 0.34.2-customized-0ubuntu3
$ debuild -us -uc -b

并安装它:

$ cd ..
$ sudo dpkg -i libvte-2.90-common_0.34.2-customized-0ubuntu3_all.deb
$ sudo dpkg -i libvte-2.90-9_0.34.2-customized-0ubuntu3_amd64.deb

debuild虽然安装这两个包就足以解决问题,但我还安装了该命令生成的所有其他包。

重新启动 Gnome 终端后,Shift + HomeShift + End开始按预期工作。

相关内容