Есть ли модуль, который позволяет мне выбирать на терминале клавиши «вверх» и «вниз»? - PullRequest
1 голос
/ 07 ноября 2010
#!/usr/bin/env perl
use warnings; 
use 5.12.0;
use Term::UI;
use Term::ReadLine;

my $term = Term::ReadLine->new( 'brand' );
my @choices = ( qw( blue red green black white ) );
my $reply = $term->get_reply(
        prompt => 'What is your favorite color?',
        choices => \@choices,
        default => 'blue',
);
say $reply;

Есть ли модуль, который позволяет мне выбирать с помощью клавиш «вверх» и «вниз»:
Мне не нужно писать свой выбор, как здесь, но я могу перейти с помощью клавиши вверх / внизна линию с моим любимым цветом и нажмите «ввод».

Ответы [ 2 ]

2 голосов
/ 07 ноября 2010

Если вы хотите отобразить меню в окне терминала, попробуйте Term :: Clui . Он отображает список вариантов и позволяет пользователю выбрать один или несколько с помощью мыши или клавиш со стрелками.

0 голосов
/ 09 ноября 2010

Если я заменю функцию макета из Clui.pm (Term :: Clui) на эту функцию макета

my $no_col = 1;
sub layout { 
    my @list = @_;
    $this_cell = 0; 
    my $irow = 1; 
    my $icol = 0;  
    for my $i ( 0 .. $#list ) {
        if ( not $no_col ) {
            $l[$i] = length( $list[$i] ) + 2;
            if ( $l[$i] > $maxcols - 1 ) {
                $l[$i] = $maxcols - 1; 
            }
            if ( ( $icol + $l[$i] ) >= $maxcols ) {
                $irow++; 
                $icol = 0;
            }
            $irow[$i] = $irow;
        }
        elsif ( $no_col ) {
            $irow[$i] = $irow++;
        }
        return $irow if $irow > $maxrows;
        $icol[$i] = $icol;
        $this_cell = $i if $list[$i] eq $choice;
        if ( not $no_col ) {
            $icol += $l[$i];
        }
    }
    return $irow if not $no_col;
    return --$irow if $no_col;
} 

, она сделает то, что я хочу (без тщательного тестирования и без чтения всего исходного кода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...