- Subject: Re: [slang-users] Getting Keyboard Input
- From: "John E. Davis" <jed@xxxxxxxxxxx>
- Date: Wed, 22 Dec 2021 22:12:41 -0500
Duke Normandin <dukeofpurl@xxxxxxx> wrote:
> I've got the following in my code:
>
> variable c = 0;
> c = SLang_getkey ();
SLang_getkey is part of the C api. This and related functions are not
part of the interpreter interface. I have a module that wraps these
functions but I have never distribued it.
> But I'm euchered with this:
>
> rline_getkey is undefined
> ./tempConv.sl:28:<top-level>:Undefined Name
>
> Do I have to import/require something?
> I thought this function was a built-in?
It is built-in as part of the slsh readline interface. This interface
provides editing capabilities, history, tab completion, etc. It is
only exposed to the interpreter after `slsh_readline_init' has been
called. See slsh/scripts/svnsh and slsh/lib/sldb.sl for examples of
its use. However, I do not think that this what you are looking for.
Reading a single key is actually quite complicated and involves a lot
of low-level interaction with the terminal interface. See the
code in src/slutty.c that is part of the slang source code for an
illustration of this.
A poor man's work-around is to let the operating system do much of the
heavy lifting via `stty` command. The following example illustrates
this approach:
private define getkey ()
{
() = system ("stty raw -echo");
variable ch;
if (-1 == read (fileno(stdin), &ch, 1))
ch = -1;
else ch = ch[0];
() = system ("stty sane");
return ch;
}
define slsh_main ()
{
forever
{
() = fputs ("Press any key, 'q' to quit:", stdout);
() = fflush (stdout);
variable ch = getkey ();
if ((ch == 'q') || (ch == -1))
break;
() = fprintf (stdout, "\nYou pressed %d\n", ch);
}
}
Happy Holidays,
--John
_______________________________________________
For list information, visit <http://jedsoft.org/slang/mailinglists.html>.
[2021 date index]
[2021 thread index]
[Thread Prev] [Thread Next]
[Date Prev] [Date Next]