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