This commit was generated by cvs2svn to track changes on a CVS vendor
branch.
This commit is contained in:
commit
d0352a18a5
19 changed files with 11285 additions and 6342 deletions
37
readline/USAGE
Normal file
37
readline/USAGE
Normal file
|
@ -0,0 +1,37 @@
|
|||
From rms@gnu.org Thu Jul 22 20:37:55 1999
|
||||
Flags: 10
|
||||
Return-Path: rms@gnu.org
|
||||
Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins)
|
||||
id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for <chet@odin.INS.CWRU.Edu>)
|
||||
Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6)
|
||||
id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for <chet@po.cwru.edu>)
|
||||
Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi)
|
||||
id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for <chet@nike.ins.cwru.edu>)
|
||||
Received: from wijiji.santafe.edu (wijiji [192.12.12.5])
|
||||
by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831
|
||||
for <chet@nike.ins.cwru.edu>; Thu, 22 Jul 1999 18:37:47 -0600 (MDT)
|
||||
Received: (from rms@localhost)
|
||||
by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089;
|
||||
Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
|
||||
Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
|
||||
Message-Id: <199907230037.SAA01089@wijiji.santafe.edu>
|
||||
X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f
|
||||
From: Richard Stallman <rms@gnu.org>
|
||||
To: chet@nike.ins.cwru.edu
|
||||
Subject: Use of Readline
|
||||
Reply-to: rms@gnu.org
|
||||
|
||||
I think Allbery's suggestion is a good one. So please add this text
|
||||
in a suitable place. Please don't put it in the GPL itself; that
|
||||
should be the same as the GPL everywhere else. Putting it in the
|
||||
README and/or the documentation would be a good idea.
|
||||
|
||||
|
||||
======================================================================
|
||||
Our position on the use of Readline through a shared-library linking
|
||||
mechanism is that there is no legal difference between shared-library
|
||||
linking and static linking--either kind of linking combines various
|
||||
modules into a single larger work. The conditions for using Readline
|
||||
in a larger work are stated in section 3 of the GNU GPL.
|
||||
|
||||
|
Binary file not shown.
|
@ -1,14 +1,14 @@
|
|||
<HTML>
|
||||
<HEAD>
|
||||
<!-- This HTML file has been created by texi2html 1.52
|
||||
from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 31 December 1998 -->
|
||||
from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 19 January 2000 -->
|
||||
|
||||
<TITLE>GNU History Library</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<H1>GNU History Library</H1>
|
||||
<H2>Edition 4.0, for <CODE>History Library</CODE> Version 4.0.</H2>
|
||||
<H2>December 1998</H2>
|
||||
<H2>Edition 4.1, for <CODE>History Library</CODE> Version 4.1.</H2>
|
||||
<H2>January 2000</H2>
|
||||
<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
|
||||
<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
|
||||
<P>
|
||||
|
@ -54,8 +54,8 @@ typed input.
|
|||
</P>
|
||||
<P>
|
||||
Published by the Free Software Foundation <BR>
|
||||
675 Massachusetts Avenue, <BR>
|
||||
Cambridge, MA 02139 USA
|
||||
59 Temple Place, Suite 330, <BR>
|
||||
Boston, MA 02111 USA
|
||||
|
||||
</P>
|
||||
<P>
|
||||
|
@ -208,6 +208,31 @@ of the line, with the first word being denoted by 0 (zero). Words are
|
|||
inserted into the current line separated by single spaces.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
For example,
|
||||
|
||||
</P>
|
||||
<DL COMPACT>
|
||||
|
||||
<DT><CODE>!!</CODE>
|
||||
<DD>
|
||||
designates the preceding command. When you type this, the preceding
|
||||
command is repeated in toto.
|
||||
|
||||
<DT><CODE>!!:$</CODE>
|
||||
<DD>
|
||||
designates the last argument of the preceding command. This may be
|
||||
shortened to <CODE>!$</CODE>.
|
||||
|
||||
<DT><CODE>!fi:2</CODE>
|
||||
<DD>
|
||||
designates the second argument of the most recent command starting with
|
||||
the letters <CODE>fi</CODE>.
|
||||
</DL>
|
||||
|
||||
<P>
|
||||
Here are the word designators:
|
||||
|
||||
<DL COMPACT>
|
||||
|
||||
<DT><CODE>0 (zero)</CODE>
|
||||
|
@ -363,6 +388,15 @@ If the programmer desires, he can use the Readline library, which
|
|||
includes some history manipulation by default, and has the added
|
||||
advantage of command line editing.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
Before declaring any functions using any functionality the History
|
||||
library provides in other code, an application writer should include
|
||||
the file <CODE><readline/history.h></CODE> in any file that uses the
|
||||
History library's features. It supplies extern declarations for all
|
||||
of the library's public functions and variables, and declares all of
|
||||
the public data structures.
|
||||
|
||||
</P>
|
||||
|
||||
|
||||
|
@ -783,7 +817,7 @@ if expansions did take place;
|
|||
if there was an error in expansion;
|
||||
<DT><CODE>2</CODE>
|
||||
<DD>
|
||||
if the returned line should only be displayed, but not executed,
|
||||
if the returned line should be displayed, but not executed,
|
||||
as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>).
|
||||
</DL>
|
||||
|
||||
|
@ -1029,21 +1063,21 @@ main ()
|
|||
<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1>
|
||||
<P>
|
||||
Jump to:
|
||||
<A HREF="#a">a</A>
|
||||
<A HREF="#cindex_a">a</A>
|
||||
-
|
||||
<A HREF="#e">e</A>
|
||||
<A HREF="#cindex_e">e</A>
|
||||
-
|
||||
<A HREF="#h">h</A>
|
||||
<A HREF="#cindex_h">h</A>
|
||||
<P>
|
||||
<H2><A NAME="a">a</A></H2>
|
||||
<H2><A NAME="cindex_a">a</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX23">anchored search</A>
|
||||
</DIR>
|
||||
<H2><A NAME="e">e</A></H2>
|
||||
<H2><A NAME="cindex_e">e</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX2">event designators</A>
|
||||
</DIR>
|
||||
<H2><A NAME="h">h</A></H2>
|
||||
<H2><A NAME="cindex_h">h</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX3">history events</A>
|
||||
<LI><A HREF="history.html#IDX1">history expansion</A>
|
||||
|
@ -1056,43 +1090,43 @@ Jump to:
|
|||
<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1>
|
||||
<P>
|
||||
Jump to:
|
||||
<A HREF="#a">a</A>
|
||||
<A HREF="#vindex_a">a</A>
|
||||
-
|
||||
<A HREF="#c">c</A>
|
||||
<A HREF="#vindex_c">c</A>
|
||||
-
|
||||
<A HREF="#g">g</A>
|
||||
<A HREF="#vindex_g">g</A>
|
||||
-
|
||||
<A HREF="#h">h</A>
|
||||
<A HREF="#vindex_h">h</A>
|
||||
-
|
||||
<A HREF="#m">m</A>
|
||||
<A HREF="#vindex_m">m</A>
|
||||
-
|
||||
<A HREF="#n">n</A>
|
||||
<A HREF="#vindex_n">n</A>
|
||||
-
|
||||
<A HREF="#p">p</A>
|
||||
<A HREF="#vindex_p">p</A>
|
||||
-
|
||||
<A HREF="#r">r</A>
|
||||
<A HREF="#vindex_r">r</A>
|
||||
-
|
||||
<A HREF="#s">s</A>
|
||||
<A HREF="#vindex_s">s</A>
|
||||
-
|
||||
<A HREF="#u">u</A>
|
||||
<A HREF="#vindex_u">u</A>
|
||||
-
|
||||
<A HREF="#w">w</A>
|
||||
<A HREF="#vindex_w">w</A>
|
||||
<P>
|
||||
<H2><A NAME="a">a</A></H2>
|
||||
<H2><A NAME="vindex_a">a</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX7">add_history</A>
|
||||
<LI><A HREF="history.html#IDX30">append_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="c">c</A></H2>
|
||||
<H2><A NAME="vindex_c">c</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX10">clear_history</A>
|
||||
<LI><A HREF="history.html#IDX16">current_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="g">g</A></H2>
|
||||
<H2><A NAME="vindex_g">g</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX34">get_history_event</A>
|
||||
</DIR>
|
||||
<H2><A NAME="h">h</A></H2>
|
||||
<H2><A NAME="vindex_h">h</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX33">history_arg_extract</A>
|
||||
<LI><A HREF="history.html#IDX36">history_base</A>
|
||||
|
@ -1118,35 +1152,35 @@ Jump to:
|
|||
<LI><A HREF="history.html#IDX18">history_total_bytes</A>
|
||||
<LI><A HREF="history.html#IDX31">history_truncate_file</A>
|
||||
</DIR>
|
||||
<H2><A NAME="m">m</A></H2>
|
||||
<H2><A NAME="vindex_m">m</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX38">max_input_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="n">n</A></H2>
|
||||
<H2><A NAME="vindex_n">n</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX21">next_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="p">p</A></H2>
|
||||
<H2><A NAME="vindex_p">p</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX20">previous_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="r">r</A></H2>
|
||||
<H2><A NAME="vindex_r">r</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX27">read_history</A>
|
||||
<LI><A HREF="history.html#IDX28">read_history_range</A>
|
||||
<LI><A HREF="history.html#IDX8">remove_history</A>
|
||||
<LI><A HREF="history.html#IDX9">replace_history_entry</A>
|
||||
</DIR>
|
||||
<H2><A NAME="s">s</A></H2>
|
||||
<H2><A NAME="vindex_s">s</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX11">stifle_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="u">u</A></H2>
|
||||
<H2><A NAME="vindex_u">u</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX12">unstifle_history</A>
|
||||
<LI><A HREF="history.html#IDX4">using_history</A>
|
||||
</DIR>
|
||||
<H2><A NAME="w">w</A></H2>
|
||||
<H2><A NAME="vindex_w">w</A></H2>
|
||||
<DIR>
|
||||
<LI><A HREF="history.html#IDX15">where_history</A>
|
||||
<LI><A HREF="history.html#IDX29">write_history</A>
|
||||
|
@ -1154,7 +1188,7 @@ Jump to:
|
|||
|
||||
</P>
|
||||
<P><HR><P>
|
||||
This document was generated on 31 December 1998 using the
|
||||
This document was generated on 19 January 2000 using the
|
||||
<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
|
||||
translator version 1.52.</P>
|
||||
</BODY>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
This is Info file history.info, produced by Makeinfo version 1.67 from
|
||||
This is Info file history.info, produced by Makeinfo version 1.68 from
|
||||
the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo.
|
||||
|
||||
INFO-DIR-SECTION Libraries
|
||||
|
@ -141,6 +141,22 @@ be omitted if the word designator begins with a `^', `$', `*', `-', or
|
|||
word being denoted by 0 (zero). Words are inserted into the current
|
||||
line separated by single spaces.
|
||||
|
||||
For example,
|
||||
|
||||
`!!'
|
||||
designates the preceding command. When you type this, the
|
||||
preceding command is repeated in toto.
|
||||
|
||||
`!!:$'
|
||||
designates the last argument of the preceding command. This may be
|
||||
shortened to `!$'.
|
||||
|
||||
`!fi:2'
|
||||
designates the second argument of the most recent command starting
|
||||
with the letters `fi'.
|
||||
|
||||
Here are the word designators:
|
||||
|
||||
`0 (zero)'
|
||||
The `0'th word. For many applications, this is the command word.
|
||||
|
||||
|
@ -261,6 +277,13 @@ the history substitution provided by `csh'.
|
|||
includes some history manipulation by default, and has the added
|
||||
advantage of command line editing.
|
||||
|
||||
Before declaring any functions using any functionality the History
|
||||
library provides in other code, an application writer should include
|
||||
the file `<readline/history.h>' in any file that uses the History
|
||||
library's features. It supplies extern declarations for all of the
|
||||
library's public functions and variables, and declares all of the
|
||||
public data structures.
|
||||
|
||||
|
||||
File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History
|
||||
|
||||
|
@ -527,8 +550,8 @@ History Expansion
|
|||
if there was an error in expansion;
|
||||
|
||||
`2'
|
||||
if the returned line should only be displayed, but not
|
||||
executed, as with the `:p' modifier (*note Modifiers::.).
|
||||
if the returned line should be displayed, but not executed,
|
||||
as with the `:p' modifier (*note Modifiers::.).
|
||||
|
||||
If an error ocurred in expansion, then OUTPUT contains a
|
||||
descriptive error message.
|
||||
|
@ -768,21 +791,21 @@ Node: Using History Interactively1742
|
|||
Node: History Interaction2250
|
||||
Node: Event Designators3669
|
||||
Node: Word Designators4596
|
||||
Node: Modifiers5845
|
||||
Node: Programming with GNU History6983
|
||||
Node: Introduction to History7709
|
||||
Node: History Storage9030
|
||||
Node: History Functions10123
|
||||
Node: Initializing History and State Management11094
|
||||
Node: History List Management11886
|
||||
Node: Information About the History List13407
|
||||
Node: Moving Around the History List14713
|
||||
Node: Searching the History List15598
|
||||
Node: Managing the History File17430
|
||||
Node: History Expansion18936
|
||||
Node: History Variables20780
|
||||
Node: History Programming Example23098
|
||||
Node: Concept Index25702
|
||||
Node: Function and Variable Index26188
|
||||
Node: Modifiers6225
|
||||
Node: Programming with GNU History7363
|
||||
Node: Introduction to History8089
|
||||
Node: History Storage9774
|
||||
Node: History Functions10867
|
||||
Node: Initializing History and State Management11838
|
||||
Node: History List Management12630
|
||||
Node: Information About the History List14151
|
||||
Node: Moving Around the History List15457
|
||||
Node: Searching the History List16342
|
||||
Node: Managing the History File18174
|
||||
Node: History Expansion19680
|
||||
Node: History Variables21519
|
||||
Node: History Programming Example23837
|
||||
Node: Concept Index26441
|
||||
Node: Function and Variable Index26927
|
||||
|
||||
End Tag Table
|
||||
|
|
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
|||
This is Info file readline.info, produced by Makeinfo version 1.67 from
|
||||
This is Info file readline.info, produced by Makeinfo version 1.68 from
|
||||
the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo.
|
||||
|
||||
INFO-DIR-SECTION Libraries
|
||||
|
@ -76,10 +76,18 @@ keystrokes.
|
|||
produced when the <k> key is pressed while the Control key is depressed.
|
||||
|
||||
The text <M-k> is read as `Meta-K' and describes the character
|
||||
produced when the meta key (if you have one) is depressed, and the <k>
|
||||
key is pressed. If you do not have a meta key, the identical keystroke
|
||||
can be generated by typing <ESC> first, and then typing <k>. Either
|
||||
process is known as "metafying" the <k> key.
|
||||
produced when the Meta key (if you have one) is depressed, and the <k>
|
||||
key is pressed. The Meta key is labeled <ALT> on many keyboards. On
|
||||
keyboards with two keys labeled <ALT> (usually to either side of the
|
||||
space bar), the <ALT> on the left side is generally set to work as a
|
||||
Meta key. The <ALT> key on the right may also be configured to work as
|
||||
a Meta key or may be configured as some other modifier, such as a
|
||||
Compose key for typing accented characters.
|
||||
|
||||
If you do not have a Meta or <ALT> key, or another key working as a
|
||||
Meta key, the identical keystroke can be generated by typing <ESC>
|
||||
first, and then typing <k>. Either process is known as "metafying" the
|
||||
<k> key.
|
||||
|
||||
The text <M-C-k> is read as `Meta-Control-k' and describes the
|
||||
character produced by "metafying" <C-k>.
|
||||
|
@ -87,7 +95,9 @@ character produced by "metafying" <C-k>.
|
|||
In addition, several keys have their own names. Specifically,
|
||||
<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
|
||||
when seen in this text, or in an init file (*note Readline Init
|
||||
File::.).
|
||||
File::.). If your keyboard lacks a <LFD> key, typing <C-j> will
|
||||
produce the desired character. The <RET> key may be labeled <Return>
|
||||
or <Enter> on some keyboards.
|
||||
|
||||
|
||||
File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
|
||||
|
@ -125,18 +135,17 @@ typed character appears where the cursor was, and then the cursor moves
|
|||
one space to the right. If you mistype a character, you can use your
|
||||
erase character to back up and delete the mistyped character.
|
||||
|
||||
Sometimes you may miss typing a character that you wanted to type,
|
||||
and not notice your error until you have typed several other
|
||||
characters. In that case, you can type <C-b> to move the cursor to the
|
||||
left, and then correct your mistake. Afterwards, you can move the
|
||||
cursor to the right with <C-f>.
|
||||
Sometimes you may mistype a character, and not notice the error
|
||||
until you have typed several other characters. In that case, you can
|
||||
type <C-b> to move the cursor to the left, and then correct your
|
||||
mistake. Afterwards, you can move the cursor to the right with <C-f>.
|
||||
|
||||
When you add text in the middle of a line, you will notice that
|
||||
characters to the right of the cursor are `pushed over' to make room
|
||||
for the text that you have inserted. Likewise, when you delete text
|
||||
behind the cursor, characters to the right of the cursor are `pulled
|
||||
back' to fill in the blank space created by the removal of the text. A
|
||||
list of the basic bare essentials for editing the text of an input line
|
||||
list of the bare essentials for editing the text of an input line
|
||||
follows.
|
||||
|
||||
<C-b>
|
||||
|
@ -145,7 +154,7 @@ follows.
|
|||
<C-f>
|
||||
Move forward one character.
|
||||
|
||||
<DEL>
|
||||
<DEL> or <Backspace>
|
||||
Delete the character to the left of the cursor.
|
||||
|
||||
<C-d>
|
||||
|
@ -154,21 +163,25 @@ follows.
|
|||
Printing characters
|
||||
Insert the character into the line at the cursor.
|
||||
|
||||
<C-_>
|
||||
<C-_> or <C-x C-u>
|
||||
Undo the last editing command. You can undo all the way back to an
|
||||
empty line.
|
||||
|
||||
(Depending on your configuration, the <Backspace> key be set to delete
|
||||
the character to the left of the cursor and the <DEL> key set to delete
|
||||
the character underneath the cursor, like <C-d>, rather than the
|
||||
character to the left of the cursor.)
|
||||
|
||||
|
||||
File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
|
||||
|
||||
Readline Movement Commands
|
||||
--------------------------
|
||||
|
||||
The above table describes the most basic possible keystrokes that
|
||||
you need in order to do editing of the input line. For your
|
||||
convenience, many other commands have been added in addition to <C-b>,
|
||||
<C-f>, <C-d>, and <DEL>. Here are some commands for moving more rapidly
|
||||
about the line.
|
||||
The above table describes the most basic keystrokes that you need in
|
||||
order to do editing of the input line. For your convenience, many
|
||||
other commands have been added in addition to <C-b>, <C-f>, <C-d>, and
|
||||
<DEL>. Here are some commands for moving more rapidly about the line.
|
||||
|
||||
<C-a>
|
||||
Move to the start of the line.
|
||||
|
@ -198,9 +211,12 @@ Readline Killing Commands
|
|||
|
||||
"Killing" text means to delete the text from the line, but to save
|
||||
it away for later use, usually by "yanking" (re-inserting) it back into
|
||||
the line. If the description for a command says that it `kills' text,
|
||||
then you can be sure that you can get the text back in a different (or
|
||||
the same) place later.
|
||||
the line. (`Cut' and `paste' are more recent jargon for `kill' and
|
||||
`yank'.)
|
||||
|
||||
If the description for a command says that it `kills' text, then you
|
||||
can be sure that you can get the text back in a different (or the same)
|
||||
place later.
|
||||
|
||||
When you use a kill command, the text is saved in a "kill-ring".
|
||||
Any number of consecutive kills save all of the killed text together, so
|
||||
|
@ -215,12 +231,14 @@ available to be yanked back later, when you are typing another line.
|
|||
line.
|
||||
|
||||
<M-d>
|
||||
Kill from the cursor to the end of the current word, or if between
|
||||
words, to the end of the next word.
|
||||
Kill from the cursor to the end of the current word, or, if between
|
||||
words, to the end of the next word. Word boundaries are the same
|
||||
as those used by <M-f>.
|
||||
|
||||
<M-DEL>
|
||||
Kill from the cursor the start of the previous word, or if between
|
||||
words, to the start of the previous word.
|
||||
Kill from the cursor the start of the previous word, or, if between
|
||||
words, to the start of the previous word. Word boundaries are the
|
||||
same as those used by <M-b>.
|
||||
|
||||
<C-w>
|
||||
Kill from the cursor to the previous whitespace. This is
|
||||
|
@ -252,7 +270,7 @@ start of the line, you might type `M-- C-k'.
|
|||
|
||||
The general way to pass numeric arguments to a command is to type
|
||||
meta digits before the command. If the first `digit' typed is a minus
|
||||
sign (<->), then the sign of the argument will be negative. Once you
|
||||
sign (`-'), then the sign of the argument will be negative. Once you
|
||||
have typed one meta digit to get the argument started, you can type the
|
||||
remainder of the digits, and then the command. For example, to give
|
||||
the <C-d> command an argument of 10, you could type `M-1 0 C-d'.
|
||||
|
@ -271,19 +289,23 @@ INCREMENTAL and NON-INCREMENTAL.
|
|||
search string. As each character of the search string is typed,
|
||||
Readline displays the next entry from the history matching the string
|
||||
typed so far. An incremental search requires only as many characters
|
||||
as needed to find the desired history entry. The characters present in
|
||||
the value of the ISEARCH-TERMINATORS variable are used to terminate an
|
||||
incremental search. If that variable has not been assigned a value,
|
||||
the <ESC> and <C-J> characters will terminate an incremental search.
|
||||
<C-g> will abort an incremental search and restore the original line.
|
||||
When the search is terminated, the history entry containing the search
|
||||
string becomes the current line. To find other matching entries in the
|
||||
history list, type <C-s> or <C-r> as appropriate. This will search
|
||||
backward or forward in the history for the next entry matching the
|
||||
search string typed so far. Any other key sequence bound to a Readline
|
||||
command will terminate the search and execute that command. For
|
||||
instance, a <RET> will terminate the search and accept the line,
|
||||
thereby executing the command from the history list.
|
||||
as needed to find the desired history entry. To search backward in the
|
||||
history for a particular string, type <C-r>. Typing <C-s> searches
|
||||
forward through the history. The characters present in the value of
|
||||
the `isearch-terminators' variable are used to terminate an incremental
|
||||
search. If that variable has not been assigned a value, the <ESC> and
|
||||
<C-J> characters will terminate an incremental search. <C-g> will
|
||||
abort an incremental search and restore the original line. When the
|
||||
search is terminated, the history entry containing the search string
|
||||
becomes the current line.
|
||||
|
||||
To find other matching entries in the history list, type <C-r> or
|
||||
<C-s> as appropriate. This will search backward or forward in the
|
||||
history for the next entry matching the search string typed so far.
|
||||
Any other key sequence bound to a Readline command will terminate the
|
||||
search and execute that command. For instance, a <RET> will terminate
|
||||
the search and accept the line, thereby executing the command from the
|
||||
history list.
|
||||
|
||||
Non-incremental searches read the entire search string before
|
||||
starting to search for matching history lines. The search string may be
|
||||
|
@ -295,12 +317,13 @@ File: readline.info, Node: Readline Init File, Next: Bindable Readline Command
|
|||
Readline Init File
|
||||
==================
|
||||
|
||||
Although the Readline library comes with a set of `emacs'-like
|
||||
Although the Readline library comes with a set of Emacs-like
|
||||
keybindings installed by default, it is possible to use a different set
|
||||
of keybindings. Any user can customize programs that use Readline by
|
||||
putting commands in an "inputrc" file in his home directory. The name
|
||||
of this file is taken from the value of the environment variable
|
||||
`INPUTRC'. If that variable is unset, the default is `~/.inputrc'.
|
||||
putting commands in an "inputrc" file, conventionally in his home
|
||||
directory. The name of this file is taken from the value of the
|
||||
environment variable `INPUTRC'. If that variable is unset, the default
|
||||
is `~/.inputrc'.
|
||||
|
||||
When a program which uses the Readline library starts up, the init
|
||||
file is read, and the key bindings are set.
|
||||
|
@ -367,7 +390,7 @@ Variable Settings
|
|||
`convert-meta'
|
||||
If set to `on', Readline will convert characters with the
|
||||
eighth bit set to an ASCII key sequence by stripping the
|
||||
eighth bit and prepending an <ESC> character, converting them
|
||||
eighth bit and prefixing an <ESC> character, converting them
|
||||
to a meta-prefixed key sequence. The default value is `on'.
|
||||
|
||||
`disable-completion'
|
||||
|
@ -452,7 +475,7 @@ Variable Settings
|
|||
|
||||
Key Bindings
|
||||
The syntax for controlling key bindings in the init file is
|
||||
simple. First you have to know the name of the command that you
|
||||
simple. First you need to find the name of the command that you
|
||||
want to change. The following sections contain tables of the
|
||||
command name, the default keybinding, if any, and a short
|
||||
description of what the command does.
|
||||
|
@ -508,10 +531,10 @@ Key Bindings
|
|||
backslash
|
||||
|
||||
`\"'
|
||||
<">
|
||||
<">, a double quotation mark
|
||||
|
||||
`\''
|
||||
<'>
|
||||
<'>, a single quote or apostrophe
|
||||
|
||||
In addition to the GNU Emacs style escape sequences, a second set
|
||||
of backslash escapes is available:
|
||||
|
@ -541,11 +564,11 @@ Key Bindings
|
|||
vertical tab
|
||||
|
||||
`\NNN'
|
||||
the character whose ASCII code is the octal value NNN (one to
|
||||
three digits)
|
||||
the character whose `ASCII' code is the octal value NNN (one
|
||||
to three digits)
|
||||
|
||||
`\xNNN'
|
||||
the character whose ASCII code is the hexadecimal value NNN
|
||||
the character whose `ASCII' code is the hexadecimal value NNN
|
||||
(one to three digits)
|
||||
|
||||
When entering the text of a macro, single or double quotes must be
|
||||
|
@ -744,6 +767,12 @@ Bindable Readline Commands
|
|||
This section describes Readline commands that may be bound to key
|
||||
sequences.
|
||||
|
||||
Command names without an accompanying key sequence are unbound by
|
||||
default. In the following descriptions, POINT refers to the current
|
||||
cursor position, and MARK refers to a cursor position saved by the
|
||||
`set-mark' command. The text between the point and mark is referred to
|
||||
as the REGION.
|
||||
|
||||
|
||||
File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
|
||||
|
||||
|
@ -767,7 +796,7 @@ Commands For Moving
|
|||
letters and digits.
|
||||
|
||||
`backward-word (M-b)'
|
||||
Move back to the start of this, or the previous, word. Words are
|
||||
Move back to the start of the current or previous word. Words are
|
||||
composed of letters and digits.
|
||||
|
||||
`clear-screen (C-l)'
|
||||
|
@ -822,9 +851,8 @@ Commands For Manipulating The History
|
|||
|
||||
`history-search-forward ()'
|
||||
Search forward through the history for the string of characters
|
||||
between the start of the current line and the current cursor
|
||||
position (the POINT). This is a non-incremental search. By
|
||||
default, this command is unbound.
|
||||
between the start of the current line and the point. This is a
|
||||
non-incremental search. By default, this command is unbound.
|
||||
|
||||
`history-search-backward ()'
|
||||
Search backward through the history for the string of characters
|
||||
|
@ -880,11 +908,11 @@ Commands For Changing Text
|
|||
Drag the character before the cursor forward over the character at
|
||||
the cursor, moving the cursor forward as well. If the insertion
|
||||
point is at the end of the line, then this transposes the last two
|
||||
characters of the line. Negative arguments don't work.
|
||||
characters of the line. Negative arguments have no effect.
|
||||
|
||||
`transpose-words (M-t)'
|
||||
Drag the word behind the cursor past the word in front of the
|
||||
cursor moving the cursor over that word as well.
|
||||
Drag the word before point past the word after point, moving point
|
||||
past that word as well.
|
||||
|
||||
`upcase-word (M-u)'
|
||||
Uppercase the current (or following) word. With a negative
|
||||
|
@ -905,41 +933,38 @@ Killing And Yanking
|
|||
-------------------
|
||||
|
||||
`kill-line (C-k)'
|
||||
Kill the text from the current cursor position to the end of the
|
||||
line.
|
||||
Kill the text from point to the end of the line.
|
||||
|
||||
`backward-kill-line (C-x Rubout)'
|
||||
Kill backward to the beginning of the line.
|
||||
|
||||
`unix-line-discard (C-u)'
|
||||
Kill backward from the cursor to the beginning of the current line.
|
||||
The killed text is saved on the kill-ring.
|
||||
|
||||
`kill-whole-line ()'
|
||||
Kill all characters on the current line, no matter where the
|
||||
cursor is. By default, this is unbound.
|
||||
Kill all characters on the current line, no matter point is. By
|
||||
default, this is unbound.
|
||||
|
||||
`kill-word (M-d)'
|
||||
Kill from the cursor to the end of the current word, or if between
|
||||
Kill from point to the end of the current word, or if between
|
||||
words, to the end of the next word. Word boundaries are the same
|
||||
as `forward-word'.
|
||||
|
||||
`backward-kill-word (M-DEL)'
|
||||
Kill the word behind the cursor. Word boundaries are the same as
|
||||
Kill the word behind point. Word boundaries are the same as
|
||||
`backward-word'.
|
||||
|
||||
`unix-word-rubout (C-w)'
|
||||
Kill the word behind the cursor, using white space as a word
|
||||
boundary. The killed text is saved on the kill-ring.
|
||||
Kill the word behind point, using white space as a word boundary.
|
||||
The killed text is saved on the kill-ring.
|
||||
|
||||
`delete-horizontal-space ()'
|
||||
Delete all spaces and tabs around point. By default, this is
|
||||
unbound.
|
||||
|
||||
`kill-region ()'
|
||||
Kill the text between the point and the *mark* (saved cursor
|
||||
position). This text is referred to as the REGION. By default,
|
||||
this command is unbound.
|
||||
Kill the text in the current region. By default, this command is
|
||||
unbound.
|
||||
|
||||
`copy-region-as-kill ()'
|
||||
Copy the text in the region to the kill buffer, so it can be yanked
|
||||
|
@ -1049,7 +1074,7 @@ Some Miscellaneous Commands
|
|||
---------------------------
|
||||
|
||||
`re-read-init-file (C-x C-r)'
|
||||
Read in the contents of the inputrc file, and incorporate any
|
||||
Read in the contents of the INPUTRC file, and incorporate any
|
||||
bindings or variable assignments found there.
|
||||
|
||||
`abort (C-g)'
|
||||
|
@ -1283,6 +1308,13 @@ This section describes the various functions and variables defined
|
|||
within the Readline library which allow a user program to add
|
||||
customized functionality to Readline.
|
||||
|
||||
Before declaring any functions that customize Readline's behavior, or
|
||||
using any functionality Readline provides in other code, an application
|
||||
writer should include the file `<readline/readline.h>' in any file that
|
||||
uses Readline's features. Since some of the definitions in
|
||||
`readline.h' use the `stdio' library, the file `<stdio.h>' should be
|
||||
included before `readline.h'.
|
||||
|
||||
* Menu:
|
||||
|
||||
* The Function Type:: C declarations to make code readable.
|
||||
|
@ -1356,7 +1388,9 @@ Readline Variables
|
|||
|
||||
- Variable: char * rl_line_buffer
|
||||
This is the line gathered so far. You are welcome to modify the
|
||||
contents of the line, but see *Note Allowing Undoing::.
|
||||
contents of the line, but see *Note Allowing Undoing::. The
|
||||
function `rl_extend_line_buffer' is available to increase the
|
||||
memory allocated to `rl_line_buffer'.
|
||||
|
||||
- Variable: int rl_point
|
||||
The offset of the current cursor position in `rl_line_buffer' (the
|
||||
|
@ -1389,6 +1423,15 @@ Readline Variables
|
|||
The prompt Readline uses. This is set from the argument to
|
||||
`readline ()', and should not be assigned to directly.
|
||||
|
||||
- Variable: int rl_already_prompted
|
||||
If an application wishes to display the prompt itself, rather than
|
||||
have Readline do it the first time `readline()' is called, it
|
||||
should set this variable to a non-zero value after displaying the
|
||||
prompt. The prompt must also be passed as the argument to
|
||||
`readline()' so the redisplay functions can update the display
|
||||
properly. The calling application is responsible for managing the
|
||||
value; Readline never sets it.
|
||||
|
||||
- Variable: char * rl_library_version
|
||||
The version number of this revision of the library.
|
||||
|
||||
|
@ -1546,6 +1589,13 @@ several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap',
|
|||
`emacs_standard_keymap' is the default, and the examples in this manual
|
||||
assume that.
|
||||
|
||||
Since `readline' installs a set of default key bindings the first
|
||||
time it is called, there is always the danger that a custom binding
|
||||
installed before the first call to `readline' will be overridden. An
|
||||
alternate mechanism is to install custom key bindings in an
|
||||
initialization function assigned to the `rl_startup_hook' variable
|
||||
(*note Readline Variables::.).
|
||||
|
||||
These functions manage key bindings.
|
||||
|
||||
- Function: int rl_bind_key (int key, Function *function)
|
||||
|
@ -1627,6 +1677,12 @@ functions and the functions invoked by a particular key sequence.
|
|||
Print the names of all bindable Readline functions to
|
||||
`rl_outstream'.
|
||||
|
||||
- Function: char ** rl_funmap_names ()
|
||||
Return a NULL terminated array of known function names. The array
|
||||
is sorted. The array itself is allocated, but not the strings
|
||||
inside. You should free () the array when you done, but not the
|
||||
pointrs.
|
||||
|
||||
|
||||
File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions
|
||||
|
||||
|
@ -1704,9 +1760,16 @@ Redisplay
|
|||
Readline thinks the screen display is correct.
|
||||
|
||||
- Function: int rl_on_new_line ()
|
||||
Tell the update routines that we have moved onto a new (empty)
|
||||
Tell the update functions that we have moved onto a new (empty)
|
||||
line, usually after ouputting a newline.
|
||||
|
||||
- Function: int rl_on_new_line_with_prompt ()
|
||||
Tell the update functions that we have moved onto a new line, with
|
||||
RL_PROMPT already displayed. This could be used by applications
|
||||
that want to output the prompt string themselves, but still need
|
||||
Readline to know the prompt string length for redisplay. It
|
||||
should be used after setting RL_ALREADY_PROMPTED.
|
||||
|
||||
- Function: int rl_reset_line_state ()
|
||||
Reset the display state to a clean state and redisplay the current
|
||||
line starting on a new line.
|
||||
|
@ -1759,7 +1822,7 @@ Utility Functions
|
|||
- Function: int rl_read_key ()
|
||||
Return the next character available. This handles input inserted
|
||||
into the input stream via PENDING INPUT (*note Readline
|
||||
Variables::.) and `rl_stuff_char ()', macros, and characters read
|
||||
Variables::.) and `rl_stuff_char ()', macros, and characters read
|
||||
from the keyboard.
|
||||
|
||||
- Function: int rl_getc (FILE *)
|
||||
|
@ -1770,7 +1833,7 @@ Utility Functions
|
|||
Readline attempts to read characters from the terminal with
|
||||
`rl_read_key ()'.
|
||||
|
||||
- Function: rl_extend_line_buffer (int len)
|
||||
- Function: int rl_extend_line_buffer (int len)
|
||||
Ensure that `rl_line_buffer' has enough space to hold LEN
|
||||
characters, possibly reallocating it if necessary.
|
||||
|
||||
|
@ -1779,7 +1842,9 @@ Utility Functions
|
|||
|
||||
- Function: int rl_reset_terminal (char *terminal_name)
|
||||
Reinitialize Readline's idea of the terminal settings using
|
||||
TERMINAL_NAME as the terminal type (e.g., `vt100').
|
||||
TERMINAL_NAME as the terminal type (e.g., `vt100'). If
|
||||
TERMINAL_NAME is NULL, the value of the `TERM' environment
|
||||
variable is used.
|
||||
|
||||
- Function: int alphabetic (int c)
|
||||
Return 1 if C is an alphabetic character.
|
||||
|
@ -2171,7 +2236,7 @@ Completion Variables
|
|||
|
||||
- Variable: Function * rl_completion_entry_function
|
||||
A pointer to the generator function for `completion_matches ()'.
|
||||
`NULL' means to use `filename_entry_function ()', the default
|
||||
`NULL' means to use `filename_completion_function ()', the default
|
||||
filename completer.
|
||||
|
||||
- Variable: CPPFunction * rl_attempted_completion_function
|
||||
|
@ -2779,7 +2844,6 @@ Function and Variable Index
|
|||
|
||||
* Menu:
|
||||
|
||||
* (: Utility Functions.
|
||||
* abort (C-g): Miscellaneous Commands.
|
||||
* accept-line (Newline, Return): Commands For History.
|
||||
* alphabetic: Utility Functions.
|
||||
|
@ -2862,6 +2926,7 @@ Function and Variable Index
|
|||
* revert-line (M-r): Miscellaneous Commands.
|
||||
* rl_add_defun: Function Naming.
|
||||
* rl_add_undo: Allowing Undoing.
|
||||
* rl_already_prompted: Readline Variables.
|
||||
* rl_attempted_completion_function: Completion Variables.
|
||||
* rl_basic_quote_characters: Completion Variables.
|
||||
* rl_basic_word_break_characters: Completion Variables.
|
||||
|
@ -2885,8 +2950,8 @@ Function and Variable Index
|
|||
* rl_completer_word_break_characters: Completion Variables.
|
||||
* rl_completion_append_character: Completion Variables.
|
||||
* rl_completion_display_matches_hook: Completion Variables.
|
||||
* rl_completion_entry_function <1>: How Completing Works.
|
||||
* rl_completion_entry_function: Completion Variables.
|
||||
* rl_completion_entry_function <1>: Completion Variables.
|
||||
* rl_completion_entry_function: How Completing Works.
|
||||
* rl_completion_query_items: Completion Variables.
|
||||
* rl_copy_keymap: Keymaps.
|
||||
* rl_copy_text: Modifying Text.
|
||||
|
@ -2901,6 +2966,7 @@ Function and Variable Index
|
|||
* rl_erase_empty_line: Readline Variables.
|
||||
* rl_event_hook: Readline Variables.
|
||||
* rl_executing_keymap: Readline Variables.
|
||||
* rl_extend_line_buffer: Utility Functions.
|
||||
* rl_filename_completion_desired: Completion Variables.
|
||||
* rl_filename_dequoting_function: Completion Variables.
|
||||
* rl_filename_quote_characters: Completion Variables.
|
||||
|
@ -2910,6 +2976,7 @@ Function and Variable Index
|
|||
* rl_free_line_state: Readline Signal Handling.
|
||||
* rl_function_dumper: Associating Function Names and Bindings.
|
||||
* rl_function_of_keyseq: Associating Function Names and Bindings.
|
||||
* rl_funmap_names: Associating Function Names and Bindings.
|
||||
* rl_generic_bind: Binding Keys.
|
||||
* rl_get_keymap: Keymaps.
|
||||
* rl_get_keymap_by_name: Keymaps.
|
||||
|
@ -2936,6 +3003,7 @@ Function and Variable Index
|
|||
* rl_modifying: Allowing Undoing.
|
||||
* rl_named_function: Associating Function Names and Bindings.
|
||||
* rl_on_new_line: Redisplay.
|
||||
* rl_on_new_line_with_prompt: Redisplay.
|
||||
* rl_outstream: Readline Variables.
|
||||
* rl_parse_and_bind: Binding Keys.
|
||||
* rl_pending_input: Readline Variables.
|
||||
|
@ -2991,49 +3059,49 @@ Tag Table:
|
|||
Node: Top1190
|
||||
Node: Command Line Editing1789
|
||||
Node: Introduction and Notation2440
|
||||
Node: Readline Interaction3479
|
||||
Node: Readline Bare Essentials4672
|
||||
Node: Readline Movement Commands6213
|
||||
Node: Readline Killing Commands7179
|
||||
Node: Readline Arguments8895
|
||||
Node: Searching9870
|
||||
Node: Readline Init File11583
|
||||
Node: Readline Init File Syntax12630
|
||||
Node: Conditional Init Constructs21837
|
||||
Node: Sample Init File24276
|
||||
Node: Bindable Readline Commands27446
|
||||
Node: Commands For Moving28197
|
||||
Node: Commands For History29045
|
||||
Node: Commands For Text31797
|
||||
Node: Commands For Killing33816
|
||||
Node: Numeric Arguments35966
|
||||
Node: Commands For Completion37093
|
||||
Node: Keyboard Macros38841
|
||||
Node: Miscellaneous Commands39400
|
||||
Node: Readline vi Mode42204
|
||||
Node: Programming with GNU Readline43974
|
||||
Node: Basic Behavior44942
|
||||
Node: Custom Functions48268
|
||||
Node: The Function Type48869
|
||||
Node: Function Writing49714
|
||||
Node: Readline Variables50798
|
||||
Node: Readline Convenience Functions54407
|
||||
Node: Function Naming55145
|
||||
Node: Keymaps56373
|
||||
Node: Binding Keys58087
|
||||
Node: Associating Function Names and Bindings60295
|
||||
Node: Allowing Undoing61873
|
||||
Node: Redisplay64458
|
||||
Node: Modifying Text65853
|
||||
Node: Utility Functions66764
|
||||
Node: Alternate Interface69448
|
||||
Node: Readline Signal Handling72742
|
||||
Node: Custom Completers77788
|
||||
Node: How Completing Works78503
|
||||
Node: Completion Functions81499
|
||||
Node: Completion Variables84514
|
||||
Node: A Short Completion Example92412
|
||||
Node: Concept Index104718
|
||||
Node: Function and Variable Index105472
|
||||
Node: Readline Interaction4058
|
||||
Node: Readline Bare Essentials5251
|
||||
Node: Readline Movement Commands7032
|
||||
Node: Readline Killing Commands7989
|
||||
Node: Readline Arguments9895
|
||||
Node: Searching10870
|
||||
Node: Readline Init File12713
|
||||
Node: Readline Init File Syntax13774
|
||||
Node: Conditional Init Constructs23039
|
||||
Node: Sample Init File25478
|
||||
Node: Bindable Readline Commands28648
|
||||
Node: Commands For Moving29692
|
||||
Node: Commands For History30541
|
||||
Node: Commands For Text33258
|
||||
Node: Commands For Killing35261
|
||||
Node: Numeric Arguments37228
|
||||
Node: Commands For Completion38355
|
||||
Node: Keyboard Macros40103
|
||||
Node: Miscellaneous Commands40662
|
||||
Node: Readline vi Mode43466
|
||||
Node: Programming with GNU Readline45236
|
||||
Node: Basic Behavior46204
|
||||
Node: Custom Functions49530
|
||||
Node: The Function Type50508
|
||||
Node: Function Writing51353
|
||||
Node: Readline Variables52437
|
||||
Node: Readline Convenience Functions56649
|
||||
Node: Function Naming57387
|
||||
Node: Keymaps58615
|
||||
Node: Binding Keys60329
|
||||
Node: Associating Function Names and Bindings62903
|
||||
Node: Allowing Undoing64746
|
||||
Node: Redisplay67331
|
||||
Node: Modifying Text69108
|
||||
Node: Utility Functions70019
|
||||
Node: Alternate Interface72799
|
||||
Node: Readline Signal Handling76093
|
||||
Node: Custom Completers81139
|
||||
Node: How Completing Works81854
|
||||
Node: Completion Functions84850
|
||||
Node: Completion Variables87865
|
||||
Node: A Short Completion Example95768
|
||||
Node: Concept Index108074
|
||||
Node: Function and Variable Index108828
|
||||
|
||||
End Tag Table
|
||||
|
|
File diff suppressed because it is too large
Load diff
BIN
readline/doc/rluserman.dvi
Normal file
BIN
readline/doc/rluserman.dvi
Normal file
Binary file not shown.
1566
readline/doc/rluserman.html
Normal file
1566
readline/doc/rluserman.html
Normal file
File diff suppressed because it is too large
Load diff
1189
readline/doc/rluserman.info
Normal file
1189
readline/doc/rluserman.info
Normal file
File diff suppressed because it is too large
Load diff
1897
readline/doc/rluserman.ps
Normal file
1897
readline/doc/rluserman.ps
Normal file
File diff suppressed because it is too large
Load diff
94
readline/doc/rluserman.texinfo
Normal file
94
readline/doc/rluserman.texinfo
Normal file
|
@ -0,0 +1,94 @@
|
|||
\input texinfo @c -*-texinfo-*-
|
||||
@comment %**start of header (This is for running Texinfo on a region.)
|
||||
@setfilename rluserman.info
|
||||
@settitle GNU Readline Library
|
||||
@comment %**end of header (This is for running Texinfo on a region.)
|
||||
@setchapternewpage odd
|
||||
|
||||
@include manvers.texinfo
|
||||
|
||||
@ifinfo
|
||||
@dircategory Libraries
|
||||
@direntry
|
||||
* Readline: (readline). The GNU readline library API
|
||||
@end direntry
|
||||
|
||||
This document describes the end user interface of the GNU Readline Library,
|
||||
a utility which aids in the consistency of user interface across discrete
|
||||
programs that need to provide a command line interface.
|
||||
|
||||
Copyright (C) 1988-1999 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
pare preserved on all copies.
|
||||
|
||||
@ignore
|
||||
Permission is granted to process this file through TeX and print the
|
||||
results, provided the printed document carries copying permission
|
||||
notice identical to this one except for the removal of this paragraph
|
||||
(this paragraph not being relevant to the printed manual).
|
||||
@end ignore
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by the Free Software Foundation.
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@title GNU Readline Library User Interface
|
||||
@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
|
||||
@subtitle @value{UPDATE-MONTH}
|
||||
@author Brian Fox, Free Software Foundation
|
||||
@author Chet Ramey, Case Western Reserve University
|
||||
|
||||
@page
|
||||
This document describes the end user interface of the GNU Readline Library,
|
||||
a utility which aids in the consistency of user interface across discrete
|
||||
programs that need to provide a command line interface.
|
||||
|
||||
Published by the Free Software Foundation @*
|
||||
59 Temple Place, Suite 330, @*
|
||||
Boston, MA 02111 USA
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by the Free Software Foundation.
|
||||
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1988-1999 Free Software Foundation, Inc.
|
||||
@end titlepage
|
||||
|
||||
@ifinfo
|
||||
@node Top
|
||||
@top GNU Readline Library
|
||||
|
||||
This document describes the end user interface of the GNU Readline Library,
|
||||
a utility which aids in the consistency of user interface across discrete
|
||||
programs that need to provide a command line interface.
|
||||
|
||||
@menu
|
||||
* Command Line Editing:: GNU Readline User's Manual.
|
||||
@end menu
|
||||
@end ifinfo
|
||||
|
||||
@include rluser.texinfo
|
||||
|
||||
@contents
|
||||
@bye
|
186
readline/examples/excallback.c
Normal file
186
readline/examples/excallback.c
Normal file
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
From: Jeff Solomon <jsolomon@stanford.edu>
|
||||
Date: Fri, 9 Apr 1999 10:13:27 -0700 (PDT)
|
||||
To: chet@po.cwru.edu
|
||||
Subject: new readline example
|
||||
Message-ID: <14094.12094.527305.199695@mrclean.Stanford.EDU>
|
||||
|
||||
Chet,
|
||||
|
||||
I've been using readline 4.0. Specifically, I've been using the perl
|
||||
version Term::ReadLine::Gnu. It works great.
|
||||
|
||||
Anyway, I've been playing around the alternate interface and I wanted
|
||||
to contribute a little C program, callback.c, to you that you could
|
||||
use as an example of the alternate interface in the /examples
|
||||
directory of the readline distribution.
|
||||
|
||||
My example shows how, using the alternate interface, you can
|
||||
interactively change the prompt (which is very nice imo). Also, I
|
||||
point out that you must roll your own terminal setting when using the
|
||||
alternate interface because readline depreps (using your parlance) the
|
||||
terminal while in the user callback. I try to demostrate what I mean
|
||||
with an example. I've included the program below.
|
||||
|
||||
To compile, I just put the program in the examples directory and made
|
||||
the appropriate changes to the EXECUTABLES and OBJECTS line and added
|
||||
an additional target 'callback'.
|
||||
|
||||
I compiled on my Sun Solaris2.6 box using Sun's cc.
|
||||
|
||||
Let me know what you think.
|
||||
|
||||
Jeff
|
||||
*/
|
||||
|
||||
#if defined (HAVE_CONFIG_H)
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <termios.h> /* xxx - should make this more general */
|
||||
|
||||
#ifdef READLINE_LIBRARY
|
||||
# include "readline.h"
|
||||
#else
|
||||
# include <readline/readline.h>
|
||||
#endif
|
||||
|
||||
/* This little examples demonstrates the alternate interface to using readline.
|
||||
* In the alternate interface, the user maintains control over program flow and
|
||||
* only calls readline when STDIN is readable. Using the alternate interface,
|
||||
* you can do anything else while still using readline (like talking to a
|
||||
* network or another program) without blocking.
|
||||
*
|
||||
* Specifically, this program highlights two importants features of the
|
||||
* alternate interface. The first is the ability to interactively change the
|
||||
* prompt, which can't be done using the regular interface since rl_prompt is
|
||||
* read-only.
|
||||
*
|
||||
* The second feature really highlights a subtle point when using the alternate
|
||||
* interface. That is, readline will not alter the terminal when inside your
|
||||
* callback handler. So let's so, your callback executes a user command that
|
||||
* takes a non-trivial amount of time to complete (seconds). While your
|
||||
* executing the command, the user continues to type keystrokes and expects them
|
||||
* to be re-echoed on the new prompt when it returns. Unfortunately, the default
|
||||
* terminal configuration doesn't do this. After the prompt returns, the user
|
||||
* must hit one additional keystroke and then will see all of his previous
|
||||
* keystrokes. To illustrate this, compile and run this program. Type "sleep" at
|
||||
* the prompt and then type "bar" before the prompt returns (you have 3
|
||||
* seconds). Notice how "bar" is re-echoed on the prompt after the prompt
|
||||
* returns? This is what you expect to happen. Now comment out the 4 lines below
|
||||
* the line that says COMMENT LINE BELOW. Recompile and rerun the program and do
|
||||
* the same thing. When the prompt returns, you should not see "bar". Now type
|
||||
* "f", see how "barf" magically appears? This behavior is un-expected and not
|
||||
* desired.
|
||||
*/
|
||||
|
||||
void process_line(char *line);
|
||||
int change_prompt(void);
|
||||
char *get_prompt(void);
|
||||
|
||||
int prompt = 1;
|
||||
char prompt_buf[40], line_buf[256];
|
||||
tcflag_t old_lflag;
|
||||
cc_t old_vtime;
|
||||
struct termios term;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
fd_set fds;
|
||||
|
||||
/* Adjust the terminal slightly before the handler is installed. Disable
|
||||
* canonical mode processing and set the input character time flag to be
|
||||
* non-blocking.
|
||||
*/
|
||||
if( tcgetattr(STDIN_FILENO, &term) < 0 ) {
|
||||
perror("tcgetattr");
|
||||
exit(1);
|
||||
}
|
||||
old_lflag = term.c_lflag;
|
||||
old_vtime = term.c_cc[VTIME];
|
||||
term.c_lflag &= ~ICANON;
|
||||
term.c_cc[VTIME] = 1;
|
||||
/* COMMENT LINE BELOW - see above */
|
||||
if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) {
|
||||
perror("tcsetattr");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
rl_add_defun("change-prompt", change_prompt, CTRL('t'));
|
||||
rl_callback_handler_install(get_prompt(), process_line);
|
||||
|
||||
while(1) {
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fileno(stdin), &fds);
|
||||
|
||||
if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) < 0) {
|
||||
perror("select");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if( FD_ISSET(fileno(stdin), &fds) ) {
|
||||
rl_callback_read_char();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
process_line(char *line)
|
||||
{
|
||||
if( line == NULL ) {
|
||||
fprintf(stderr, "\n", line);
|
||||
|
||||
/* reset the old terminal setting before exiting */
|
||||
term.c_lflag = old_lflag;
|
||||
term.c_cc[VTIME] = old_vtime;
|
||||
if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) {
|
||||
perror("tcsetattr");
|
||||
exit(1);
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if( strcmp(line, "sleep") == 0 ) {
|
||||
sleep(3);
|
||||
} else {
|
||||
fprintf(stderr, "|%s|\n", line);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
change_prompt(void)
|
||||
{
|
||||
/* toggle the prompt variable */
|
||||
prompt = !prompt;
|
||||
|
||||
/* save away the current contents of the line */
|
||||
strcpy(line_buf, rl_line_buffer);
|
||||
|
||||
/* install a new handler which will change the prompt and erase the current line */
|
||||
rl_callback_handler_install(get_prompt(), process_line);
|
||||
|
||||
/* insert the old text on the new line */
|
||||
rl_insert_text(line_buf);
|
||||
|
||||
/* redraw the current line - this is an undocumented function. It invokes the
|
||||
* redraw-current-line command.
|
||||
*/
|
||||
rl_refresh_line(0, 0);
|
||||
}
|
||||
|
||||
char *
|
||||
get_prompt(void)
|
||||
{
|
||||
/* The prompts can even be different lengths! */
|
||||
sprintf(prompt_buf, "%s",
|
||||
prompt ? "Hit ctrl-t to toggle prompt> " : "Pretty cool huh?> ");
|
||||
return prompt_buf;
|
||||
}
|
685
readline/examples/rlfe.c
Normal file
685
readline/examples/rlfe.c
Normal file
|
@ -0,0 +1,685 @@
|
|||
/* A front-end using readline to "cook" input lines for Kawa.
|
||||
*
|
||||
* Copyright (C) 1999 Per Bothner
|
||||
*
|
||||
* This front-end program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as published
|
||||
* by the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* Some code from Johnson & Troan: "Linux Application Development"
|
||||
* (Addison-Wesley, 1998) was used directly or for inspiration.
|
||||
*/
|
||||
|
||||
/* PROBLEMS/TODO:
|
||||
*
|
||||
* Only tested under Linux; needs to be ported.
|
||||
*
|
||||
* When running mc -c under the Linux console, mc does not recognize
|
||||
* mouse clicks, which mc does when not running under fep.
|
||||
*
|
||||
* Pasting selected text containing tabs is like hitting the tab character,
|
||||
* which invokes readline completion. We don't want this. I don't know
|
||||
* if this is fixable without integrating fep into a terminal emulator.
|
||||
*
|
||||
* Echo suppression is a kludge, but can only be avoided with better kernel
|
||||
* support: We need a tty mode to disable "real" echoing, while still
|
||||
* letting the inferior think its tty driver to doing echoing.
|
||||
* Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE.
|
||||
*
|
||||
* The latest readline may have some hooks we can use to avoid having
|
||||
* to back up the prompt.
|
||||
*
|
||||
* Desirable readline feature: When in cooked no-echo mode (e.g. password),
|
||||
* echo characters are they are types with '*', but remove them when done.
|
||||
*
|
||||
* A synchronous output while we're editing an input line should be
|
||||
* inserted in the output view *before* the input line, so that the
|
||||
* lines being edited (with the prompt) float at the end of the input.
|
||||
*
|
||||
* A "page mode" option to emulate more/less behavior: At each page of
|
||||
* output, pause for a user command. This required parsing the output
|
||||
* to keep track of line lengths. It also requires remembering the
|
||||
* output, if we want an option to scroll back, which suggests that
|
||||
* this should be integrated with a terminal emulator like xterm.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <signal.h>
|
||||
#include <netdb.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <grp.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <termios.h>
|
||||
|
||||
#ifdef READLINE_LIBRARY
|
||||
# include "readline.h"
|
||||
# include "history.h"
|
||||
#else
|
||||
# include <readline/readline.h>
|
||||
# include <readline/history.h>
|
||||
#endif
|
||||
|
||||
#ifndef COMMAND
|
||||
#define COMMAND "/bin/sh"
|
||||
#endif
|
||||
#ifndef COMMAND_ARGS
|
||||
#define COMMAND_ARGS COMMAND
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MEMMOVE
|
||||
# if __GNUC__ > 1
|
||||
# define memmove(d, s, n) __builtin_memcpy(d, s, n)
|
||||
# else
|
||||
# define memmove(d, s, n) memcpy(d, s, n)
|
||||
# endif
|
||||
#else
|
||||
# define memmove(d, s, n) memcpy(d, s, n)
|
||||
#endif
|
||||
|
||||
#define APPLICATION_NAME "Fep"
|
||||
|
||||
static int in_from_inferior_fd;
|
||||
static int out_to_inferior_fd;
|
||||
|
||||
/* Unfortunately, we cannot safely display echo from the inferior process.
|
||||
The reason is that the echo bit in the pty is "owned" by the inferior,
|
||||
and if we try to turn it off, we could confuse the inferior.
|
||||
Thus, when echoing, we get echo twice: First readline echoes while
|
||||
we're actually editing. Then we send the line to the inferior, and the
|
||||
terminal driver send back an extra echo.
|
||||
The work-around is to remember the input lines, and when we see that
|
||||
line come back, we supress the output.
|
||||
A better solution (supposedly available on SVR4) would be a smarter
|
||||
terminal driver, with more flags ... */
|
||||
#define ECHO_SUPPRESS_MAX 1024
|
||||
char echo_suppress_buffer[ECHO_SUPPRESS_MAX];
|
||||
int echo_suppress_start = 0;
|
||||
int echo_suppress_limit = 0;
|
||||
|
||||
#define DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
FILE *logfile = NULL;
|
||||
#define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile))
|
||||
#define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile))
|
||||
#define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile))
|
||||
#else
|
||||
#define DPRINT0(FMT) /* Do nothing */
|
||||
#define DPRINT1(FMT, V1) /* Do nothing */
|
||||
#define DPRINT2(FMT, V1, V2) /* Do nothing */
|
||||
#endif
|
||||
|
||||
struct termios orig_term;
|
||||
|
||||
/* Pid of child process. */
|
||||
static pid_t child = -1;
|
||||
|
||||
static void
|
||||
sig_child (int signo)
|
||||
{
|
||||
int status;
|
||||
wait (&status);
|
||||
DPRINT0 ("(Child process died.)\n");
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
volatile int propagate_sigwinch = 0;
|
||||
|
||||
/* sigwinch_handler
|
||||
* propagate window size changes from input file descriptor to
|
||||
* master side of pty.
|
||||
*/
|
||||
void sigwinch_handler(int signal) {
|
||||
propagate_sigwinch = 1;
|
||||
}
|
||||
|
||||
/* get_master_pty() takes a double-indirect character pointer in which
|
||||
* to put a slave name, and returns an integer file descriptor.
|
||||
* If it returns < 0, an error has occurred.
|
||||
* Otherwise, it has returned the master pty file descriptor, and fills
|
||||
* in *name with the name of the corresponding slave pty.
|
||||
* Once the slave pty has been opened, you are responsible to free *name.
|
||||
*/
|
||||
|
||||
int get_master_pty(char **name) {
|
||||
int i, j;
|
||||
/* default to returning error */
|
||||
int master = -1;
|
||||
|
||||
/* create a dummy name to fill in */
|
||||
*name = strdup("/dev/ptyXX");
|
||||
|
||||
/* search for an unused pty */
|
||||
for (i=0; i<16 && master <= 0; i++) {
|
||||
for (j=0; j<16 && master <= 0; j++) {
|
||||
(*name)[5] = 'p';
|
||||
(*name)[8] = "pqrstuvwxyzPQRST"[i];
|
||||
(*name)[9] = "0123456789abcdef"[j];
|
||||
/* open the master pty */
|
||||
if ((master = open(*name, O_RDWR)) < 0) {
|
||||
if (errno == ENOENT) {
|
||||
/* we are out of pty devices */
|
||||
free (*name);
|
||||
return (master);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* By substituting a letter, we change the master pty
|
||||
* name into the slave pty name.
|
||||
*/
|
||||
(*name)[5] = 't';
|
||||
if (access(*name, R_OK|W_OK) != 0)
|
||||
{
|
||||
close(master);
|
||||
master = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((master < 0) && (i == 16) && (j == 16)) {
|
||||
/* must have tried every pty unsuccessfully */
|
||||
free (*name);
|
||||
return (master);
|
||||
}
|
||||
|
||||
(*name)[5] = 't';
|
||||
|
||||
return (master);
|
||||
}
|
||||
|
||||
/* get_slave_pty() returns an integer file descriptor.
|
||||
* If it returns < 0, an error has occurred.
|
||||
* Otherwise, it has returned the slave file descriptor.
|
||||
*/
|
||||
|
||||
int get_slave_pty(char *name) {
|
||||
struct group *gptr;
|
||||
gid_t gid;
|
||||
int slave = -1;
|
||||
|
||||
/* chown/chmod the corresponding pty, if possible.
|
||||
* This will only work if the process has root permissions.
|
||||
* Alternatively, write and exec a small setuid program that
|
||||
* does just this.
|
||||
*/
|
||||
if ((gptr = getgrnam("tty")) != 0) {
|
||||
gid = gptr->gr_gid;
|
||||
} else {
|
||||
/* if the tty group does not exist, don't change the
|
||||
* group on the slave pty, only the owner
|
||||
*/
|
||||
gid = -1;
|
||||
}
|
||||
|
||||
/* Note that we do not check for errors here. If this is code
|
||||
* where these actions are critical, check for errors!
|
||||
*/
|
||||
chown(name, getuid(), gid);
|
||||
/* This code only makes the slave read/writeable for the user.
|
||||
* If this is for an interactive shell that will want to
|
||||
* receive "write" and "wall" messages, OR S_IWGRP into the
|
||||
* second argument below.
|
||||
*/
|
||||
chmod(name, S_IRUSR|S_IWUSR);
|
||||
|
||||
/* open the corresponding slave pty */
|
||||
slave = open(name, O_RDWR);
|
||||
return (slave);
|
||||
}
|
||||
|
||||
/* Certain special characters, such as ctrl/C, we want to pass directly
|
||||
to the inferior, rather than letting readline handle them. */
|
||||
|
||||
static char special_chars[20];
|
||||
static int special_chars_count;
|
||||
|
||||
static void
|
||||
add_special_char(int ch)
|
||||
{
|
||||
if (ch != 0)
|
||||
special_chars[special_chars_count++] = ch;
|
||||
}
|
||||
|
||||
static int eof_char;
|
||||
|
||||
static int
|
||||
is_special_char(int ch)
|
||||
{
|
||||
int i;
|
||||
#if 0
|
||||
if (ch == eof_char && rl_point == rl_end)
|
||||
return 1;
|
||||
#endif
|
||||
for (i = special_chars_count; --i >= 0; )
|
||||
if (special_chars[i] == ch)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char buf[1024];
|
||||
/* buf[0 .. buf_count-1] is the what has been emitted on the current line.
|
||||
It is used as the readline prompt. */
|
||||
static int buf_count = 0;
|
||||
|
||||
int num_keys = 0;
|
||||
|
||||
static void
|
||||
null_prep_terminal (int meta)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
null_deprep_terminal ()
|
||||
{
|
||||
}
|
||||
|
||||
char pending_special_char;
|
||||
|
||||
static void
|
||||
line_handler (char *line)
|
||||
{
|
||||
if (line == NULL)
|
||||
{
|
||||
char buf[1];
|
||||
DPRINT0("saw eof!\n");
|
||||
buf[0] = '\004'; /* ctrl/d */
|
||||
write (out_to_inferior_fd, buf, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
static char enter[] = "\r";
|
||||
/* Send line to inferior: */
|
||||
int length = strlen (line);
|
||||
if (length > ECHO_SUPPRESS_MAX-2)
|
||||
{
|
||||
echo_suppress_start = 0;
|
||||
echo_suppress_limit = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2)
|
||||
{
|
||||
if (echo_suppress_limit - echo_suppress_start + length
|
||||
<= ECHO_SUPPRESS_MAX - 2)
|
||||
{
|
||||
memmove (echo_suppress_buffer,
|
||||
echo_suppress_buffer + echo_suppress_start,
|
||||
echo_suppress_limit - echo_suppress_start);
|
||||
echo_suppress_limit -= echo_suppress_start;
|
||||
echo_suppress_start = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
echo_suppress_limit = 0;
|
||||
}
|
||||
echo_suppress_start = 0;
|
||||
}
|
||||
memcpy (echo_suppress_buffer + echo_suppress_limit,
|
||||
line, length);
|
||||
echo_suppress_limit += length;
|
||||
echo_suppress_buffer[echo_suppress_limit++] = '\r';
|
||||
echo_suppress_buffer[echo_suppress_limit++] = '\n';
|
||||
}
|
||||
write (out_to_inferior_fd, line, length);
|
||||
if (pending_special_char == 0)
|
||||
{
|
||||
write (out_to_inferior_fd, enter, sizeof(enter)-1);
|
||||
if (*line)
|
||||
add_history (line);
|
||||
}
|
||||
free (line);
|
||||
}
|
||||
rl_callback_handler_remove ();
|
||||
buf_count = 0;
|
||||
num_keys = 0;
|
||||
if (pending_special_char != 0)
|
||||
{
|
||||
write (out_to_inferior_fd, &pending_special_char, 1);
|
||||
pending_special_char = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Value of rl_getc_function.
|
||||
Use this because readline should read from stdin, not rl_instream,
|
||||
points to the pty (so readline has monitor its terminal modes). */
|
||||
|
||||
int
|
||||
my_rl_getc (FILE *dummy)
|
||||
{
|
||||
int ch = rl_getc (stdin);
|
||||
if (is_special_char (ch))
|
||||
{
|
||||
pending_special_char = ch;
|
||||
return '\r';
|
||||
}
|
||||
return ch;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
char *path;
|
||||
int i;
|
||||
int master;
|
||||
char *name;
|
||||
int in_from_tty_fd;
|
||||
struct sigaction act;
|
||||
struct winsize ws;
|
||||
struct termios t;
|
||||
int maxfd;
|
||||
fd_set in_set;
|
||||
static char empty_string[1] = "";
|
||||
char *prompt = empty_string;
|
||||
int ioctl_err = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
logfile = fopen("LOG", "w");
|
||||
#endif
|
||||
|
||||
rl_readline_name = APPLICATION_NAME;
|
||||
|
||||
if ((master = get_master_pty(&name)) < 0)
|
||||
{
|
||||
perror("ptypair: could not open master pty");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
DPRINT1("pty name: '%s'\n", name);
|
||||
|
||||
/* set up SIGWINCH handler */
|
||||
act.sa_handler = sigwinch_handler;
|
||||
sigemptyset(&(act.sa_mask));
|
||||
act.sa_flags = 0;
|
||||
if (sigaction(SIGWINCH, &act, NULL) < 0)
|
||||
{
|
||||
perror("ptypair: could not handle SIGWINCH ");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0)
|
||||
{
|
||||
perror("ptypair: could not get window size");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((child = fork()) < 0)
|
||||
{
|
||||
perror("cannot fork");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (child == 0)
|
||||
{
|
||||
int slave; /* file descriptor for slave pty */
|
||||
|
||||
/* We are in the child process */
|
||||
close(master);
|
||||
|
||||
#ifdef TIOCSCTTY
|
||||
if ((slave = get_slave_pty(name)) < 0)
|
||||
{
|
||||
perror("ptypair: could not open slave pty");
|
||||
exit(1);
|
||||
}
|
||||
free(name);
|
||||
#endif
|
||||
|
||||
/* We need to make this process a session group leader, because
|
||||
* it is on a new PTY, and things like job control simply will
|
||||
* not work correctly unless there is a session group leader
|
||||
* and process group leader (which a session group leader
|
||||
* automatically is). This also disassociates us from our old
|
||||
* controlling tty.
|
||||
*/
|
||||
if (setsid() < 0)
|
||||
{
|
||||
perror("could not set session leader");
|
||||
}
|
||||
|
||||
/* Tie us to our new controlling tty. */
|
||||
#ifdef TIOCSCTTY
|
||||
if (ioctl(slave, TIOCSCTTY, NULL))
|
||||
{
|
||||
perror("could not set new controlling tty");
|
||||
}
|
||||
#else
|
||||
if ((slave = get_slave_pty(name)) < 0)
|
||||
{
|
||||
perror("ptypair: could not open slave pty");
|
||||
exit(1);
|
||||
}
|
||||
free(name);
|
||||
#endif
|
||||
|
||||
/* make slave pty be standard in, out, and error */
|
||||
dup2(slave, STDIN_FILENO);
|
||||
dup2(slave, STDOUT_FILENO);
|
||||
dup2(slave, STDERR_FILENO);
|
||||
|
||||
/* at this point the slave pty should be standard input */
|
||||
if (slave > 2)
|
||||
{
|
||||
close(slave);
|
||||
}
|
||||
|
||||
/* Try to restore window size; failure isn't critical */
|
||||
if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0)
|
||||
{
|
||||
perror("could not restore window size");
|
||||
}
|
||||
|
||||
/* now start the shell */
|
||||
{
|
||||
static char* command_args[] = { COMMAND_ARGS, NULL };
|
||||
if (argc <= 1)
|
||||
execvp(COMMAND, command_args);
|
||||
else
|
||||
execvp(argv[1], &argv[1]);
|
||||
}
|
||||
|
||||
/* should never be reached */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* parent */
|
||||
signal (SIGCHLD, sig_child);
|
||||
free(name);
|
||||
|
||||
/* Note that we only set termios settings for standard input;
|
||||
* the master side of a pty is NOT a tty.
|
||||
*/
|
||||
tcgetattr(STDIN_FILENO, &orig_term);
|
||||
|
||||
t = orig_term;
|
||||
eof_char = t.c_cc[VEOF];
|
||||
/* add_special_char(t.c_cc[VEOF]);*/
|
||||
add_special_char(t.c_cc[VINTR]);
|
||||
add_special_char(t.c_cc[VQUIT]);
|
||||
add_special_char(t.c_cc[VSUSP]);
|
||||
#if defined (VDISCARD)
|
||||
add_special_char(t.c_cc[VDISCARD]);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
t.c_lflag |= (ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \
|
||||
ECHOK | ECHOKE | ECHONL | ECHOPRT );
|
||||
#else
|
||||
t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \
|
||||
ECHOK | ECHOKE | ECHONL | ECHOPRT );
|
||||
#endif
|
||||
t.c_iflag |= IGNBRK;
|
||||
t.c_cc[VMIN] = 1;
|
||||
t.c_cc[VTIME] = 0;
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &t);
|
||||
in_from_inferior_fd = master;
|
||||
out_to_inferior_fd = master;
|
||||
rl_instream = fdopen (master, "r");
|
||||
rl_getc_function = my_rl_getc;
|
||||
|
||||
rl_prep_term_function = null_prep_terminal;
|
||||
rl_deprep_term_function = null_deprep_terminal;
|
||||
rl_callback_handler_install (prompt, line_handler);
|
||||
|
||||
in_from_tty_fd = STDIN_FILENO;
|
||||
FD_ZERO (&in_set);
|
||||
maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd
|
||||
: in_from_tty_fd;
|
||||
for (;;)
|
||||
{
|
||||
int num;
|
||||
FD_SET (in_from_inferior_fd, &in_set);
|
||||
FD_SET (in_from_tty_fd, &in_set);
|
||||
|
||||
num = select(maxfd+1, &in_set, NULL, NULL, NULL);
|
||||
|
||||
if (propagate_sigwinch)
|
||||
{
|
||||
struct winsize ws;
|
||||
if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0)
|
||||
{
|
||||
ioctl (master, TIOCSWINSZ, &ws);
|
||||
}
|
||||
propagate_sigwinch = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (num <= 0)
|
||||
{
|
||||
perror ("select");
|
||||
exit (-1);
|
||||
}
|
||||
if (FD_ISSET (in_from_tty_fd, &in_set))
|
||||
{
|
||||
extern int readline_echoing_p;
|
||||
struct termios term_master;
|
||||
int do_canon = 1;
|
||||
int ioctl_ret;
|
||||
|
||||
DPRINT1("[tty avail num_keys:%d]\n", num_keys);
|
||||
|
||||
/* If we can't get tty modes for the master side of the pty, we
|
||||
can't handle non-canonical-mode programs. Always assume the
|
||||
master is in canonical echo mode if we can't tell. */
|
||||
ioctl_ret = tcgetattr(master, &term_master);
|
||||
|
||||
if (ioctl_ret >= 0)
|
||||
{
|
||||
DPRINT2 ("echo:%d, canon:%d\n",
|
||||
(term_master.c_lflag & ECHO) != 0,
|
||||
(term_master.c_lflag & ICANON) != 0);
|
||||
do_canon = (term_master.c_lflag & ICANON) != 0;
|
||||
readline_echoing_p = (term_master.c_lflag & ECHO) != 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ioctl_err == 0)
|
||||
DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno);
|
||||
ioctl_err = 1;
|
||||
}
|
||||
|
||||
if (do_canon == 0 && num_keys == 0)
|
||||
{
|
||||
char ch[10];
|
||||
int count = read (STDIN_FILENO, ch, sizeof(ch));
|
||||
write (out_to_inferior_fd, ch, count);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (num_keys == 0)
|
||||
{
|
||||
int i;
|
||||
/* Re-install callback handler for new prompt. */
|
||||
if (prompt != empty_string)
|
||||
free (prompt);
|
||||
prompt = malloc (buf_count + 1);
|
||||
if (prompt == NULL)
|
||||
prompt = empty_string;
|
||||
else
|
||||
{
|
||||
memcpy (prompt, buf, buf_count);
|
||||
prompt[buf_count] = '\0';
|
||||
DPRINT1("New prompt '%s'\n", prompt);
|
||||
#if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED -- doesn't work */
|
||||
rl_already_prompted = buf_count > 0;
|
||||
#else
|
||||
if (buf_count > 0)
|
||||
write (1, "\r", 1);
|
||||
#endif
|
||||
}
|
||||
rl_callback_handler_install (prompt, line_handler);
|
||||
}
|
||||
num_keys++;
|
||||
rl_callback_read_char ();
|
||||
}
|
||||
}
|
||||
else /* input from inferior. */
|
||||
{
|
||||
int i;
|
||||
int count;
|
||||
int old_count;
|
||||
if (buf_count > (sizeof(buf) >> 2))
|
||||
buf_count = 0;
|
||||
count = read (in_from_inferior_fd, buf+buf_count,
|
||||
sizeof(buf) - buf_count);
|
||||
if (count <= 0)
|
||||
{
|
||||
DPRINT0 ("(Connection closed by foreign host.)\n");
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
|
||||
exit (0);
|
||||
}
|
||||
old_count = buf_count;
|
||||
|
||||
/* Look for any pending echo that we need to suppress. */
|
||||
while (echo_suppress_start < echo_suppress_limit
|
||||
&& count > 0
|
||||
&& buf[buf_count] == echo_suppress_buffer[echo_suppress_start])
|
||||
{
|
||||
count--;
|
||||
buf_count++;
|
||||
echo_suppress_start++;
|
||||
}
|
||||
|
||||
/* Write to the terminal anything that was not suppressed. */
|
||||
if (count > 0)
|
||||
write (1, buf + buf_count, count);
|
||||
|
||||
/* Finally, look for a prompt candidate.
|
||||
* When we get around to going input (from the keyboard),
|
||||
* we will consider the prompt to be anything since the last
|
||||
* line terminator. So we need to save that text in the
|
||||
* initial part of buf. However, anything before the
|
||||
* most recent end-of-line is not interesting. */
|
||||
buf_count += count;
|
||||
#if 1
|
||||
for (i = buf_count; --i >= old_count; )
|
||||
#else
|
||||
for (i = buf_count - 1; i-- >= buf_count - count; )
|
||||
#endif
|
||||
{
|
||||
if (buf[i] == '\n' || buf[i] == '\r')
|
||||
{
|
||||
i++;
|
||||
memmove (buf, buf+i, buf_count - i);
|
||||
buf_count -= i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count);
|
||||
}
|
||||
}
|
||||
}
|
271
readline/rlprivate.h
Normal file
271
readline/rlprivate.h
Normal file
|
@ -0,0 +1,271 @@
|
|||
/* rlprivate.h -- functions and variables global to the readline library,
|
||||
but not intended for use by applications. */
|
||||
|
||||
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU Readline Library, a library for
|
||||
reading lines of text with interactive input and history editing.
|
||||
|
||||
The GNU Readline Library is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2, or
|
||||
(at your option) any later version.
|
||||
|
||||
The GNU Readline Library is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
The GNU General Public License is often shipped with GNU software, and
|
||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||
have a copy of the license, write to the Free Software Foundation,
|
||||
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||
|
||||
#if !defined (_RL_PRIVATE_H_)
|
||||
#define _RL_PRIVATE_H_
|
||||
|
||||
#include "rlconf.h" /* for VISIBLE_STATS */
|
||||
#include "rlstdc.h"
|
||||
#include "posixjmp.h" /* defines procenv_t */
|
||||
|
||||
/*************************************************************************
|
||||
* *
|
||||
* Global functions undocumented in texinfo manual and not in readline.h *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
/* terminal.c */
|
||||
extern char *rl_get_termcap __P((char *));
|
||||
|
||||
/*************************************************************************
|
||||
* *
|
||||
* Global variables undocumented in texinfo manual and not in readline.h *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
/* complete.c */
|
||||
extern int rl_complete_with_tilde_expansion;
|
||||
#if defined (VISIBLE_STATS)
|
||||
extern int rl_visible_stats;
|
||||
#endif /* VISIBLE_STATS */
|
||||
|
||||
/* readline.c */
|
||||
extern int rl_line_buffer_len;
|
||||
extern int rl_numeric_arg;
|
||||
extern int rl_arg_sign;
|
||||
extern int rl_explicit_arg;
|
||||
extern int rl_editing_mode;
|
||||
extern int rl_visible_prompt_length;
|
||||
extern Function *rl_last_func;
|
||||
extern int readline_echoing_p;
|
||||
extern int rl_key_sequence_length;
|
||||
|
||||
/* display.c */
|
||||
extern int rl_display_fixed;
|
||||
|
||||
/* parens.c */
|
||||
extern int rl_blink_matching_paren;
|
||||
|
||||
/*************************************************************************
|
||||
* *
|
||||
* Global functions and variables unsed and undocumented *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
/* bind.c */
|
||||
extern char *rl_untranslate_keyseq __P((int));
|
||||
|
||||
/* kill.c */
|
||||
extern int rl_set_retained_kills __P((int));
|
||||
|
||||
/* readline.c */
|
||||
extern int rl_discard_argument __P((void));
|
||||
|
||||
/* rltty.c */
|
||||
extern int rl_stop_output __P((int, int));
|
||||
|
||||
/* terminal.c */
|
||||
extern void _rl_set_screen_size __P((int, int));
|
||||
|
||||
/* undo.c */
|
||||
extern int _rl_fix_last_undo_of_type __P((int, int, int));
|
||||
|
||||
/* util.c */
|
||||
extern char *_rl_savestring __P((char *));
|
||||
|
||||
/*************************************************************************
|
||||
* *
|
||||
* Functions and variables private to the readline library *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
/* NOTE: Functions and variables prefixed with `_rl_' are
|
||||
pseudo-global: they are global so they can be shared
|
||||
between files in the readline library, but are not intended
|
||||
to be visible to readline callers. */
|
||||
|
||||
/*************************************************************************
|
||||
* Undocumented private functions *
|
||||
*************************************************************************/
|
||||
|
||||
#if defined(READLINE_CALLBACKS)
|
||||
|
||||
/* readline.c */
|
||||
extern void readline_internal_setup __P((void));
|
||||
extern char *readline_internal_teardown __P((int));
|
||||
extern int readline_internal_char __P((void));
|
||||
|
||||
#endif /* READLINE_CALLBACKS */
|
||||
|
||||
/* bind.c */
|
||||
extern void _rl_bind_if_unbound __P((char *, Function *));
|
||||
|
||||
/* display.c */
|
||||
extern char *_rl_strip_prompt __P((char *));
|
||||
extern void _rl_move_cursor_relative __P((int, char *));
|
||||
extern void _rl_move_vert __P((int));
|
||||
extern void _rl_save_prompt __P((void));
|
||||
extern void _rl_restore_prompt __P((void));
|
||||
extern char *_rl_make_prompt_for_search __P((int));
|
||||
extern void _rl_erase_at_end_of_line __P((int));
|
||||
extern void _rl_clear_to_eol __P((int));
|
||||
extern void _rl_clear_screen __P((void));
|
||||
extern void _rl_update_final __P((void));
|
||||
extern void _rl_redisplay_after_sigwinch __P((void));
|
||||
extern void _rl_clean_up_for_exit __P((void));
|
||||
extern void _rl_erase_entire_line __P((void));
|
||||
extern int _rl_currentb_display_line __P((void));
|
||||
|
||||
/* input.c */
|
||||
extern int _rl_any_typein __P((void));
|
||||
extern int _rl_input_available __P((void));
|
||||
extern void _rl_insert_typein __P((int));
|
||||
|
||||
/* macro.c */
|
||||
extern void _rl_with_macro_input __P((char *));
|
||||
extern int _rl_next_macro_key __P((void));
|
||||
extern void _rl_push_executing_macro __P((void));
|
||||
extern void _rl_pop_executing_macro __P((void));
|
||||
extern void _rl_add_macro_char __P((int));
|
||||
extern void _rl_kill_kbd_macro __P((void));
|
||||
|
||||
/* nls.c */
|
||||
extern int _rl_init_eightbit __P((void));
|
||||
|
||||
/* parens.c */
|
||||
extern void _rl_enable_paren_matching __P((int));
|
||||
|
||||
/* readline.c */
|
||||
extern void _rl_init_line_state __P((void));
|
||||
extern void _rl_set_the_line __P((void));
|
||||
extern int _rl_dispatch __P((int, Keymap));
|
||||
extern int _rl_init_argument __P((void));
|
||||
extern void _rl_fix_point __P((int));
|
||||
extern void _rl_replace_text __P((char *, int, int));
|
||||
extern int _rl_char_search_internal __P((int, int, int));
|
||||
extern int _rl_set_mark_at_pos __P((int));
|
||||
|
||||
/* rltty.c */
|
||||
extern int _rl_disable_tty_signals __P((void));
|
||||
extern int _rl_restore_tty_signals __P((void));
|
||||
|
||||
/* terminal.c */
|
||||
extern void _rl_get_screen_size __P((int, int));
|
||||
extern int _rl_init_terminal_io __P((char *));
|
||||
#ifdef _MINIX
|
||||
extern void _rl_output_character_function __P((int));
|
||||
#else
|
||||
extern int _rl_output_character_function __P((int));
|
||||
#endif
|
||||
extern void _rl_output_some_chars __P((char *, int));
|
||||
extern int _rl_backspace __P((int));
|
||||
extern void _rl_enable_meta_key __P((void));
|
||||
extern void _rl_control_keypad __P((int));
|
||||
|
||||
/* util.c */
|
||||
extern int alphabetic __P((int));
|
||||
extern int _rl_abort_internal __P((void));
|
||||
extern char *_rl_strindex __P((char *, char *));
|
||||
extern int _rl_qsort_string_compare __P((char **, char **));
|
||||
extern int (_rl_uppercase_p) __P((int));
|
||||
extern int (_rl_lowercase_p) __P((int));
|
||||
extern int (_rl_pure_alphabetic) __P((int));
|
||||
extern int (_rl_digit_p) __P((int));
|
||||
extern int (_rl_to_lower) __P((int));
|
||||
extern int (_rl_to_upper) __P((int));
|
||||
extern int (_rl_digit_value) __P((int));
|
||||
|
||||
/* vi_mode.c */
|
||||
extern void _rl_vi_initialize_line __P((void));
|
||||
extern void _rl_vi_reset_last __P((void));
|
||||
extern void _rl_vi_set_last __P((int, int, int));
|
||||
extern int _rl_vi_textmod_command __P((int));
|
||||
extern void _rl_vi_done_inserting __P((void));
|
||||
|
||||
/*************************************************************************
|
||||
* Undocumented private variables *
|
||||
*************************************************************************/
|
||||
|
||||
/* complete.c */
|
||||
extern int _rl_complete_show_all;
|
||||
extern int _rl_complete_mark_directories;
|
||||
extern int _rl_print_completions_horizontally;
|
||||
extern int _rl_completion_case_fold;
|
||||
|
||||
/* display.c */
|
||||
extern int _rl_vis_botlin;
|
||||
extern int _rl_last_c_pos;
|
||||
extern int _rl_suppress_redisplay;
|
||||
extern char *rl_display_prompt;
|
||||
|
||||
/* funmap.c */
|
||||
extern char *possible_control_prefixes[];
|
||||
extern char *possible_meta_prefixes[];
|
||||
|
||||
/* isearch.c */
|
||||
extern unsigned char *_rl_isearch_terminators;
|
||||
|
||||
/* macro.c */
|
||||
extern int _rl_defining_kbd_macro;
|
||||
extern char *_rl_executing_macro;
|
||||
|
||||
/* readline.c */
|
||||
extern int _rl_horizontal_scroll_mode;
|
||||
extern int _rl_mark_modified_lines;
|
||||
extern int _rl_bell_preference;
|
||||
extern int _rl_meta_flag;
|
||||
extern int _rl_convert_meta_chars_to_ascii;
|
||||
extern int _rl_output_meta_chars;
|
||||
extern char *_rl_comment_begin;
|
||||
extern unsigned char _rl_parsing_conditionalized_out;
|
||||
extern Keymap _rl_keymap;
|
||||
extern FILE *_rl_in_stream;
|
||||
extern FILE *_rl_out_stream;
|
||||
extern int _rl_last_command_was_kill;
|
||||
extern int _rl_eof_char;
|
||||
extern procenv_t readline_top_level;
|
||||
|
||||
/* terminal.c */
|
||||
extern int _rl_enable_keypad;
|
||||
extern int _rl_enable_meta;
|
||||
extern char *term_clreol;
|
||||
extern char *term_clrpag;
|
||||
extern char *term_im;
|
||||
extern char *term_ic;
|
||||
extern char *term_ei;
|
||||
extern char *term_DC;
|
||||
extern char *term_up;
|
||||
extern char *term_dc;
|
||||
extern char *term_cr;
|
||||
extern char *term_IC;
|
||||
extern int screenheight;
|
||||
extern int screenwidth;
|
||||
extern int screenchars;
|
||||
extern int terminal_can_insert;
|
||||
extern int _rl_term_autowrap;
|
||||
|
||||
/* undo.c */
|
||||
extern int _rl_doing_an_undo;
|
||||
extern int _rl_undo_group_level;
|
||||
|
||||
#endif /* _RL_PRIVATE_H_ */
|
34
readline/rlshell.h
Normal file
34
readline/rlshell.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* rlshell.h -- utility functions normally provided by bash. */
|
||||
|
||||
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU Readline Library, a library for
|
||||
reading lines of text with interactive input and history editing.
|
||||
|
||||
The GNU Readline Library is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2, or
|
||||
(at your option) any later version.
|
||||
|
||||
The GNU Readline Library is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
The GNU General Public License is often shipped with GNU software, and
|
||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||
have a copy of the license, write to the Free Software Foundation,
|
||||
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||
|
||||
#if !defined (_RL_SHELL_H_)
|
||||
#define _RL_SHELL_H_
|
||||
|
||||
#include "rlstdc.h"
|
||||
|
||||
extern char *single_quote __P((char *));
|
||||
extern void set_lines_and_columns __P((int, int));
|
||||
extern char *get_env_value __P((char *));
|
||||
extern char *get_home_dir __P((void));
|
||||
extern int unset_nodelay_mode __P((int));
|
||||
|
||||
#endif /* _RL_SHELL_H_ */
|
46
readline/xmalloc.h
Normal file
46
readline/xmalloc.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/* xmalloc.h -- memory allocation that aborts on errors. */
|
||||
|
||||
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU Readline Library, a library for
|
||||
reading lines of text with interactive input and history editing.
|
||||
|
||||
The GNU Readline Library is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2, or
|
||||
(at your option) any later version.
|
||||
|
||||
The GNU Readline Library is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
The GNU General Public License is often shipped with GNU software, and
|
||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||
have a copy of the license, write to the Free Software Foundation,
|
||||
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||
|
||||
#if !defined (_XMALLOC_H_)
|
||||
#define _XMALLOC_H_
|
||||
|
||||
#if defined (READLINE_LIBRARY)
|
||||
# include "rlstdc.h"
|
||||
#else
|
||||
# include <readline/rlstdc.h>
|
||||
#endif
|
||||
|
||||
#ifndef PTR_T
|
||||
|
||||
#ifdef __STDC__
|
||||
# define PTR_T void *
|
||||
#else
|
||||
# define PTR_T char *
|
||||
#endif
|
||||
|
||||
#endif /* !PTR_T */
|
||||
|
||||
extern char *xmalloc __P((int));
|
||||
extern char *xrealloc __P((void *, int));
|
||||
extern void xfree __P((void *));
|
||||
|
||||
#endif /* _XMALLOC_H_ */
|
Loading…
Reference in a new issue