Sometimes I pipe articles in tin(1) through a perl script that parses the output, does something and pipes it into less; when I quit less I'm back in tin and everything is fine. However, when I press ctrl-z (happens more often than I'd think) the terminal ends up in a strange state. The output is
Stopped. Type 'fg' to restart tin
but I have no shell:
ls (nothing)
entering "fg" doesn't take me back to tin. Killing the perl and/or less processes doesn't help either, nor does pressing 'q' (as command for less or tin).
A tin developer analysed the behaviour of tin for me: before popen(), tin does (feed.c:feed_articles() ~ line 616)
reset_shell_mode(3ncurses); endwin(3ncurses);
and after pclose() (feed.c:feed_articles() ~ line 855)
reset_prog_mode(3ncurses); set_keypad_on(3ncurses);
SIGTSTP causes (signal.c:handle_suspend())
set_keypad_off(3ncurses); set_xclick_off(3ncurses); reset_shell_mode(3ncurses); kill(0, SIGSTOP); reset_prog_mode(3ncurses); set_keypad_on(3ncurses); set_xclick_on(3ncurses);
The developer claims that the double reset_shell_mode shouldn't hurt and that this looks ok (I think so as well).
He reduced my test case to
cat|lessand pressing ^Z, which works nicely, however piping through
perl -ne 'print $_;'|lessand pressing ^Z confuses perl. This looks like a perl-specific problem.
Can someone shed more light on this?
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |