2000-10-13 09:47:34 +00:00
|
|
|
\input texinfo @c -*-texinfo-*-
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@c "@(#)$Name: $:$Id: eshell.texi,v 1.2 2000/10/13 10:32:23 johnw Exp $"
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@c Documentation for Eshell: The Emacs Shell.
|
|
|
|
@c Copyright (C) 1999-2000 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
@c This file is part of GNU Emacs
|
|
|
|
|
|
|
|
@c GNU Emacs is free software; you can redistribute it and/or modify it
|
|
|
|
@c under the terms of the GNU General Public License as published by the
|
|
|
|
@c Free Software Foundation; either version 2 of the License, or (at
|
|
|
|
@c your option) any later version.
|
|
|
|
|
|
|
|
@c GNU Emacs is distributed in the hope that it will be useful, but
|
|
|
|
@c WITHOUT ANY WARRANTY; without even the implied warraonty of
|
|
|
|
@c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
@c General Public License for more details.
|
|
|
|
|
|
|
|
@c You should have received a copy of the GNU General Public License
|
|
|
|
@c along with Eshell; see the file COPYING. If not, write to the Free
|
|
|
|
@c Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
|
|
|
|
@c %**start of header
|
|
|
|
@setfilename ../info/eshell
|
|
|
|
@settitle Eshell: The Emacs Shell
|
|
|
|
@c %**end of header
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@dircategory Emacs
|
2000-10-13 09:47:34 +00:00
|
|
|
@direntry
|
|
|
|
* Eshell: (eshell). A command shell implemented in Emacs Lisp.
|
|
|
|
@end direntry
|
|
|
|
@setchapternewpage on
|
|
|
|
|
|
|
|
@ifinfo
|
|
|
|
Copyright @copyright{} 1999-2000 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
@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 also that the
|
|
|
|
section entitled ``GNU General Public License'' is included exactly as
|
|
|
|
in the original, and 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 the section entitled ``GNU General Public License'' and this
|
|
|
|
permission notice may be included in translations approved by the Free
|
|
|
|
Software Foundation instead of in the original English.
|
|
|
|
@end ifinfo
|
|
|
|
|
|
|
|
@synindex vr fn
|
|
|
|
@c The titlepage section does not appear in the Info file.
|
|
|
|
@titlepage
|
|
|
|
@sp 4
|
|
|
|
@c The title is printed in a large font.
|
|
|
|
@center @titlefont{User's Guide}
|
|
|
|
@sp
|
|
|
|
@center @titlefont{to}
|
|
|
|
@sp
|
|
|
|
@center @titlefont{Eshell: The Emacs Shell}
|
|
|
|
@ignore
|
|
|
|
@sp 2
|
|
|
|
@center release 2.3.2
|
|
|
|
@c -release-
|
|
|
|
@end ignore
|
|
|
|
@sp 3
|
|
|
|
@center John Wiegley
|
|
|
|
@c -date-
|
|
|
|
|
|
|
|
@c The following two commands start the copyright page for the printed
|
|
|
|
@c manual. This will not appear in the Info file.
|
|
|
|
@page
|
|
|
|
@vskip 0pt plus 1filll
|
|
|
|
Copyright @copyright{} 1999-2000 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
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 also that the
|
|
|
|
section entitled ``GNU General Public License'' is included exactly as
|
|
|
|
in the original, and 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 the section entitled ``GNU General Public License'' and this
|
|
|
|
permission notice may be included in translations approved by the Free
|
|
|
|
Software Foundation instead of in the original English.
|
|
|
|
@end titlepage
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@contents
|
|
|
|
|
2000-10-13 09:47:34 +00:00
|
|
|
@c ================================================================
|
|
|
|
@c The real text starts here
|
|
|
|
@c ================================================================
|
|
|
|
|
|
|
|
@node Top, What is Eshell?, (dir), (dir)
|
|
|
|
@ifinfo
|
|
|
|
@top Eshell
|
|
|
|
|
|
|
|
This manual documents Eshell, a shell-like command interpretor
|
|
|
|
implemented entirely in Emacs Lisp. It invokes no external processes
|
|
|
|
beyond those requested by the user. It is intended to be a functional
|
|
|
|
replacement for command shells such as @command{bash}, @command{zsh},
|
|
|
|
@command{rc}, @command{4dos}; since Emacs itself is capable of handling
|
|
|
|
most of the tasks accomplished by such tools.
|
|
|
|
@c This manual is updated to release 2.3.2 of Eshell.
|
|
|
|
@end ifinfo
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* What is Eshell?:: A brief introduction to the Emacs Shell.
|
2000-10-16 18:24:30 +00:00
|
|
|
* Installation::
|
2000-10-13 09:47:34 +00:00
|
|
|
* Bugs and ideas::
|
2000-10-16 18:24:30 +00:00
|
|
|
* Concept Index::
|
|
|
|
* Function and Variable Index::
|
|
|
|
* Key Index::
|
2000-10-13 09:47:34 +00:00
|
|
|
@end menu
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node What is Eshell?, Installation, Top, Top
|
2000-10-13 09:47:34 +00:00
|
|
|
@chapter What is Eshell?
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex what is Eshell?
|
|
|
|
@cindex Eshell, what it is
|
2000-10-13 09:47:34 +00:00
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
Eshell is a @dfn{command shell} written using Emacs Lisp. All of what it does
|
2000-10-13 09:47:34 +00:00
|
|
|
it uses Emacs' facilities to do. This means Eshell is as portable as
|
|
|
|
Emacs itself. It also means that cooperation with other Lisp code is
|
|
|
|
natural and seamless.
|
|
|
|
|
|
|
|
So what is a command shell? To properly understand the role of a shell,
|
|
|
|
it's necessary to visualize what a computer does for you. Basically, a
|
|
|
|
computer is a tool; in order to use that tool, you must tell it what to
|
|
|
|
do---or give it ``commands''. These commands take many forms, such as
|
|
|
|
clicking with a mouse on certain parts of the screen. But that is only
|
|
|
|
one form of command input.
|
|
|
|
|
|
|
|
By far the most versatile way to express what you want the computer to
|
2000-10-16 18:24:30 +00:00
|
|
|
do is using an abbreviated language, called @dfn{a script}. In a
|
|
|
|
script, instead
|
2000-10-13 09:47:34 +00:00
|
|
|
of telling the computer, ``list my files, please'', we write just
|
|
|
|
``list''. In fact, this command is so commonly used that we abbreviate
|
2000-10-16 18:24:30 +00:00
|
|
|
it to ``ls''. Typing @kbd{ls} in a command shell is a script way of
|
2000-10-13 09:47:34 +00:00
|
|
|
telling the computer to list your files. This is comparable to viewing
|
|
|
|
the contents of a folder using a graphical display.
|
|
|
|
|
|
|
|
The real flexibility is apparent only when you realize that there are
|
|
|
|
many, many ways to list your files. Perhaps you want them sorted by
|
|
|
|
name, or sorted by date, or in reverse order, or grouped by type. Most
|
|
|
|
graphical browsers have simple ways to express this. But what about
|
|
|
|
showing only a few files, or only files that meet a certain criteria?
|
|
|
|
In very complex and specific situations, the request becomes too
|
|
|
|
difficult to express with a mouse. It is just these kinds of requests
|
|
|
|
that are solvable using a command shell.
|
|
|
|
|
|
|
|
For example, what if you want to list every Word file on your hard
|
|
|
|
drive, larger than 100 kilobytes in size, and which hasn't been looked
|
|
|
|
at in over six months? That is a good candidate list for deletion, when
|
|
|
|
you go to clean up your hard drive. But have you ever tried asking your
|
|
|
|
computer for such a list? There is no way to do it! At least, not
|
|
|
|
without using a command shell.
|
|
|
|
|
|
|
|
So the role of a command shell is to give you more control over what
|
|
|
|
your computer does for you. Not everyone needs this amount of control,
|
|
|
|
and it does come at a cost: Learning the necessary script commands to
|
|
|
|
express what you want done. A complicated query, such as the example
|
|
|
|
above, takes time to learn. But if you find yourself using your
|
|
|
|
computer frequently enough, it is more than worthwhile in the long run.
|
|
|
|
Any tool you use often deserves your time in learning to master it.
|
|
|
|
@footnote{For the understandably curious, here is what that command
|
|
|
|
looks like: But don't let it fool you; once you know what's going on,
|
|
|
|
it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.}
|
|
|
|
|
|
|
|
As of Emacs 21, Eshell is part of the standard Emacs distribution.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Contributors to Eshell::
|
|
|
|
@end menu
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node Contributors to Eshell, , What is Eshell?, What is Eshell?
|
2000-10-13 09:47:34 +00:00
|
|
|
@section Contributors to Eshell
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex contributors
|
|
|
|
@cindex authors
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
Contributions to Eshell are welcome. I have limited time to work on
|
|
|
|
this project, but I will gladly add any code you contribute to me to
|
|
|
|
this package.
|
|
|
|
|
|
|
|
The following persons have made contributions to Eshell.
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
Eli Zaretskii made it possible for Eshell to run without requiring
|
|
|
|
asynchronous subprocess support. This is important for MS-DOS, which
|
|
|
|
does not have such support.@refill
|
|
|
|
|
|
|
|
@item
|
|
|
|
Miles Bader contributed many fixes during the port to Emacs 21.@refill
|
|
|
|
|
|
|
|
@item
|
|
|
|
Stefan Monnier fixed the things which bothered him, which of course made
|
|
|
|
things better for all.@refill
|
|
|
|
|
|
|
|
@item
|
|
|
|
Gerd Moellmann also helped to contribute bug fixes during the initial
|
|
|
|
integration with Emacs 21.@refill
|
|
|
|
|
|
|
|
@item
|
|
|
|
Alex Schroeder contributed code for interactively querying the user
|
|
|
|
before overwriting files.@refill
|
|
|
|
|
|
|
|
@item
|
|
|
|
Sudish Joseph helped with some XEmacs compatibility issues.@refill
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
Apart from these, a lot of people have sent suggestions, ideas,
|
|
|
|
requests, bug reports and encouragement. Thanks a lot! Without you
|
|
|
|
there would be no new releases of Eshell.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node Installation, Bugs and ideas, What is Eshell?, Top
|
|
|
|
@chapter Installation
|
|
|
|
@cindex installation
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
As mentioned above, Eshell comes preinstalled since Emacs 21. If you're
|
|
|
|
using Emacs 20.4 or later, or XEmacs 21, you can download the most
|
|
|
|
recent version of Eshell from
|
2000-10-13 10:32:23 +00:00
|
|
|
@url{http://www.gci-net.com/users/j/johnw/Emacs/eshell.tar.gz}.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
If you are using Emacs 21, please skip this section.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@section Short Form
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
Here's exactly what to do, with no explanation why:
|
|
|
|
|
|
|
|
@enumerate
|
2000-10-16 18:24:30 +00:00
|
|
|
@item
|
|
|
|
@samp{M-x load-file RET eshell-auto.el RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{ESC : (add-to-list 'load-path "<path where Eshell resides>") RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{ESC : (add-to-list 'load-path "<path where Pcomplete resides>") RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{M-x eshell RET}.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
You should see a version banner displayed.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@item
|
|
|
|
@samp{ls RET}.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
Confirm that you see a file listing.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@item
|
|
|
|
@samp{eshell-test RET}.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
Confirm that everything runs correctly. Use @kbd{M-x eshell-report-bug} if
|
2000-10-13 09:47:34 +00:00
|
|
|
not.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@item
|
|
|
|
@samp{cd $@{dirname (locate-library "eshell-auto")@} RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{find-file Makefile RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Edit the Makefile to reflect your site.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{M-x eshell RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{make install RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{find-file $user-init-file RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Add the following lines to your @file{.emacs} file:
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@example
|
|
|
|
(add-to-list 'load-path "<directory where you install Eshell>")
|
|
|
|
(load "eshell-auto")
|
|
|
|
@end example
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@item
|
|
|
|
@samp{M-x eshell RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{customize-option #'eshell-modules-list RET}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Select the extension modules you prefer.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Restart Emacs!
|
|
|
|
|
|
|
|
@item
|
|
|
|
@samp{M-x info RET m Eshell RET}.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
Read the manual and enjoy!
|
|
|
|
@end enumerate
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@section Long Form
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@enumerate
|
|
|
|
@item
|
|
|
|
Before building and installing Eshell, it is important to test that it
|
2000-10-16 18:24:30 +00:00
|
|
|
will work properly on your system. To do this, first load the file
|
2000-10-13 09:47:34 +00:00
|
|
|
@file{eshell-auto}, which will define certain autoloads required to run
|
|
|
|
Eshell. This can be done using the command @kbd{M-x load-file}, and
|
|
|
|
then selecting the file @file{eshell-auto.el}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
In order for Emacs to find Eshell's files, the Eshell directory must be
|
|
|
|
added to the @code{load-path} variable. This can be done within Emacs by
|
|
|
|
typing:
|
|
|
|
|
|
|
|
@example
|
|
|
|
ESC : (add-to-list 'load-path "<path where Eshell resides>") RET
|
|
|
|
ESC : (add-to-list 'load-path "<path where Pcomplete resides>") RET
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@item
|
|
|
|
Start Eshell from the distributed sources, using default settings, by
|
|
|
|
typing @kbd{M-x eshell}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Verify that Eshell is functional by typing @command{ls} followed by
|
2000-10-16 18:24:30 +00:00
|
|
|
@key{RET}. You should have already seen a version banner announcing the
|
2000-10-13 09:47:34 +00:00
|
|
|
version number of this release, followed by a prompt.
|
|
|
|
|
|
|
|
@item
|
2000-10-16 18:24:30 +00:00
|
|
|
Run the test suite by typing @command{eshell-test} followed by @key{RET}
|
2000-10-13 09:47:34 +00:00
|
|
|
in the Eshell buffer. It is important that Emacs be left alone while
|
|
|
|
the tests are running, since extraneous command input may cause some of
|
|
|
|
the tests to fail (they were never intended to run in the background).
|
|
|
|
If all of the tests pass, Eshell should work just fine on your system.
|
|
|
|
If any of the tests fail, please send e-mail to the Eshell maintainer
|
|
|
|
using the command @kbd{M-x eshell-report-bug}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Edit the file @file{Makefile} in the directory containing the Eshell
|
|
|
|
sources to reflect the location of certain Emacs dircetories at your
|
|
|
|
site. The only things you really have to change are the definitions of
|
|
|
|
@code{lispdir} and @code{infodir}. The elisp files will be copied to
|
|
|
|
@code{lispdir}, and the info file to @code{infodir}.
|
|
|
|
|
|
|
|
@item
|
2000-10-16 18:24:30 +00:00
|
|
|
Type @kbd{make install} in the directory containing the Eshell sources.
|
|
|
|
This will byte-compile all of the @file{*.el} files and copy both the
|
2000-10-13 09:47:34 +00:00
|
|
|
source and compiled versions to the directories specified in the
|
|
|
|
previous step. It will also copy the info file, and add a corresponding
|
2000-10-16 18:24:30 +00:00
|
|
|
entry to your @file{dir} file----if the program @code{install-info} can
|
|
|
|
be found on your system.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
If you only want to create the compiled elisp files, but don't want to
|
2000-10-16 18:24:30 +00:00
|
|
|
install them, you can type just @kbd{make} instead.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@item
|
|
|
|
Add the directory into which Eshell was installed to your
|
|
|
|
@code{load-path} variable. This can be done by adding the following
|
|
|
|
line to your @file{.emacs} file:
|
|
|
|
|
|
|
|
@example
|
|
|
|
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/eshell")
|
|
|
|
@end example
|
|
|
|
|
|
|
|
The actual directory on your system may differ.
|
|
|
|
|
|
|
|
@item
|
|
|
|
To install Eshell privately, edit your @file{.emacs} file; to install
|
|
|
|
Eshell site-wide, edit the file @file{site-start.el} in your
|
|
|
|
@file{site-lisp} directory (usually
|
|
|
|
@file{/usr/local/share/emacs/site-lisp} or something similar). In
|
|
|
|
either case enter the following line into the appropriate file:
|
|
|
|
|
|
|
|
@example
|
|
|
|
(load "eshell-auto")
|
|
|
|
@end example
|
|
|
|
|
|
|
|
@item
|
|
|
|
Restart Emacs. After restarting, customize the variable
|
|
|
|
@code{eshell-modules-list}. This variable selects which Eshell
|
|
|
|
extension modules you want to use. You will find documentation on each
|
|
|
|
of those modules in the Info manual.
|
|
|
|
@end enumerate
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex documentation, printed version
|
|
|
|
@cindex printed version of documentation
|
2000-10-13 09:47:34 +00:00
|
|
|
If you have @TeX{} installed at your site, you can make a typeset manual
|
|
|
|
from @file{eshell.texi}.
|
|
|
|
|
|
|
|
@enumerate
|
|
|
|
@item
|
2000-10-16 18:24:30 +00:00
|
|
|
Run @TeX{} by typing @kbd{texi2dvi eshell.texi}. (With Emacs 21.1 or
|
|
|
|
later, typing @kbd{make eshell.dvi} in the @file{man/} subdirectory of
|
|
|
|
the Emacs source distribution will do that.)
|
|
|
|
|
2000-10-13 09:47:34 +00:00
|
|
|
@item
|
|
|
|
Convert the resulting device independent file @file{eshell.dvi} to a
|
|
|
|
form which your printer can output and print it. If you have a
|
2000-10-16 18:24:30 +00:00
|
|
|
postscript printer, there is a program, @code{dvi2ps}, which does that; there
|
2000-10-13 09:47:34 +00:00
|
|
|
is also a program which comes together with @TeX{}, @code{dvips}, which
|
2000-10-16 18:24:30 +00:00
|
|
|
you can use. For other printers, use a suitable DVI driver,
|
|
|
|
e.g., @code{dvilj4} for LaserJet-compatible printers.
|
2000-10-13 09:47:34 +00:00
|
|
|
@end enumerate
|
|
|
|
|
|
|
|
@c @node Forming commands, Known problems, What is Eshell?, Top
|
|
|
|
@c @chapter Forming commands
|
|
|
|
|
|
|
|
@c A command shell is nothing more than a place to enter commands.
|
|
|
|
|
|
|
|
@c What is a command?
|
|
|
|
|
|
|
|
@c A command is piece of ``script''---or special shorthand
|
|
|
|
@c language---that the computer can understand.
|
|
|
|
|
|
|
|
@c What does script look like?
|
|
|
|
|
|
|
|
@c Script is an extremely simplified language. Oddly enough, this
|
|
|
|
@c actually makes it look more complicated than it is. Whereas normal
|
|
|
|
@c languages can use many different embellishments, the form of a script
|
|
|
|
@c command is always: a command verb, following by its arguments.
|
|
|
|
|
|
|
|
@c A verb? Arguments?
|
|
|
|
|
|
|
|
@c The verb is the thing you want your computer to do. There are a set
|
|
|
|
@c number of verbs, although this number is quite large. On my
|
|
|
|
@c computer, it reaches almost 1400 in number! But of course, only a
|
|
|
|
@c handful of these are necessary most of the time.
|
|
|
|
|
|
|
|
@c Sometimes, the verb is all that's necessary. A verb is always a
|
|
|
|
@c single word, usually related to the task it will perform.
|
|
|
|
@c @command{reboot} is a good example. Entering that will cause your
|
|
|
|
@c computer to reboot, assuming you have sufficient privileges.
|
|
|
|
|
|
|
|
@c Other verbs need more information. These are usually very capable of
|
|
|
|
@c verbs, but they must be told more specifically what to do. This
|
|
|
|
@c extra information is given in the form of arguments. Arguments are
|
|
|
|
@c also words, that appear after the verb. For example, @command{echo}
|
|
|
|
@c is a command verb that will print back to you whatever you say.
|
|
|
|
@c @command{echo} requires a set of arguments, to know what you want it
|
|
|
|
@c to echo! So a proper use of echo might look like:
|
|
|
|
|
|
|
|
@c @example
|
|
|
|
@c echo This is an example of using echo!
|
|
|
|
@c @end example
|
|
|
|
|
|
|
|
@c This command would result in the computer printing back to you,
|
|
|
|
@c ``This is an example of using echo!''. Pretty easy, no?
|
|
|
|
|
|
|
|
@c Although commands are always simple words, arguments can take
|
|
|
|
@c different forms. There are textual arguments, numeric arguments,
|
|
|
|
@c even Lisp arguments. Distinguishing among these different types of
|
|
|
|
@c arguments requires some special typing, because the computer needs
|
|
|
|
@c very specific directions to understand what you mean.
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node Bugs and ideas, Concept Index, Installation, Top
|
2000-10-13 09:47:34 +00:00
|
|
|
@chapter Bugs and ideas
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex reporting bugs and ideas
|
|
|
|
@cindex bugs, how to report them
|
|
|
|
@cindex author, how to reach
|
|
|
|
@cindex email to the author
|
2000-10-13 09:47:34 +00:00
|
|
|
@cindex FAQ
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex problems, list of common
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
If you find a bug or misfeature, don't hesitate to let me know! Send
|
2000-10-16 18:24:30 +00:00
|
|
|
email to @email{johnw@@gnu.org}. Feature requests should also be sent
|
2000-10-13 09:47:34 +00:00
|
|
|
there. I prefer discussing one thing at a time. If you find several
|
|
|
|
unrelated bugs, please report them separately.
|
|
|
|
|
|
|
|
If you have ideas for improvements, or if you have written some
|
|
|
|
extensions to this package, I would like to hear from you. I hope you
|
|
|
|
find this package useful!
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Known problems::
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Known problems, , Bugs and ideas, Bugs and ideas
|
|
|
|
@section Known problems
|
2000-10-16 18:24:30 +00:00
|
|
|
@cindex known bugs
|
|
|
|
@cindex bugs, known
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
Below is a partial list of currently known problems with Eshell version
|
2000-10-16 18:24:30 +00:00
|
|
|
2.3.2, which is the version distributed with Emacs 21.1.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@table @asis
|
|
|
|
@item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} fails
|
|
|
|
|
|
|
|
In fact, piping to a process from a looping construct doesn't work in
|
|
|
|
general. If I change the call to @code{eshell-copy-handles} in
|
|
|
|
@code{eshell-rewrite-for-command} to use @code{eshell-protect}, it seems
|
|
|
|
to work, but the output occurs after the prompt is displayed. The whole
|
|
|
|
structured command thing is too complicated at present.
|
|
|
|
|
|
|
|
@item Error with @command{bc} in @code{eshell-test}
|
|
|
|
|
|
|
|
On some XEmacs system, the subprocess interaction test fails
|
2000-10-16 18:24:30 +00:00
|
|
|
inexplicably, although @command{bc} works fine at the command prompt.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@item @command{ls} in remote directories sometimes fails
|
|
|
|
|
|
|
|
For XEmacs users, using @command{ls} in a remote directory sometimes
|
|
|
|
fails. The reason why has not yet been found.
|
|
|
|
|
|
|
|
@item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+
|
|
|
|
|
|
|
|
In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that
|
|
|
|
multiple instances of the @file{*Help*} buffer can exist.
|
|
|
|
|
|
|
|
@item Pcomplete sometimes gets stuck
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
You press @key{TAB}, but no completions appear, even though the
|
|
|
|
directory has matching files. This behavior is rare.
|
2000-10-13 09:47:34 +00:00
|
|
|
|
|
|
|
@item @samp{grep python $<rpm -qa>} doesn't work, but using @samp{*grep} does
|
|
|
|
|
|
|
|
This happens because the @code{grep} Lisp function returns immediately,
|
|
|
|
and then the asynchronous @command{grep} process expects to examine the
|
|
|
|
temporary file, which has since been deleted.
|
|
|
|
|
|
|
|
@item Problem with C-r repeating text
|
|
|
|
|
|
|
|
If the text @emph{before point} reads "./run", and you type @kbd{C-r r u
|
|
|
|
n}, it will repeat the line for every character typed.
|
|
|
|
|
|
|
|
@item Backspace doesn't scroll back after continuing (in smart mode)
|
|
|
|
|
|
|
|
Hitting space during a process invocation, such as @command{make}, will
|
|
|
|
cause it to track the bottom of the output; but backspace no longer
|
|
|
|
scrolls back.
|
|
|
|
|
|
|
|
@item It's not possible to fully @code{unload-feature} Eshell
|
|
|
|
|
|
|
|
@item Menu support was removed, but never put back
|
|
|
|
|
|
|
|
@item Using C-p and C-n with rebind gets into a locked state
|
|
|
|
|
|
|
|
This happened a few times in Emacs 21, but has been unreproducable
|
|
|
|
since.
|
|
|
|
|
|
|
|
@item If an interactive process is currently running, @kbd{M-!} doesn't work
|
|
|
|
|
|
|
|
@item Use a timer instead of @code{sleep-for} when killing child processes
|
|
|
|
|
|
|
|
@item Piping to a Lisp function is not supported
|
|
|
|
|
|
|
|
Make it so that the Lisp command on the right of the pipe is repeatedly
|
|
|
|
called with the input strings as arguments. This will require changing
|
|
|
|
eshell-do-pipeline to handle non-process targets.
|
|
|
|
|
|
|
|
@item Input redirection is not supported
|
|
|
|
|
|
|
|
See the entry above.
|
|
|
|
|
|
|
|
@c @item problem running "less" without argument on Windows
|
|
|
|
@c Before running telnet, I noticed that 'less' (for example) was already
|
|
|
|
@c configured as a visual command. So I invoked it from eshell to see what
|
|
|
|
@c would happen.
|
|
|
|
@c
|
|
|
|
@c Here's the result in the eshell buffer:
|
|
|
|
@c
|
|
|
|
@c Spawning child process: invalid argument
|
|
|
|
@c
|
|
|
|
@c Also a new 'less' buffer was created with nothing in it .. (presumably this
|
|
|
|
@c holds the output of less)
|
|
|
|
@c
|
|
|
|
@c If I run 'less.exe' from the eshell command line, I get the output I expect
|
|
|
|
@c simply written to the buffer.
|
|
|
|
@c
|
|
|
|
@c Note that I'm using FSF NT-Emacs 20.6.1 on Win2000. The term.el package and
|
|
|
|
@c the supplied shell both seem to use the 'cmdproxy' program to run things
|
|
|
|
@c like shells.
|
|
|
|
@c @item implement -r, -n and -s switches for cp
|
|
|
|
@c @item Make M-5 eshell -> switch to *eshell<5>*, creating it if need be
|
|
|
|
@c @item mv DIR FILE.tar does not remove directories
|
|
|
|
@c This is because the tar option --remove-files doesn't do so. Should
|
|
|
|
@c it be Eshell's job?
|
|
|
|
@c @item Write an article about Eshell for the LinuxWorld journal.
|
|
|
|
@c @item bind standard-output and standard-error, so that if a Lisp function
|
|
|
|
@c calls `print', everything will happen as it should (albeit slowly)
|
|
|
|
@c @item when the extension modules fail to load, cd / gives a Lisp error
|
|
|
|
@c @item if a globbing patterns returns only one match, should it still be a
|
|
|
|
@c list?
|
|
|
|
@c @item make sure that the syntax table correctly in eshell mode
|
|
|
|
@c So that M-DEL acts in a predictable manner, etc.
|
|
|
|
@c @item allow all Eshell buffers to share the same history and list-dir
|
|
|
|
@c @item error with script commands and outputting to /dev/null
|
|
|
|
@c If a script file, somewhere in the middle, does a "> /dev/null",
|
|
|
|
@c output from all subsequent commands will be swallowed
|
|
|
|
@c @item split up parsing of the text after a $ in eshell-var
|
|
|
|
@c Similar to way that eshell-arg is structured. Then add parsing of
|
|
|
|
@c $[?\n]
|
|
|
|
@c @item after pressing M-RET, redisplay before running the next command
|
|
|
|
@c @item argument predicates and modifiers should work anywhere in a path
|
|
|
|
@c /usr/local/src/editors/vim $ vi **/CVS(/)/Root(.)
|
|
|
|
@c Invalid regexp: "Unmatched ( or \\("
|
|
|
|
@c
|
|
|
|
@c with zsh, the glob above expands to all files named Root in
|
|
|
|
@c directories named CVS.
|
|
|
|
@c @item typing "echo ${locate locate}/bin<tab>" results in a Lisp error
|
|
|
|
@c Perhaps it should interpolate all permutations, and make that the
|
|
|
|
@c globbing result, since otherwise hitting return here will result in
|
|
|
|
@c "(list of filenames)/bin", which is never very valuable. Thus, one
|
|
|
|
@c could cat only c backup files by using "ls ${identity *.c}~". In that
|
|
|
|
@c case, having an alias command name `glob' for `identity' would be
|
|
|
|
@c useful
|
|
|
|
@c @item for XEmacs on Win32, fix `file-name-all-completions'
|
|
|
|
@c Make sure it returns directory names terminated by
|
|
|
|
@c `directory-sep-char' (which is initialized to be ?/), rather than
|
|
|
|
@c backslash
|
|
|
|
@c @item once symbolic mode is supported for umask, implement chmod in Lisp
|
|
|
|
@c @item create `eshell-expand-file-name'
|
|
|
|
@c Which uses a data table to transform things like "~+", "...", etc
|
|
|
|
@c @item abstract `eshell-smart.el' into `smart-scroll.el'
|
|
|
|
@c It only really needs: to be hooked onto the output filter and the
|
|
|
|
@c pre-command hook, and to have the input-end and input-start markers.
|
|
|
|
@c And to know whether the last output group was "successful".
|
|
|
|
@c @item allow for fully persisting the state of Eshell
|
|
|
|
@c vars, history, buffer, input, dir stack, etc.
|
|
|
|
@c @item implement D in the predicate list
|
|
|
|
@c It means that files beginning with a dot should be included in the
|
|
|
|
@c glob match
|
|
|
|
@c @item a comma in a predicate list means OR
|
|
|
|
@c @item error if a glob doesn't expand due to a predicate
|
|
|
|
@c An error should be generated only if `eshell-error-if-no-glob' is
|
|
|
|
@c non-nil
|
|
|
|
@c @item the following doesn't cause an indent-according-to-mode to occur
|
|
|
|
@c (+ RET SPC TAB
|
|
|
|
@c @item create `eshell-auto-accumulate-list'
|
|
|
|
@c It is a list of commands for which, if the user presses RET, the text
|
|
|
|
@c gets staged as the next Eshell command, rather than being sent to the
|
|
|
|
@c current interactive
|
|
|
|
@c @item display file and line number if an error occurs in a script
|
|
|
|
@c @item wait doesn't work with process ids at the moment
|
|
|
|
@c @item enable the direct-to-process input code in eshell-term.el
|
|
|
|
@c @item problem with repeating "echo ${find /tmp}"
|
|
|
|
@c With smart display active, if I hold down RET, after a while it can't
|
|
|
|
@c keep up anymore and starts outputting blank lines. It only happens if
|
|
|
|
@c an asynchronous process is involved...
|
|
|
|
@c
|
|
|
|
@c I think the problem is that `eshell-send-input' is resetting the input
|
|
|
|
@c target location, so that if the asynchronous process is not done by
|
|
|
|
@c the time the next RET is received, the input processor thinks that the
|
|
|
|
@c input is meant for the process; which, because smart display is
|
|
|
|
@c enabled, will be the text of the last command line! That is a bug in
|
|
|
|
@c itself.
|
|
|
|
@c
|
|
|
|
@c In holding down RET while an asynchronous process is running, there
|
|
|
|
@c will be a point in between termination of the process, and the running
|
|
|
|
@c of eshell-post-command-hook, which would cause `eshell-send-input' to
|
|
|
|
@c call `eshell-copy-old-input', and then process that text as a command
|
|
|
|
@c to be run after the process. Perhaps there should be a way of killing
|
|
|
|
@c pending input between the death of the process, and the
|
|
|
|
@c post-command-hook.
|
|
|
|
@c @item allow for a more aggressive smart display mode
|
|
|
|
@c Perhaps toggled by a command, that makes each output block a smart
|
|
|
|
@c display block
|
|
|
|
@c @item create more meta variables
|
|
|
|
@c $! -- the reason for the failure of the last disk command, or the text
|
|
|
|
@c of the last Lisp error
|
|
|
|
@c
|
|
|
|
@c $= -- a special associate array, which can take references of the form
|
|
|
|
@c $=[REGEXP]. It also indexes into the directory ring
|
|
|
|
@c @item eshell scripts can't execute in the background
|
|
|
|
@c @item support zsh's "Parameter Expansion" syntax, i.e. ${NAME:-VAL}
|
|
|
|
@c @item write an `info' alias that can take arguments
|
|
|
|
@c So that the user can enter "info chmod"
|
|
|
|
@c @item split off more generic code from Eshell
|
|
|
|
@c parse-args.el --- parse a list of arguments
|
|
|
|
@c interpolate.el --- interpolate $variable $(lisp)... references
|
|
|
|
@c interp.el --- find which interpretor to run a script with
|
|
|
|
@c sh-ring.el --- extend ring.el for persistant, searchable history
|
|
|
|
@c zsh-glob.el --- zsh-style globbing and predicate/modifiers
|
|
|
|
@c smartdisp.el --- smart scrolling in input buffers
|
|
|
|
@c egetopt.el --- `eshell-eval-using-options'
|
|
|
|
@c prompt.el --- code for outputting and navigating prompts
|
|
|
|
@c cmd-rebind.el --- rebind certain keys in the input text
|
|
|
|
@c unix.el --- provides Lispish UNIX command, such as unix-rm, etc.
|
|
|
|
@c emacs-ls.el --- implementation of ls in Emacs Lisp
|
|
|
|
@c texidoc.el
|
|
|
|
@c pushd.el --- implementation of pushd/popd in Lisp
|
|
|
|
@c interface.el -- a mode for reading command-line input from the user
|
|
|
|
@c @item create a mode `eshell-browse'
|
|
|
|
@c It would treat the Eshell buffer as a outline. Collapsing the outline
|
|
|
|
@c hides all of the output text. Collapsing again would show only the
|
|
|
|
@c first command run in each directory
|
|
|
|
@c @item look through the Korn Shell book for feature ideas
|
|
|
|
@c @item allow other version of a file to be referenced by "file{rev}"
|
|
|
|
@c This would be expanded by `eshell-expand-file-name'
|
|
|
|
@c @item print "You have new mail" when the "Mail" icon gets turned on
|
|
|
|
@c @item implement M-|
|
|
|
|
@c @item implement input redirection
|
|
|
|
@c If it's a lisp function, input redirection implies "xargs" (in a
|
|
|
|
@c way..). And if input redirection is added, don't forget to update the
|
|
|
|
@c file-name-quote-list, and the delimiter list.
|
|
|
|
@c @item allow #<WORD ARG> to be a generic syntax
|
|
|
|
@c With the handling of "word" specified by an `eshell-special-alist'.
|
|
|
|
@c @item in `eval-using-options', have a :complete tag
|
|
|
|
@c It would be used to provide completion rules for that command. Then
|
|
|
|
@c the macro will automagically define the completion function
|
|
|
|
@c @item for `eshell-command-on-region', redirections apply to the result
|
|
|
|
@c So that "+ > 'blah" will cause the result of the `+' (using input from
|
|
|
|
@c the current region) to be inserting in the symbol `blah'.
|
|
|
|
@c
|
|
|
|
@c If a disk command is being invoked, the input is sent as standard
|
|
|
|
@c input, as if a "cat <region> |" were invoked.
|
|
|
|
@c
|
|
|
|
@c If a lisp command, or an alias, is invoked, then: if the line has no
|
|
|
|
@c ^J characters, it is divided by whitespace and passed as arguments to
|
|
|
|
@c the lisp function. Otherwise, it is divided at the ^J characters.
|
|
|
|
@c Thus, invoking `+' on a series of numbers will add them; `min' would
|
|
|
|
@c display the smallest figure.
|
|
|
|
@c @item write `eshell-script-mode' as a minor mode
|
|
|
|
@c It would provide syntax, abbrev, highlighting and indenting support
|
|
|
|
@c like emacs-lisp-mode + shell-mode.
|
|
|
|
@c @item in the history mechanism, finish bash-style support
|
|
|
|
@c For !n, !#, !:%, and !:1- as separate from !:1*
|
|
|
|
@c @item support the -n command line option for "history"
|
|
|
|
@c @item implement `fc'
|
|
|
|
@c @item specifying a frame as a redirection target implies point's buffer
|
|
|
|
@c @item implement ">FUNC-OR-FUNC-LIST"
|
|
|
|
@c This would allow for an "output translator", that takes a function to
|
|
|
|
@c modify output with, and the target. Devise a syntax that words well
|
|
|
|
@c with pipes, and can accomodate multiple functions (i.e.,">'(upcase
|
|
|
|
@c regexp-quote)" or ">'upcase").
|
|
|
|
@c @item allow Eshell to read/write to/from standard input and output
|
|
|
|
@c This would be optional, rather than always using the Eshell buffer.
|
|
|
|
@c This would allow it to be run from the command line.
|
|
|
|
@c @item write a "help" command
|
|
|
|
@c It could even call subcommands with "--help" (or "-h" or "/?").
|
|
|
|
@c @item implement stty
|
|
|
|
@c @item support rc's matching operator, "~ (list) regexp"
|
|
|
|
@c @item implement "bg" and "fg" to edit `eshell-process-list'
|
|
|
|
@c Using "bg" on a process that is already in the background does
|
|
|
|
@c nothing. Specifying redirection targets replaces (or adds) to the
|
|
|
|
@c list current being used.
|
|
|
|
@c @item have "jobs" print only the processes for the current eshell
|
|
|
|
@c @item how do I discover that a background process has requested input?
|
|
|
|
@c @item support 2>&1 and >& and 2> and |&
|
|
|
|
@c The syntax table for parsing these should be customizable, such that
|
|
|
|
@c the user could change it to use rc syntax: >[2=1].
|
|
|
|
@c @item allow $_[-1], which reads the last element of the array, etc.
|
|
|
|
@c @item make $x[*] equal to listing out the full contents of x
|
|
|
|
@c Return them as a list, so that $_[*] is all the arguments of the last
|
|
|
|
@c command.
|
|
|
|
@c @item move ANSI code handling from `term' into `eshell-term'
|
|
|
|
@c And make it possible for the user to send char-by-char to the
|
|
|
|
@c underlying process. Ultimately, I should be able to move away from
|
|
|
|
@c using term.el altogether, since everything but the ANSI code handling
|
|
|
|
@c is already part of Eshell. Then, things would work correctly on Win32
|
|
|
|
@c as well (which doesn't have "/bin/sh", though term tries to use it)
|
|
|
|
@c @item have other shell spawning commands be visual
|
|
|
|
@c Make (su, bash, telnet, rlogin, rsh, etc.) be part of
|
|
|
|
@c `eshell-visual-commands'. The only exception is if rsh/su/bash are
|
|
|
|
@c simply being used to invoke a single command. Then, it should be
|
|
|
|
@c based on what that command is.
|
|
|
|
@c @item create an alias "open"
|
|
|
|
@c This will search for some way to open its argument (similar to opening
|
|
|
|
@c a file in the Windows Explorer). Perhaps using ffap...
|
|
|
|
@c @item alias "read" to be the same as "open", except read-only
|
|
|
|
@c @item write a "tail -f" alias which does a view-file
|
|
|
|
@c I.e., it moves point to the end of the buffer, and then turns on
|
|
|
|
@c auto-revert mode in that buffer at frequent intervals -- and a head
|
|
|
|
@c alias which assums an upper limit of `eshell-maximum-line-length'
|
|
|
|
@c characters per line.
|
|
|
|
@c @item make dgrep load dired, mark everything, then execute the A binding
|
|
|
|
@c @item write emsh.c
|
|
|
|
@c It just runs Emacs with the appropriate arguments to invoke eshell.
|
|
|
|
@c That way, it could be listed as a login shell.
|
|
|
|
@c @item use an intangible PS2 string for multi-line input prompts
|
|
|
|
@c @item auto-detect when a command is visual, by checking TERMCAP usage
|
|
|
|
@c @item First keypress after M-x watson triggers `eshell-send-input'
|
|
|
|
@c @item Emacs 20.3: Figure out why pcomplete won't make
|
|
|
|
@c @item Make / electric
|
|
|
|
@c So that it automatically expands and corrects pathnames. Or make
|
|
|
|
@c pathname completion for pcomplete auto-expand "/u/i/std<TAB>" to
|
|
|
|
@c "/usr/include/std<TAB>".
|
|
|
|
@c @item Write pushd/popd out to disk along with last-dir-ring
|
|
|
|
@c @item add options to eshell/cat which would cause it to sort and uniq
|
|
|
|
@c @item implement in Lisp: wc. Also count sentences, paragraphs, pages.
|
|
|
|
@c @item once piping is added, implement sort and uniq
|
|
|
|
@c @item implement touch
|
|
|
|
@c @item implement epatch
|
|
|
|
@c Calls ediff-patch-file, or ediff-patch-buffer, depending on its
|
|
|
|
@c argument.
|
|
|
|
@c @item have an option for bringing up ls -l result in a dired buffer
|
|
|
|
@c @item write a version of xargs that's based on command rewriting
|
|
|
|
@c find X | xargs Y == Y ${find X}. Maybe I could change
|
|
|
|
@c eshell-do-pipelines to perform this on-thy-fly rewriting.
|
|
|
|
@c @item implement head and tail in Lisp
|
|
|
|
@c @item write an alias for less and more that brings up a view buffer
|
|
|
|
@c Such that they can press SPC and DEL, and then q to return to eshell.
|
|
|
|
@c The more command would be equivalent to: X > #<buffer Y>; view-buffer
|
|
|
|
@c #<buffer Y>
|
|
|
|
@c @item differentiate between aliases and functions
|
|
|
|
@c Allow for a bash-compatible syntax, such as:
|
|
|
|
@c
|
|
|
|
@c alias arg=blah
|
|
|
|
@c function arg () { blah $* }
|
|
|
|
@c @item find the various references to shell-mode within Emacs
|
|
|
|
@c And add support for Eshell there, since now Eshell is going to be part
|
|
|
|
@c of Emacs.
|
|
|
|
@c @item permit umask to be set on a cp target during the cp command
|
|
|
|
@c @item if the first thing that I do after I enter Emacs
|
|
|
|
@c is to run eshell-command and invoke ls, and then I use M-x eshell, it
|
|
|
|
@c doesn't show me anything.
|
|
|
|
@c @item M-RET during a long command doesn't quite work
|
|
|
|
@c Since it keeps the cursor up where the command was invoked.
|
|
|
|
@end table
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node Concept Index, Function and Variable Index, Bugs and ideas, Top
|
2000-10-13 09:47:34 +00:00
|
|
|
@unnumbered Concept Index
|
|
|
|
|
|
|
|
@printindex cp
|
|
|
|
|
2000-10-16 18:24:30 +00:00
|
|
|
@node Function and Variable Index, Key Index, Concept Index, Top
|
|
|
|
@unnumbered Function and Variable Index
|
|
|
|
|
|
|
|
@printindex fn
|
|
|
|
|
|
|
|
@node Key Index, , Function and Variable Index, Top
|
2000-10-13 09:47:34 +00:00
|
|
|
@unnumbered Key Index
|
|
|
|
|
|
|
|
@printindex ky
|
|
|
|
@bye
|