urxvt: Como alternar entre as abas como outros emultaors?

2

Gostaria de ligar a tecla Alt + para alternar as guias no urxvt.

Alguma abordagem?

    
por Determinant 08.04.2012 / 08:58

3 respostas

6

O código está em /usr/lib/urxvt/perl/tabbed (pelo menos no meu sistema).

Na linha 312, o subitem que a tecla de controle pressiona inicia ( sub tab_key_press ). Ele verifica $event->{state} e uma máscara de chave; por padrão, combinações com urxvt::ShiftMask ou urxvt::ControlMask .

/usr/lib/urxvt/urxvt.pm mostra outras possibilidades, por ex. Mod1Mask , que é provavelmente o modificador Alt .

Por padrão, apenas os atalhos para andar à esquerda ou à direita entre as guias são definidos. Ele lê a posição atual ( $idx ), depois aumenta / diminui em um ( $idx++ / $idx-- ) e, em seguida, define esse valor como o novo índice de tabulação.

Com esta informação, é fácil modificar para

  1. Use o Mod1Mask.
  2. Leia o número da chave pressionado.
  3. Defina o índice de guias para o número de leitura.

(com experiência mínima de codificação, nem necessariamente Perl; é principalmente copy + paste).

    
por 08.04.2012 / 15:03
0

O Urxvt não é, por si só, um terminal com guias. Você pode usar uma extensão perl para obter guias. Pode ter algumas opções para alterar a ligação de chave. veja a FAQ sobre isso.

    
por 08.04.2012 / 10:15
0

Não encontrei uma maneira de usar o modificador alt, mas modifiquei a extensão tabbedex ( /usr/lib/urxvt/perl/tabbedex ) para alternar as guias para a esquerda e para a direita com Ctrl + J e Ctrl + K e cria novas abas com Ctrl + T . Usando Shift + Seta ainda funciona como antes.

Eu modifiquei a função tab_key_press da seguinte maneira. Para alterar uma ligação de chave, você usaria seu código keysym (aqui está uma lista link ).

sub tab_key_press {
   my ($self, $tab, $event, $keysym, $str) = @_;

   if ($tab->{is_inputting_name}) {
      if ($keysym == 0xff0d || $keysym == 0xff8d) { # enter
         $tab->{name} = $tab->{new_name};
         $tab->{is_inputting_name} = 0;
         $self->update_autohide (1);
      } elsif ($keysym == 0xff1b) { # escape
         $tab->{name} = $tab->{old_name};
         $tab->{is_inputting_name} = 0;
         $self->update_autohide (1);
      } elsif ($keysym == 0xff08) { # backspace
         substr $tab->{new_name}, -1, 1, "";
         $tab->{name} = "$tab->{new_name}█";
      } elsif ($str !~ /[\x00-\x1f\x80-\xaf]/) {
         $tab->{new_name} .= $str;
         $tab->{name} = "$tab->{new_name}█";
      }
      $self->refresh;
      return 1;
   }

    if ($event->{state} & urxvt::ShiftMask) {
      if ($keysym == 0xff51 || $keysym == 0xff53) {
         if (@{ $self->{tabs} } > 1) {
            $self->change_tab($tab, $keysym - 0xff52);
         }
         return 1;

      } elsif ($keysym == 0xff54) {
         $self->new_tab;
         return 1;

      } elsif ($keysym == 0xff52) {
         $tab->{is_inputting_name} = 1;
         $tab->{old_name} = $tab->{name} ? $tab->{name} : "";
         $tab->{new_name} = "";
         $tab->{name} = "█";
         $self->update_autohide (1);
         $self->refresh;
         return 1;
      }
   } elsif ($event->{state} & urxvt::ControlMask) {

    if ($keysym == 0x006a){
         if (@{ $self->{tabs} } > 1) {
            $self->change_tab($tab, -1);
         }
         return 1;
    } elsif ($keysym == 0x006b){
         if (@{ $self->{tabs} } > 1) {
            $self->change_tab($tab, 1);
         }
         return 1;
    } elsif ($keysym == 0x0074){
         $self->new_tab;
         return 1;
    } elsif ($keysym == 0xff51 || $keysym == 0xff53) {
         if (@{ $self->{tabs} } > 1) {
            my $idx1 = 0;
            ++$idx1 while $self->{tabs}[$idx1] != $tab;
            my $idx2 = ($idx1 + $keysym - 0xff52) % @{ $self->{tabs} };

            ($self->{tabs}[$idx1], $self->{tabs}[$idx2]) =
                ($self->{tabs}[$idx2], $self->{tabs}[$idx1]);
            $self->make_current ($self->{tabs}[$idx2]);
         }
         return 1;
      }
   }

   ();
}
    
por 13.08.2017 / 21:35

Tags