aboutsummaryrefslogtreecommitdiffstats
path: root/man
diff options
context:
space:
mode:
authorJohn Wiegley2000-10-29 05:18:48 +0000
committerJohn Wiegley2000-10-29 05:18:48 +0000
commitdace60cfea488a9cc8a775109c56b66907aa6abb (patch)
tree364b9c0114540a5f51a42e1e28a37b98714edaee /man
parent657f9cb8b7f7c3a9687f3998319ce63346ef13a4 (diff)
downloademacs-dace60cfea488a9cc8a775109c56b66907aa6abb.tar.gz
emacs-dace60cfea488a9cc8a775109c56b66907aa6abb.zip
See ChangeLog
Diffstat (limited to 'man')
-rw-r--r--man/ChangeLog4
-rw-r--r--man/eshell.texi825
2 files changed, 485 insertions, 344 deletions
diff --git a/man/ChangeLog b/man/ChangeLog
index 7ad93bc9864..fb8a6adcd75 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,7 @@
12000-10-28 John Wiegley <johnw@gnu.org>
2
3 * eshell.texi: Further editing, and finished the "bugs" section.
4
12000-10-28 Eli Zaretskii <eliz@is.elta.co.il> 52000-10-28 Eli Zaretskii <eliz@is.elta.co.il>
2 6
3 * cmdargs.texi (Colors X): Document support for -fg, -bg, and -rv 7 * cmdargs.texi (Colors X): Document support for -fg, -bg, and -rv
diff --git a/man/eshell.texi b/man/eshell.texi
index de91933f2a4..c690909a94c 100644
--- a/man/eshell.texi
+++ b/man/eshell.texi
@@ -1,6 +1,6 @@
1\input texinfo @c -*-texinfo-*- 1\input texinfo @c -*-texinfo-*-
2 2
3@c "@(#)$Name: $:$Id: eshell.texi,v 1.2 2000/10/13 10:32:23 johnw Exp $" 3@c "@(#)$Name: $:$Id: eshell.texi,v 1.3 2000/10/16 18:24:30 eliz Exp $"
4 4
5@c Documentation for Eshell: The Emacs Shell. 5@c Documentation for Eshell: The Emacs Shell.
6@c Copyright (C) 1999-2000 Free Software Foundation, Inc. 6@c Copyright (C) 1999-2000 Free Software Foundation, Inc.
@@ -28,7 +28,7 @@
28 28
29@dircategory Emacs 29@dircategory Emacs
30@direntry 30@direntry
31* Eshell: (eshell). A command shell implemented in Emacs Lisp. 31* Eshell: (eshell). A command shell implemented in Emacs Lisp.
32@end direntry 32@end direntry
33@setchapternewpage on 33@setchapternewpage on
34 34
@@ -72,7 +72,7 @@ Software Foundation instead of in the original English.
72@center @titlefont{Eshell: The Emacs Shell} 72@center @titlefont{Eshell: The Emacs Shell}
73@ignore 73@ignore
74@sp 2 74@sp 2
75@center release 2.3.2 75@center release 2.4
76@c -release- 76@c -release-
77@end ignore 77@end ignore
78@sp 3 78@sp 3
@@ -114,18 +114,19 @@ Software Foundation instead of in the original English.
114@top Eshell 114@top Eshell
115 115
116This manual documents Eshell, a shell-like command interpretor 116This manual documents Eshell, a shell-like command interpretor
117implemented entirely in Emacs Lisp. It invokes no external processes 117implemented in Emacs Lisp. It invokes no external processes except for
118beyond those requested by the user. It is intended to be a functional 118those requested by the user. It is intended to be a functional
119replacement for command shells such as @command{bash}, @command{zsh}, 119replacement for command shells such as @command{bash}, @command{zsh},
120@command{rc}, @command{4dos}; since Emacs itself is capable of handling 120@command{rc}, or @command{4dos}; since Emacs itself is capable of
121most of the tasks accomplished by such tools. 121handling the sort of tasks accomplished by those tools.
122@c This manual is updated to release 2.3.2 of Eshell. 122@c This manual is updated to release 2.4 of Eshell.
123@end ifinfo 123@end ifinfo
124 124
125@menu 125@menu
126* What is Eshell?:: A brief introduction to the Emacs Shell. 126* What is Eshell?:: A brief introduction to the Emacs Shell.
127* Installation:: 127* Installation:: For users of Emacs 20 and XEmacs.
128* Bugs and ideas:: 128* Command basics:: The basics of command usage.
129* Bugs and ideas:: Known problems, and future ideas.
129* Concept Index:: 130* Concept Index::
130* Function and Variable Index:: 131* Function and Variable Index::
131* Key Index:: 132* Key Index::
@@ -136,12 +137,12 @@ most of the tasks accomplished by such tools.
136@cindex what is Eshell? 137@cindex what is Eshell?
137@cindex Eshell, what it is 138@cindex Eshell, what it is
138 139
139Eshell is a @dfn{command shell} written using Emacs Lisp. All of what it does 140Eshell is a @dfn{command shell} written in Emacs Lisp. Everything it
140it uses Emacs' facilities to do. This means Eshell is as portable as 141does it uses Emacs' facilities to do. This means that Eshell is as
141Emacs itself. It also means that cooperation with other Lisp code is 142portable as Emacs itself. It also means that cooperation with Lisp code
142natural and seamless. 143is natural and seamless.
143 144
144So what is a command shell? To properly understand the role of a shell, 145What is a command shell? To properly understand the role of a shell,
145it's necessary to visualize what a computer does for you. Basically, a 146it's necessary to visualize what a computer does for you. Basically, a
146computer is a tool; in order to use that tool, you must tell it what to 147computer is a tool; in order to use that tool, you must tell it what to
147do---or give it ``commands''. These commands take many forms, such as 148do---or give it ``commands''. These commands take many forms, such as
@@ -149,22 +150,22 @@ clicking with a mouse on certain parts of the screen. But that is only
149one form of command input. 150one form of command input.
150 151
151By far the most versatile way to express what you want the computer to 152By far the most versatile way to express what you want the computer to
152do is using an abbreviated language, called @dfn{a script}. In a 153do is by using an abbreviated language called @dfn{script}. In script,
153script, instead 154instead of telling the computer, ``list my files, please'', one writes
154of telling the computer, ``list my files, please'', we write just 155just ``list''. In fact, this command is so commonly used that it is
155``list''. In fact, this command is so commonly used that we abbreviate 156abbreviated to ``ls''. Typing @kbd{ls} in a command shell is a script
156it to ``ls''. Typing @kbd{ls} in a command shell is a script way of 157way of telling the computer to list your files.@footnote{This is
157telling the computer to list your files. This is comparable to viewing 158comparable to viewing the contents of a folder using a graphical
158the contents of a folder using a graphical display. 159display.}
159 160
160The real flexibility is apparent only when you realize that there are 161The real flexibility of this approach is apparent only when you realize
161many, many ways to list your files. Perhaps you want them sorted by 162that there are many, many different ways to list files. Perhaps you
162name, or sorted by date, or in reverse order, or grouped by type. Most 163want them sorted by name, sorted by date, in reverse order, or grouped
163graphical browsers have simple ways to express this. But what about 164by type. Most graphical browsers have simple ways to express this. But
164showing only a few files, or only files that meet a certain criteria? 165what about showing only a few files, or only files that meet a certain
165In very complex and specific situations, the request becomes too 166criteria? In very complex and specific situations, the request becomes
166difficult to express with a mouse. It is just these kinds of requests 167too difficult to express using a mouse or pointing device. It is just
167that are solvable using a command shell. 168these kinds of requests that are easily solved using a command shell.
168 169
169For example, what if you want to list every Word file on your hard 170For example, what if you want to list every Word file on your hard
170drive, larger than 100 kilobytes in size, and which hasn't been looked 171drive, larger than 100 kilobytes in size, and which hasn't been looked
@@ -173,13 +174,13 @@ you go to clean up your hard drive. But have you ever tried asking your
173computer for such a list? There is no way to do it! At least, not 174computer for such a list? There is no way to do it! At least, not
174without using a command shell. 175without using a command shell.
175 176
176So the role of a command shell is to give you more control over what 177The role of a command shell is to give you more control over what your
177your computer does for you. Not everyone needs this amount of control, 178computer does for you. Not everyone needs this amount of control, and
178and it does come at a cost: Learning the necessary script commands to 179it does come at a cost: Learning the necessary script commands to
179express what you want done. A complicated query, such as the example 180express what you want done. A complicated query, such as the example
180above, takes time to learn. But if you find yourself using your 181above, takes time to learn. But if you find yourself using your
181computer frequently enough, it is more than worthwhile in the long run. 182computer frequently enough, it is more than worthwhile in the long run.
182Any tool you use often deserves your time in learning to master it. 183Any tool you use often deserves the time spent learning to master it.
183@footnote{For the understandably curious, here is what that command 184@footnote{For the understandably curious, here is what that command
184looks like: But don't let it fool you; once you know what's going on, 185looks like: But don't let it fool you; once you know what's going on,
185it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.} 186it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.}
@@ -187,10 +188,10 @@ it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.}
187As of Emacs 21, Eshell is part of the standard Emacs distribution. 188As of Emacs 21, Eshell is part of the standard Emacs distribution.
188 189
189@menu 190@menu
190* Contributors to Eshell:: 191* Contributors to Eshell:: People who have helped out!
191@end menu 192@end menu
192 193
193@node Contributors to Eshell, , What is Eshell?, What is Eshell? 194@node Contributors to Eshell, , What is Eshell?, What is Eshell?
194@section Contributors to Eshell 195@section Contributors to Eshell
195@cindex contributors 196@cindex contributors
196@cindex authors 197@cindex authors
@@ -230,16 +231,16 @@ Apart from these, a lot of people have sent suggestions, ideas,
230requests, bug reports and encouragement. Thanks a lot! Without you 231requests, bug reports and encouragement. Thanks a lot! Without you
231there would be no new releases of Eshell. 232there would be no new releases of Eshell.
232 233
233@node Installation, Bugs and ideas, What is Eshell?, Top 234@node Installation, Command basics, What is Eshell?, Top
234@chapter Installation 235@chapter Installation
235@cindex installation 236@cindex installation
236 237
237As mentioned above, Eshell comes preinstalled since Emacs 21. If you're 238As mentioned above, Eshell comes preinstalled as of Emacs 21. If you're
238using Emacs 20.4 or later, or XEmacs 21, you can download the most 239using Emacs 20.4 or later, or XEmacs 21, you can download the most
239recent version of Eshell from 240recent version of Eshell from
240@url{http://www.gci-net.com/users/j/johnw/Emacs/eshell.tar.gz}. 241@url{http://www.gci-net.com/users/j/johnw/Emacs/eshell.tar.gz}.
241 242
242If you are using Emacs 21, please skip this section. 243However, if you are using Emacs 21, you may skip this section.
243 244
244@section Short Form 245@section Short Form
245 246
@@ -420,57 +421,70 @@ you can use. For other printers, use a suitable DVI driver,
420e.g., @code{dvilj4} for LaserJet-compatible printers. 421e.g., @code{dvilj4} for LaserJet-compatible printers.
421@end enumerate 422@end enumerate
422 423
423@c @node Forming commands, Known problems, What is Eshell?, Top 424@node Command basics, Bugs and ideas, Installation, Top
424@c @chapter Forming commands 425@chapter Command basics
425 426
426@c A command shell is nothing more than a place to enter commands. 427A command shell is a mechanism for entering verbally-formed commands.
428This is really all that it does, and every feature described in this
429manual is a means to that end. Therefore, it's important to get a firm
430grasp on exactly what a command is, and how it fits into the overall
431picture of things.
427 432
428@c What is a command? 433@menu
434* Commands verbs:: Commands always begin with a verb.
435* Command arguments:: Some verbs require arguments.
436@end menu
437
438@node Commands verbs, Command arguments, Command basics, Command basics
439@section Commands verbs
429 440
430@c A command is piece of ``script''---or special shorthand 441Commands are expressed using @dfn{script}, a special shorthand language
431@c language---that the computer can understand. 442that computers can understand without trouble.
432 443
433@c What does script look like? 444Script is an extremely simplified language. Oddly enough, this actually
445makes it look more complicated than it is. Whereas normal languages use
446a variety of embellishments, the form of a script command is always:
434 447
435@c Script is an extremely simplified language. Oddly enough, this 448@example
436@c actually makes it look more complicated than it is. Whereas normal 449 VERB [ARGUMENTS]
437@c languages can use many different embellishments, the form of a script 450@end example
438@c command is always: a command verb, following by its arguments.
439 451
440@c A verb? Arguments? 452The verb expresses what you want your computer to do. There are a fixed
453number of verbs, although this number is usually quite large. On the
454author's computer, it reaches almost 1400 in number. But of course,
455only a handful of these are really necessary.
441 456
442@c The verb is the thing you want your computer to do. There are a set 457Sometimes, the verb is all that's written. A verb is always a single
443@c number of verbs, although this number is quite large. On my 458word, usually related to the task it will perform. @command{reboot} is
444@c computer, it reaches almost 1400 in number! But of course, only a 459a good example. Entering that will cause your computer to reboot,
445@c handful of these are necessary most of the time. 460assuming you have sufficient privileges.
446 461
447@c Sometimes, the verb is all that's necessary. A verb is always a 462Other verbs require more information. These are usually very capable of
448@c single word, usually related to the task it will perform. 463verbs, and must be told more specifically what to do. This extra
449@c @command{reboot} is a good example. Entering that will cause your 464information is given in the form of arguments. Arguments are also
450@c computer to reboot, assuming you have sufficient privileges. 465single words, that appear after the verb. For example, @command{echo}
466is a command verb that prints back whatever you say. @command{echo}
467requires arguments, so that it knows what to echo. A proper use of
468@command{echo} looks like this:
451 469
452@c Other verbs need more information. These are usually very capable of 470@example
453@c verbs, but they must be told more specifically what to do. This 471echo This is an example of using echo!
454@c extra information is given in the form of arguments. Arguments are 472@end example
455@c also words, that appear after the verb. For example, @command{echo}
456@c is a command verb that will print back to you whatever you say.
457@c @command{echo} requires a set of arguments, to know what you want it
458@c to echo! So a proper use of echo might look like:
459 473
460@c @example 474This piece of script expresses a command that causes the computer to
461@c echo This is an example of using echo! 475print back: ``This is an example of using echo!''.
462@c @end example
463 476
464@c This command would result in the computer printing back to you, 477Although command verbs always take the form of simple words, such as
465@c ``This is an example of using echo!''. Pretty easy, no? 478@command{reboot} and @command{echo}, arguments have a wide vaierty of
479forms. There are textual arguments, numerical arguments---even Lisp
480arguments. Distinguishing between these different types of arguments
481requires special typing, since the computer needs to know exactly what
482you mean.
466 483
467@c Although commands are always simple words, arguments can take 484@node Command arguments, , Commands verbs, Command basics
468@c different forms. There are textual arguments, numeric arguments, 485@section Command arguments
469@c even Lisp arguments. Distinguishing among these different types of
470@c arguments requires some special typing, because the computer needs
471@c very specific directions to understand what you mean.
472 486
473@node Bugs and ideas, Concept Index, Installation, Top 487@node Bugs and ideas, Concept Index, Command basics, Top
474@chapter Bugs and ideas 488@chapter Bugs and ideas
475@cindex reporting bugs and ideas 489@cindex reporting bugs and ideas
476@cindex bugs, how to report them 490@cindex bugs, how to report them
@@ -498,10 +512,19 @@ find this package useful!
498@cindex bugs, known 512@cindex bugs, known
499 513
500Below is a partial list of currently known problems with Eshell version 514Below is a partial list of currently known problems with Eshell version
5012.3.2, which is the version distributed with Emacs 21.1. 5152.4, which is the version distributed with Emacs 21.1.
502 516
503@table @asis 517@table @asis
504@item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} fails 518@item Differentiate between aliases and functions
519
520Allow for a bash-compatible syntax, such as:
521
522@example
523alias arg=blah
524function arg () { blah $* }
525@end example
526
527@item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} outputs result after prompt
505 528
506In fact, piping to a process from a looping construct doesn't work in 529In fact, piping to a process from a looping construct doesn't work in
507general. If I change the call to @code{eshell-copy-handles} in 530general. If I change the call to @code{eshell-copy-handles} in
@@ -514,11 +537,6 @@ structured command thing is too complicated at present.
514On some XEmacs system, the subprocess interaction test fails 537On some XEmacs system, the subprocess interaction test fails
515inexplicably, although @command{bc} works fine at the command prompt. 538inexplicably, although @command{bc} works fine at the command prompt.
516 539
517@item @command{ls} in remote directories sometimes fails
518
519For XEmacs users, using @command{ls} in a remote directory sometimes
520fails. The reason why has not yet been found.
521
522@item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+ 540@item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+
523 541
524In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that 542In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that
@@ -563,266 +581,385 @@ since.
563 581
564Make it so that the Lisp command on the right of the pipe is repeatedly 582Make it so that the Lisp command on the right of the pipe is repeatedly
565called with the input strings as arguments. This will require changing 583called with the input strings as arguments. This will require changing
566eshell-do-pipeline to handle non-process targets. 584@code{eshell-do-pipeline} to handle non-process targets.
567 585
568@item Input redirection is not supported 586@item Input redirection is not supported
569 587
570See the entry above. 588See the above entry.
571 589
572@c @item problem running "less" without argument on Windows 590@item Problem running @command{less} without argument on Windows
573@c Before running telnet, I noticed that 'less' (for example) was already 591
574@c configured as a visual command. So I invoked it from eshell to see what 592The result in the Eshell buffer is:
575@c would happen. 593
576@c 594@example
577@c Here's the result in the eshell buffer: 595Spawning child process: invalid argument
578@c 596@end example
579@c Spawning child process: invalid argument 597
580@c 598Also a new @command{less} buffer was created with nothing in it@dots{}
581@c Also a new 'less' buffer was created with nothing in it .. (presumably this 599(presumably this holds the output of @command{less}).
582@c holds the output of less) 600
583@c 601If @command{less.exe} is invoked from the Eshell command line, the
584@c If I run 'less.exe' from the eshell command line, I get the output I expect 602expected output is written to the buffer.
585@c simply written to the buffer. 603
586@c 604Note that this happens on NT-Emacs 20.6.1 on Win2000. The term.el
587@c Note that I'm using FSF NT-Emacs 20.6.1 on Win2000. The term.el package and 605package and the supplied shell both use the @command{cmdproxy} for
588@c the supplied shell both seem to use the 'cmdproxy' program to run things 606running shells.
589@c like shells. 607
590@c @item implement -r, -n and -s switches for cp 608@item Implement @samp{-r}, @samp{-n} and @samp{-s} switches for @command{cp}
591@c @item Make M-5 eshell -> switch to *eshell<5>*, creating it if need be 609
592@c @item mv DIR FILE.tar does not remove directories 610@item Make @kbd{M-5 M-x eshell} switch to ``*eshell<5>*'', creating if need be
593@c This is because the tar option --remove-files doesn't do so. Should 611
594@c it be Eshell's job? 612@item @samp{mv DIR FILE.tar} does not remove directories
595@c @item Write an article about Eshell for the LinuxWorld journal. 613
596@c @item bind standard-output and standard-error, so that if a Lisp function 614This is because the tar option --remove-files doesn't do so. Should it
597@c calls `print', everything will happen as it should (albeit slowly) 615be Eshell's job?
598@c @item when the extension modules fail to load, cd / gives a Lisp error 616
599@c @item if a globbing patterns returns only one match, should it still be a 617@item Bind @code{standard-output} and @code{standard-error}
600@c list? 618
601@c @item make sure that the syntax table correctly in eshell mode 619This would be so that if a Lisp function calls @code{print}, everything
602@c So that M-DEL acts in a predictable manner, etc. 620will happen as it should (albeit slowly).
603@c @item allow all Eshell buffers to share the same history and list-dir 621
604@c @item error with script commands and outputting to /dev/null 622@item When an extension module fails to load, @samp{cd /} gives a Lisp error
605@c If a script file, somewhere in the middle, does a "> /dev/null", 623
606@c output from all subsequent commands will be swallowed 624@item If a globbing pattern returns one match, should it be a list?
607@c @item split up parsing of the text after a $ in eshell-var 625
608@c Similar to way that eshell-arg is structured. Then add parsing of 626@item Make sure syntax table is correct in Eshell mode
609@c $[?\n] 627
610@c @item after pressing M-RET, redisplay before running the next command 628So that @kbd{M-DEL} acts in a predictable manner, etc.
611@c @item argument predicates and modifiers should work anywhere in a path 629
612@c /usr/local/src/editors/vim $ vi **/CVS(/)/Root(.) 630@item Allow all Eshell buffers to share the same history and list-dir
613@c Invalid regexp: "Unmatched ( or \\(" 631
614@c 632@item There is a problem with script commands that output to @file{/dev/null}
615@c with zsh, the glob above expands to all files named Root in 633
616@c directories named CVS. 634If a script file, somewhere in the middle, uses @samp{> /dev/null},
617@c @item typing "echo ${locate locate}/bin<tab>" results in a Lisp error 635output from all subsequent commands is swallowed.
618@c Perhaps it should interpolate all permutations, and make that the 636
619@c globbing result, since otherwise hitting return here will result in 637@item Split up parsing of text after @samp{$} in @file{esh-var.el}
620@c "(list of filenames)/bin", which is never very valuable. Thus, one 638
621@c could cat only c backup files by using "ls ${identity *.c}~". In that 639Make it similar to the way that @file{esh-arg.el} is structured.
622@c case, having an alias command name `glob' for `identity' would be 640Then add parsing of @samp{$[?\n]}.
623@c useful 641
624@c @item for XEmacs on Win32, fix `file-name-all-completions' 642@item After pressing @kbd{M-RET}, redisplay before running the next command
625@c Make sure it returns directory names terminated by 643
626@c `directory-sep-char' (which is initialized to be ?/), rather than 644@item Argument predicates and modifiers should work anywhere in a path
627@c backslash 645
628@c @item once symbolic mode is supported for umask, implement chmod in Lisp 646@example
629@c @item create `eshell-expand-file-name' 647/usr/local/src/editors/vim $ vi **/CVS(/)/Root(.)
630@c Which uses a data table to transform things like "~+", "...", etc 648Invalid regexp: "Unmatched ( or \\("
631@c @item abstract `eshell-smart.el' into `smart-scroll.el' 649@end example
632@c It only really needs: to be hooked onto the output filter and the 650
633@c pre-command hook, and to have the input-end and input-start markers. 651With @command{zsh}, the glob above expands to all files named
634@c And to know whether the last output group was "successful". 652@file{Root} in directories named @file{CVS}.
635@c @item allow for fully persisting the state of Eshell 653
636@c vars, history, buffer, input, dir stack, etc. 654@item Typing @samp{echo ${locate locate}/bin<TAB>} results in a Lisp error
637@c @item implement D in the predicate list 655
638@c It means that files beginning with a dot should be included in the 656Perhaps it should interpolate all permutations, and make that the
639@c glob match 657globbing result, since otherwise hitting return here will result in
640@c @item a comma in a predicate list means OR 658``(list of filenames)/bin'', which is never valuable. Thus, one could
641@c @item error if a glob doesn't expand due to a predicate 659@command{cat} only C backup files by using @samp{ls ${identity *.c}~}.
642@c An error should be generated only if `eshell-error-if-no-glob' is 660In that case, having an alias command name @command{glob} for
643@c non-nil 661@command{identity} would be useful.
644@c @item the following doesn't cause an indent-according-to-mode to occur 662
645@c (+ RET SPC TAB 663@item Fix `file-name-all-completions' for XEmacs on Win32
646@c @item create `eshell-auto-accumulate-list' 664
647@c It is a list of commands for which, if the user presses RET, the text 665Make sure it returns directory names terminated by
648@c gets staged as the next Eshell command, rather than being sent to the 666@code{directory-sep-char} (which is initialized to be @samp{?/}), rather
649@c current interactive 667than backslash.
650@c @item display file and line number if an error occurs in a script 668
651@c @item wait doesn't work with process ids at the moment 669@item Once symbolic mode is supported for @command{umask}, implement @command{chmod} in Lisp
652@c @item enable the direct-to-process input code in eshell-term.el 670
653@c @item problem with repeating "echo ${find /tmp}" 671@item Create @code{eshell-expand-file-name}
654@c With smart display active, if I hold down RET, after a while it can't 672
655@c keep up anymore and starts outputting blank lines. It only happens if 673This would use a data table to transform things such as @samp{~+},
656@c an asynchronous process is involved... 674@samp{...}, etc.
657@c 675
658@c I think the problem is that `eshell-send-input' is resetting the input 676@item Abstract @file{em-smart.el} into @file{smart-scroll.el}
659@c target location, so that if the asynchronous process is not done by 677
660@c the time the next RET is received, the input processor thinks that the 678It only really needs: to be hooked onto the output filter and the
661@c input is meant for the process; which, because smart display is 679pre-command hook, and to have the input-end and input-start markers.
662@c enabled, will be the text of the last command line! That is a bug in 680And to know whether the last output group was ``successful''.
663@c itself. 681
664@c 682@item Allow for fully persisting the state of Eshell
665@c In holding down RET while an asynchronous process is running, there 683
666@c will be a point in between termination of the process, and the running 684This would include: variables, history, buffer, input, dir stack, etc.
667@c of eshell-post-command-hook, which would cause `eshell-send-input' to 685
668@c call `eshell-copy-old-input', and then process that text as a command 686@item Implement D as an argument predicate
669@c to be run after the process. Perhaps there should be a way of killing 687
670@c pending input between the death of the process, and the 688It means that files beginning with a dot should be included in the
671@c post-command-hook. 689glob match.
672@c @item allow for a more aggressive smart display mode 690
673@c Perhaps toggled by a command, that makes each output block a smart 691@item A comma in a predicate list should mean OR
674@c display block 692
675@c @item create more meta variables 693At the moment, this is not supported.
676@c $! -- the reason for the failure of the last disk command, or the text 694
677@c of the last Lisp error 695@item Error if a glob doesn't expand due to a predicate
678@c 696
679@c $= -- a special associate array, which can take references of the form 697An error should be generated only if @code{eshell-error-if-no-glob} is
680@c $=[REGEXP]. It also indexes into the directory ring 698non-nil.
681@c @item eshell scripts can't execute in the background 699
682@c @item support zsh's "Parameter Expansion" syntax, i.e. ${NAME:-VAL} 700@item @samp{(+ RET SPC TAB} does not cause @code{indent-according-to-mode} to occur
683@c @item write an `info' alias that can take arguments 701
684@c So that the user can enter "info chmod" 702@item Create @code{eshell-auto-accumulate-list}
685@c @item split off more generic code from Eshell 703
686@c parse-args.el --- parse a list of arguments 704This is a list of commands for which, if the user presses @kbd{RET}, the
687@c interpolate.el --- interpolate $variable $(lisp)... references 705text is staged as the next Eshell command, rather than being sent to the
688@c interp.el --- find which interpretor to run a script with 706current interactive process.
689@c sh-ring.el --- extend ring.el for persistant, searchable history 707
690@c zsh-glob.el --- zsh-style globbing and predicate/modifiers 708@item Display file and line number if an error occurs in a script
691@c smartdisp.el --- smart scrolling in input buffers 709
692@c egetopt.el --- `eshell-eval-using-options' 710@item @command{wait} doesn't work with process ids at the moment
693@c prompt.el --- code for outputting and navigating prompts 711
694@c cmd-rebind.el --- rebind certain keys in the input text 712@item Enable the direct-to-process input code in @file{em-term.el}
695@c unix.el --- provides Lispish UNIX command, such as unix-rm, etc. 713
696@c emacs-ls.el --- implementation of ls in Emacs Lisp 714@item Problem with repeating @samp{echo $@{find /tmp@}}
697@c texidoc.el 715
698@c pushd.el --- implementation of pushd/popd in Lisp 716With smart display active, if @kbd{RET} is held down, after a while it
699@c interface.el -- a mode for reading command-line input from the user 717can't keep up anymore and starts outputting blank lines. It only
700@c @item create a mode `eshell-browse' 718happens if an asynchronous process is involved@dots{}
701@c It would treat the Eshell buffer as a outline. Collapsing the outline 719
702@c hides all of the output text. Collapsing again would show only the 720I think the problem is that @code{eshell-send-input} is resetting the
703@c first command run in each directory 721input target location, so that if the asynchronous process is not done
704@c @item look through the Korn Shell book for feature ideas 722by the time the next @kbd{RET} is received, the input processor thinks
705@c @item allow other version of a file to be referenced by "file{rev}" 723that the input is meant for the process; which, when smart display is
706@c This would be expanded by `eshell-expand-file-name' 724enabled, will be the text of the last command line! That is a bug in
707@c @item print "You have new mail" when the "Mail" icon gets turned on 725itself.
708@c @item implement M-| 726
709@c @item implement input redirection 727In holding down @kbd{RET} while an asynchronous process is running,
710@c If it's a lisp function, input redirection implies "xargs" (in a 728there will be a point in between termination of the process, and the
711@c way..). And if input redirection is added, don't forget to update the 729running of @code{eshell-post-command-hook}, which would cause
712@c file-name-quote-list, and the delimiter list. 730@code{eshell-send-input} to call @code{eshell-copy-old-input}, and then
713@c @item allow #<WORD ARG> to be a generic syntax 731process that text as a command to be run after the process. Perhaps
714@c With the handling of "word" specified by an `eshell-special-alist'. 732there should be a way of killing pending input between the death of the
715@c @item in `eval-using-options', have a :complete tag 733process, and the @code{post-command-hook}.
716@c It would be used to provide completion rules for that command. Then 734
717@c the macro will automagically define the completion function 735@item Allow for a more aggressive smart display mode
718@c @item for `eshell-command-on-region', redirections apply to the result 736
719@c So that "+ > 'blah" will cause the result of the `+' (using input from 737Perhaps toggled by a command, that makes each output block a smart
720@c the current region) to be inserting in the symbol `blah'. 738display block.
721@c 739
722@c If a disk command is being invoked, the input is sent as standard 740@item Create more meta variables
723@c input, as if a "cat <region> |" were invoked. 741
724@c 742@table @samp
725@c If a lisp command, or an alias, is invoked, then: if the line has no 743@item $!
726@c ^J characters, it is divided by whitespace and passed as arguments to 744The reason for the failure of the last disk command, or the text of the
727@c the lisp function. Otherwise, it is divided at the ^J characters. 745last Lisp error.
728@c Thus, invoking `+' on a series of numbers will add them; `min' would 746
729@c display the smallest figure. 747@item $=
730@c @item write `eshell-script-mode' as a minor mode 748A special associate array, which can take references of the form
731@c It would provide syntax, abbrev, highlighting and indenting support 749@samp{$=[REGEXP]}. It indexes into the directory ring.
732@c like emacs-lisp-mode + shell-mode. 750@end table
733@c @item in the history mechanism, finish bash-style support 751
734@c For !n, !#, !:%, and !:1- as separate from !:1* 752@item Eshell scripts can't execute in the background
735@c @item support the -n command line option for "history" 753
736@c @item implement `fc' 754@item Support zsh's ``Parameter Expansion'' syntax, i.e. @samp{$@{NAME:-VAL@}}
737@c @item specifying a frame as a redirection target implies point's buffer 755
738@c @item implement ">FUNC-OR-FUNC-LIST" 756@item Write an @command{info} alias that can take arguments
739@c This would allow for an "output translator", that takes a function to 757
740@c modify output with, and the target. Devise a syntax that words well 758So that the user can enter @samp{info chmod}, for example.
741@c with pipes, and can accomodate multiple functions (i.e.,">'(upcase 759
742@c regexp-quote)" or ">'upcase"). 760@item Create a mode @code{eshell-browse}
743@c @item allow Eshell to read/write to/from standard input and output 761
744@c This would be optional, rather than always using the Eshell buffer. 762It would treat the Eshell buffer as a outline. Collapsing the outline
745@c This would allow it to be run from the command line. 763hides all of the output text. Collapsing again would show only the
746@c @item write a "help" command 764first command run in each directory
747@c It could even call subcommands with "--help" (or "-h" or "/?"). 765
748@c @item implement stty 766@item Allow other revisions of a file to be referenced using @samp{file@{rev@}}
749@c @item support rc's matching operator, "~ (list) regexp" 767
750@c @item implement "bg" and "fg" to edit `eshell-process-list' 768This would be expanded by @code{eshell-expand-file-name} (see above).
751@c Using "bg" on a process that is already in the background does 769
752@c nothing. Specifying redirection targets replaces (or adds) to the 770@item Print ``You have new mail'' when the ``Mail'' icon is turned on
753@c list current being used. 771
754@c @item have "jobs" print only the processes for the current eshell 772@item Implement @kbd{M-|} for Eshell
755@c @item how do I discover that a background process has requested input? 773
756@c @item support 2>&1 and >& and 2> and |& 774@item Implement input redirection
757@c The syntax table for parsing these should be customizable, such that 775
758@c the user could change it to use rc syntax: >[2=1]. 776If it's a Lisp function, input redirection implies @command{xargs} (in a
759@c @item allow $_[-1], which reads the last element of the array, etc. 777way@dots{}). If input redirection is added, also update the
760@c @item make $x[*] equal to listing out the full contents of x 778@code{file-name-quote-list}, and the delimiter list.
761@c Return them as a list, so that $_[*] is all the arguments of the last 779
762@c command. 780@item Allow @samp{#<WORD ARG>} as a generic syntax
763@c @item move ANSI code handling from `term' into `eshell-term' 781
764@c And make it possible for the user to send char-by-char to the 782With the handling of @emph{word} specified by an
765@c underlying process. Ultimately, I should be able to move away from 783@code{eshell-special-alist}.
766@c using term.el altogether, since everything but the ANSI code handling 784
767@c is already part of Eshell. Then, things would work correctly on Win32 785@item In @code{eshell-eval-using-options}, allow a @code{:complete} tag
768@c as well (which doesn't have "/bin/sh", though term tries to use it) 786
769@c @item have other shell spawning commands be visual 787It would be used to provide completion rules for that command. Then the
770@c Make (su, bash, telnet, rlogin, rsh, etc.) be part of 788macro will automagically define the completion function.
771@c `eshell-visual-commands'. The only exception is if rsh/su/bash are 789
772@c simply being used to invoke a single command. Then, it should be 790@item For @code{eshell-command-on-region}, apply redirections to the result
773@c based on what that command is. 791
774@c @item create an alias "open" 792So that @samp{+ > 'blah} would cause the result of the @code{+} (using
775@c This will search for some way to open its argument (similar to opening 793input from the current region) to be inserting into the symbol
776@c a file in the Windows Explorer). Perhaps using ffap... 794@code{blah}.
777@c @item alias "read" to be the same as "open", except read-only 795
778@c @item write a "tail -f" alias which does a view-file 796If an external command is being invoked, the input is sent as standard
779@c I.e., it moves point to the end of the buffer, and then turns on 797input, as if a @samp{cat <region> |} had been invoked.
780@c auto-revert mode in that buffer at frequent intervals -- and a head 798
781@c alias which assums an upper limit of `eshell-maximum-line-length' 799If a Lisp command, or an alias, is invoked, then if the line has no
782@c characters per line. 800newline characters, it is divided by whitespace and passed as arguments
783@c @item make dgrep load dired, mark everything, then execute the A binding 801to the Lisp function. Otherwise, it is divided at the newline
784@c @item write emsh.c 802characters. Thus, invoking @code{+} on a series of numbers will add
785@c It just runs Emacs with the appropriate arguments to invoke eshell. 803them; @code{min} would display the smallest figure, etc.
786@c That way, it could be listed as a login shell. 804
787@c @item use an intangible PS2 string for multi-line input prompts 805@item Write @code{eshell-script-mode} as a minor mode
788@c @item auto-detect when a command is visual, by checking TERMCAP usage 806
789@c @item First keypress after M-x watson triggers `eshell-send-input' 807It would provide syntax, abbrev, highlighting and indenting support like
790@c @item Emacs 20.3: Figure out why pcomplete won't make 808@code{emacs-lisp-mode} and @code{shell-mode}.
791@c @item Make / electric 809
792@c So that it automatically expands and corrects pathnames. Or make 810@item In the history mechanism, finish the @command{bash}-style support
793@c pathname completion for pcomplete auto-expand "/u/i/std<TAB>" to 811
794@c "/usr/include/std<TAB>". 812This means @samp{!n}, @samp{!#}, @samp{!:%}, and @samp{!:1-} as separate
795@c @item Write pushd/popd out to disk along with last-dir-ring 813from @samp{!:1*}.
796@c @item add options to eshell/cat which would cause it to sort and uniq 814
797@c @item implement in Lisp: wc. Also count sentences, paragraphs, pages. 815@item Support the -n command line option for @command{history}
798@c @item once piping is added, implement sort and uniq 816
799@c @item implement touch 817@item Implement @command{fc} in Lisp
800@c @item implement epatch 818
801@c Calls ediff-patch-file, or ediff-patch-buffer, depending on its 819@item Specifying a frame as a redirection target should imply the currently active window's buffer
802@c argument. 820
803@c @item have an option for bringing up ls -l result in a dired buffer 821@item Implement @samp{>FUNC-OR-FUNC-LIST}
804@c @item write a version of xargs that's based on command rewriting 822
805@c find X | xargs Y == Y ${find X}. Maybe I could change 823This would allow for an ``output translators'', that take a function to
806@c eshell-do-pipelines to perform this on-thy-fly rewriting. 824modify output with, and a target. Devise a syntax that works well with
807@c @item implement head and tail in Lisp 825pipes, and can accomodate multiple functions (i.e., @samp{>'(upcase
808@c @item write an alias for less and more that brings up a view buffer 826regexp-quote)} or @samp{>'upcase}).
809@c Such that they can press SPC and DEL, and then q to return to eshell. 827
810@c The more command would be equivalent to: X > #<buffer Y>; view-buffer 828@item Allow Eshell to read/write to/from standard input and output
811@c #<buffer Y> 829
812@c @item differentiate between aliases and functions 830This would be optional, rather than always using the Eshell buffer.
813@c Allow for a bash-compatible syntax, such as: 831This would allow it to be run from the command line (perhaps).
814@c 832
815@c alias arg=blah 833@item Write a @command{help} command
816@c function arg () { blah $* } 834
817@c @item find the various references to shell-mode within Emacs 835It would call subcommands with ``--help'', or ``-h'' or ``/?'', as
818@c And add support for Eshell there, since now Eshell is going to be part 836appropriate.
819@c of Emacs. 837
820@c @item permit umask to be set on a cp target during the cp command 838@item Implement @command{stty} in Lisp
821@c @item if the first thing that I do after I enter Emacs 839
822@c is to run eshell-command and invoke ls, and then I use M-x eshell, it 840@item Support @command{rc}'s matching operator, e.g. @samp{~ (list) regexp}
823@c doesn't show me anything. 841
824@c @item M-RET during a long command doesn't quite work 842@item Implement @command{bg} and @command{fg} as editors of @code{eshell-process-list}
825@c Since it keeps the cursor up where the command was invoked. 843
844Using @command{bg} on a process that is already in the background does
845nothing. Specifying redirection targets replaces (or adds) to the list
846current being used.
847
848@item Have @command{jobs} print only the processes for the current shell
849
850@item How can Eshell learn if a background process has requested input?
851
852@item Support @samp{2>&1} and @samp{>&} and @samp{2>} and @samp{|&}
853
854The syntax table for parsing these should be customizable, such that the
855user could change it to use rc syntax: @samp{>[2=1]}.
856
857@item Allow @samp{$_[-1]}, which would indicate the last element of the array
858
859@item Make @samp{$x[*]} equal to listing out the full contents of @samp{x}
860
861Return them as a list, so that @samp{$_[*]} is all the arguments of the
862last command.
863
864@item Copy ANSI code handling from @file{term.el} into @file{em-term.el}
865
866Make it possible for the user to send char-by-char to the underlying
867process. Ultimately, I should be able to move away from using term.el
868altogether, since everything but the ANSI code handling is already part
869of Eshell. Then, things would work correctly on Win32 as well (which
870doesn't have @file{/bin/sh}, although @file{term.el} tries to use it)
871
872@item Make the shell spawning commands be visual
873
874That is, make (@command{su}, @command{bash}, @command{telnet},
875@command{rlogin}, @command{rsh}, etc.) be part of
876@code{eshell-visual-commands}. The only exception is if the shell is
877being used to invoke a single command. Then, the behavior should be
878based on what that command is.
879
880@item Create an smart viewing command named @command{open}
881
882This would search for some way to open its argument (similar to opening
883a file in the Windows Explorer).
884
885@item Alias @command{read} to be the same as @command{open}, only read-only
886
887@item Write a @command{tail} command which uses @code{view-file}
888
889It would move point to the end of the buffer, and then turns on
890auto-revert mode in that buffer at frequent intervals---and a
891@command{head} alias which assums an upper limit of
892@code{eshell-maximum-line-length} characters per line.
893
894@item Make @command{dgrep} load @code{dired}, mark everything, then invoke @code{dired-do-search}
895
896@item Write emsh.c
897
898This would run Emacs with the appropriate arguments to invoke Eshell
899only. That way, it could be listed as a login shell.
900
901@item Use an intangible @code{PS2} string for multi-line input prompts
902
903@item Auto-detect when a command is visual, by checking @code{TERMCAP} usage
904
905@item The first keypress after @kbd{M-x watson} triggers `eshell-send-input'
906
907@item Make @kbd{/} electric
908
909So that it automatically expands and corrects pathnames. Or make
910pathname completion for Pcomplete auto-expand @samp{/u/i/std<TAB>} to
911@samp{/usr/include/std<TAB>}.
912
913@item Write the @command{pushd} stack to disk along with @code{last-dir-ring}
914
915@item Add options to @code{eshell/cat} which would allow it to sort and uniq
916
917@item Implement @command{wc} in Lisp
918
919Add support for counting sentences, paragraphs, pages, etc.
920
921@item Once piping is added, implement @command{sort} and @command{uniq} in Lisp
922
923@item Implement @command{touch} in Lisp
924
925@item Implement @command{comm} in Lisp
926
927@item Implement an @command{epatch} command in Lisp
928
929This would call @code{ediff-patch-file}, or @code{ediff-patch-buffer},
930depending on its argument.
931
932@item Have an option such that @samp{ls -l} generates a dired buffer
933
934@item Write a version of @command{xargs} based on command rewriting
935
936That is, @samp{find X | xargs Y} would be indicated using @samp{Y
937$@{find X@}}. Maybe @code{eshell-do-pipelines} could be changed to
938perform this on-thy-fly rewriting.
939
940@item Write an alias for @command{less} that brings up a @code{view-mode} buffer
941
942Such that the user can press @kbd{SPC} and @kbd{DEL}, and then @kbd{q}
943to return to Eshell. It would be equivalent to:
944@samp{X > #<buffer Y>; view-buffer #<buffer Y>}.
945
946@item Make @code{eshell-mode} as much a full citizen as @code{shell-mode}
947
948Everywhere in Emacs where @code{shell-mode} is specially noticed, add
949@code{eshell-mode} there.
950
951@item Permit the umask to be selectively set on a @command{cp} target
952
953@item Problem using @kbd{M-x eshell} after using @code{eshell-command}
954
955If the first thing that I do after entering Emacs is to run
956@code{eshell-command} and invoke @command{ls}, and then use @kbd{M-x
957eshell}, it doesn't display anything.
958
959@item @kbd{M-RET} during a long command (using smart display) doesn't work
960
961Since it keeps the cursor up where the command was invoked.
962
826@end table 963@end table
827 964
828@node Concept Index, Function and Variable Index, Bugs and ideas, Top 965@node Concept Index, Function and Variable Index, Bugs and ideas, Top
@@ -835,7 +972,7 @@ See the entry above.
835 972
836@printindex fn 973@printindex fn
837 974
838@node Key Index, , Function and Variable Index, Top 975@node Key Index, , Function and Variable Index, Top
839@unnumbered Key Index 976@unnumbered Key Index
840 977
841@printindex ky 978@printindex ky