diff options
| author | John Wiegley | 2000-10-29 05:18:48 +0000 |
|---|---|---|
| committer | John Wiegley | 2000-10-29 05:18:48 +0000 |
| commit | dace60cfea488a9cc8a775109c56b66907aa6abb (patch) | |
| tree | 364b9c0114540a5f51a42e1e28a37b98714edaee /man | |
| parent | 657f9cb8b7f7c3a9687f3998319ce63346ef13a4 (diff) | |
| download | emacs-dace60cfea488a9cc8a775109c56b66907aa6abb.tar.gz emacs-dace60cfea488a9cc8a775109c56b66907aa6abb.zip | |
See ChangeLog
Diffstat (limited to 'man')
| -rw-r--r-- | man/ChangeLog | 4 | ||||
| -rw-r--r-- | man/eshell.texi | 825 |
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 @@ | |||
| 1 | 2000-10-28 John Wiegley <johnw@gnu.org> | ||
| 2 | |||
| 3 | * eshell.texi: Further editing, and finished the "bugs" section. | ||
| 4 | |||
| 1 | 2000-10-28 Eli Zaretskii <eliz@is.elta.co.il> | 5 | 2000-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 | ||
| 116 | This manual documents Eshell, a shell-like command interpretor | 116 | This manual documents Eshell, a shell-like command interpretor |
| 117 | implemented entirely in Emacs Lisp. It invokes no external processes | 117 | implemented in Emacs Lisp. It invokes no external processes except for |
| 118 | beyond those requested by the user. It is intended to be a functional | 118 | those requested by the user. It is intended to be a functional |
| 119 | replacement for command shells such as @command{bash}, @command{zsh}, | 119 | replacement 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 |
| 121 | most of the tasks accomplished by such tools. | 121 | handling 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 | ||
| 139 | Eshell is a @dfn{command shell} written using Emacs Lisp. All of what it does | 140 | Eshell is a @dfn{command shell} written in Emacs Lisp. Everything it |
| 140 | it uses Emacs' facilities to do. This means Eshell is as portable as | 141 | does it uses Emacs' facilities to do. This means that Eshell is as |
| 141 | Emacs itself. It also means that cooperation with other Lisp code is | 142 | portable as Emacs itself. It also means that cooperation with Lisp code |
| 142 | natural and seamless. | 143 | is natural and seamless. |
| 143 | 144 | ||
| 144 | So what is a command shell? To properly understand the role of a shell, | 145 | What is a command shell? To properly understand the role of a shell, |
| 145 | it's necessary to visualize what a computer does for you. Basically, a | 146 | it's necessary to visualize what a computer does for you. Basically, a |
| 146 | computer is a tool; in order to use that tool, you must tell it what to | 147 | computer is a tool; in order to use that tool, you must tell it what to |
| 147 | do---or give it ``commands''. These commands take many forms, such as | 148 | do---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 | |||
| 149 | one form of command input. | 150 | one form of command input. |
| 150 | 151 | ||
| 151 | By far the most versatile way to express what you want the computer to | 152 | By far the most versatile way to express what you want the computer to |
| 152 | do is using an abbreviated language, called @dfn{a script}. In a | 153 | do is by using an abbreviated language called @dfn{script}. In script, |
| 153 | script, instead | 154 | instead of telling the computer, ``list my files, please'', one writes |
| 154 | of telling the computer, ``list my files, please'', we write just | 155 | just ``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 | 156 | abbreviated to ``ls''. Typing @kbd{ls} in a command shell is a script |
| 156 | it to ``ls''. Typing @kbd{ls} in a command shell is a script way of | 157 | way of telling the computer to list your files.@footnote{This is |
| 157 | telling the computer to list your files. This is comparable to viewing | 158 | comparable to viewing the contents of a folder using a graphical |
| 158 | the contents of a folder using a graphical display. | 159 | display.} |
| 159 | 160 | ||
| 160 | The real flexibility is apparent only when you realize that there are | 161 | The real flexibility of this approach is apparent only when you realize |
| 161 | many, many ways to list your files. Perhaps you want them sorted by | 162 | that there are many, many different ways to list files. Perhaps you |
| 162 | name, or sorted by date, or in reverse order, or grouped by type. Most | 163 | want them sorted by name, sorted by date, in reverse order, or grouped |
| 163 | graphical browsers have simple ways to express this. But what about | 164 | by type. Most graphical browsers have simple ways to express this. But |
| 164 | showing only a few files, or only files that meet a certain criteria? | 165 | what about showing only a few files, or only files that meet a certain |
| 165 | In very complex and specific situations, the request becomes too | 166 | criteria? In very complex and specific situations, the request becomes |
| 166 | difficult to express with a mouse. It is just these kinds of requests | 167 | too difficult to express using a mouse or pointing device. It is just |
| 167 | that are solvable using a command shell. | 168 | these kinds of requests that are easily solved using a command shell. |
| 168 | 169 | ||
| 169 | For example, what if you want to list every Word file on your hard | 170 | For example, what if you want to list every Word file on your hard |
| 170 | drive, larger than 100 kilobytes in size, and which hasn't been looked | 171 | drive, 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 | |||
| 173 | computer for such a list? There is no way to do it! At least, not | 174 | computer for such a list? There is no way to do it! At least, not |
| 174 | without using a command shell. | 175 | without using a command shell. |
| 175 | 176 | ||
| 176 | So the role of a command shell is to give you more control over what | 177 | The role of a command shell is to give you more control over what your |
| 177 | your computer does for you. Not everyone needs this amount of control, | 178 | computer does for you. Not everyone needs this amount of control, and |
| 178 | and it does come at a cost: Learning the necessary script commands to | 179 | it does come at a cost: Learning the necessary script commands to |
| 179 | express what you want done. A complicated query, such as the example | 180 | express what you want done. A complicated query, such as the example |
| 180 | above, takes time to learn. But if you find yourself using your | 181 | above, takes time to learn. But if you find yourself using your |
| 181 | computer frequently enough, it is more than worthwhile in the long run. | 182 | computer frequently enough, it is more than worthwhile in the long run. |
| 182 | Any tool you use often deserves your time in learning to master it. | 183 | Any 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 |
| 184 | looks like: But don't let it fool you; once you know what's going on, | 185 | looks like: But don't let it fool you; once you know what's going on, |
| 185 | it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.} | 186 | it'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)}.} | |||
| 187 | As of Emacs 21, Eshell is part of the standard Emacs distribution. | 188 | As 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, | |||
| 230 | requests, bug reports and encouragement. Thanks a lot! Without you | 231 | requests, bug reports and encouragement. Thanks a lot! Without you |
| 231 | there would be no new releases of Eshell. | 232 | there 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 | ||
| 237 | As mentioned above, Eshell comes preinstalled since Emacs 21. If you're | 238 | As mentioned above, Eshell comes preinstalled as of Emacs 21. If you're |
| 238 | using Emacs 20.4 or later, or XEmacs 21, you can download the most | 239 | using Emacs 20.4 or later, or XEmacs 21, you can download the most |
| 239 | recent version of Eshell from | 240 | recent 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 | ||
| 242 | If you are using Emacs 21, please skip this section. | 243 | However, 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, | |||
| 420 | e.g., @code{dvilj4} for LaserJet-compatible printers. | 421 | e.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. | 427 | A command shell is a mechanism for entering verbally-formed commands. |
| 428 | This is really all that it does, and every feature described in this | ||
| 429 | manual is a means to that end. Therefore, it's important to get a firm | ||
| 430 | grasp on exactly what a command is, and how it fits into the overall | ||
| 431 | picture 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 | 441 | Commands are expressed using @dfn{script}, a special shorthand language |
| 431 | @c language---that the computer can understand. | 442 | that computers can understand without trouble. |
| 432 | 443 | ||
| 433 | @c What does script look like? | 444 | Script is an extremely simplified language. Oddly enough, this actually |
| 445 | makes it look more complicated than it is. Whereas normal languages use | ||
| 446 | a 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? | 452 | The verb expresses what you want your computer to do. There are a fixed |
| 453 | number of verbs, although this number is usually quite large. On the | ||
| 454 | author's computer, it reaches almost 1400 in number. But of course, | ||
| 455 | only 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 | 457 | Sometimes, 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 | 458 | word, 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 | 459 | a good example. Entering that will cause your computer to reboot, |
| 445 | @c handful of these are necessary most of the time. | 460 | assuming you have sufficient privileges. |
| 446 | 461 | ||
| 447 | @c Sometimes, the verb is all that's necessary. A verb is always a | 462 | Other verbs require more information. These are usually very capable of |
| 448 | @c single word, usually related to the task it will perform. | 463 | verbs, and must be told more specifically what to do. This extra |
| 449 | @c @command{reboot} is a good example. Entering that will cause your | 464 | information is given in the form of arguments. Arguments are also |
| 450 | @c computer to reboot, assuming you have sufficient privileges. | 465 | single words, that appear after the verb. For example, @command{echo} |
| 466 | is a command verb that prints back whatever you say. @command{echo} | ||
| 467 | requires 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 | 471 | echo 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 | 474 | This piece of script expresses a command that causes the computer to |
| 461 | @c echo This is an example of using echo! | 475 | print 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, | 477 | Although 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 |
| 479 | forms. There are textual arguments, numerical arguments---even Lisp | ||
| 480 | arguments. Distinguishing between these different types of arguments | ||
| 481 | requires special typing, since the computer needs to know exactly what | ||
| 482 | you 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 | ||
| 500 | Below is a partial list of currently known problems with Eshell version | 514 | Below is a partial list of currently known problems with Eshell version |
| 501 | 2.3.2, which is the version distributed with Emacs 21.1. | 515 | 2.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 | |||
| 520 | Allow for a bash-compatible syntax, such as: | ||
| 521 | |||
| 522 | @example | ||
| 523 | alias arg=blah | ||
| 524 | function 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 | ||
| 506 | In fact, piping to a process from a looping construct doesn't work in | 529 | In fact, piping to a process from a looping construct doesn't work in |
| 507 | general. If I change the call to @code{eshell-copy-handles} in | 530 | general. If I change the call to @code{eshell-copy-handles} in |
| @@ -514,11 +537,6 @@ structured command thing is too complicated at present. | |||
| 514 | On some XEmacs system, the subprocess interaction test fails | 537 | On some XEmacs system, the subprocess interaction test fails |
| 515 | inexplicably, although @command{bc} works fine at the command prompt. | 538 | inexplicably, although @command{bc} works fine at the command prompt. |
| 516 | 539 | ||
| 517 | @item @command{ls} in remote directories sometimes fails | ||
| 518 | |||
| 519 | For XEmacs users, using @command{ls} in a remote directory sometimes | ||
| 520 | fails. 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 | ||
| 524 | In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that | 542 | In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that |
| @@ -563,266 +581,385 @@ since. | |||
| 563 | 581 | ||
| 564 | Make it so that the Lisp command on the right of the pipe is repeatedly | 582 | Make it so that the Lisp command on the right of the pipe is repeatedly |
| 565 | called with the input strings as arguments. This will require changing | 583 | called with the input strings as arguments. This will require changing |
| 566 | eshell-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 | ||
| 570 | See the entry above. | 588 | See 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 | 592 | The 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: | 595 | Spawning child process: invalid argument |
| 578 | @c | 596 | @end example |
| 579 | @c Spawning child process: invalid argument | 597 | |
| 580 | @c | 598 | Also 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 | 601 | If @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 | 602 | expected output is written to the buffer. |
| 585 | @c simply written to the buffer. | 603 | |
| 586 | @c | 604 | Note 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 | 605 | package 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 | 606 | running 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 | 614 | This 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) | 615 | be 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 | 619 | This would be so that if a Lisp function calls @code{print}, everything |
| 602 | @c So that M-DEL acts in a predictable manner, etc. | 620 | will 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 | 628 | So 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. | 634 | If 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 | 635 | output 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 | 639 | Make 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 | 640 | Then 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 | 648 | Invalid 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. | 651 | With @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 | 656 | Perhaps it should interpolate all permutations, and make that the |
| 639 | @c glob match | 657 | globbing 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 | 660 | In 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 | 665 | Make 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 | 667 | than 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 | 673 | This 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 | 678 | It 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 | 679 | pre-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 | 680 | And 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 | 684 | This 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 | 688 | It means that files beginning with a dot should be included in the |
| 671 | @c post-command-hook. | 689 | glob 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 | 693 | At 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 | 697 | An error should be generated only if @code{eshell-error-if-no-glob} is |
| 680 | @c $=[REGEXP]. It also indexes into the directory ring | 698 | non-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 | 704 | This is a list of commands for which, if the user presses @kbd{RET}, the |
| 687 | @c interpolate.el --- interpolate $variable $(lisp)... references | 705 | text 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 | 706 | current 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 | 716 | With 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 | 717 | can't keep up anymore and starts outputting blank lines. It only |
| 700 | @c @item create a mode `eshell-browse' | 718 | happens 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 | 720 | I think the problem is that @code{eshell-send-input} is resetting the |
| 703 | @c first command run in each directory | 721 | input target location, so that if the asynchronous process is not done |
| 704 | @c @item look through the Korn Shell book for feature ideas | 722 | by 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}" | 723 | that the input is meant for the process; which, when smart display is |
| 706 | @c This would be expanded by `eshell-expand-file-name' | 724 | enabled, 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 | 725 | itself. |
| 708 | @c @item implement M-| | 726 | |
| 709 | @c @item implement input redirection | 727 | In holding down @kbd{RET} while an asynchronous process is running, |
| 710 | @c If it's a lisp function, input redirection implies "xargs" (in a | 728 | there 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 | 729 | running 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 | 731 | process 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'. | 732 | there should be a way of killing pending input between the death of the |
| 715 | @c @item in `eval-using-options', have a :complete tag | 733 | process, 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 | 737 | Perhaps toggled by a command, that makes each output block a smart |
| 720 | @c the current region) to be inserting in the symbol `blah'. | 738 | display 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 | 744 | The 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. | 745 | last 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 | 748 | A 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 | 758 | So 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. | 762 | It would treat the Eshell buffer as a outline. Collapsing the outline |
| 745 | @c This would allow it to be run from the command line. | 763 | hides all of the output text. Collapsing again would show only the |
| 746 | @c @item write a "help" command | 764 | first 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' | 768 | This 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]. | 776 | If 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. | 777 | way@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 | 782 | With 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 | 787 | It would be used to provide completion rules for that command. Then the |
| 770 | @c Make (su, bash, telnet, rlogin, rsh, etc.) be part of | 788 | macro 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" | 792 | So 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 | 793 | input 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 | 796 | If 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 | 797 | input, 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' | 799 | If a Lisp command, or an alias, is invoked, then if the line has no |
| 782 | @c characters per line. | 800 | newline characters, it is divided by whitespace and passed as arguments |
| 783 | @c @item make dgrep load dired, mark everything, then execute the A binding | 801 | to the Lisp function. Otherwise, it is divided at the newline |
| 784 | @c @item write emsh.c | 802 | characters. Thus, invoking @code{+} on a series of numbers will add |
| 785 | @c It just runs Emacs with the appropriate arguments to invoke eshell. | 803 | them; @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' | 807 | It 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>". | 812 | This means @samp{!n}, @samp{!#}, @samp{!:%}, and @samp{!:1-} as separate |
| 795 | @c @item Write pushd/popd out to disk along with last-dir-ring | 813 | from @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 | 823 | This would allow for an ``output translators'', that take a function to |
| 806 | @c eshell-do-pipelines to perform this on-thy-fly rewriting. | 824 | modify output with, and a target. Devise a syntax that works well with |
| 807 | @c @item implement head and tail in Lisp | 825 | pipes, 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 | 826 | regexp-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 | 830 | This would be optional, rather than always using the Eshell buffer. |
| 813 | @c Allow for a bash-compatible syntax, such as: | 831 | This 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 | 835 | It 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 | 836 | appropriate. |
| 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 | |
| 844 | Using @command{bg} on a process that is already in the background does | ||
| 845 | nothing. Specifying redirection targets replaces (or adds) to the list | ||
| 846 | current 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 | |||
| 854 | The syntax table for parsing these should be customizable, such that the | ||
| 855 | user 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 | |||
| 861 | Return them as a list, so that @samp{$_[*]} is all the arguments of the | ||
| 862 | last command. | ||
| 863 | |||
| 864 | @item Copy ANSI code handling from @file{term.el} into @file{em-term.el} | ||
| 865 | |||
| 866 | Make it possible for the user to send char-by-char to the underlying | ||
| 867 | process. Ultimately, I should be able to move away from using term.el | ||
| 868 | altogether, since everything but the ANSI code handling is already part | ||
| 869 | of Eshell. Then, things would work correctly on Win32 as well (which | ||
| 870 | doesn't have @file{/bin/sh}, although @file{term.el} tries to use it) | ||
| 871 | |||
| 872 | @item Make the shell spawning commands be visual | ||
| 873 | |||
| 874 | That 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 | ||
| 877 | being used to invoke a single command. Then, the behavior should be | ||
| 878 | based on what that command is. | ||
| 879 | |||
| 880 | @item Create an smart viewing command named @command{open} | ||
| 881 | |||
| 882 | This would search for some way to open its argument (similar to opening | ||
| 883 | a 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 | |||
| 889 | It would move point to the end of the buffer, and then turns on | ||
| 890 | auto-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 | |||
| 898 | This would run Emacs with the appropriate arguments to invoke Eshell | ||
| 899 | only. 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 | |||
| 909 | So that it automatically expands and corrects pathnames. Or make | ||
| 910 | pathname 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 | |||
| 919 | Add 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 | |||
| 929 | This would call @code{ediff-patch-file}, or @code{ediff-patch-buffer}, | ||
| 930 | depending 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 | |||
| 936 | That is, @samp{find X | xargs Y} would be indicated using @samp{Y | ||
| 937 | $@{find X@}}. Maybe @code{eshell-do-pipelines} could be changed to | ||
| 938 | perform this on-thy-fly rewriting. | ||
| 939 | |||
| 940 | @item Write an alias for @command{less} that brings up a @code{view-mode} buffer | ||
| 941 | |||
| 942 | Such that the user can press @kbd{SPC} and @kbd{DEL}, and then @kbd{q} | ||
| 943 | to 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 | |||
| 948 | Everywhere 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 | |||
| 955 | If 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 | ||
| 957 | eshell}, it doesn't display anything. | ||
| 958 | |||
| 959 | @item @kbd{M-RET} during a long command (using smart display) doesn't work | ||
| 960 | |||
| 961 | Since 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 |