如何在 Gnome Terminal/Ubuntu 12.04 中禁用 Shift+Home、Shift+End 键绑定?(它们滚动到顶部/底部)。
我已经尝试过了:
禁用 Gnome 终端键盘快捷键中的快捷键(没有可用的快捷键)。
查看了 gconf-editor:gnome-terminal 和 metacity 快捷方式(在这里找不到 Shift+Home 或 Shift+End 快捷方式)。
为不同的模式运行 gsettings,例如“gsettings list-recursively org.gnome.desktop.wm.keybindings” - 这里没有这样的快捷方式。
尝试了 CompizConfig 设置中的键绑定。这里也没有运气。
还有其他方法可以禁用 Ubuntu 中 Gnome 终端的键盘快捷键吗?
答案1
Gnome Terminal 确实有预定义的操作绑定到Shift + Home和Shift + 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 + Home和Shift + End开始按预期工作。