1

Как отключить сочетания клавиш Shift+Home, Shift+End в Gnome Terminal / Ubuntu 12.04? (они прокручиваются вверх / вниз).

Я уже попробовал:

  1. Отключить сочетания клавиш в сочетаниях клавиш терминала Gnome (таких сочетаний нет).

  2. Заглянул в gconf-editor: ярлыки gnome-Terminal и metacity (здесь не было ярлыков Shift+Home или Shift+End).

  3. Запустите gsettings для разных схем, например, "gsettings list-recursively org.gnome.desktop.wm.keybindings" - здесь нет таких ярлыков.

  4. Прошел через сочетания клавиш в настройках CompizConfig. Здесь тоже не повезло.

Есть ли другой способ отключить сочетания клавиш для терминала Gnome в Ubuntu?

1 ответ1

3

У терминала Gnome действительно есть предопределенные действия, связанные с Shift + Home и Shift + End. Однако не GT определяет это поведение, а скорее из-за VTE, на котором основан GT. Насколько я могу судить, этот аспект не настраивается, и единственный способ исправить это - исправить VTE. Я описал, как это сделать, в своем блоге, исправляя сочетания клавиш Ctrl-Home, Ctrl-End, Shift-Home и Shift-End в Gnome Terminal в Ubuntu 13.04. Ниже в основном копия этого поста.

Что я должен был сделать, так это следовать классическим инструкциям из этого ответа. Я изменил их для моего конкретного случая.

Примечание. Приведенные ниже инструкции основаны на Ubuntu 13.04, который у меня под рукой, но я полагаю, что они могут быть применены, возможно, с небольшими изменениями, к другим версиям дистрибутива.

В Ubuntu 13.04 есть два libvte* . Итак, прежде всего, я должен был выяснить, от какого терминала Gnome зависит:

$ 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 начали работать как положено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .