Mercurial > emacs
changeset 32450:99899af1ec94
Added the beginnings of proper Eshell documentation.
author | John Wiegley <johnw@newartisans.com> |
---|---|
date | Fri, 13 Oct 2000 09:47:34 +0000 |
parents | 0abae260f337 |
children | b09ded79f0f9 |
files | man/ChangeLog man/Makefile.in man/eshell.texi |
diffstat | 3 files changed, 814 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/man/ChangeLog Fri Oct 13 09:35:36 2000 +0000 +++ b/man/ChangeLog Fri Oct 13 09:47:34 2000 +0000 @@ -1,3 +1,10 @@ +2000-10-13 John Wiegley <johnw@gnu.org> + + * Makefile.in: Added build targets for eshell.texi. + + * eshell.texi: New file. Note that this file is only just + beginning. It's based heavily on the structure of pcl-cvs.texi. + 2000-10-04 Miles Bader <miles@lsi.nec.co.jp> * emacs.texi (Top): Update version in `Antinews' menu entry.
--- a/man/Makefile.in Fri Oct 13 09:35:36 2000 +0000 +++ b/man/Makefile.in Fri Oct 13 09:47:34 2000 +0000 @@ -18,12 +18,12 @@ ../info/sc ../info/vip ../info/viper ../info/widget \ ../info/efaq ../info/ada-mode ../info/autotype \ ../info/idlwave ../info/eudc ../info/ebrowse ../info/pcl-cvs \ - ../info/woman ../info/emacs-mime + ../info/woman ../info/emacs-mime ../info/eshell DVI_TARGETS = emacs.dvi cc-mode.dvi cl.dvi dired-x.dvi \ ediff.dvi forms.dvi gnus.dvi message.dvi mh-e.dvi \ reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ - pcl-cvs.dvi woman.dvi emacs-mime.dvi + pcl-cvs.dvi woman.dvi emacs-mime.dvi eshell.dvi INFOSOURCES = info.texi info-stnd.texi # The following rule does not work with all versions of `make'. @@ -111,6 +111,11 @@ pcl-cvs.dvi: pcl-cvs.texi $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi +../info/eshell: eshell.texi + cd $(srcdir); $(MAKEINFO) eshell.texi +eshell.dvi: eshell.texi + $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi + ../info/cl: cl.texi cd $(srcdir); $(MAKEINFO) cl.texi cl.dvi: cl.texi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/eshell.texi Fri Oct 13 09:47:34 2000 +0000 @@ -0,0 +1,800 @@ +\input texinfo @c -*-texinfo-*- + +@c "@(#)$Name: $:$Id: $" + +@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 + +@c @dircategory Emacs +@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 + +@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. +* Bugs and ideas:: +@end menu + +@node What is Eshell?, Bugs and ideas, Top, Top +@chapter What is Eshell? +@cindex What is Eshell? + +Eshell is a command shell written using Emacs Lisp. All of what it does +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 +do is using an abbreviated language, called script. In script, instead +of telling the computer, ``list my files, please'', we write just +``list''. In fact, this command is so commonly used that we abbreviate +it to ``ls''. Typing @code{ls} in a command shell is a script way of +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:: +* Installation:: +@end menu + +@node Contributors to Eshell, Installation, What is Eshell?, What is Eshell? +@section Contributors to Eshell +@cindex Contributors +@cindex Authors + +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. + +@node Installation, , Contributors to Eshell, What is Eshell? +@section Installation +@cindex Installation + +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 +@url{http://www.emacs.org/~johnw/Emacs/eshell.tar.gz}. + +If you are using Emacs 21, please skip this section. + +@subsection Short Form + +Here's exactly what to do, with no explanation why: + +@enumerate +@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} + +You should see a version banner displayed. + +@item @samp{ls RET} + +Confirm that you see a file listing. + +@item @samp{eshell-test RET} + +Confirm that everything runs correctly. Use `M-x eshell-report-bug' if +not. + +@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: + +@example +(add-to-list 'load-path "<directory where you install Eshell>") +(load "eshell-auto") +@end example + +@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} + +Read the manual and enjoy! +@end enumerate + +@subsection Long Form + +@enumerate +@item +Before building and installing Eshell, it is important to test that it +will work properly on your system. To do this, first load +@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 +@kbd{RET}. You should have already seen a version banner announcing the +version number of this release, followed by a prompt. + +@item +Run the test suite by typing @command{eshell-test} followed by @kbd{RET} +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 +Type @code{make install} in the directory containing the Eshell sources. +This will byte-compile all of the @file{.el} files and copy both the +source and compiled versions to the directories specified in the +previous step. It will also copy the info file, and add a corresponding +entry to your @file{dir} file----if @file{install-info} can be found. + +If you only want to create the compiled elisp files, but don't want to +install them, you can type just @command{make} instead. + +@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 + +If you have @TeX{} installed at your site, you can make a typeset manual +from @file{eshell.texi}. + +@enumerate +@item +Run @TeX{} by typing @samp{texi2dvi eshell.texi}. +@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 +postscript printer there is a program, @code{dvi2ps}, which does. There +is also a program which comes together with @TeX{}, @code{dvips}, which +you can use. +@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. + +@node Bugs and ideas, , What is Eshell?, Top +@chapter Bugs and ideas +@cindex Reporting bugs and ideas +@cindex Bugs, how to report them +@cindex Author, how to reach +@cindex Email to the author +@cindex Known bugs +@cindex Bugs, known +@cindex FAQ +@cindex Problems, list of common + +If you find a bug or misfeature, don't hesitate to let me know! Send +email to @samp{johnw@@gnu.org}. Feature requests should also be sent +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 + +Below is a partial list of currently known problems with Eshell version +2.3.2, which is the version distribution with Emacs 21.1. + +@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 +inexplicably, since @command{bc} works fine at the command prompt. + +@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 + +When @kbd{TAB}, no completions appear, even though the directory has +them. This behavior is rare. + +@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 + +@unnumbered Function and Variable Index + +@printindex fn + +@unnumbered Concept Index + +@printindex cp + +@unnumbered Key Index + +@printindex ky + +@setchapternewpage odd +@summarycontents +@contents +@bye