如何使用 urxvt 在 emacs 中通过鼠标滚轮启用光标滚动?

如何使用 urxvt 在 emacs 中通过鼠标滚轮启用光标滚动?

在 emacs 中启用了鼠标滚轮模式,但是光标不会像在其他终端仿真器或其他发行版中那样滚动。我做了很多研究,但似乎找不到答案。我再次使用 urxvt,当我移动鼠标滚轮时,在窗口中上下滚动文本,例如,正在运行的应用程序的日志输出。在 emacs 中,鼠标滚轮不会发生任何事情,我相信有一种方法可以使滚轮产生与按向上箭头/向下箭头相同的结果。

答案1

我还没有专门针对 emacs 测试过这个,但这允许在使用vim、、less等时进行鼠标滚动man。将其粘贴到 $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

相关内容