首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启用扩展鼠标模式?

如何启用扩展鼠标模式?
EN

Stack Overflow用户
提问于 2011-01-13 22:45:50
回答 2查看 563关注 0票数 2
代码语言:javascript
复制
#!/usr/bin/env perl
use warnings;
use 5.012; 
use Term::ReadKey;

sub getch {
    my $c = ReadKey 0;
    if ( $c eq "\e" ) {
        my $c = ReadKey 0.10;
        if ( $c eq '[' ) {
            my $c = ReadKey 0;
            if ( $c eq 'M' ) {   
                my $event_type = ord( ReadKey 0 ) - 32;
                my $x = ord( ReadKey 0 ) - 32;
                my $y = ord( ReadKey 0 ) - 32;
                return $x, $y;
} } } }

binmode STDIN, ':encoding(utf-8)' or die $!;
ReadMode 'ultra-raw';

# enter_mouse_mode
binmode STDIN, ':raw' or die $!;
print "\e[?1003h"; # sets   SET_ANY_EVENT_MOUSE  mode

my( $x, $y  ) = getch();

# leave_mouse_mode
binmode STDIN, ':encoding(utf-8)' or die $!;
print "\e[?1003l"; # cancels SET_ANY_EVENT_MOUSE mode

ReadMode 'restore';
say "x = $x";
say "y = $y";

此脚本最多只能使用223列( 223 + 32 -> 1字节)。

有人知道如何启用extended mouse mode吗?我试图以这种方式更改鼠标模式,但它不起作用:

代码语言:javascript
复制
# enter_mouse_mode
binmode STDIN, ':utf8' or die $!;
print "\e[?1003h";
print "\e[?1005h"; ###

my( $x, $y  ) = getch();

# leave_mouse_mode
binmode STDIN, ':encoding(utf-8)' or die $!;
print "\e[?1003l";
print "\e[?1005l"; ###
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-03 04:41:01

您使用的是什么版本的xterm?根据changelog的说法,最近添加了扩展鼠标模式(版本262)。您的代码适用于xterm 266,perl 5.10。我不能用几个简单的策略(LANG=C xtermxterm +lc来禁用区域设置支持)来打破它。

票数 2
EN

Stack Overflow用户

发布于 2012-04-22 06:54:18

我建议不要使用扩展鼠标模式,1005。它不可能与常规的(X10)编码区分开来,而且它仍然存在一个问题,那就是您无法分辨释放事件涉及到哪个按钮。

相反,我建议如果你的终端支持它,使用SGR编码,模式1006。

另请参阅我最近的博客文章关于终端鼠标编码的细节:

http://leonerds-code.blogspot.co.uk/2012/04/wide-mouse-support-in-libvterm.html

使用SGR编码的好处是,您可以尝试启用它,但不需要知道它是否成功;从终端返回的字节会告诉您这一点。然而,您永远不会知道是否成功启用了扩展(UTF-8)模式,但是您需要知道这一点,以便正确解释返回的字节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4681302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档