さまざまなソースのカスタマイズに urxvt を使用する場合、Ctrl-Left と Ctrl-Right は bash や vi などの単語の間を移動するのに機能しなくなります。原因は、他の回答で提案されている一般的な欠落キー記号行ではありません.Xresources
。これらの行はファイルに存在し、他のキーの組み合わせで動作するためです。
URxvt.keysym.Control-Up: \033[1;5A
URxvt.keysym.Control-Down: \033[1;5B
URxvt.keysym.Control-Left: \033[1;5D
URxvt.keysym.Control-Right: \033[1;5C
実際には、実行中またはread
端末からCtrl-Upの場合は(正しく)印刷されますが、Ctrl-LeftおよびCtrl-Rightの場合は何も印刷されず、代わりに端末が点滅します。これは、キーの組み合わせが端末に送信される前に実際にキャプチャされたことを示します。cat -v
^[[1;5A
空のファイルを使用すると、.Xresources
Ctrl-Left / Rightが期待どおりに端末に送信されます。この問題の原因は何ですか?
答え1
tabbed
犯人は一般的なPerl拡張であることがわかりました。tabbed
Ctrl - 左/右を破ると、現在のタブがそれぞれ左または右に移動します。タブからタブを削除するとURxvt.perl-ext-common
問題は解決しますが、もちろんタブ機能も削除されます。
結局のところ、私の解決策はtabbed
拡張のローカルコピーを作成し、基本バージョンの代わりに使用することでした。まず、システムのコピーを見つけてtabbed
ローカル拡張ディレクトリにコピーする必要があります。私の64ビットUbuntu 18システムでは、ファイルはcp
次のコマンドの場所にあります。もちろん、このコマンドは~/.urxvt/ext/
すでに存在すると仮定します。
cp /usr/lib/x86_64-linux-gnu/urxvt/perl/tabbed ~/.urxvt/ext/
システムコピーの代わりにローカルコピーをロードするには、次の行をtabbed
削除して追加しますURxvt.perl-ext-common
(これによりデフォルトバージョンがロードされます)。
URxvt.perl-ext: tabbed
~/.urxvt/ext/tabbed
関数を見つけてtab_key_press
変更します。たとえば、次のようになります。
sub tab_key_press {
my ($self, $tab, $event, $keysym, $str) = @_;
if ($event->{state} & urxvt::ShiftMask && !($event->{state} & urxvt::ControlMask) ) {
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 ($event->{state} & urxvt::ControlMask && $event->{state} & urxvt::ShiftMask) {
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;
}
}
()
}
この機能バージョンでは、Ctrl-Left/Right ではなく Ctrl-Shift-Left/Right タブを左右に移動します。ただし、もう1つの可能性は、タブを左右に移動するコードを削除し、その機能なしで続行することです。行を削除すると、これを行うことができます。
if ($keysym == 0xff51 || $keysym == 0xff53) {
そして、節の終わりに次の行があります。