> I'm not completely confident that I understand how
>
> $obj->slave->stty() syntax works.
>
> Can I do this: obj->slave->stty(qw('rows 45' 'columns 80');
No, IO::Stty isn't a complete stty replacement (though there are
efforts in that direction).
From the Expect FAQs:
I'm spawning a telnet/ssh session and then let the user
interact with it. But screen-oriented applications on the
other side don't work properly.
You have to set the terminal screen size for that. Luckily,
IO::Pty already has a method for that, so modify your code
to look like this:
my $exp = new Expect;
$exp->slave->clone_winsize_from(\*STDIN);
$exp->spawn("telnet somehost);
Also, some applications need the TERM shell variable set so
they know how to move the cursor across the screen. When
logging in, the remote shell sends a query (Ctrl-Z I think)
and expects the terminal to answer with a string, e.g.
'xterm'. If you really want to go that way (be aware,
madness lies at its end), you can handle that and send back
the value in $ENV{TERM}. This is only a hand-waving
explanation, please figure out the details by yourself.
I set the terminal size as explained above, but if I resize
the window, the application does not notice this.
You have to catch the signal WINCH ("window size changed"),
change the terminal size and propagate the signal to the
spawned application:
my $exp = new Expect;
$exp->slave->clone_winsize_from(\*STDIN);
$exp->spawn("ssh somehost);
$SIG{WINCH} = \&winch;
sub winch {
$exp->slave->clone_winsize_from(\*STDIN);
kill WINCH => $exp->pid if $exp->pid;
$SIG{WINCH} = \&winch;
}
$exp->interact();
Hope this helps,
Roland
--
Ro...@Gi...
|