web-dev-qa-db-ja.com

urxvtを使用したマウスホイールのスクロールが少なくなり、vimが表示されます

rxvt-unicode (aka urxvt)で作業を開始しましたが、_gnome-terminal_およびkonsoleと比較して、マウスホイールのスクロールに問題があることがわかりました。マウスホイールはスクロールバックバッファを通過するために正常に機能しますが、less/mostまたはvimでの自動スクロールには機能しません(vimでは_mouse=a_はそれを機能させますが、非常に異なる方法で、_gnome-terminal_/konsole)とは関係ありません。

マウスホイールが機能するurxvtkonsoleにいるときに、lessを_gnome-terminal_とvimのように動作させる方法はありますか?

17
Adam Batkin

古い質問ですが、これはurxvtでは不可能ですが、それを正確に実行するオプション(secondaryWheel)を追加し、VTEベースの端末のように動作するようにいくつかの変更を加えました。

この新しいオプションの機能は非常に単純です。マウスホイールを使用しているときにセカンダリ画面(*)を表示している場合、スクロールは発生せず、代わりに3つの「偽の」キーストロークが実行中のアプリケーションに送信されます。したがって、ホイールアップは上キーを3回押すのと同じ結果になり、ホイールダウンは下キーを3回押すのと同じ結果になります。

(*)これが「公式」用語であるかどうかはわかりませんが、少なくともurxvtではそのように呼ばれています。

簡単ですが、それでうまくいきます。manless、またはセカンダリ画面を使用するその他のアプリケーションを実行しているときに、マウスホイールを使用して移動できます(またはそのアプリケーションが実行するものなら何でも)上/下キーを押した場合)。

これが実際にVTEベースの端末でどのように行われるかはわかりませんが(チェックしたことはありません)、これでうまくいくので、うまくいきます。

もう少し情報、およびArch LinuxのコードとPKGBUILDへのリンクはそこにあります: http://mywaytoarch.tumblr.com/post/14455320734/scrolling-mouse-wheel-improvments-vte-like- in-urxvt

うまくいけば、これは一部の人に役立つ可能性があります!

8
jjacky

いい質問です!私が引用するいくつかの有用な投稿 Linuxの質問-「less」コマンド出力-スクロールできません! および Archlinuxフォーラム-man/lessでマウスホイールを使用

Lessはキーボードイベントをリッスンしているだけで、マウスをサポートしていないようです。マウスサポートのエンチャントリクエストは開いています 参照番号272

実際の解決策は、別の端末またはポケットベルを使用することです( Vimpager )。

1
dvd

私はこれを非常によく似た質問のために書きました。 https://superuser.com/a/1356948/90006 を参照してください。

これを$ HOME/.urxvt/ext/vtwheelに貼り付けます(ファイルが存在しない場合は作成します)。

#! Perl

# Implements a scrollwheel just like in good old vt100's mices

sub simulate_keypress {
    my ($self, $type) = @_; #type: 0:up, 1:down

    my $keycode_up = 111;
    my $keycode_down = 116;

    my $numlines = 3;

    my $keycode = 0;
    if ($type eq 0) {
        $keycode = $keycode_up;
    } elsif ($type eq 1) {
        $keycode = $keycode_down;
    } else {
        return;
    }

    for (my $i = 0 ; $i ne $numlines ; $i++) {
        $self->key_press(0,$keycode);
        $self->key_release(0,$keycode);
    }
}

sub on_button_release {
    my ($self, $event) = @_;

    #my $res_ss = $self->resource("secondaryScroll");
    #warn("ressource ss is <$res_ss>");

    !$self->current_screen and return ();

    #warn("foo, event: <$event->{button}>\n");
    if ($event->{button} eq "4") { # scroll up
        $self->simulate_keypress(0);
        return 1;
    } elsif ($event->{button} eq "5") { # scroll down
        $self->simulate_keypress(1);
        return 1;
    }

    return ();
}

次に、URxvt.Perl-ext-common:vtewheel.Xresources(または.Xdefaults)に追加し、xrdb .Xresourcesを実行します。

ソース: https://aur.archlinux.org/cgit/aur.git/tree/vtwheel?h=urxvt-vtwheel

1
Clara