]> code.delx.au - gnu-emacs/blob - man/eshell.texi
(mouse-avoidance-point-position): Use posn-at-point instead of compute-motion.
[gnu-emacs] / man / eshell.texi
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
7
8 @copying
9 This manual is for Eshell, the Emacs shell.
10
11 Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004,
12 2005, 2006 Free Software Foundation, Inc.
13
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.
22
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.''
26
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
33
34 @dircategory Emacs
35 @direntry
36 * Eshell: (eshell). A command shell implemented in Emacs Lisp.
37 @end direntry
38
39 @setchapternewpage on
40
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-
57
58 @page
59 @vskip 0pt plus 1filll
60 @insertcopying
61 @end titlepage
62
63 @contents
64
65 @c ================================================================
66 @c The real text starts here
67 @c ================================================================
68
69 @ifnottex
70 @node Top, What is Eshell?, (dir), (dir)
71 @top Eshell
72
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
81
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
96
97 @node What is Eshell?
98 @chapter What is Eshell?
99 @cindex what is Eshell?
100 @cindex Eshell, what it is
101
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.
106
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.
113
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.}
121
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.
130
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.
137
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)}.}
148
149 @menu
150 * Contributors to Eshell:: People who have helped out!
151 @end menu
152
153 @node Contributors to Eshell
154 @section Contributors to Eshell
155 @cindex contributors
156 @cindex authors
157
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.
161
162 The following persons have made contributions to Eshell.
163
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
169
170 @item
171 Miles Bader contributed many fixes during the port to Emacs 21.@refill
172
173 @item
174 Stefan Monnier fixed the things which bothered him, which of course made
175 things better for all.@refill
176
177 @item
178 Gerd Moellmann also helped to contribute bug fixes during the initial
179 integration with Emacs 21.@refill
180
181 @item
182 Alex Schroeder contributed code for interactively querying the user
183 before overwriting files.@refill
184
185 @item
186 Sudish Joseph helped with some XEmacs compatibility issues.@refill
187 @end itemize
188
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.
192
193 @node Command basics
194 @chapter Basic overview
195
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.
201
202 @menu
203 * Commands verbs:: Commands always begin with a verb.
204 * Command arguments:: Some verbs require arguments.
205 @end menu
206
207 @node Commands verbs
208 @section Commands verbs
209
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:
215
216 @example
217 @var{verb} [@var{arguments}]
218 @end example
219
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.
224
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.
229
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:
236
237 @example
238 echo This is an example of using echo!
239 @end example
240
241 This script command causes the computer to echo back: ``This is an
242 example of using echo!''
243
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.
249
250 @node Command arguments
251 @section Command arguments
252
253 Eshell recognizes several different kinds of command arguments:
254
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
263
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.
266
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.
271
272 Here is a more complicated @command{echo} example:
273
274 @example
275 echo A\ Multi-word\ Argument\ With\ A\ \$\ dollar
276 @end example
277
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!
284
285 @node Commands
286 @chapter Commands
287
288 @menu
289 * Invocation::
290 * Completion::
291 * Aliases::
292 * History::
293 * Scripts::
294 * Built-ins::
295 @end menu
296
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.
300
301 @node Invocation
302 @section Invocation
303
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"}}
310
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:
314
315 @enumerate
316 @item Parse the command string into separate arguments.
317 @item
318 @end enumerate
319
320 @node Completion
321 @section Completion
322
323 @node Aliases
324 @section Aliases
325
326 @node History
327 @section History
328
329 Eshell knows a few built-in variables:
330
331 @table @code
332
333 @item $+
334 @vindex $+
335 This variable always contains the current working directory.
336
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).
341
342 @end table
343
344 @node Scripts
345 @section Scripts
346
347
348 @node Built-ins
349 @section Built-in commands
350
351 Here is a list of built-in commands that Eshell knows about:
352
353 @table @code
354
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:
360
361 When it receives no argument at all, it changes to the home directory.
362
363 Giving the command @samp{cd -} changes back to the previous working
364 directory (this is the same as @samp{cd $-}).
365
366 The command @samp{cd =} shows the directory stack. Each line is
367 numbered.
368
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.
372
373 With @samp{cd -42}, you can access the directory stack by number.
374
375 @end table
376
377
378 @node Arguments
379 @chapter Arguments
380
381 @menu
382 * The Parser::
383 * Variables::
384 * Substitution::
385 * Globbing::
386 * Predicates::
387 @end menu
388
389 @node The Parser
390 @section The Parser
391
392 @node Variables
393 @section Variables
394
395 @node Substitution
396 @section Substitution
397
398 @node Globbing
399 @section Globbing
400
401 @node Predicates
402 @section Predicates
403
404
405 @node Input/Output
406 @chapter Input/Output
407
408 @node Process control
409 @chapter Process control
410
411
412 @node Extension modules
413 @chapter Extension modules
414
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
424
425 @node Writing a module
426 @section Writing a module
427
428 @node Module testing
429 @section Module testing
430
431 @node Directory handling
432 @section Directory handling
433
434 @node Key rebinding
435 @section Key rebinding
436
437 @node Smart scrolling
438 @section Smart scrolling
439
440 @node Terminal emulation
441 @section Terminal emulation
442
443 @node Built-in UNIX commands
444 @section Built-in UNIX commands
445
446
447 @node Extras and Goodies
448 @chapter Extras and Goodies
449
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
458
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.
463
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!
467
468 @menu
469 * Known problems::
470 @end menu
471
472 @node Known problems
473 @section Known problems
474 @cindex known bugs
475 @cindex bugs, known
476
477 Below is complete list of known problems with Eshell version 2.4.1,
478 which is the version included with Emacs 21.1.
479
480 @table @asis
481 @item Documentation incomplete
482
483 @item Differentiate between aliases and functions
484
485 Allow for a bash-compatible syntax, such as:
486
487 @example
488 alias arg=blah
489 function arg () @{ blah $* @}
490 @end example
491
492 @item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} outputs result after prompt
493
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.
499
500 @item Error with @command{bc} in @code{eshell-test}
501
502 On some XEmacs system, the subprocess interaction test fails
503 inexplicably, although @command{bc} works fine at the command prompt.
504
505 @item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+
506
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.
509
510 @item Pcomplete sometimes gets stuck
511
512 You press @key{TAB}, but no completions appear, even though the
513 directory has matching files. This behavior is rare.
514
515 @item @samp{grep python $<rpm -qa>} doesn't work, but using @samp{*grep} does
516
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.
520
521 @item Problem with C-r repeating text
522
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.
525
526 @item Backspace doesn't scroll back after continuing (in smart mode)
527
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.
531
532 @item It's not possible to fully @code{unload-feature} Eshell
533
534 @item Menu support was removed, but never put back
535
536 @item Using C-p and C-n with rebind gets into a locked state
537
538 This happened a few times in Emacs 21, but has been unreproducible
539 since.
540
541 @item If an interactive process is currently running, @kbd{M-!} doesn't work
542
543 @item Use a timer instead of @code{sleep-for} when killing child processes
544
545 @item Piping to a Lisp function is not supported
546
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.
550
551 @item Input redirection is not supported
552
553 See the above entry.
554
555 @item Problem running @command{less} without arguments on Windows
556
557 The result in the Eshell buffer is:
558
559 @example
560 Spawning child process: invalid argument
561 @end example
562
563 Also a new @command{less} buffer was created with nothing in it@dots{}
564 (presumably this holds the output of @command{less}).
565
566 If @command{less.exe} is invoked from the Eshell command line, the
567 expected output is written to the buffer.
568
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.
572
573 @item Implement @samp{-r}, @samp{-n} and @samp{-s} switches for @command{cp}
574
575 @item Make @kbd{M-5 M-x eshell} switch to ``*eshell<5>*'', creating if need be
576
577 @item @samp{mv @var{dir} @var{file}.tar} does not remove directories
578
579 This is because the tar option --remove-files doesn't do so. Should it
580 be Eshell's job?
581
582 @item Bind @code{standard-output} and @code{standard-error}
583
584 This would be so that if a Lisp function calls @code{print}, everything
585 will happen as it should (albeit slowly).
586
587 @item When an extension module fails to load, @samp{cd /} gives a Lisp error
588
589 @item If a globbing pattern returns one match, should it be a list?
590
591 @item Make sure syntax table is correct in Eshell mode
592
593 So that @kbd{M-DEL} acts in a predictable manner, etc.
594
595 @item Allow all Eshell buffers to share the same history and list-dir
596
597 @item There is a problem with script commands that output to @file{/dev/null}
598
599 If a script file, somewhere in the middle, uses @samp{> /dev/null},
600 output from all subsequent commands is swallowed.
601
602 @item Split up parsing of text after @samp{$} in @file{esh-var.el}
603
604 Make it similar to the way that @file{esh-arg.el} is structured.
605 Then add parsing of @samp{$[?\n]}.
606
607 @item After pressing @kbd{M-RET}, redisplay before running the next command
608
609 @item Argument predicates and modifiers should work anywhere in a path
610
611 @example
612 /usr/local/src/editors/vim $ vi **/CVS(/)/Root(.)
613 Invalid regexp: "Unmatched ( or \\("
614 @end example
615
616 With @command{zsh}, the glob above expands to all files named
617 @file{Root} in directories named @file{CVS}.
618
619 @item Typing @samp{echo $@{locate locate@}/bin<TAB>} results in a Lisp error
620
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.
627
628 @item Once symbolic mode is supported for @command{umask}, implement @command{chmod} in Lisp
629
630 @item Create @code{eshell-expand-file-name}
631
632 This would use a data table to transform things such as @samp{~+},
633 @samp{...}, etc.
634
635 @item Abstract @file{em-smart.el} into @file{smart-scroll.el}
636
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.''
640
641 @item Allow for fully persisting the state of Eshell
642
643 This would include: variables, history, buffer, input, dir stack, etc.
644
645 @item Implement D as an argument predicate
646
647 It means that files beginning with a dot should be included in the
648 glob match.
649
650 @item A comma in a predicate list should mean OR
651
652 At the moment, this is not supported.
653
654 @item Error if a glob doesn't expand due to a predicate
655
656 An error should be generated only if @code{eshell-error-if-no-glob} is
657 non-@code{nil}.
658
659 @item @samp{(+ RET SPC TAB} does not cause @code{indent-according-to-mode} to occur
660
661 @item Create @code{eshell-auto-accumulate-list}
662
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.
666
667 @item Display file and line number if an error occurs in a script
668
669 @item @command{wait} doesn't work with process ids at the moment
670
671 @item Enable the direct-to-process input code in @file{em-term.el}
672
673 @item Problem with repeating @samp{echo $@{find /tmp@}}
674
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{}
678
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.
685
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}.
693
694 @item Allow for a more aggressive smart display mode
695
696 Perhaps toggled by a command, that makes each output block a smart
697 display block.
698
699 @item Create more meta variables
700
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.
705
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
710
711 @item Eshell scripts can't execute in the background
712
713 @item Support zsh's ``Parameter Expansion'' syntax, i.e. @samp{$@{@var{name}:-@var{val}@}}
714
715 @item Write an @command{info} alias that can take arguments
716
717 So that the user can enter @samp{info chmod}, for example.
718
719 @item Create a mode @code{eshell-browse}
720
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
724
725 @item Allow other revisions of a file to be referenced using @samp{file@{rev@}}
726
727 This would be expanded by @code{eshell-expand-file-name} (see above).
728
729 @item Print ``You have new mail'' when the ``Mail'' icon is turned on
730
731 @item Implement @kbd{M-|} for Eshell
732
733 @item Implement input redirection
734
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.
738
739 @item Allow @samp{#<@var{word} @var{arg}>} as a generic syntax
740
741 With the handling of @emph{word} specified by an
742 @code{eshell-special-alist}.
743
744 @item In @code{eshell-veal-using-options}, allow a @code{:complete} tag
745
746 It would be used to provide completion rules for that command. Then the
747 macro will automagically define the completion function.
748
749 @item For @code{eshell-command-on-region}, apply redirections to the result
750
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}.
754
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.
757
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.
763
764 @item Write @code{eshell-script-mode} as a minor mode
765
766 It would provide syntax, abbrev, highlighting and indenting support like
767 @code{emacs-lisp-mode} and @code{shell-mode}.
768
769 @item In the history mechanism, finish the @command{bash}-style support
770
771 This means @samp{!n}, @samp{!#}, @samp{!:%}, and @samp{!:1-} as separate
772 from @samp{!:1*}.
773
774 @item Support the -n command line option for @command{history}
775
776 @item Implement @command{fc} in Lisp
777
778 @item Specifying a frame as a redirection target should imply the currently active window's buffer
779
780 @item Implement @samp{>@var{func-or-func-list}}
781
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}).
786
787 @item Allow Eshell to read/write to/from standard input and output
788
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).
791
792 @item Write a @command{help} command
793
794 It would call subcommands with @option{--help}, or @option{-h} or
795 @option{/?}, as appropriate.
796
797 @item Implement @command{stty} in Lisp
798
799 @item Support @command{rc}'s matching operator, e.g. @samp{~ (@var{list}) @var{regexp}}
800
801 @item Implement @command{bg} and @command{fg} as editors of @code{eshell-process-list}
802
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.
806
807 @item Have @command{jobs} print only the processes for the current shell
808
809 @item How can Eshell learn if a background process has requested input?
810
811 @item Support @samp{2>&1} and @samp{>&} and @samp{2>} and @samp{|&}
812
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]}.
815
816 @item Allow @samp{$_[-1]}, which would indicate the last element of the array
817
818 @item Make @samp{$x[*]} equal to listing out the full contents of @samp{x}
819
820 Return them as a list, so that @samp{$_[*]} is all the arguments of the
821 last command.
822
823 @item Copy ANSI code handling from @file{term.el} into @file{em-term.el}
824
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).
831
832 @item Make the shell spawning commands be visual
833
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.
839
840 @item Create a smart viewing command named @command{open}
841
842 This would search for some way to open its argument (similar to opening
843 a file in the Windows Explorer).
844
845 @item Alias @command{read} to be the same as @command{open}, only read-only
846
847 @item Write a @command{tail} command which uses @code{view-file}
848
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 assums an upper limit of
852 @code{eshell-maximum-line-length} characters per line.
853
854 @item Make @command{dgrep} load @code{dired}, mark everything, then invoke @code{dired-do-search}
855
856 @item Write mesh.c
857
858 This would run Emacs with the appropriate arguments to invoke Eshell
859 only. That way, it could be listed as a login shell.
860
861 @item Use an intangible @code{PS2} string for multi-line input prompts
862
863 @item Auto-detect when a command is visual, by checking @code{TERMCAP} usage
864
865 @item The first keypress after @kbd{M-x watson} triggers `eshell-send-input'
866
867 @item Make @kbd{/} electric
868
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>}.
872
873 @item Write the @command{pushd} stack to disk along with @code{last-dir-ring}
874
875 @item Add options to @code{eshell/cat} which would allow it to sort and uniq
876
877 @item Implement @command{wc} in Lisp
878
879 Add support for counting sentences, paragraphs, pages, etc.
880
881 @item Once piping is added, implement @command{sort} and @command{uniq} in Lisp
882
883 @item Implement @command{touch} in Lisp
884
885 @item Implement @command{comm} in Lisp
886
887 @item Implement an @command{epatch} command in Lisp
888
889 This would call @code{ediff-patch-file}, or @code{ediff-patch-buffer},
890 depending on its argument.
891
892 @item Have an option such that @samp{ls -l} generates a dired buffer
893
894 @item Write a version of @command{xargs} based on command rewriting
895
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.
899
900 @item Write an alias for @command{less} that brings up a @code{view-mode} buffer
901
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>}.
905
906 @item Make @code{eshell-mode} as much a full citizen as @code{shell-mode}
907
908 Everywhere in Emacs where @code{shell-mode} is specially noticed, add
909 @code{eshell-mode} there.
910
911 @item Permit the umask to be selectively set on a @command{cp} target
912
913 @item Problem using @kbd{M-x eshell} after using @code{eshell-command}
914
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.
918
919 @item @kbd{M-RET} during a long command (using smart display) doesn't work
920
921 Since it keeps the cursor up where the command was invoked.
922
923 @end table
924
925 @node Concept Index
926 @unnumbered Concept Index
927
928 @printindex cp
929
930 @node Function and Variable Index
931 @unnumbered Function and Variable Index
932
933 @printindex fn
934
935 @node Key Index
936 @unnumbered Key Index
937
938 @printindex ky
939 @bye
940
941 @ignore
942 arch-tag: 776409ba-cb15-42b9-b2b6-d2bdc7ebad01
943 @end ignore