📄 userinterfaces.mht
字号:
program output\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch15/vbsh">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# vbsh - very bad shell
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>strict</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Term::ReadLine</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT color=3D#b2dfee>POSIX</FONT> =
<FONT color=3D#ff7f50>qw</FONT><FONT color=3D#00ffff>(</FONT>:sys_<FONT =
color=3D#98fb98>wait</FONT>_h<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$term</FONT> =3D =
Term::ReadLine->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"Simple Shell"</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$OUT</FONT> =3D =
$term->OUT<FONT color=3D#00ffff>()</FONT> || *STDOUT<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$cmd</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>while</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#ff7f50>defined</FONT> <FONT color=3D#00ffff>(</FONT>$cmd =3D =
$term-><FONT color=3D#98fb98>readline</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>'$ '</FONT><FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#cdad00>@output</FONT> =
=3D <FONT color=3D#00cd00>`$cmd`</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$exit_value</FONT> =3D $? >> <FONT =
color=3D#cdcd00>8</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$signal_num</FONT> =3D $? & <FONT =
color=3D#cdcd00>127</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$dumped_core</FONT> =3D $? & <FONT =
color=3D#cdcd00>128</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>printf</FONT> $OUT <FONT =
color=3D#00cd00>"Program terminated with status </FONT><FONT =
color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00> from signal </FONT><FONT =
color=3D#cdcd00>%d%s</FONT><FONT color=3D#00cd00>\n"</FONT>,
$exit_value, $signal_num,<FONT color=3D#43cd80> </FONT>
$dumped_core ? <FONT color=3D#00cd00>" (core dumped)"</FONT> =
: <FONT color=3D#00cd00>""</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#cdad00>@output</FONT><FONT color=3D#00ffff>;</FONT>
$term->addhistory<FONT color=3D#00ffff>(</FONT>$seed_line<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>$term->addhistory<FONT color=3D#00ffff>(</FONT>$seed_line<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>$term->remove_history<FONT =
color=3D#00ffff>(</FONT>$line_number<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#cdad00>@history</FONT> =3D =
$term->GetHistory<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN825>Managing the Screen</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
#% rep ps aux
#% rep netstat
#% rep -2.5 lpq
#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch15/rep">download the =
following standalone program</A></FONT>
#!/usr/bin/perl -w
# rep - screen repeat command
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>strict</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Curses</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$timeout</FONT> =
=3D <FONT color=3D#cdcd00>10</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@ARGV</FONT> && <FONT =
color=3D#cdad00>$ARGV</FONT><FONT color=3D#00ffff>[</FONT><FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>]</FONT> =3D~ /^-<FONT =
color=3D#00ffff>(</FONT>\d+\.?\d*<FONT color=3D#00ffff>)</FONT>$/<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT><FONT =
color=3D#43cd80> </FONT>
$timeout =3D $<FONT color=3D#cdcd00>1</FONT><FONT =
color=3D#00ffff>;</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#ff7f50>shift</FONT><FONT =
color=3D#00ffff>;</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"usage: $0 [ =
-timeout ] cmd args\n"</FONT> <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#cdad00>@ARGV</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#43cd80> </FONT>
initscr<FONT color=3D#00ffff>();</FONT> <FONT color=3D#bebebe># =
start screen
</FONT>noecho<FONT color=3D#00ffff>();</FONT><FONT color=3D#43cd80> =
</FONT>
cbreak<FONT color=3D#00ffff>();</FONT><FONT color=3D#43cd80> </FONT>
nodelay<FONT color=3D#00ffff>(</FONT><FONT color=3D#cdcd00>1</FONT><FONT =
color=3D#00ffff>);</FONT> <FONT color=3D#bebebe># so getch() is =
non-blocking
</FONT>
<FONT color=3D#cdcd00>$SIG</FONT><FONT color=3D#00ffff>{</FONT><FONT =
color=3D#00cd00>INT</FONT><FONT color=3D#00ffff>}</FONT> =3D <FONT =
color=3D#ffa500>sub</FONT> <FONT color=3D#00ffff>{</FONT> done<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"Ouch!"</FONT><FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>};</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>done</FONT> <FONT =
color=3D#00ffff>{</FONT> endwin<FONT color=3D#00ffff>();</FONT> <FONT =
color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"</FONT><FONT =
color=3D#cdad00>@_</FONT><FONT color=3D#00cd00>\n"</FONT><FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#ffa500>exit</FONT><FONT =
color=3D#00ffff>;</FONT> <FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>while</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>((</FONT><FONT color=3D#ffa500>my</FONT> $key =3D =
getch<FONT color=3D#00ffff>())</FONT> <FONT color=3D#98fb98>ne</FONT> =
ERR<FONT color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT> =
<FONT color=3D#bebebe># maybe multiple keys
</FONT> done<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"See ya"</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#ffa500>if</FONT> $key <FONT color=3D#98fb98>eq</FONT> <FONT =
color=3D#00cd00>'q'</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#cdad00>@data</FONT> =
=3D <FONT color=3D#00cd00>`(</FONT><FONT =
color=3D#cdad00>@ARGV</FONT><FONT color=3D#00cd00>) =
2>&1`</FONT><FONT color=3D#00ffff>;</FONT> <FONT =
color=3D#bebebe># gather output+errors
</FONT> <FONT color=3D#ffa500>for</FONT> <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#ffa500>my</FONT> $i =3D <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>;</FONT> $i < =
$LINES<FONT color=3D#00ffff>;</FONT> $i++<FONT color=3D#00ffff>)</FONT> =
<FONT color=3D#00ffff>{</FONT>
addstr<FONT color=3D#00ffff>(</FONT>$i, <FONT =
color=3D#cdcd00>0</FONT>, <FONT color=3D#cdad00>$data</FONT><FONT =
color=3D#00ffff>[</FONT>$i<FONT color=3D#00ffff>]</FONT> || <FONT =
color=3D#00cd00>' '</FONT> <FONT color=3D#98fb98>x</FONT> $COLS<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
standout<FONT color=3D#00ffff>();</FONT>
addstr<FONT color=3D#00ffff>(</FONT>$LINES<FONT =
color=3D#cdcd00>-1</FONT>, $COLS - <FONT color=3D#cdcd00>24</FONT>, =
<FONT color=3D#ff7f50>scalar</FONT> <FONT =
color=3D#98fb98>localtime</FONT><FONT color=3D#00ffff>);</FONT>
standend<FONT color=3D#00ffff>();</FONT>
move<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>0</FONT>,<FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT><FONT color=3D#43cd80> </FONT>
refresh<FONT color=3D#00ffff>();</FONT> =
<FONT color=3D#bebebe># flush new output to display
</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$in</FONT>, <FONT color=3D#9ac0cd>$out</FONT><FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>''</FONT>, <FONT color=3D#00cd00>''</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>vec</FONT><FONT =
color=3D#00ffff>(</FONT>$in,<FONT color=3D#98fb98>fileno</FONT><FONT =
color=3D#00ffff>(</FONT>STDIN<FONT color=3D#00ffff>)</FONT>,<FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>)</FONT> =3D <FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>;</FONT> <FONT =
color=3D#bebebe># look for key on stdin</FONT><FONT color=3D#43cd80> =
</FONT><FONT color=3D#bebebe>
</FONT> <FONT color=3D#98fb98>select</FONT><FONT =
color=3D#00ffff>(</FONT>$out =3D $in,<FONT =
color=3D#ff7f50>undef</FONT>,<FONT =
color=3D#ff7f50>undef</FONT>,$timeout<FONT =
color=3D#00ffff>);</FONT><FONT color=3D#bebebe># wait up to this long
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>keypad<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT> =
<FONT color=3D#bebebe># enable keypad mode
</FONT>$key =3D getch<FONT color=3D#00ffff>();</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$key <FONT =
color=3D#98fb98>eq</FONT> <FONT color=3D#00cd00>'k'</FONT> || =
<FONT color=3D#bebebe># vi mode
</FONT> $key <FONT color=3D#98fb98>eq</FONT> <FONT =
color=3D#00cd00>"\cP"</FONT> || <FONT color=3D#bebebe># emacs =
mode
</FONT> $key <FONT color=3D#98fb98>eq</FONT> KEY_UP<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#bebebe># arrow mode
</FONT><FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># do something
</FONT><FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#bebebe>#-----------------------------
# Template Entry Demonstration</FONT><FONT color=3D#43cd80> =
</FONT><FONT color=3D#bebebe>
#
# Address Data Example Record # =
___
#
# Name: [________________________________________________]
# Addr: [________________________________________________]
# City: [__________________] State: [__] Zip: =
[\\\\\]</FONT><FONT color=3D#43cd80> </FONT><FONT color=3D#bebebe>
#
# Phone: (\\\) \\\-\\\\ Password: =
[^^^^^^^^]
#
# Enter all information available.
# Edit fields with left/right arrow keys or "delete".
# Switch fields with "Tab" or up/down arrow keys.
# Indicate completion by pressing "Return".
# Refresh screen with "Control-L".
# Abort this demo here with "Control-X".
#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN828>Controlling Another Program with =
Expect</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Expect</FONT><FONT color=3D#00ffff>;</FONT>
$command =3D Expect->spawn<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"program to run"</FONT><FONT color=3D#00ffff>)</FONT>
<FONT color=3D#98fb98>or</FONT> <FONT color=3D#ffa500>die</FONT> =
<FONT color=3D#00cd00>"Couldn't start program: $!\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe># prevent the program's output from being shown on =
our STDOUT
</FONT>$command-><FONT color=3D#98fb98>log</FONT>_stdout<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe># wait 10 seconds for "Password:" to appear
</FONT><FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#00ffff>(</FONT>$command->expect<FONT =
color=3D#00ffff>(</FONT><FONT color=3D#cdcd00>10</FONT>, <FONT =
color=3D#00cd00>"Password"</FONT><FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># timed out
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe># wait 20 seconds for something that matches =
/[lL]ogin: ?/
</FONT><FONT color=3D#ffa500>unless</FONT> <FONT =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -