Subject: Re: Keyboard scan codes with Term::Screen
Hi
Igor,

Any time you have suggestions on improving my code. Please comment. I am always
trying to improve.

Thanks for the tip I will try it out. It has been over 7 years since I have
done any real serious programming. So I am very rusty. I had written a program
in C from memory which got the scan code. I found it far easier then Perl. But
I suspect it is my knowledge of Perl rather then the language.

Thanks again.

Sean

On 21/02/2012, at 11:40 AM, Igor Dovgiy wrote:

> Hi Sean,
>
> I don't have Term::Screen installed, but I checked its source - and it
> looks like whenever some 'non-function' (i.e., not navigational) key is
> pressed, getch() just gives out the corresponding symbol. Perhaps you'd
> just check for the spacebar and enter key values (32 and 10, respectively)?
>
> Meanwhile, a bit of advice - if acceptable. ) Whenever you have a really
> multiple choice in your code AND you're able to use Perl 5.10 or later, at
> least consider using given-when construct instead of if-elsif-else one.
>
> -- iD
>
>
> 2012/2/19 Sean Murphy <smur7241@xxxxxxxxxxxxxx>
>
>> Hi All.
>>
>> I am trying to create my own CLI navigation program. I am using


>> Term::Screen since it is nice and simple. I am aware that there are other
>> modules out there which does all this. But I want to learn more about the
>> navigation of the cursor around the screen. Initially I am working with
>> something that I believe is simple and then I will migrate to Curses. But
>> not yet.
>>
>> I have been successful in creating the menu. The menu wraps. But I cannot
>> get the spacebar or enter key to be excepted. Below is the code:
>>
>>
>> #!/usr/bin/perl -w
>>
>> # Mac Perl 5.12
>>
>> use strict;
>> require Term::Screen;
>>
>> my $scr = new Term::Screen;
>> my $win_col = $scr->cols();
>> my $win_row = $scr-> rows();
>> $scr->clrscr();
>> $scr->at(0,0)->clreol()->puts ("window size: $win_row\t$win_col");
>>
>> for (my $r = 2; $r <= $win_row; $r++) {
>> # prints menu.
>> my $item = $r -2;
>> $scr->at($r,10)->puts("$item - menu item $item");
>> } #end while
>> my $curser_char = '_';
>> $scr->at(2, 0)->puts($curser_char);
>> $scr->noecho();
>> my $col = 0;
>> my $row = 2;
>> my $top_row = 2;
>> my $bottom_row = $win_row;
>>
>> while ( 1) {
>> my $key = $scr->getch();
>> if ($key eq "kd") {
>> $scr->at($row, $col)->puts(' ');
>> ++$row;
>> $row = $top_row if ($row > $bottom_row);
>> } elsif ($key eq "ku") {
>> $scr->at($row, $col)->puts(' ');
>> --$row;
>> $row = $bottom_row if ($row < $top_row);
>> } else {
>> last if ($key eq 'ke');
>> last if ($key eq 'q');
>> } #end if
>> $scr->at($row, $col)->puts("$curser_char $row -");
>> } # end while
>>
>> so how do you capture the Enter or Space?
>>
>> I have read the code for Term::Screen and it doesn't appear to have this
>> as one of the defined keys in the last routine.
>>
>> Sean
>> --
>> To unsubscribe, e-mail: beginners-unsubscribe@xxxxxxxx
>> For additional commands, e-mail: beginners-help@xxxxxxxx
>> http://learn.perl.org/
>>
>>
>>


--
To unsubscribe, e-mail: beginners-unsubscribe@xxxxxxxx
For additional commands, e-mail: beginners-help@xxxxxxxx
http://learn.perl.org/


(C)2011 mailinglist-archive.com