[Toybox] [New Toy] - reset

Rob Landley rob at landley.net
Sun Apr 13 11:06:12 PDT 2014


On 04/12/14 21:36, Isaac Dunham wrote:
> On Mon, Apr 07, 2014 at 06:57:19PM +0530, Ashwini Sharma wrote:
>>   if (isatty(1)) xprintf("\033c\033(B\033[0m\033[J\033[?25h");
>>   fflush(stdout);
>>   // set the terminal to sane settings
>>   xexec(args);
> 
> Ick.
> This is the sort of thing OLDTOY() is for; it belongs in an OLDTOY of
> stty.

Yes and no. We haven't got an stty implementation yet, and xexec()
should call the built-in one without doing an exec if it's built in. So
it's not all that bad.

That said, the code stty is _doing_ to make a terminal "sane" is also at
least partly in init function reset_term(), so it's common enough it
should probably be a helper function in lib/lib.c. But I'd have to
see/write an stty implementation to know how _much_ can be shared, and
what the callers of said shared infrastructure need from it...

> If you would like an example, see toys/posix/id.c; I'd expect the code to be
> something like this:

More recently I upgraded the infrastructure to let you have two NEWTOY()
in the same .c file. I posted an explanation and an updated hello.c
implementing two commands at once here:

http://lists.landley.net/pipermail/toybox-landley.net/2014-February/001580.html

I haven't upgraded the code.html file yet though. My bad. (I alson eed
to upgrade scripts/single.sh so it can build the rest of the commands.)

> USE_STTY(NEWTOY(stty, ...))
> USE_STTY(OLDTOY(reset, stty, NULL, ...))
> ...
>   if (toys.which->name[0] == 'r')
>     xprintf("\033c\033(B\033[0m\033[J\033[?25h");
>   if ((toys.which->name[0]=='r') || !strcmp(toys.optargs[0], "sane")) {
>     //stty sane code goes here
>   }

Now that they can have different "main" functions, it might be easier to
have reset_main() call stty_main(). Or just put the "sane" part in a
shared helper function. (Or putting the tty fiddling should go in a
helper function in lib...)

Rob

 1397412372.0


More information about the Toybox mailing list