📄 ch15_08.htm
字号:
<HTML><HEAD><TITLE>Recipe 15.7. Ringing the Terminal Bell (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen & Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:43:20Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch15_01.htm"TITLE="15. User Interfaces"><LINKREL="prev"HREF="ch15_07.htm"TITLE="15.6. Reading from the Keyboard"><LINKREL="next"HREF="ch15_09.htm"TITLE="15.8. Using POSIX termios"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch15_07.htm"TITLE="15.6. Reading from the Keyboard"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 15.6. Reading from the Keyboard"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch15_01.htm"TITLE="15. User Interfaces"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch15_09.htm"TITLE="15.8. Using POSIX termios"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 15.8. Using POSIX termios"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch15-chap15_ringing_0">15.7. Ringing the Terminal Bell</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch15-pgfId-633">Problem<ACLASS="indexterm"NAME="ch15-idx-1000005095-0"></A><ACLASS="indexterm"NAME="ch15-idx-1000005095-1"></A><ACLASS="indexterm"NAME="ch15-idx-1000005095-2"></A><ACLASS="indexterm"NAME="ch15-idx-1000005095-3"></A></A></H3><PCLASS="para">You want to sound an alarm on the user's terminal.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch15-pgfId-639">Solution</A></H3><PCLASS="para">Print the <CODECLASS="literal">"\a"</CODE> character to sound a bell:</P><PRECLASS="programlisting">print "\aWake up!\n";</PRE><PCLASS="para">Or, use the <CODECLASS="literal">"vb"</CODE> terminal capability to show a visual bell:</P><PRECLASS="programlisting">use Term::Cap;$OSPEED = 9600;eval { require POSIX; my $termios = POSIX::Termios->new(); $termios->getattr; $OSPEED = $termios->getospeed;};$terminal = Term::Cap->Tgetent({OSPEED=>$OSPEED});$vb = "";eval { $terminal->Trequire("vb"); $vb = $terminal->Tputs('vb', 1);};print $vb; # ring visual bell</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch15-pgfId-685">Discussion</A></H3><PCLASS="para">The <CODECLASS="literal">"\a"</CODE> escape is the same as <CODECLASS="literal">"\cG"</CODE>, <CODECLASS="literal">"\007"</CODE>, and <CODECLASS="literal">"\x07"</CODE>. They all correspond to the ASCII BEL character and cause an irritating ding. In a crowded terminal room at the end of the semester, this beeping caused by dozens of <EMCLASS="emphasis">vi</EM> novices all trying to get out of insert mode at once can be maddening. The visual bell is a workaround to avoid irritation. Based upon the polite principle that terminals should be seen and not heard (at least, not in crowded rooms), some terminals let you briefly reverse the foreground and background colors to give a flash of light instead of an audible ring.</P><PCLASS="para">Not every terminal supports the <ACLASS="indexterm"NAME="ch15-idx-1000005101-0"></A>visual bell, which is why we <CODECLASS="literal">eval</CODE> the code that finds it. If the terminal doesn't support it, <CODECLASS="literal">Trequire</CODE> will <CODECLASS="literal">die</CODE> without having changed the value of <CODECLASS="literal">$vb</CODE> from <CODECLASS="literal">""</CODE>. If the terminal does support it, the value of <CODECLASS="literal">$vb</CODE> will be set to the character sequence to flash the bell.</P><PCLASS="para">There's a better approach to the bell issue in graphical terminal systems like <EMCLASS="emphasis">xterm</EM>. Many of these let you enable the visual bell from the enclosing application itself, allowing all programs that blindly output a <CODECLASS="literal">chr(7)</CODE> to become less noisy.<ACLASS="indexterm"NAME="ch15-idx-1000005097-0"></A><ACLASS="indexterm"NAME="ch15-idx-1000005097-1"></A><ACLASS="indexterm"NAME="ch15-idx-1000005097-2"></A><ACLASS="indexterm"NAME="ch15-idx-1000005097-3"></A></P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch15-pgfId-695">See Also</A></H3><PCLASS="para">The section on <ACLASS="olink"HREF="../prog/ch02_03.htm#PERL2-CH-2-SECT-3.2.2">"String Literals"</A> in <ACLASS="olink"HREF="../prog/ch02_01.htm">Chapter 2</A> of <ACLASS="citetitle"HREF="../prog/index.htm"TITLE="Programming Perl"><CITECLASS="citetitle">Programming Perl</CITE></A> or the section on "Quote and Quote-like Operators" in <ICLASS="filename">perlop </I>(1); the documentation for the standard Term::Cap module</P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch15_07.htm"TITLE="15.6. Reading from the Keyboard"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 15.6. Reading from the Keyboard"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch15_09.htm"TITLE="15.8. Using POSIX termios"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 15.8. Using POSIX termios"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">15.6. Reading from the Keyboard</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">15.8. Using POSIX termios</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright © 2002</a> O'Reilly & Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -