заставьте терминал человечности отправлять escape-последовательность (control+shift+up)

Эта проблема запускается, когда я использую emacs (с - СЗ опция). Позвольте мне сначала объяснить это. Я пытался определить горячую клавишу (для emacs) как после

(global-set-key [(control shift up)] 'other-window)

но это не работает (никакая ошибка, просто не работает), ни один не делает

(global-set-key [(control shift down)] 'other-window)

Но

(global-set-key [(control shift right)] 'other-window) 

и

(global-set-key [(control shift left)] 'other-window)

работайте!

Но потому что последние два сочетания клавиш используются emacs (как значение по умолчанию), я не хочу изменять их для других функций.

Таким образом, как я мог заставить control-shift-up и control-shift-down работать?

Я погуглил" (сдвиг управления)", кажется, что control-shift-up используется другими людьми, (но не очень немного результатов).

На форуме Переполнения стека Gille ответил мне как следующему:

Ctrl+Shift+Up действительно отправляет сигнал на Ваш компьютер, но Ваш эмулятор терминала, по-видимому, не передает escape-последовательности для него. Таким образом, Ваша проблема находится в двух частях. Сначала необходимо заставить эмулятор терминала отправлять escape-последовательность, которая зависит от эмулятора терминала и является материалом Суперпользователя или Unix. SE, если Вы используете систему Unix. Затем необходимо объявить escape-последовательность в Emacs, и мой ответ объясняет ту часть

Таким образом, я приезжаю сюда для этого вопроса:

Как я получаю свой терминал (я использую человечность 10.04 и встроенный терминал) отправить escape-последовательность за Control+Shift+Up Control+Shift+down

4
задан 09.01.2011, 07:31

2 ответа

Ubuntu использует GNOME и gnome-terminal. Согласно его документации (в версии 2.30), CtrlShiftUp и CtrlShiftDown используются для навигации по буферу scrollback, и, кажется, нет никакого способа повернуть эту "функцию" прочь (кроме изменения исходного кода vte, терминальная библиотека).


Исправить vte на Ubuntu 10.04:

  1. Восстановить vte, библиотека эмуляции терминала:

    1. Программное обеспечение установки потребовало для компиляции:

      sudo apt-get install git-core fakeroot
      sudo apt-get build-dep vte
      
    2. Скачать vte исходный код и применяет патч:

      cd /tmp
      git clone git://gist.github.com/771667.git patches
      apt-get source vte
      cd vte-0.23.5
      patch -p1 < ../patches/vte-0.23.5.patch
      
    3. Сделайте пакет Debian и установите его:

      dpkg-buildpackage -us -uc
      sudo dpkg -i ../libvte9_0.23.5-*.deb
      
  2. Закройте все gnome-terminal процессы.

  3. Наслаждайтесь - до следующего vte обновление...

Патч для 0,23:

diff -ur vte-0.23.5/src/vte.c vte-0.23.5+patched/src/vte.c
--- vte-0.23.5/src/vte.c    2010-01-14 02:46:18.000000000 +0200
+++ vte-0.23.5+patched/src/vte.c    2011-01-09 15:19:01.000000000 +0200
@@ -4948,26 +4948,6 @@
            }
            break;
        /* Keypad/motion keys. */
-       case GDK_KP_Up:
-       case GDK_Up:
-           if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, -1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
-       case GDK_KP_Down:
-       case GDK_Down:
-           if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, 1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
        case GDK_KP_Page_Up:
        case GDK_Page_Up:
            if (modifiers & GDK_SHIFT_MASK) {

Патч для 0,26:

diff -ur vte-0.26.2/src/vte.c vte-0.26.2+patched/src/vte.c
--- vte-0.26.2/src/vte.c    2010-11-13 14:18:41.000000000 +0200
+++ vte-0.26.2+patched/src/vte.c    2011-01-09 15:06:54.870000002 +0200
@@ -5153,26 +5153,6 @@
            }
            break;
        /* Keypad/motion keys. */
-       case GDK_KEY (KP_Up):
-       case GDK_KEY (Up):
-           if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, -1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
-       case GDK_KEY (KP_Down):
-       case GDK_KEY (Down):
-           if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, 1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
        case GDK_KEY (KP_Page_Up):
        case GDK_KEY (Page_Up):
            if (modifiers & GDK_SHIFT_MASK) {
4
ответ дан 07.12.2019, 20:25

Ctrl+Shift+Up / Ctrl+Shift+Down, действительно кажется, получены терминалом значения по умолчанию гнома, однако я склонен использовать терминал, названный "Терминатором" на 10,04, где эти ключи, кажется, не отображаются.

1
ответ дан 07.12.2019, 20:25

Теги

Похожие вопросы