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