GNOMEキーボードショートカットをURXVTに移植する


2

私は最近に切り替えましgnome terminalurxvt(そしてタブ付き拡張機能をインストールしました)。私はまた、やなどの(タブ関連のもの)にemacs似た多くのキーの組み合わせを使用するヘビーユーザーです。これらのキーの組み合わせは、でテキストを選択するために設定されます。urxvtShift-LeftShift-Rightemacs

マッピングする方法がありALT-1ALT-2ALT-3タブのでは1, 2, 3 ..

それを行う拡張機能はありますか?~/.Xdefaultsファイルで実現できますか?


回答:


0

タブ(タブ付き)のperl拡張を変更し、応答するキーを変更することにより、これを手動で行うことができます。tab_key_pressメソッドを変更して、alt + 1 ... alt + 9でタブを変更するようにしました

rxvt-unicode-9.15 / src / perl / tabbedフォルダーにあるurxvtのソース配布から元のタブ付きスクリプトを取得し、関数を見つけて、以下のメソッドに置き換えます。

それが完了したら、変更したファイルを/ some / folder / tabzに保存し、urxvt --perl-lib / some / folder -pe tabzurxvtを実行できます

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

   ()
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.