📄 userinterfaces.mht
字号:
<TBODY>
<TR>
<TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch15/demo">download =
the following standalone program</A></FONT>
#!/usr/bin/perl -w
# demo POSIX termios
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT color=3D#b2dfee>POSIX</FONT> =
<FONT color=3D#ff7f50>qw</FONT><FONT =
color=3D#00ffff>(</FONT>:termios_h<FONT color=3D#00ffff>);</FONT>
$term =3D POSIX::Termios->new<FONT color=3D#00ffff>;</FONT>
$term->getattr<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>fileno</FONT><FONT color=3D#00ffff>(</FONT>STDIN<FONT =
color=3D#00ffff>));</FONT>
$erase =3D $term->getcc<FONT color=3D#00ffff>(</FONT>VERASE<FONT =
color=3D#00ffff>);</FONT>
$kill =3D $term->getcc<FONT color=3D#00ffff>(</FONT>VKILL<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"Erase is =
character </FONT><FONT color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00>, =
</FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>\n"</FONT>, =
$erase, uncontrol<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>chr</FONT><FONT color=3D#00ffff>(</FONT>$erase<FONT =
color=3D#00ffff>));</FONT>
<FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"Kill is =
character </FONT><FONT color=3D#cdcd00>%d</FONT><FONT color=3D#00cd00>, =
</FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>\n"</FONT>, =
$kill, uncontrol<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>chr</FONT><FONT color=3D#00ffff>(</FONT>$kill<FONT =
color=3D#00ffff>));</FONT>
$term->setcc<FONT color=3D#00ffff>(</FONT>VERASE, <FONT =
color=3D#98fb98>ord</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'#'</FONT><FONT color=3D#00ffff>));</FONT>
$term->setcc<FONT color=3D#00ffff>(</FONT>VKILL, <FONT =
color=3D#98fb98>ord</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'@'</FONT><FONT color=3D#00ffff>));</FONT>
$term->setattr<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT>, TCSANOW<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"erase is #, kill is @; type something: "</FONT><FONT =
color=3D#00ffff>);</FONT>
$line =3D <STDIN><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"You typed: =
$line"</FONT><FONT color=3D#00ffff>;</FONT>
$term->setcc<FONT color=3D#00ffff>(</FONT>VERASE, $erase<FONT =
color=3D#00ffff>);</FONT>
$term->setcc<FONT color=3D#00ffff>(</FONT>VKILL, $kill<FONT =
color=3D#00ffff>);</FONT>
$term->setattr<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>1</FONT>, TCSANOW<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>uncontrol</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>local</FONT> <FONT color=3D#9ac0cd>$_</FONT> =
=3D <FONT color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>s</FONT>/<FONT color=3D#00ffff>([</FONT>\<FONT =
color=3D#cdcd00>200</FONT>-\<FONT color=3D#cdcd00>377</FONT><FONT =
color=3D#00ffff>])</FONT>/<FONT color=3D#98fb98>sprintf</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"M-</FONT><FONT =
color=3D#cdcd00>%c</FONT><FONT color=3D#00cd00>"</FONT>,<FONT =
color=3D#98fb98>ord</FONT><FONT color=3D#00ffff>(</FONT>$<FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>)</FONT> & <FONT =
color=3D#cdcd00>0177</FONT><FONT color=3D#00ffff>)</FONT>/eg<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>s</FONT>/<FONT color=3D#00ffff>([</FONT>\<FONT =
color=3D#cdcd00>0</FONT>-\<FONT color=3D#cdcd00>37</FONT>\<FONT =
color=3D#cdcd00>177</FONT><FONT color=3D#00ffff>])</FONT>/<FONT =
color=3D#98fb98>sprintf</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"^</FONT><FONT color=3D#cdcd00>%c</FONT><FONT =
color=3D#00cd00>"</FONT>,<FONT color=3D#98fb98>ord</FONT><FONT =
color=3D#00ffff>(</FONT>$<FONT color=3D#cdcd00>1</FONT><FONT =
color=3D#00ffff>)</FONT> ^ <FONT color=3D#cdcd00>0100</FONT><FONT =
color=3D#00ffff>)</FONT>/eg<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>return</FONT> $_<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT><FONT color=3D#43cd80> </FONT>
<FONT color=3D#bebebe>#-----------------------------
# HotKey.pm
</FONT><FONT color=3D#ffa500>package</FONT> <FONT =
color=3D#b2dfee>HotKey</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#cdad00>@ISA</FONT> =3D <FONT =
color=3D#ff7f50>qw</FONT><FONT color=3D#00ffff>(</FONT>Exporter<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#cdad00>@EXPORT</FONT> =3D <FONT =
color=3D#ff7f50>qw</FONT><FONT color=3D#00ffff>(</FONT>cbreak cooked =
readkey<FONT color=3D#00ffff>);</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>POSIX</FONT> =
<FONT color=3D#ff7f50>qw</FONT><FONT =
color=3D#00ffff>(</FONT>:termios_h<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$term</FONT>, <FONT color=3D#9ac0cd>$oterm</FONT>, <FONT =
color=3D#9ac0cd>$echo</FONT>, <FONT color=3D#9ac0cd>$noecho</FONT>, =
<FONT color=3D#9ac0cd>$fd_stdin</FONT><FONT color=3D#00ffff>);</FONT>
$fd_stdin =3D <FONT color=3D#98fb98>fileno</FONT><FONT =
color=3D#00ffff>(</FONT>STDIN<FONT color=3D#00ffff>);</FONT>
$term =3D POSIX::Termios->new<FONT color=3D#00ffff>();</FONT>
$term->getattr<FONT color=3D#00ffff>(</FONT>$fd_stdin<FONT =
color=3D#00ffff>);</FONT>
$oterm =3D $term->getlflag<FONT color=3D#00ffff>();</FONT>
$echo =3D ECHO | ECHOK | ICANON<FONT color=3D#00ffff>;</FONT>
$noecho =3D $oterm & ~$echo<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>cbreak</FONT> =
<FONT color=3D#00ffff>{</FONT>
$term->setlflag<FONT color=3D#00ffff>(</FONT>$noecho<FONT =
color=3D#00ffff>);</FONT> <FONT color=3D#bebebe># ok, so i don't want =
echo either
</FONT> $term->setcc<FONT color=3D#00ffff>(</FONT>VTIME, <FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>);</FONT>
$term->setattr<FONT color=3D#00ffff>(</FONT>$fd_stdin, =
TCSANOW<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>cooked</FONT> =
<FONT color=3D#00ffff>{</FONT>
$term->setlflag<FONT color=3D#00ffff>(</FONT>$oterm<FONT =
color=3D#00ffff>);</FONT>
$term->setcc<FONT color=3D#00ffff>(</FONT>VTIME, <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>);</FONT>
$term->setattr<FONT color=3D#00ffff>(</FONT>$fd_stdin, =
TCSANOW<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>sub</FONT> <FONT color=3D#b2dfee>readkey</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$key</FONT> =
=3D <FONT color=3D#00cd00>''</FONT><FONT color=3D#00ffff>;</FONT>
cbreak<FONT color=3D#00ffff>();</FONT>
<FONT color=3D#98fb98>sysread</FONT><FONT =
color=3D#00ffff>(</FONT>STDIN, $key, <FONT color=3D#cdcd00>1</FONT><FONT =
color=3D#00ffff>);</FONT>
cooked<FONT color=3D#00ffff>();</FONT>
<FONT color=3D#ffa500>return</FONT> $key<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ffa500>END</FONT> <FONT color=3D#00ffff>{</FONT> =
cooked<FONT color=3D#00ffff>()</FONT> <FONT color=3D#00ffff>}</FONT>
<FONT color=3D#cdcd00>1</FONT><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=3DAEN816>Checking for Waiting Input</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>Term::ReadKey</FONT><FONT color=3D#00ffff>;</FONT>
ReadMode <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'cbreak'</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#ff7f50>defined</FONT> <FONT color=3D#00ffff>(</FONT>$char =3D =
ReadKey<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>-1</FONT><FONT color=3D#00ffff>))</FONT> <FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># input was waiting and it was $char
</FONT><FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> =
<FONT color=3D#00ffff>{</FONT>
<FONT color=3D#bebebe># no input was waiting
</FONT><FONT color=3D#00ffff>}</FONT>
ReadMode <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'normal'</FONT><FONT color=3D#00ffff>);</FONT> =
<FONT color=3D#bebebe># restore normal tty settings
#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN819>Reading Passwords</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>Term::ReadKey</FONT><FONT color=3D#00ffff>;</FONT>
ReadMode<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'noecho'</FONT><FONT color=3D#00ffff>);</FONT>
$password =3D ReadLine<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch15/checkuser">downloa=
d the following standalone program</A></FONT>
#!/usr/bin/perl -w
# checkuser - demonstrates reading and checking a user's password
</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Term::ReadKey</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Enter your =
password: "</FONT><FONT color=3D#00ffff>;</FONT>
ReadMode <FONT color=3D#00cd00>'noecho'</FONT><FONT =
color=3D#00ffff>;</FONT>
$password =3D ReadLine <FONT color=3D#cdcd00>0</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>chomp</FONT> $password<FONT =
color=3D#00ffff>;</FONT>
ReadMode <FONT color=3D#00cd00>'normal'</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>(</FONT>$username, $encrypted<FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#00ffff>(</FONT> <FONT =
color=3D#98fb98>getpwuid</FONT> $< <FONT =
color=3D#00ffff>)[</FONT><FONT color=3D#cdcd00>0</FONT>,<FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>];</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#98fb98>crypt</FONT><FONT color=3D#00ffff>(</FONT>$password, =
$encrypted<FONT color=3D#00ffff>)</FONT> <FONT color=3D#98fb98>ne</FONT> =
$encrypted<FONT color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT>
<FONT color=3D#ffa500>die</FONT> <FONT color=3D#00cd00>"You are not =
$username\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT> <FONT color=3D#ffa500>else</FONT> <FONT =
color=3D#00ffff>{</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"Welcome, =
$username\n"</FONT><FONT color=3D#00ffff>;</FONT>
<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=3DAEN822>Editing Input</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>Term::ReadLine</FONT><FONT color=3D#00ffff>;</FONT>
$term =3D Term::ReadLine->new<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"APP DESCRIPTION"</FONT><FONT color=3D#00ffff>);</FONT>
$OUT =3D $term->OUT || *STDOUT<FONT color=3D#00ffff>;</FONT>
$term->addhistory<FONT color=3D#00ffff>(</FONT>$fake_line<FONT =
color=3D#00ffff>);</FONT>
$line =3D $term-><FONT color=3D#98fb98>readline</FONT><FONT =
color=3D#00ffff>(</FONT>PROMPT<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> $OUT <FONT color=3D#00cd00>"Any =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -