obter terminal ubuntu para enviar uma seqüência de escape (controle + shift + up)

4

Esse problema começa quando eu uso o emacs (com a opção -nw). Deixe-me explicar primeiro. Eu tentei definir hotkey (para emacs) como segue

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

mas não funciona (sem erro, simplesmente não funciona), nem

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

Mas

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

e

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

trabalho!

Mas como as duas últimas combinações de teclas são usadas pelo emacs (como padrão), não quero alterá-las para outras funções.

Então, como eu poderia fazer control-shift-up e control-shift-down funcionar?

Eu pesquisei "(controle de mudança para cima)", parece que control-shift-up é usado por outras pessoas, (mas não muito poucos resultados).

No fórum do Stack Overflow, Gille me respondeu da seguinte forma:

Ctrl + Shift + Acima envia um sinal para o seu computador, mas o seu emulador de terminal aparentemente não está transmitindo nenhuma seqüência de escape para ele. Então, seu problema está em duas partes. Primeiro, você deve enviar o emulador de terminal para enviar uma sequência de escape, que depende do seu emulador de terminal, e é o material Super User, ou Unix.SE, se você estiver usando um sistema unix. Então você precisa declarar a sequência de escape no Emacs, e minha resposta explica essa parte

Então eu venho aqui para esta pergunta:

Como obtenho o meu terminal (eu uso o Ubuntu 10.04, e o terminal embutido) para enviar uma seqüência de escape para Control + Shift + Acima Controle + Shift + down

    
por user565739 09.01.2011 / 06:31

2 respostas

4

O Ubuntu usa o GNOME e gnome-terminal . De acordo com sua documentação ( na versão 2.30 ), Ctrl Shift Acima e Ctrl Deslocamento Abaixo são usados para navegar pelo buffer de rolagem , e não parece haver nenhuma maneira de desativar esse "recurso" (além de modificar o código fonte de vte , a biblioteca de terminais).

Para corrigir o vte no Ubuntu 10.04:

  1. Reconstrua vte , a biblioteca de emulação de terminal:

    1. Instale o software necessário para compilar:

      sudo apt-get install git-core fakeroot
      sudo apt-get build-dep vte
      
    2. Faça o download do código-fonte vte e aplique o patch:

      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. Crie um pacote Debian e instale-o:

      dpkg-buildpackage -us -uc
      sudo dpkg -i ../libvte9_0.23.5-*.deb
      
  2. Feche todos os processos gnome-terminal .

  3. Aproveite - até o próximo vte update ...

Patch para 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) {

Patch para 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) {
    
por 09.01.2011 / 13:57
1
Ctrl + Shift + Acima / Ctrl + Deslocamento + Down parecem ser capturados pelo terminal padrão do gnome, no entanto eu costumo usar um terminal chamado "Terminator" em 10.04, onde essas teclas não parecem ser mapeadas.

    
por 28.04.2011 / 20:51