Molette de la souris défilant en moins et vim en utilisant urxvt

17

J'ai commencé à travailler avec rxvt-unicode (aka urxvt) mais j'ai trouvé un problème avec le défilement de la molette de la souris, par rapport à gnome-terminalet konsole. La molette de la souris fonctionne bien pour parcourir le tampon de défilement, mais cela ne fonctionne pas pour le défilement automatique dans less/ mostou vim(bien que dans vim, le réglage le mouse=afasse fonctionner, mais d'une manière très différente, ce que je n'ai pas à faire avec gnome-terminal/ konsole).

Existe-t-il un moyen de se urxvtcomporter comme gnome-terminalet konsolequand lesset vimoù la molette de la souris fonctionne?

Adam Batkin
la source
Une question similaire est posée sur serverfault depuis un certain temps, mais n'a pas reçu de réponse positive: serverfault.com/questions/10308/…
nidi
1
Merci, cela ne m'ennuyait pas jusqu'à ce que vous le signaliez!
Kyle Smith

Réponses:

8

Vieille question, mais: bien que ce ne soit pas possible dans urxvt, j'ai apporté quelques modifications qui ajouteront une option (SecondaryWheel) pour faire exactement cela, et le faire se comporter comme des terminaux basés sur VTE.

Ce que fait cette nouvelle option est assez simple: lorsque vous utilisez la molette de la souris, si vous êtes sur un écran secondaire (*), aucun défilement ne se produira, et à la place, 3 "fausses" touches seront envoyées à l'application en cours d'exécution. Ainsi, une molette vers le haut aura le même résultat que d'appuyer sur la touche Haut trois fois, et la molette vers le bas fera la même chose que d'appuyer 3 fois sur la touche Bas.

(*) Je ne sais pas si c'est le terme «officiel» ou non, mais c'est du moins ainsi que cela s'appelle dans urxvt.

Assez facile, mais cela fait l'affaire: maintenant lors de l'exécution man, lessou de toute autre application qui utilise l'écran secondaire, vous pouvez utiliser la molette de la souris pour vous déplacer (ou quoi que fasse cette application, si vous appuyez sur les touches Haut / Bas).

Il convient de noter que je ne suis pas sûr que c'est vraiment la façon dont les choses se passent dans les terminaux basés sur VTE - je n'ai jamais vérifié - mais cela fait le travail, donc cela fonctionne pour moi.

Un peu plus d'informations et des liens vers le code et PKGBUILD pour Arch Linux peuvent être trouvés ici: http://mywaytoarch.tumblr.com/post/14455320734/scrolling-mouse-wheel-improvments-vte-like-in-urxvt

J'espère que cela peut être utile à certains!

jjacky
la source
1
Des mises à jour sur le patch? A-t-il été suggéré de l'inclure?
blueyed
1

Bonne question! Un article utile que je citerai Linux Question - sortie de commande "moins" - je ne peux pas la parcourir! et Archlinux Forum - Utilisez la molette de la souris chez l'homme / moins .

Il semble que moins écoutent simplement les événements du clavier et ne prennent pas en charge la souris. La demande d'enchantement pour le support de la souris est ouverte Ref # 272 .

La vraie solution est d'utiliser un autre terminal ou pager ( Vimpager ).

DVD
la source
Corrigé dans la version 543
Hielke Walinga
1

J'ai écrit ceci pour une question très similaire, voir /superuser//a/1356948/900060

Collez-le dans $ HOME / .urxvt / ext / vtwheel (créez le fichier s'il n'existe pas):

#! 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 ();
}

Ajoutez ensuite URxvt.perl-ext-common:vtewheelà votre .Xresources(ou .Xdefaults) et exécutezxrdb .Xresources

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

Clara
la source