(compose-mail): Run switch-function after setting up the mail buffer.
[emacs.git] / man / eshell.texi
blob6799dd37ba60a496b248e2204ad053d76ed8bab3
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename ../info/eshell
4 @settitle Eshell: The Emacs Shell
5 @synindex vr fn
6 @c %**end of header
8 @copying
9 This manual is for Eshell, the Emacs shell.
11 Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004,
12 2005, 2006, 2007 Free Software Foundation, Inc.
14 @quotation
15 Permission is granted to copy, distribute and/or modify this document
16 under the terms of the GNU Free Documentation License, Version 1.2 or
17 any later version published by the Free Software Foundation; with no
18 Invariant Sections, with the Front-Cover texts being ``A GNU
19 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
20 license is included in the section entitled ``GNU Free Documentation
21 License'' in the Emacs manual.
23 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
24 this GNU Manual, like GNU software.  Copies published by the Free
25 Software Foundation raise funds for GNU development.''
27 This document is part of a collection distributed under the GNU Free
28 Documentation License.  If you want to distribute this document
29 separately from the collection, you can do so by adding a copy of the
30 license to the document, as described in section 6 of the license.
31 @end quotation
32 @end copying
34 @dircategory Emacs
35 @direntry
36 * Eshell: (eshell).     A command shell implemented in Emacs Lisp.
37 @end direntry
39 @setchapternewpage on
41 @titlepage
42 @sp 4
43 @c The title is printed in a large font.
44 @center @titlefont{User's Guide}
45 @sp
46 @center @titlefont{to}
47 @sp
48 @center @titlefont{Eshell: The Emacs Shell}
49 @ignore
50 @sp 2
51 @center release 2.4
52 @c -release-
53 @end ignore
54 @sp 3
55 @center John Wiegley
56 @c -date-
58 @page
59 @vskip 0pt plus 1filll
60 @insertcopying
61 @end titlepage
63 @contents
65 @c ================================================================
66 @c                   The real text starts here
67 @c ================================================================
69 @ifnottex
70 @node Top, What is Eshell?, (dir), (dir)
71 @top Eshell
73 This manual documents Eshell, a shell-like command interpretor
74 implemented in Emacs Lisp.  It invokes no external processes except for
75 those requested by the user.  It is intended to be a functional
76 replacement for command shells such as @command{bash}, @command{zsh},
77 @command{rc}, or @command{4dos}; since Emacs itself is capable of
78 handling the sort of tasks accomplished by those tools.
79 @c This manual is updated to release 2.4 of Eshell.
80 @end ifnottex
82 @menu
83 * What is Eshell?::             A brief introduction to the Emacs Shell.
84 * Command basics::              The basics of command usage.
85 * Commands::
86 * Arguments::
87 * Input/Output::
88 * Process control::
89 * Extension modules::
90 * Extras and Goodies::
91 * Bugs and ideas::              Known problems, and future ideas.
92 * Concept Index::
93 * Function and Variable Index::
94 * Key Index::
95 @end menu
97 @node What is Eshell?
98 @chapter What is Eshell?
99 @cindex what is Eshell?
100 @cindex Eshell, what it is
102 Eshell is a @dfn{command shell} written in Emacs Lisp.  Everything it
103 does, it uses Emacs' facilities to do.  This means that Eshell is as
104 portable as Emacs itself.  It also means that cooperation with Lisp code
105 is natural and seamless.
107 What is a command shell?  To properly understand the role of a shell,
108 it's necessary to visualize what a computer does for you.  Basically, a
109 computer is a tool; in order to use that tool, you must tell it what to
110 do---or give it ``commands.''  These commands take many forms, such as
111 clicking with a mouse on certain parts of the screen.  But that is only
112 one form of command input.
114 By far the most versatile way to express what you want the computer to
115 do is by using an abbreviated language called @dfn{script}.  In
116 script, instead of telling the computer, ``list my files, please'',
117 one writes a standard abbreviated command word---@samp{ls}.  Typing
118 @samp{ls} in a command shell is a script way of telling the computer
119 to list your files.@footnote{This is comparable to viewing the
120 contents of a folder using a graphical display.}
122 The real flexibility of this approach is apparent only when you realize
123 that there are many, many different ways to list files.  Perhaps you
124 want them sorted by name, sorted by date, in reverse order, or grouped
125 by type.  Most graphical browsers have simple ways to express this.  But
126 what about showing only a few files, or only files that meet a certain
127 criteria?  In very complex and specific situations, the request becomes
128 too difficult to express using a mouse or pointing device.  It is just
129 these kinds of requests that are easily solved using a command shell.
131 For example, what if you want to list every Word file on your hard
132 drive, larger than 100 kilobytes in size, and which hasn't been looked
133 at in over six months?  That is a good candidate list for deletion, when
134 you go to clean up your hard drive.  But have you ever tried asking your
135 computer for such a list?  There is no way to do it!  At least, not
136 without using a command shell.
138 The role of a command shell is to give you more control over what your
139 computer does for you.  Not everyone needs this amount of control, and
140 it does come at a cost: Learning the necessary script commands to
141 express what you want done.  A complicated query, such as the example
142 above, takes time to learn.  But if you find yourself using your
143 computer frequently enough, it is more than worthwhile in the long run.
144 Any tool you use often deserves the time spent learning to master it.
145 @footnote{For the understandably curious, here is what that command
146 looks like: But don't let it fool you; once you know what's going on,
147 it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.}
149 @menu
150 * Contributors to Eshell::      People who have helped out!
151 @end menu
153 @node Contributors to Eshell
154 @section Contributors to Eshell
155 @cindex contributors
156 @cindex authors
158 Contributions to Eshell are welcome.  I have limited time to work on
159 this project, but I will gladly add any code you contribute to me to
160 this package.
162 The following persons have made contributions to Eshell.
164 @itemize @bullet
165 @item
166 Eli Zaretskii made it possible for Eshell to run without requiring
167 asynchronous subprocess support.  This is important for MS-DOS, which
168 does not have such support.@refill
170 @item
171 Miles Bader contributed many fixes during the port to Emacs 21.@refill
173 @item
174 Stefan Monnier fixed the things which bothered him, which of course made
175 things better for all.@refill
177 @item
178 Gerd Moellmann also helped to contribute bug fixes during the initial
179 integration with Emacs 21.@refill
181 @item
182 Alex Schroeder contributed code for interactively querying the user
183 before overwriting files.@refill
185 @item
186 Sudish Joseph helped with some XEmacs compatibility issues.@refill
187 @end itemize
189 Apart from these, a lot of people have sent suggestions, ideas,
190 requests, bug reports and encouragement.  Thanks a lot!  Without you
191 there would be no new releases of Eshell.
193 @node Command basics
194 @chapter Basic overview
196 A command shell is a means of entering verbally-formed commands.  This
197 is really all that it does, and every feature described in this manual
198 is a means to that end.  Therefore, it's important to take firm hold on
199 exactly what a command is, and how it fits in the overall picture of
200 things.
202 @menu
203 * Commands verbs::              Commands always begin with a verb.
204 * Command arguments::           Some verbs require arguments.
205 @end menu
207 @node Commands verbs
208 @section Commands verbs
210 Commands are expressed using @dfn{script}, a special shorthand language
211 computers can understand with no trouble.  Script is an extremely simple
212 language; oddly enough, this is what makes it look so complicated!
213 Whereas normal languages use a variety of embellishments, the form of a
214 script command is always:
216 @example
217 @var{verb} [@var{arguments}]
218 @end example
220 The verb expresses what you want your computer to do.  There are a fixed
221 number of verbs, although this number is usually quite large.  On the
222 author's computer, it reaches almost 1400 in number.  But of course,
223 only a handful of these are really necessary.
225 Sometimes, the verb is all that's written.  A verb is always a single
226 word, usually related to the task it performs.  @command{reboot} is a
227 good example.  Entering that on GNU/Linux will reboot the
228 computer---assuming you have sufficient privileges.
230 Other verbs require more information.  These are usually very capable
231 verbs, and must be told specifically what to do.  The extra information
232 is given in the form of @dfn{arguments}.  For example, the
233 @command{echo} verb prints back whatever arguments you type.  It
234 requires these arguments to know what to echo.  A proper use of
235 @command{echo} looks like this:
237 @example
238 echo This is an example of using echo!
239 @end example
241 This script command causes the computer to echo back: ``This is an
242 example of using echo!''
244 Although command verbs are always simple words, like @command{reboot} or
245 @command{echo}, arguments may have a wide variety of forms.  There are
246 textual arguments, numerical arguments---even Lisp arguments.
247 Distinguishing these different types of arguments requires special
248 typing, for the computer to know exactly what you mean.
250 @node Command arguments
251 @section Command arguments
253 Eshell recognizes several different kinds of command arguments:
255 @enumerate
256 @item Strings (also called textual arguments)
257 @item Numbers (floating point or integer)
258 @item Lisp lists
259 @item Lisp symbols
260 @item Emacs buffers
261 @item Emacs process handles
262 @end enumerate
264 Most users need to worry only about the first two.  The third, Lisp lists,
265 occur very frequently, but almost always behind the scenes.
267 Strings are the most common type of argument, and consist of nearly any
268 character.  Special characters---those used by Eshell
269 specifically---must be preceded by a backslash (@samp{\}).  When in doubt, it
270 is safe to add backslashes anywhere and everywhere.
272 Here is a more complicated @command{echo} example:
274 @example
275 echo A\ Multi-word\ Argument\ With\ A\ \$\ dollar
276 @end example
278 Beyond this, things get a bit more complicated.  While not beyond the
279 reach of someone wishing to learn, it is definitely beyond the scope of
280 this manual to present it all in a simplistic manner.  Get comfortable
281 with Eshell as a basic command invocation tool, and learn more about the
282 commands on your system; then come back when it all sits more familiarly
283 on your mind.  Have fun!
285 @node Commands
286 @chapter Commands
288 @menu
289 * Invocation::
290 * Completion::
291 * Aliases::
292 * History::
293 * Scripts::
294 * Built-ins::
295 @end menu
297 Essentially, a command shell is all about invoking commands---and
298 everything that entails.  So understanding how Eshell invokes commands
299 is the key to comprehending how it all works.
301 @node Invocation
302 @section Invocation
304 Unlike regular system shells, Eshell never invokes kernel functions
305 directly, such as @code{exec(3)}.  Instead, it uses the Lisp functions
306 available in the Emacs Lisp library.  It does this by transforming the
307 command you specify into a callable Lisp form.@footnote{To see the Lisp
308 form that will be invoked, type: @samp{eshell-parse-command "echo
309 hello"}}
311 This transformation, from the string of text typed at the command
312 prompt, to the ultimate invocation of either a Lisp function or external
313 command, follows these steps:
315 @enumerate
316 @item Parse the command string into separate arguments.
317 @item
318 @end enumerate
320 @node Completion
321 @section Completion
323 @node Aliases
324 @section Aliases
326 @node History
327 @section History
329 Eshell knows a few built-in variables:
331 @table @code
333 @item $+
334 @vindex $+
335 This variable always contains the current working directory.
337 @item $-
338 @vindex $-
339 This variable always contains the previous working directory (the
340 current working directory from before the last @code{cd} command).
342 @end table
344 @node Scripts
345 @section Scripts
348 @node Built-ins
349 @section Built-in commands
351 Here is a list of built-in commands that Eshell knows about:
353 @table @code
355 @item cd
356 @findex cd
357 This command changes the current working directory.  Usually, it is
358 invoked as @samp{cd foo} where @file{foo} is the new working
359 directory.  But @code{cd} knows about a few special arguments:
361 When it receives no argument at all, it changes to the home directory.
363 Giving the command @samp{cd -} changes back to the previous working
364 directory (this is the same as @samp{cd $-}).
366 The command @samp{cd =} shows the directory stack.  Each line is
367 numbered.
369 With @samp{cd =foo}, Eshell searches the directory stack for a
370 directory matching the regular expression @samp{foo} and changes to
371 that directory.
373 With @samp{cd -42}, you can access the directory stack by number.
375 @end table
378 @node Arguments
379 @chapter Arguments
381 @menu
382 * The Parser::
383 * Variables::
384 * Substitution::
385 * Globbing::
386 * Predicates::
387 @end menu
389 @node The Parser
390 @section The Parser
392 @node Variables
393 @section Variables
395 @node Substitution
396 @section Substitution
398 @node Globbing
399 @section Globbing
401 @node Predicates
402 @section Predicates
405 @node Input/Output
406 @chapter Input/Output
408 @node Process control
409 @chapter Process control
412 @node Extension modules
413 @chapter Extension modules
415 @menu
416 * Writing a module::
417 * Module testing::
418 * Directory handling::
419 * Key rebinding::
420 * Smart scrolling::
421 * Terminal emulation::
422 * Built-in UNIX commands::
423 @end menu
425 @node Writing a module
426 @section Writing a module
428 @node Module testing
429 @section Module testing
431 @node Directory handling
432 @section Directory handling
434 @node Key rebinding
435 @section Key rebinding
437 @node Smart scrolling
438 @section Smart scrolling
440 @node Terminal emulation
441 @section Terminal emulation
443 @node Built-in UNIX commands
444 @section Built-in UNIX commands
447 @node Extras and Goodies
448 @chapter Extras and Goodies
450 @node Bugs and ideas
451 @chapter Bugs and ideas
452 @cindex reporting bugs and ideas
453 @cindex bugs, how to report them
454 @cindex author, how to reach
455 @cindex email to the author
456 @cindex FAQ
457 @cindex problems, list of common
459 If you find a bug or misfeature, don't hesitate to let me know!  Send
460 email to @email{johnw@@gnu.org}.  Feature requests should also be sent
461 there.  I prefer discussing one thing at a time.  If you find several
462 unrelated bugs, please report them separately.
464 If you have ideas for improvements, or if you have written some
465 extensions to this package, I would like to hear from you.  I hope you
466 find this package useful!
468 @menu
469 * Known problems::
470 @end menu
472 @node Known problems
473 @section Known problems
474 @cindex known bugs
475 @cindex bugs, known
477 Below is complete list of known problems with Eshell version 2.4.1,
478 which is the version included with Emacs 22.
480 @table @asis
481 @item Documentation incomplete
483 @item Differentiate between aliases and functions
485 Allow for a bash-compatible syntax, such as:
487 @example
488 alias arg=blah
489 function arg () @{ blah $* @}
490 @end example
492 @item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} outputs result after prompt
494 In fact, piping to a process from a looping construct doesn't work in
495 general.  If I change the call to @code{eshell-copy-handles} in
496 @code{eshell-rewrite-for-command} to use @code{eshell-protect}, it seems
497 to work, but the output occurs after the prompt is displayed.  The whole
498 structured command thing is too complicated at present.
500 @item Error with @command{bc} in @code{eshell-test}
502 On some XEmacs system, the subprocess interaction test fails
503 inexplicably, although @command{bc} works fine at the command prompt.
505 @item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+
507 In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that
508 multiple instances of the @file{*Help*} buffer can exist.
510 @item Pcomplete sometimes gets stuck
512 You press @key{TAB}, but no completions appear, even though the
513 directory has matching files.  This behavior is rare.
515 @item @samp{grep python $<rpm -qa>} doesn't work, but using @samp{*grep} does
517 This happens because the @code{grep} Lisp function returns immediately,
518 and then the asynchronous @command{grep} process expects to examine the
519 temporary file, which has since been deleted.
521 @item Problem with C-r repeating text
523 If the text @emph{before point} reads "./run", and you type @kbd{C-r r u
524 n}, it will repeat the line for every character typed.
526 @item Backspace doesn't scroll back after continuing (in smart mode)
528 Hitting space during a process invocation, such as @command{make}, will
529 cause it to track the bottom of the output; but backspace no longer
530 scrolls back.
532 @item It's not possible to fully @code{unload-feature} Eshell
534 @item Menu support was removed, but never put back
536 @item Using C-p and C-n with rebind gets into a locked state
538 This happened a few times in Emacs 21, but has been unreproducible
539 since.
541 @item If an interactive process is currently running, @kbd{M-!} doesn't work
543 @item Use a timer instead of @code{sleep-for} when killing child processes
545 @item Piping to a Lisp function is not supported
547 Make it so that the Lisp command on the right of the pipe is repeatedly
548 called with the input strings as arguments.  This will require changing
549 @code{eshell-do-pipeline} to handle non-process targets.
551 @item Input redirection is not supported
553 See the above entry.
555 @item Problem running @command{less} without arguments on Windows
557 The result in the Eshell buffer is:
559 @example
560 Spawning child process: invalid argument
561 @end example
563 Also a new @command{less} buffer was created with nothing in it@dots{}
564 (presumably this holds the output of @command{less}).
566 If @command{less.exe} is invoked from the Eshell command line, the
567 expected output is written to the buffer.
569 Note that this happens on NT-Emacs 20.6.1 on Windows 2000. The term.el
570 package and the supplied shell both use the @command{cmdproxy} program
571 for running shells.
573 @item Implement @samp{-r}, @samp{-n} and @samp{-s} switches for @command{cp}
575 @item Make @kbd{M-5 M-x eshell} switch to ``*eshell<5>*'', creating if need be
577 @item @samp{mv @var{dir} @var{file}.tar} does not remove directories
579 This is because the tar option --remove-files doesn't do so.  Should it
580 be Eshell's job?
582 @item Bind @code{standard-output} and @code{standard-error}
584 This would be so that if a Lisp function calls @code{print}, everything
585 will happen as it should (albeit slowly).
587 @item When an extension module fails to load, @samp{cd /} gives a Lisp error
589 @item If a globbing pattern returns one match, should it be a list?
591 @item Make sure syntax table is correct in Eshell mode
593 So that @kbd{M-DEL} acts in a predictable manner, etc.
595 @item Allow all Eshell buffers to share the same history and list-dir
597 @item There is a problem with script commands that output to @file{/dev/null}
599 If a script file, somewhere in the middle, uses @samp{> /dev/null},
600 output from all subsequent commands is swallowed.
602 @item Split up parsing of text after @samp{$} in @file{esh-var.el}
604 Make it similar to the way that @file{esh-arg.el} is structured.
605 Then add parsing of @samp{$[?\n]}.
607 @item After pressing @kbd{M-RET}, redisplay before running the next command
609 @item Argument predicates and modifiers should work anywhere in a path
611 @example
612 /usr/local/src/editors/vim $ vi **/CVS(/)/Root(.)
613 Invalid regexp: "Unmatched ( or \\("
614 @end example
616 With @command{zsh}, the glob above expands to all files named
617 @file{Root} in directories named @file{CVS}.
619 @item Typing @samp{echo $@{locate locate@}/bin<TAB>} results in a Lisp error
621 Perhaps it should interpolate all permutations, and make that the
622 globbing result, since otherwise hitting return here will result in
623 ``(list of filenames)/bin'', which is never valuable.  Thus, one could
624 @command{cat} only C backup files by using @samp{ls $@{identity *.c@}~}.
625 In that case, having an alias command name @command{glob} for
626 @command{identity} would be useful.
628 @item Once symbolic mode is supported for @command{umask}, implement @command{chmod} in Lisp
630 @item Create @code{eshell-expand-file-name}
632 This would use a data table to transform things such as @samp{~+},
633 @samp{...}, etc.
635 @item Abstract @file{em-smart.el} into @file{smart-scroll.el}
637 It only really needs: to be hooked onto the output filter and the
638 pre-command hook, and to have the input-end and input-start markers.
639 And to know whether the last output group was ``successful.''
641 @item Allow for fully persisting the state of Eshell
643 This would include: variables, history, buffer, input, dir stack, etc.
645 @item Implement D as an argument predicate
647 It means that files beginning with a dot should be included in the
648 glob match.
650 @item A comma in a predicate list should mean OR
652 At the moment, this is not supported.
654 @item Error if a glob doesn't expand due to a predicate
656 An error should be generated only if @code{eshell-error-if-no-glob} is
657 non-@code{nil}.
659 @item @samp{(+ RET SPC TAB} does not cause @code{indent-according-to-mode} to occur
661 @item Create @code{eshell-auto-accumulate-list}
663 This is a list of commands for which, if the user presses @kbd{RET}, the
664 text is staged as the next Eshell command, rather than being sent to the
665 current interactive process.
667 @item Display file and line number if an error occurs in a script
669 @item @command{wait} doesn't work with process ids at the moment
671 @item Enable the direct-to-process input code in @file{em-term.el}
673 @item Problem with repeating @samp{echo $@{find /tmp@}}
675 With smart display active, if @kbd{RET} is held down, after a while it
676 can't keep up anymore and starts outputting blank lines.  It only
677 happens if an asynchronous process is involved@dots{}
679 I think the problem is that @code{eshell-send-input} is resetting the
680 input target location, so that if the asynchronous process is not done
681 by the time the next @kbd{RET} is received, the input processor thinks
682 that the input is meant for the process; which, when smart display is
683 enabled, will be the text of the last command line!  That is a bug in
684 itself.
686 In holding down @kbd{RET} while an asynchronous process is running,
687 there will be a point in between termination of the process, and the
688 running of @code{eshell-post-command-hook}, which would cause
689 @code{eshell-send-input} to call @code{eshell-copy-old-input}, and then
690 process that text as a command to be run after the process.  Perhaps
691 there should be a way of killing pending input between the death of the
692 process, and the @code{post-command-hook}.
694 @item Allow for a more aggressive smart display mode
696 Perhaps toggled by a command, that makes each output block a smart
697 display block.
699 @item Create more meta variables
701 @table @samp
702 @item $!
703 The reason for the failure of the last disk command, or the text of the
704 last Lisp error.
706 @item $=
707 A special associate array, which can take references of the form
708 @samp{$=[REGEXP]}.  It indexes into the directory ring.
709 @end table
711 @item Eshell scripts can't execute in the background
713 @item Support zsh's ``Parameter Expansion'' syntax, i.e. @samp{$@{@var{name}:-@var{val}@}}
715 @item Write an @command{info} alias that can take arguments
717 So that the user can enter @samp{info chmod}, for example.
719 @item Create a mode @code{eshell-browse}
721 It would treat the Eshell buffer as a outline.  Collapsing the outline
722 hides all of the output text.  Collapsing again would show only the
723 first command run in each directory
725 @item Allow other revisions of a file to be referenced using @samp{file@{rev@}}
727 This would be expanded by @code{eshell-expand-file-name} (see above).
729 @item Print ``You have new mail'' when the ``Mail'' icon is turned on
731 @item Implement @kbd{M-|} for Eshell
733 @item Implement input redirection
735 If it's a Lisp function, input redirection implies @command{xargs} (in a
736 way@dots{}).  If input redirection is added, also update the
737 @code{file-name-quote-list}, and the delimiter list.
739 @item Allow @samp{#<@var{word} @var{arg}>} as a generic syntax
741 With the handling of @emph{word} specified by an
742 @code{eshell-special-alist}.
744 @item In @code{eshell-veal-using-options}, allow a @code{:complete} tag
746 It would be used to provide completion rules for that command.  Then the
747 macro will automagically define the completion function.
749 @item For @code{eshell-command-on-region}, apply redirections to the result
751 So that @samp{+ > 'blah} would cause the result of the @code{+} (using
752 input from the current region) to be inserting into the symbol
753 @code{blah}.
755 If an external command is being invoked, the input is sent as standard
756 input, as if a @samp{cat <region> |} had been invoked.
758 If a Lisp command, or an alias, is invoked, then if the line has no
759 newline characters, it is divided by whitespace and passed as arguments
760 to the Lisp function.  Otherwise, it is divided at the newline
761 characters.  Thus, invoking @code{+} on a series of numbers will add
762 them; @code{min} would display the smallest figure, etc.
764 @item Write @code{eshell-script-mode} as a minor mode
766 It would provide syntax, abbrev, highlighting and indenting support like
767 @code{emacs-lisp-mode} and @code{shell-mode}.
769 @item In the history mechanism, finish the @command{bash}-style support
771 This means @samp{!n}, @samp{!#}, @samp{!:%}, and @samp{!:1-} as separate
772 from @samp{!:1*}.
774 @item Support the -n command line option for @command{history}
776 @item Implement @command{fc} in Lisp
778 @item Specifying a frame as a redirection target should imply the currently active window's buffer
780 @item Implement @samp{>@var{func-or-func-list}}
782 This would allow for an ``output translators'', that take a function to
783 modify output with, and a target.  Devise a syntax that works well with
784 pipes, and can accommodate multiple functions (i.e., @samp{>'(upcase
785 regexp-quote)} or @samp{>'upcase}).
787 @item Allow Eshell to read/write to/from standard input and output
789 This would be optional, rather than always using the Eshell buffer.
790 This would allow it to be run from the command line (perhaps).
792 @item Write a @command{help} command
794 It would call subcommands with @option{--help}, or @option{-h} or
795 @option{/?}, as appropriate.
797 @item Implement @command{stty} in Lisp
799 @item Support @command{rc}'s matching operator, e.g. @samp{~ (@var{list}) @var{regexp}}
801 @item Implement @command{bg} and @command{fg} as editors of @code{eshell-process-list}
803 Using @command{bg} on a process that is already in the background does
804 nothing.  Specifying redirection targets replaces (or adds) to the list
805 current being used.
807 @item Have @command{jobs} print only the processes for the current shell
809 @item How can Eshell learn if a background process has requested input?
811 @item Support @samp{2>&1} and @samp{>&} and @samp{2>} and @samp{|&}
813 The syntax table for parsing these should be customizable, such that the
814 user could change it to use rc syntax: @samp{>[2=1]}.
816 @item Allow @samp{$_[-1]}, which would indicate the last element of the array
818 @item Make @samp{$x[*]} equal to listing out the full contents of @samp{x}
820 Return them as a list, so that @samp{$_[*]} is all the arguments of the
821 last command.
823 @item Copy ANSI code handling from @file{term.el} into @file{em-term.el}
825 Make it possible for the user to send char-by-char to the underlying
826 process.  Ultimately, I should be able to move away from using term.el
827 altogether, since everything but the ANSI code handling is already part
828 of Eshell.  Then, things would work correctly on MS-Windows as well
829 (which doesn't have @file{/bin/sh}, although @file{term.el} tries to use
830 it).
832 @item Make the shell spawning commands be visual
834 That is, make (@command{su}, @command{bash}, @command{telnet},
835 @command{rlogin}, @command{rsh}, etc.) be part of
836 @code{eshell-visual-commands}.  The only exception is if the shell is
837 being used to invoke a single command.  Then, the behavior should be
838 based on what that command is.
840 @item Create a smart viewing command named @command{open}
842 This would search for some way to open its argument (similar to opening
843 a file in the Windows Explorer).
845 @item Alias @command{read} to be the same as @command{open}, only read-only
847 @item Write a @command{tail} command which uses @code{view-file}
849 It would move point to the end of the buffer, and then turns on
850 auto-revert mode in that buffer at frequent intervals---and a
851 @command{head} alias which assumes an upper limit of
852 @code{eshell-maximum-line-length} characters per line.
854 @item Make @command{dgrep} load @code{dired}, mark everything, then invoke @code{dired-do-search}
856 @item Write mesh.c
858 This would run Emacs with the appropriate arguments to invoke Eshell
859 only.  That way, it could be listed as a login shell.
861 @item Use an intangible @code{PS2} string for multi-line input prompts
863 @item Auto-detect when a command is visual, by checking @code{TERMCAP} usage
865 @item The first keypress after @kbd{M-x watson} triggers `eshell-send-input'
867 @item Make @kbd{/} electric
869 So that it automatically expands and corrects pathnames.  Or make
870 pathname completion for Pcomplete auto-expand @samp{/u/i/std<TAB>} to
871 @samp{/usr/include/std<TAB>}.
873 @item Write the @command{pushd} stack to disk along with @code{last-dir-ring}
875 @item Add options to @code{eshell/cat} which would allow it to sort and uniq
877 @item Implement @command{wc} in Lisp
879 Add support for counting sentences, paragraphs, pages, etc.
881 @item Once piping is added, implement @command{sort} and @command{uniq} in Lisp
883 @item Implement @command{touch} in Lisp
885 @item Implement @command{comm} in Lisp
887 @item Implement an @command{epatch} command in Lisp
889 This would call @code{ediff-patch-file}, or @code{ediff-patch-buffer},
890 depending on its argument.
892 @item Have an option such that @samp{ls -l} generates a dired buffer
894 @item Write a version of @command{xargs} based on command rewriting
896 That is, @samp{find X | xargs Y} would be indicated using @samp{Y
897 $@{find X@}}.  Maybe @code{eshell-do-pipelines} could be changed to
898 perform this on-thy-fly rewriting.
900 @item Write an alias for @command{less} that brings up a @code{view-mode} buffer
902 Such that the user can press @key{SPC} and @key{DEL}, and then @key{q}
903 to return to Eshell.  It would be equivalent to:
904 @samp{X > #<buffer Y>; view-buffer #<buffer Y>}.
906 @item Make @code{eshell-mode} as much a full citizen as @code{shell-mode}
908 Everywhere in Emacs where @code{shell-mode} is specially noticed, add
909 @code{eshell-mode} there.
911 @item Permit the umask to be selectively set on a @command{cp} target
913 @item Problem using @kbd{M-x eshell} after using @code{eshell-command}
915 If the first thing that I do after entering Emacs is to run
916 @code{eshell-command} and invoke @command{ls}, and then use @kbd{M-x
917 eshell}, it doesn't display anything.
919 @item @kbd{M-RET} during a long command (using smart display) doesn't work
921 Since it keeps the cursor up where the command was invoked.
923 @end table
925 @node Concept Index
926 @unnumbered Concept Index
928 @printindex cp
930 @node Function and Variable Index
931 @unnumbered Function and Variable Index
933 @printindex fn
935 @node Key Index
936 @unnumbered Key Index
938 @printindex ky
939 @bye
941 @ignore
942    arch-tag: 776409ba-cb15-42b9-b2b6-d2bdc7ebad01
943 @end ignore