Portando atalhos de teclado do GNOME para o URXVT

2

Eu recentemente mudei de gnome terminal para urxvt (e instalei extensões com guias). Também sou um usuário emacs pesado que usa muitas combinações de teclas semelhantes a urxvt (coisas relacionadas à guia) como Shift-Left e Shift-Right . Essas combinações de teclas são definidas para selecionar texto em emacs .

Existe uma maneira de mapear ALT-1 , ALT-2 , ALT-3 para as guias 1, 2, 3 .. ?

Existe uma extensão para fazer isso? Pode ser alcançado através do arquivo ~/.Xdefaults ?

    
por boffin 09.06.2012 / 17:46

1 resposta

0

Você pode fazer isso manualmente, modificando a extensão perl para as guias (com guias) e alterando as teclas às quais ele responde. Eu tenho que mudar de abas com alt + 1 ... alt + 9 modificando o método tab_key_press :

Você pode obter o script tabulado original a partir da distribuição de origem do urxvt na pasta rxvt-unicode-9.15 / src / perl / tabbed , localizar a função e substituí-la pelo método abaixo.

Quando isso é feito, você pode salvar o arquivo modificado em / some / folder / tabz e execute urxvt com urxvt --perl-lib / alguma / pasta -pe tabz

Eu acho que deve ser possível configurar isso com recursos do X (~ / .Xdefaults), então talvez eu faça uma versão do script que leia a partir daí no futuro e envie para o mantenedor do urxvt, mas por agora:

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

   #if ($event->{state} & urxvt::ShiftMask) {
   if ($event->{state} & urxvt::Mod1Mask) {
      if ($keysym == 0xff51 || $keysym == 0xff53) {
         my ($idx) = grep $self->{tabs}[$_] == $tab, 0 .. $#{ $self->{tabs} };

         --$idx if $keysym == 0xff51;
         ++$idx if $keysym == 0xff53;

         $self->make_current ($self->{tabs}[$idx % @{ $self->{tabs}}]);

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

         return 1;
      } elsif ( $keysym == 0x31 || $keysym == 0x32 || $keysym == 0x33 ||
                $keysym == 0x34 || $keysym == 0x35 || $keysym == 0x36 ||
                $keysym == 0x37 || $keysym == 0x38 || $keysym == 0x39
      ) {
         my $idx = 0;
         $idx = 0 if $keysym == 0x31;
         $idx = 1 if $keysym == 0x32;
         $idx = 2 if $keysym == 0x33;
         $idx = 3 if $keysym == 0x34;
         $idx = 4 if $keysym == 0x35;
         $idx = 5 if $keysym == 0x36;
         $idx = 6 if $keysym == 0x37;
         $idx = 7 if $keysym == 0x38;
         $idx = 8 if $keysym == 0x39;
         warn scalar @{  $self->{tabs} };
         $self->make_current ($self->{tabs}[ $idx ]) if ($idx <  (scalar @{$self->{tabs}})) ;
         return 1;
      }
   }
   elsif ($event->{state} & urxvt::ControlMask) {
      if ($keysym == 0xff51 || $keysym == 0xff53) {
         my ($idx1) = grep $self->{tabs}[$_] == $tab, 0 .. $#{ $self->{tabs} };
         my  $idx2  = ($idx1 + ($keysym == 0xff51 ? -1 : +1)) % @{ $self->{tabs} };

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

         $self->make_current ($self->{tabs}[$idx2]);

         return 1;
      }
   }

   ()
}
    
por 14.10.2012 / 23:15