将 GNOME 键盘快捷键移植到 URXVT

将 GNOME 键盘快捷键移植到 URXVT

我最近从 切换gnome terminalurxvt(并安装了选项卡式扩展)。我也是重度emacs用户,使用很多类似于urxvt(选项卡相关的东西) 的组合键,如Shift-LeftShift-Right。这些组合键设置为在 中选择文本emacs

有没有办法将ALT-1, ALT-2,映射ALT-3到标签上1, 2, 3 ..

有没有扩展可以做到这一点?可以通过~/.Xdefaults文件实现吗?

答案1

您可以通过修改 perl 扩展的 tabs(tabbed)并更改其响应的键来手动执行此操作。我通过修改tab_key_press方法:

您可以从文件夹中的 urxvt 源分发包中获取原始的选项卡式脚本rxvt-unicode-9.15/src/perl/tabbed,找到该函数,并用下面的方法替换它。

完成后,您可以将修改后的文件保存在 /some/folder/tabz 中,然后使用以下命令运行 urxvturxvt --perl-lib /some/folder -pe tabz

我认为应该可以使用 X 资源 (~/.Xdefaults) 来配置它,所以也许我将来会制作一个从那里读取的脚本版本并将其邮寄给 urxvt 维护者,但现在:

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;
      }
   }

   ()
}

相关内容