diff options
| author | John Wiegley | 2000-10-13 09:47:34 +0000 |
|---|---|---|
| committer | John Wiegley | 2000-10-13 09:47:34 +0000 |
| commit | 572a0c97d9c62d4c972f05f751a569c8ef3c5204 (patch) | |
| tree | 237158d60d16ecc9b8179a6cac4863767594a0e7 /man | |
| parent | 16908a3f0dfbaac0e580412b68056df60bd41e91 (diff) | |
| download | emacs-572a0c97d9c62d4c972f05f751a569c8ef3c5204.tar.gz emacs-572a0c97d9c62d4c972f05f751a569c8ef3c5204.zip | |
Added the beginnings of proper Eshell documentation.
Diffstat (limited to 'man')
| -rw-r--r-- | man/ChangeLog | 7 | ||||
| -rw-r--r-- | man/Makefile.in | 9 | ||||
| -rw-r--r-- | man/eshell.texi | 800 |
3 files changed, 814 insertions, 2 deletions
diff --git a/man/ChangeLog b/man/ChangeLog index 4d75c13e81b..37d3fd7011e 100644 --- a/man/ChangeLog +++ b/man/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2000-10-13 John Wiegley <johnw@gnu.org> | ||
| 2 | |||
| 3 | * Makefile.in: Added build targets for eshell.texi. | ||
| 4 | |||
| 5 | * eshell.texi: New file. Note that this file is only just | ||
| 6 | beginning. It's based heavily on the structure of pcl-cvs.texi. | ||
| 7 | |||
| 1 | 2000-10-04 Miles Bader <miles@lsi.nec.co.jp> | 8 | 2000-10-04 Miles Bader <miles@lsi.nec.co.jp> |
| 2 | 9 | ||
| 3 | * emacs.texi (Top): Update version in `Antinews' menu entry. | 10 | * emacs.texi (Top): Update version in `Antinews' menu entry. |
diff --git a/man/Makefile.in b/man/Makefile.in index ec6eb52a88d..186144aa58b 100644 --- a/man/Makefile.in +++ b/man/Makefile.in | |||
| @@ -18,12 +18,12 @@ INFO_TARGETS = ../info/emacs ../info/ccmode ../info/cl \ | |||
| 18 | ../info/sc ../info/vip ../info/viper ../info/widget \ | 18 | ../info/sc ../info/vip ../info/viper ../info/widget \ |
| 19 | ../info/efaq ../info/ada-mode ../info/autotype \ | 19 | ../info/efaq ../info/ada-mode ../info/autotype \ |
| 20 | ../info/idlwave ../info/eudc ../info/ebrowse ../info/pcl-cvs \ | 20 | ../info/idlwave ../info/eudc ../info/ebrowse ../info/pcl-cvs \ |
| 21 | ../info/woman ../info/emacs-mime | 21 | ../info/woman ../info/emacs-mime ../info/eshell |
| 22 | DVI_TARGETS = emacs.dvi cc-mode.dvi cl.dvi dired-x.dvi \ | 22 | DVI_TARGETS = emacs.dvi cc-mode.dvi cl.dvi dired-x.dvi \ |
| 23 | ediff.dvi forms.dvi gnus.dvi message.dvi mh-e.dvi \ | 23 | ediff.dvi forms.dvi gnus.dvi message.dvi mh-e.dvi \ |
| 24 | reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ | 24 | reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \ |
| 25 | ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ | 25 | ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \ |
| 26 | pcl-cvs.dvi woman.dvi emacs-mime.dvi | 26 | pcl-cvs.dvi woman.dvi emacs-mime.dvi eshell.dvi |
| 27 | INFOSOURCES = info.texi info-stnd.texi | 27 | INFOSOURCES = info.texi info-stnd.texi |
| 28 | 28 | ||
| 29 | # The following rule does not work with all versions of `make'. | 29 | # The following rule does not work with all versions of `make'. |
| @@ -111,6 +111,11 @@ ada-mode.dvi: ada-mode.texi | |||
| 111 | pcl-cvs.dvi: pcl-cvs.texi | 111 | pcl-cvs.dvi: pcl-cvs.texi |
| 112 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi | 112 | $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi |
| 113 | 113 | ||
| 114 | ../info/eshell: eshell.texi | ||
| 115 | cd $(srcdir); $(MAKEINFO) eshell.texi | ||
| 116 | eshell.dvi: eshell.texi | ||
| 117 | $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi | ||
| 118 | |||
| 114 | ../info/cl: cl.texi | 119 | ../info/cl: cl.texi |
| 115 | cd $(srcdir); $(MAKEINFO) cl.texi | 120 | cd $(srcdir); $(MAKEINFO) cl.texi |
| 116 | cl.dvi: cl.texi | 121 | cl.dvi: cl.texi |
diff --git a/man/eshell.texi b/man/eshell.texi new file mode 100644 index 00000000000..6492e1e9417 --- /dev/null +++ b/man/eshell.texi | |||
| @@ -0,0 +1,800 @@ | |||
| 1 | \input texinfo @c -*-texinfo-*- | ||
| 2 | |||
| 3 | @c "@(#)$Name: $:$Id: $" | ||
| 4 | |||
| 5 | @c Documentation for Eshell: The Emacs Shell. | ||
| 6 | @c Copyright (C) 1999-2000 Free Software Foundation, Inc. | ||
| 7 | |||
| 8 | @c This file is part of GNU Emacs | ||
| 9 | |||
| 10 | @c GNU Emacs is free software; you can redistribute it and/or modify it | ||
| 11 | @c under the terms of the GNU General Public License as published by the | ||
| 12 | @c Free Software Foundation; either version 2 of the License, or (at | ||
| 13 | @c your option) any later version. | ||
| 14 | |||
| 15 | @c GNU Emacs is distributed in the hope that it will be useful, but | ||
| 16 | @c WITHOUT ANY WARRANTY; without even the implied warraonty of | ||
| 17 | @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 18 | @c General Public License for more details. | ||
| 19 | |||
| 20 | @c You should have received a copy of the GNU General Public License | ||
| 21 | @c along with Eshell; see the file COPYING. If not, write to the Free | ||
| 22 | @c Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 23 | |||
| 24 | @c %**start of header | ||
| 25 | @setfilename ../info/eshell | ||
| 26 | @settitle Eshell: The Emacs Shell | ||
| 27 | @c %**end of header | ||
| 28 | |||
| 29 | @c @dircategory Emacs | ||
| 30 | @direntry | ||
| 31 | * Eshell: (eshell). A command shell implemented in Emacs Lisp. | ||
| 32 | @end direntry | ||
| 33 | @setchapternewpage on | ||
| 34 | |||
| 35 | @ifinfo | ||
| 36 | Copyright @copyright{} 1999-2000 Free Software Foundation, Inc. | ||
| 37 | |||
| 38 | Permission is granted to make and distribute verbatim copies of this | ||
| 39 | manual provided the copyright notice and this permission notice are | ||
| 40 | preserved on all copies. | ||
| 41 | |||
| 42 | @ignore | ||
| 43 | Permission is granted to process this file through TeX and print the | ||
| 44 | results, provided the printed document carries copying permission notice | ||
| 45 | identical to this one except for the removal of this paragraph (this | ||
| 46 | paragraph not being relevant to the printed manual). | ||
| 47 | @end ignore | ||
| 48 | |||
| 49 | Permission is granted to copy and distribute modified versions of this | ||
| 50 | manual under the conditions for verbatim copying, provided also that the | ||
| 51 | section entitled ``GNU General Public License'' is included exactly as | ||
| 52 | in the original, and provided that the entire resulting derived work is | ||
| 53 | distributed under the terms of a permission notice identical to this | ||
| 54 | one. | ||
| 55 | |||
| 56 | Permission is granted to copy and distribute translations of this manual | ||
| 57 | into another language, under the above conditions for modified versions, | ||
| 58 | except that the section entitled ``GNU General Public License'' and this | ||
| 59 | permission notice may be included in translations approved by the Free | ||
| 60 | Software Foundation instead of in the original English. | ||
| 61 | @end ifinfo | ||
| 62 | |||
| 63 | @synindex vr fn | ||
| 64 | @c The titlepage section does not appear in the Info file. | ||
| 65 | @titlepage | ||
| 66 | @sp 4 | ||
| 67 | @c The title is printed in a large font. | ||
| 68 | @center @titlefont{User's Guide} | ||
| 69 | @sp | ||
| 70 | @center @titlefont{to} | ||
| 71 | @sp | ||
| 72 | @center @titlefont{Eshell: The Emacs Shell} | ||
| 73 | @ignore | ||
| 74 | @sp 2 | ||
| 75 | @center release 2.3.2 | ||
| 76 | @c -release- | ||
| 77 | @end ignore | ||
| 78 | @sp 3 | ||
| 79 | @center John Wiegley | ||
| 80 | @c -date- | ||
| 81 | |||
| 82 | @c The following two commands start the copyright page for the printed | ||
| 83 | @c manual. This will not appear in the Info file. | ||
| 84 | @page | ||
| 85 | @vskip 0pt plus 1filll | ||
| 86 | Copyright @copyright{} 1999-2000 Free Software Foundation, Inc. | ||
| 87 | |||
| 88 | Permission is granted to make and distribute verbatim copies of this | ||
| 89 | manual provided the copyright notice and this permission notice are | ||
| 90 | preserved on all copies. | ||
| 91 | |||
| 92 | Permission is granted to copy and distribute modified versions of this | ||
| 93 | manual under the conditions for verbatim copying, provided also that the | ||
| 94 | section entitled ``GNU General Public License'' is included exactly as | ||
| 95 | in the original, and provided that the entire resulting derived work is | ||
| 96 | distributed under the terms of a permission notice identical to this | ||
| 97 | one. | ||
| 98 | |||
| 99 | Permission is granted to copy and distribute translations of this manual | ||
| 100 | into another language, under the above conditions for modified versions, | ||
| 101 | except that the section entitled ``GNU General Public License'' and this | ||
| 102 | permission notice may be included in translations approved by the Free | ||
| 103 | Software Foundation instead of in the original English. | ||
| 104 | @end titlepage | ||
| 105 | |||
| 106 | @c ================================================================ | ||
| 107 | @c The real text starts here | ||
| 108 | @c ================================================================ | ||
| 109 | |||
| 110 | @node Top, What is Eshell?, (dir), (dir) | ||
| 111 | @ifinfo | ||
| 112 | @top Eshell | ||
| 113 | |||
| 114 | This manual documents Eshell, a shell-like command interpretor | ||
| 115 | implemented entirely in Emacs Lisp. It invokes no external processes | ||
| 116 | beyond those requested by the user. It is intended to be a functional | ||
| 117 | replacement for command shells such as @command{bash}, @command{zsh}, | ||
| 118 | @command{rc}, @command{4dos}; since Emacs itself is capable of handling | ||
| 119 | most of the tasks accomplished by such tools. | ||
| 120 | @c This manual is updated to release 2.3.2 of Eshell. | ||
| 121 | @end ifinfo | ||
| 122 | |||
| 123 | @menu | ||
| 124 | * What is Eshell?:: A brief introduction to the Emacs Shell. | ||
| 125 | * Bugs and ideas:: | ||
| 126 | @end menu | ||
| 127 | |||
| 128 | @node What is Eshell?, Bugs and ideas, Top, Top | ||
| 129 | @chapter What is Eshell? | ||
| 130 | @cindex What is Eshell? | ||
| 131 | |||
| 132 | Eshell is a command shell written using Emacs Lisp. All of what it does | ||
| 133 | it uses Emacs' facilities to do. This means Eshell is as portable as | ||
| 134 | Emacs itself. It also means that cooperation with other Lisp code is | ||
| 135 | natural and seamless. | ||
| 136 | |||
| 137 | So what is a command shell? To properly understand the role of a shell, | ||
| 138 | it's necessary to visualize what a computer does for you. Basically, a | ||
| 139 | computer is a tool; in order to use that tool, you must tell it what to | ||
| 140 | do---or give it ``commands''. These commands take many forms, such as | ||
| 141 | clicking with a mouse on certain parts of the screen. But that is only | ||
| 142 | one form of command input. | ||
| 143 | |||
| 144 | By far the most versatile way to express what you want the computer to | ||
| 145 | do is using an abbreviated language, called script. In script, instead | ||
| 146 | of telling the computer, ``list my files, please'', we write just | ||
| 147 | ``list''. In fact, this command is so commonly used that we abbreviate | ||
| 148 | it to ``ls''. Typing @code{ls} in a command shell is a script way of | ||
| 149 | telling the computer to list your files. This is comparable to viewing | ||
| 150 | the contents of a folder using a graphical display. | ||
| 151 | |||
| 152 | The real flexibility is apparent only when you realize that there are | ||
| 153 | many, many ways to list your files. Perhaps you want them sorted by | ||
| 154 | name, or sorted by date, or in reverse order, or grouped by type. Most | ||
| 155 | graphical browsers have simple ways to express this. But what about | ||
| 156 | showing only a few files, or only files that meet a certain criteria? | ||
| 157 | In very complex and specific situations, the request becomes too | ||
| 158 | difficult to express with a mouse. It is just these kinds of requests | ||
| 159 | that are solvable using a command shell. | ||
| 160 | |||
| 161 | For example, what if you want to list every Word file on your hard | ||
| 162 | drive, larger than 100 kilobytes in size, and which hasn't been looked | ||
| 163 | at in over six months? That is a good candidate list for deletion, when | ||
| 164 | you go to clean up your hard drive. But have you ever tried asking your | ||
| 165 | computer for such a list? There is no way to do it! At least, not | ||
| 166 | without using a command shell. | ||
| 167 | |||
| 168 | So the role of a command shell is to give you more control over what | ||
| 169 | your computer does for you. Not everyone needs this amount of control, | ||
| 170 | and it does come at a cost: Learning the necessary script commands to | ||
| 171 | express what you want done. A complicated query, such as the example | ||
| 172 | above, takes time to learn. But if you find yourself using your | ||
| 173 | computer frequently enough, it is more than worthwhile in the long run. | ||
| 174 | Any tool you use often deserves your time in learning to master it. | ||
| 175 | @footnote{For the understandably curious, here is what that command | ||
| 176 | looks like: But don't let it fool you; once you know what's going on, | ||
| 177 | it's easier than it looks: @code{ls -lt **/*.doc(Lk+50aM+5)}.} | ||
| 178 | |||
| 179 | As of Emacs 21, Eshell is part of the standard Emacs distribution. | ||
| 180 | |||
| 181 | @menu | ||
| 182 | * Contributors to Eshell:: | ||
| 183 | * Installation:: | ||
| 184 | @end menu | ||
| 185 | |||
| 186 | @node Contributors to Eshell, Installation, What is Eshell?, What is Eshell? | ||
| 187 | @section Contributors to Eshell | ||
| 188 | @cindex Contributors | ||
| 189 | @cindex Authors | ||
| 190 | |||
| 191 | Contributions to Eshell are welcome. I have limited time to work on | ||
| 192 | this project, but I will gladly add any code you contribute to me to | ||
| 193 | this package. | ||
| 194 | |||
| 195 | The following persons have made contributions to Eshell. | ||
| 196 | |||
| 197 | @itemize @bullet | ||
| 198 | @item | ||
| 199 | Eli Zaretskii made it possible for Eshell to run without requiring | ||
| 200 | asynchronous subprocess support. This is important for MS-DOS, which | ||
| 201 | does not have such support.@refill | ||
| 202 | |||
| 203 | @item | ||
| 204 | Miles Bader contributed many fixes during the port to Emacs 21.@refill | ||
| 205 | |||
| 206 | @item | ||
| 207 | Stefan Monnier fixed the things which bothered him, which of course made | ||
| 208 | things better for all.@refill | ||
| 209 | |||
| 210 | @item | ||
| 211 | Gerd Moellmann also helped to contribute bug fixes during the initial | ||
| 212 | integration with Emacs 21.@refill | ||
| 213 | |||
| 214 | @item | ||
| 215 | Alex Schroeder contributed code for interactively querying the user | ||
| 216 | before overwriting files.@refill | ||
| 217 | |||
| 218 | @item | ||
| 219 | Sudish Joseph helped with some XEmacs compatibility issues.@refill | ||
| 220 | |||
| 221 | @end itemize | ||
| 222 | |||
| 223 | Apart from these, a lot of people have sent suggestions, ideas, | ||
| 224 | requests, bug reports and encouragement. Thanks a lot! Without you | ||
| 225 | there would be no new releases of Eshell. | ||
| 226 | |||
| 227 | @node Installation, , Contributors to Eshell, What is Eshell? | ||
| 228 | @section Installation | ||
| 229 | @cindex Installation | ||
| 230 | |||
| 231 | As mentioned above, Eshell comes preinstalled since Emacs 21. If you're | ||
| 232 | using Emacs 20.4 or later, or XEmacs 21, you can download the most | ||
| 233 | recent version of Eshell from | ||
| 234 | @url{http://www.emacs.org/~johnw/Emacs/eshell.tar.gz}. | ||
| 235 | |||
| 236 | If you are using Emacs 21, please skip this section. | ||
| 237 | |||
| 238 | @subsection Short Form | ||
| 239 | |||
| 240 | Here's exactly what to do, with no explanation why: | ||
| 241 | |||
| 242 | @enumerate | ||
| 243 | @item @samp{M-x load-file RET eshell-auto.el RET} | ||
| 244 | @item @samp{ESC : (add-to-list 'load-path "<path where Eshell resides>") RET} | ||
| 245 | @item @samp{ESC : (add-to-list 'load-path "<path where Pcomplete resides>") RET} | ||
| 246 | @item @samp{M-x eshell RET} | ||
| 247 | |||
| 248 | You should see a version banner displayed. | ||
| 249 | |||
| 250 | @item @samp{ls RET} | ||
| 251 | |||
| 252 | Confirm that you see a file listing. | ||
| 253 | |||
| 254 | @item @samp{eshell-test RET} | ||
| 255 | |||
| 256 | Confirm that everything runs correctly. Use `M-x eshell-report-bug' if | ||
| 257 | not. | ||
| 258 | |||
| 259 | @item @samp{cd $@{dirname (locate-library "eshell-auto")@} RET} | ||
| 260 | @item @samp{find-file Makefile RET} | ||
| 261 | @item Edit the Makefile to reflect your site. | ||
| 262 | @item @samp{M-x eshell RET} | ||
| 263 | @item @samp{make install RET} | ||
| 264 | @item @samp{find-file $user-init-file RET} | ||
| 265 | @item Add the following lines to your @file{.emacs} file: | ||
| 266 | |||
| 267 | @example | ||
| 268 | (add-to-list 'load-path "<directory where you install Eshell>") | ||
| 269 | (load "eshell-auto") | ||
| 270 | @end example | ||
| 271 | |||
| 272 | @item @samp{M-x eshell RET} | ||
| 273 | @item @samp{customize-option #'eshell-modules-list RET} | ||
| 274 | @item Select the extension modules you prefer. | ||
| 275 | @item Restart Emacs! | ||
| 276 | @item @samp{M-x info RET m Eshell RET} | ||
| 277 | |||
| 278 | Read the manual and enjoy! | ||
| 279 | @end enumerate | ||
| 280 | |||
| 281 | @subsection Long Form | ||
| 282 | |||
| 283 | @enumerate | ||
| 284 | @item | ||
| 285 | Before building and installing Eshell, it is important to test that it | ||
| 286 | will work properly on your system. To do this, first load | ||
| 287 | @file{eshell-auto}, which will define certain autoloads required to run | ||
| 288 | Eshell. This can be done using the command @kbd{M-x load-file}, and | ||
| 289 | then selecting the file @file{eshell-auto.el}. | ||
| 290 | |||
| 291 | @item | ||
| 292 | In order for Emacs to find Eshell's files, the Eshell directory must be | ||
| 293 | added to the @code{load-path} variable. This can be done within Emacs by | ||
| 294 | typing: | ||
| 295 | |||
| 296 | @example | ||
| 297 | ESC : (add-to-list 'load-path "<path where Eshell resides>") RET | ||
| 298 | ESC : (add-to-list 'load-path "<path where Pcomplete resides>") RET | ||
| 299 | @end example | ||
| 300 | |||
| 301 | @item | ||
| 302 | Start Eshell from the distributed sources, using default settings, by | ||
| 303 | typing @kbd{M-x eshell}. | ||
| 304 | |||
| 305 | @item | ||
| 306 | Verify that Eshell is functional by typing @command{ls} followed by | ||
| 307 | @kbd{RET}. You should have already seen a version banner announcing the | ||
| 308 | version number of this release, followed by a prompt. | ||
| 309 | |||
| 310 | @item | ||
| 311 | Run the test suite by typing @command{eshell-test} followed by @kbd{RET} | ||
| 312 | in the Eshell buffer. It is important that Emacs be left alone while | ||
| 313 | the tests are running, since extraneous command input may cause some of | ||
| 314 | the tests to fail (they were never intended to run in the background). | ||
| 315 | If all of the tests pass, Eshell should work just fine on your system. | ||
| 316 | If any of the tests fail, please send e-mail to the Eshell maintainer | ||
| 317 | using the command @kbd{M-x eshell-report-bug}. | ||
| 318 | |||
| 319 | @item | ||
| 320 | Edit the file @file{Makefile} in the directory containing the Eshell | ||
| 321 | sources to reflect the location of certain Emacs dircetories at your | ||
| 322 | site. The only things you really have to change are the definitions of | ||
| 323 | @code{lispdir} and @code{infodir}. The elisp files will be copied to | ||
| 324 | @code{lispdir}, and the info file to @code{infodir}. | ||
| 325 | |||
| 326 | @item | ||
| 327 | Type @code{make install} in the directory containing the Eshell sources. | ||
| 328 | This will byte-compile all of the @file{.el} files and copy both the | ||
| 329 | source and compiled versions to the directories specified in the | ||
| 330 | previous step. It will also copy the info file, and add a corresponding | ||
| 331 | entry to your @file{dir} file----if @file{install-info} can be found. | ||
| 332 | |||
| 333 | If you only want to create the compiled elisp files, but don't want to | ||
| 334 | install them, you can type just @command{make} instead. | ||
| 335 | |||
| 336 | @item | ||
| 337 | Add the directory into which Eshell was installed to your | ||
| 338 | @code{load-path} variable. This can be done by adding the following | ||
| 339 | line to your @file{.emacs} file: | ||
| 340 | |||
| 341 | @example | ||
| 342 | (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/eshell") | ||
| 343 | @end example | ||
| 344 | |||
| 345 | The actual directory on your system may differ. | ||
| 346 | |||
| 347 | @item | ||
| 348 | To install Eshell privately, edit your @file{.emacs} file; to install | ||
| 349 | Eshell site-wide, edit the file @file{site-start.el} in your | ||
| 350 | @file{site-lisp} directory (usually | ||
| 351 | @file{/usr/local/share/emacs/site-lisp} or something similar). In | ||
| 352 | either case enter the following line into the appropriate file: | ||
| 353 | |||
| 354 | @example | ||
| 355 | (load "eshell-auto") | ||
| 356 | @end example | ||
| 357 | |||
| 358 | @item | ||
| 359 | Restart Emacs. After restarting, customize the variable | ||
| 360 | @code{eshell-modules-list}. This variable selects which Eshell | ||
| 361 | extension modules you want to use. You will find documentation on each | ||
| 362 | of those modules in the Info manual. | ||
| 363 | |||
| 364 | @end enumerate | ||
| 365 | |||
| 366 | If you have @TeX{} installed at your site, you can make a typeset manual | ||
| 367 | from @file{eshell.texi}. | ||
| 368 | |||
| 369 | @enumerate | ||
| 370 | @item | ||
| 371 | Run @TeX{} by typing @samp{texi2dvi eshell.texi}. | ||
| 372 | @item | ||
| 373 | Convert the resulting device independent file @file{eshell.dvi} to a | ||
| 374 | form which your printer can output and print it. If you have a | ||
| 375 | postscript printer there is a program, @code{dvi2ps}, which does. There | ||
| 376 | is also a program which comes together with @TeX{}, @code{dvips}, which | ||
| 377 | you can use. | ||
| 378 | @end enumerate | ||
| 379 | |||
| 380 | @c @node Forming commands, Known problems, What is Eshell?, Top | ||
| 381 | @c @chapter Forming commands | ||
| 382 | |||
| 383 | @c A command shell is nothing more than a place to enter commands. | ||
| 384 | |||
| 385 | @c What is a command? | ||
| 386 | |||
| 387 | @c A command is piece of ``script''---or special shorthand | ||
| 388 | @c language---that the computer can understand. | ||
| 389 | |||
| 390 | @c What does script look like? | ||
| 391 | |||
| 392 | @c Script is an extremely simplified language. Oddly enough, this | ||
| 393 | @c actually makes it look more complicated than it is. Whereas normal | ||
| 394 | @c languages can use many different embellishments, the form of a script | ||
| 395 | @c command is always: a command verb, following by its arguments. | ||
| 396 | |||
| 397 | @c A verb? Arguments? | ||
| 398 | |||
| 399 | @c The verb is the thing you want your computer to do. There are a set | ||
| 400 | @c number of verbs, although this number is quite large. On my | ||
| 401 | @c computer, it reaches almost 1400 in number! But of course, only a | ||
| 402 | @c handful of these are necessary most of the time. | ||
| 403 | |||
| 404 | @c Sometimes, the verb is all that's necessary. A verb is always a | ||
| 405 | @c single word, usually related to the task it will perform. | ||
| 406 | @c @command{reboot} is a good example. Entering that will cause your | ||
| 407 | @c computer to reboot, assuming you have sufficient privileges. | ||
| 408 | |||
| 409 | @c Other verbs need more information. These are usually very capable of | ||
| 410 | @c verbs, but they must be told more specifically what to do. This | ||
| 411 | @c extra information is given in the form of arguments. Arguments are | ||
| 412 | @c also words, that appear after the verb. For example, @command{echo} | ||
| 413 | @c is a command verb that will print back to you whatever you say. | ||
| 414 | @c @command{echo} requires a set of arguments, to know what you want it | ||
| 415 | @c to echo! So a proper use of echo might look like: | ||
| 416 | |||
| 417 | @c @example | ||
| 418 | @c echo This is an example of using echo! | ||
| 419 | @c @end example | ||
| 420 | |||
| 421 | @c This command would result in the computer printing back to you, | ||
| 422 | @c ``This is an example of using echo!''. Pretty easy, no? | ||
| 423 | |||
| 424 | @c Although commands are always simple words, arguments can take | ||
| 425 | @c different forms. There are textual arguments, numeric arguments, | ||
| 426 | @c even Lisp arguments. Distinguishing among these different types of | ||
| 427 | @c arguments requires some special typing, because the computer needs | ||
| 428 | @c very specific directions to understand what you mean. | ||
| 429 | |||
| 430 | @node Bugs and ideas, , What is Eshell?, Top | ||
| 431 | @chapter Bugs and ideas | ||
| 432 | @cindex Reporting bugs and ideas | ||
| 433 | @cindex Bugs, how to report them | ||
| 434 | @cindex Author, how to reach | ||
| 435 | @cindex Email to the author | ||
| 436 | @cindex Known bugs | ||
| 437 | @cindex Bugs, known | ||
| 438 | @cindex FAQ | ||
| 439 | @cindex Problems, list of common | ||
| 440 | |||
| 441 | If you find a bug or misfeature, don't hesitate to let me know! Send | ||
| 442 | email to @samp{johnw@@gnu.org}. Feature requests should also be sent | ||
| 443 | there. I prefer discussing one thing at a time. If you find several | ||
| 444 | unrelated bugs, please report them separately. | ||
| 445 | |||
| 446 | If you have ideas for improvements, or if you have written some | ||
| 447 | extensions to this package, I would like to hear from you. I hope you | ||
| 448 | find this package useful! | ||
| 449 | |||
| 450 | @menu | ||
| 451 | * Known problems:: | ||
| 452 | @end menu | ||
| 453 | |||
| 454 | @node Known problems, , Bugs and ideas, Bugs and ideas | ||
| 455 | @section Known problems | ||
| 456 | |||
| 457 | Below is a partial list of currently known problems with Eshell version | ||
| 458 | 2.3.2, which is the version distribution with Emacs 21.1. | ||
| 459 | |||
| 460 | @table @asis | ||
| 461 | @item @samp{for i in 1 2 3 @{ grep -q a b && *echo has it @} | wc -l} fails | ||
| 462 | |||
| 463 | In fact, piping to a process from a looping construct doesn't work in | ||
| 464 | general. If I change the call to @code{eshell-copy-handles} in | ||
| 465 | @code{eshell-rewrite-for-command} to use @code{eshell-protect}, it seems | ||
| 466 | to work, but the output occurs after the prompt is displayed. The whole | ||
| 467 | structured command thing is too complicated at present. | ||
| 468 | |||
| 469 | @item Error with @command{bc} in @code{eshell-test} | ||
| 470 | |||
| 471 | On some XEmacs system, the subprocess interaction test fails | ||
| 472 | inexplicably, since @command{bc} works fine at the command prompt. | ||
| 473 | |||
| 474 | @item @command{ls} in remote directories sometimes fails | ||
| 475 | |||
| 476 | For XEmacs users, using @command{ls} in a remote directory sometimes | ||
| 477 | fails. The reason why has not yet been found. | ||
| 478 | |||
| 479 | @item Eshell does not delete @file{*Help*} buffers in XEmacs 21.1.8+ | ||
| 480 | |||
| 481 | In XEmacs 21.1.8, the @file{*Help*} buffer has been renamed such that | ||
| 482 | multiple instances of the @file{*Help*} buffer can exist. | ||
| 483 | |||
| 484 | @item Pcomplete sometimes gets stuck | ||
| 485 | |||
| 486 | When @kbd{TAB}, no completions appear, even though the directory has | ||
| 487 | them. This behavior is rare. | ||
| 488 | |||
| 489 | @item @samp{grep python $<rpm -qa>} doesn't work, but using @samp{*grep} does | ||
| 490 | |||
| 491 | This happens because the @code{grep} Lisp function returns immediately, | ||
| 492 | and then the asynchronous @command{grep} process expects to examine the | ||
| 493 | temporary file, which has since been deleted. | ||
| 494 | |||
| 495 | @item Problem with C-r repeating text | ||
| 496 | |||
| 497 | If the text @emph{before point} reads "./run", and you type @kbd{C-r r u | ||
| 498 | n}, it will repeat the line for every character typed. | ||
| 499 | |||
| 500 | @item Backspace doesn't scroll back after continuing (in smart mode) | ||
| 501 | |||
| 502 | Hitting space during a process invocation, such as @command{make}, will | ||
| 503 | cause it to track the bottom of the output; but backspace no longer | ||
| 504 | scrolls back. | ||
| 505 | |||
| 506 | @item It's not possible to fully @code{unload-feature} Eshell | ||
| 507 | |||
| 508 | @item Menu support was removed, but never put back | ||
| 509 | |||
| 510 | @item Using C-p and C-n with rebind gets into a locked state | ||
| 511 | |||
| 512 | This happened a few times in Emacs 21, but has been unreproducable | ||
| 513 | since. | ||
| 514 | |||
| 515 | @item If an interactive process is currently running, @kbd{M-!} doesn't work | ||
| 516 | |||
| 517 | @item Use a timer instead of @code{sleep-for} when killing child processes | ||
| 518 | |||
| 519 | @item Piping to a Lisp function is not supported | ||
| 520 | |||
| 521 | Make it so that the Lisp command on the right of the pipe is repeatedly | ||
| 522 | called with the input strings as arguments. This will require changing | ||
| 523 | eshell-do-pipeline to handle non-process targets. | ||
| 524 | |||
| 525 | @item Input redirection is not supported | ||
| 526 | |||
| 527 | See the entry above. | ||
| 528 | |||
| 529 | @c @item problem running "less" without argument on Windows | ||
| 530 | @c Before running telnet, I noticed that 'less' (for example) was already | ||
| 531 | @c configured as a visual command. So I invoked it from eshell to see what | ||
| 532 | @c would happen. | ||
| 533 | @c | ||
| 534 | @c Here's the result in the eshell buffer: | ||
| 535 | @c | ||
| 536 | @c Spawning child process: invalid argument | ||
| 537 | @c | ||
| 538 | @c Also a new 'less' buffer was created with nothing in it .. (presumably this | ||
| 539 | @c holds the output of less) | ||
| 540 | @c | ||
| 541 | @c If I run 'less.exe' from the eshell command line, I get the output I expect | ||
| 542 | @c simply written to the buffer. | ||
| 543 | @c | ||
| 544 | @c Note that I'm using FSF NT-Emacs 20.6.1 on Win2000. The term.el package and | ||
| 545 | @c the supplied shell both seem to use the 'cmdproxy' program to run things | ||
| 546 | @c like shells. | ||
| 547 | @c @item implement -r, -n and -s switches for cp | ||
| 548 | @c @item Make M-5 eshell -> switch to *eshell<5>*, creating it if need be | ||
| 549 | @c @item mv DIR FILE.tar does not remove directories | ||
| 550 | @c This is because the tar option --remove-files doesn't do so. Should | ||
| 551 | @c it be Eshell's job? | ||
| 552 | @c @item Write an article about Eshell for the LinuxWorld journal. | ||
| 553 | @c @item bind standard-output and standard-error, so that if a Lisp function | ||
| 554 | @c calls `print', everything will happen as it should (albeit slowly) | ||
| 555 | @c @item when the extension modules fail to load, cd / gives a Lisp error | ||
| 556 | @c @item if a globbing patterns returns only one match, should it still be a | ||
| 557 | @c list? | ||
| 558 | @c @item make sure that the syntax table correctly in eshell mode | ||
| 559 | @c So that M-DEL acts in a predictable manner, etc. | ||
| 560 | @c @item allow all Eshell buffers to share the same history and list-dir | ||
| 561 | @c @item error with script commands and outputting to /dev/null | ||
| 562 | @c If a script file, somewhere in the middle, does a "> /dev/null", | ||
| 563 | @c output from all subsequent commands will be swallowed | ||
| 564 | @c @item split up parsing of the text after a $ in eshell-var | ||
| 565 | @c Similar to way that eshell-arg is structured. Then add parsing of | ||
| 566 | @c $[?\n] | ||
| 567 | @c @item after pressing M-RET, redisplay before running the next command | ||
| 568 | @c @item argument predicates and modifiers should work anywhere in a path | ||
| 569 | @c /usr/local/src/editors/vim $ vi **/CVS(/)/Root(.) | ||
| 570 | @c Invalid regexp: "Unmatched ( or \\(" | ||
| 571 | @c | ||
| 572 | @c with zsh, the glob above expands to all files named Root in | ||
| 573 | @c directories named CVS. | ||
| 574 | @c @item typing "echo ${locate locate}/bin<tab>" results in a Lisp error | ||
| 575 | @c Perhaps it should interpolate all permutations, and make that the | ||
| 576 | @c globbing result, since otherwise hitting return here will result in | ||
| 577 | @c "(list of filenames)/bin", which is never very valuable. Thus, one | ||
| 578 | @c could cat only c backup files by using "ls ${identity *.c}~". In that | ||
| 579 | @c case, having an alias command name `glob' for `identity' would be | ||
| 580 | @c useful | ||
| 581 | @c @item for XEmacs on Win32, fix `file-name-all-completions' | ||
| 582 | @c Make sure it returns directory names terminated by | ||
| 583 | @c `directory-sep-char' (which is initialized to be ?/), rather than | ||
| 584 | @c backslash | ||
| 585 | @c @item once symbolic mode is supported for umask, implement chmod in Lisp | ||
| 586 | @c @item create `eshell-expand-file-name' | ||
| 587 | @c Which uses a data table to transform things like "~+", "...", etc | ||
| 588 | @c @item abstract `eshell-smart.el' into `smart-scroll.el' | ||
| 589 | @c It only really needs: to be hooked onto the output filter and the | ||
| 590 | @c pre-command hook, and to have the input-end and input-start markers. | ||
| 591 | @c And to know whether the last output group was "successful". | ||
| 592 | @c @item allow for fully persisting the state of Eshell | ||
| 593 | @c vars, history, buffer, input, dir stack, etc. | ||
| 594 | @c @item implement D in the predicate list | ||
| 595 | @c It means that files beginning with a dot should be included in the | ||
| 596 | @c glob match | ||
| 597 | @c @item a comma in a predicate list means OR | ||
| 598 | @c @item error if a glob doesn't expand due to a predicate | ||
| 599 | @c An error should be generated only if `eshell-error-if-no-glob' is | ||
| 600 | @c non-nil | ||
| 601 | @c @item the following doesn't cause an indent-according-to-mode to occur | ||
| 602 | @c (+ RET SPC TAB | ||
| 603 | @c @item create `eshell-auto-accumulate-list' | ||
| 604 | @c It is a list of commands for which, if the user presses RET, the text | ||
| 605 | @c gets staged as the next Eshell command, rather than being sent to the | ||
| 606 | @c current interactive | ||
| 607 | @c @item display file and line number if an error occurs in a script | ||
| 608 | @c @item wait doesn't work with process ids at the moment | ||
| 609 | @c @item enable the direct-to-process input code in eshell-term.el | ||
| 610 | @c @item problem with repeating "echo ${find /tmp}" | ||
| 611 | @c With smart display active, if I hold down RET, after a while it can't | ||
| 612 | @c keep up anymore and starts outputting blank lines. It only happens if | ||
| 613 | @c an asynchronous process is involved... | ||
| 614 | @c | ||
| 615 | @c I think the problem is that `eshell-send-input' is resetting the input | ||
| 616 | @c target location, so that if the asynchronous process is not done by | ||
| 617 | @c the time the next RET is received, the input processor thinks that the | ||
| 618 | @c input is meant for the process; which, because smart display is | ||
| 619 | @c enabled, will be the text of the last command line! That is a bug in | ||
| 620 | @c itself. | ||
| 621 | @c | ||
| 622 | @c In holding down RET while an asynchronous process is running, there | ||
| 623 | @c will be a point in between termination of the process, and the running | ||
| 624 | @c of eshell-post-command-hook, which would cause `eshell-send-input' to | ||
| 625 | @c call `eshell-copy-old-input', and then process that text as a command | ||
| 626 | @c to be run after the process. Perhaps there should be a way of killing | ||
| 627 | @c pending input between the death of the process, and the | ||
| 628 | @c post-command-hook. | ||
| 629 | @c @item allow for a more aggressive smart display mode | ||
| 630 | @c Perhaps toggled by a command, that makes each output block a smart | ||
| 631 | @c display block | ||
| 632 | @c @item create more meta variables | ||
| 633 | @c $! -- the reason for the failure of the last disk command, or the text | ||
| 634 | @c of the last Lisp error | ||
| 635 | @c | ||
| 636 | @c $= -- a special associate array, which can take references of the form | ||
| 637 | @c $=[REGEXP]. It also indexes into the directory ring | ||
| 638 | @c @item eshell scripts can't execute in the background | ||
| 639 | @c @item support zsh's "Parameter Expansion" syntax, i.e. ${NAME:-VAL} | ||
| 640 | @c @item write an `info' alias that can take arguments | ||
| 641 | @c So that the user can enter "info chmod" | ||
| 642 | @c @item split off more generic code from Eshell | ||
| 643 | @c parse-args.el --- parse a list of arguments | ||
| 644 | @c interpolate.el --- interpolate $variable $(lisp)... references | ||
| 645 | @c interp.el --- find which interpretor to run a script with | ||
| 646 | @c sh-ring.el --- extend ring.el for persistant, searchable history | ||
| 647 | @c zsh-glob.el --- zsh-style globbing and predicate/modifiers | ||
| 648 | @c smartdisp.el --- smart scrolling in input buffers | ||
| 649 | @c egetopt.el --- `eshell-eval-using-options' | ||
| 650 | @c prompt.el --- code for outputting and navigating prompts | ||
| 651 | @c cmd-rebind.el --- rebind certain keys in the input text | ||
| 652 | @c unix.el --- provides Lispish UNIX command, such as unix-rm, etc. | ||
| 653 | @c emacs-ls.el --- implementation of ls in Emacs Lisp | ||
| 654 | @c texidoc.el | ||
| 655 | @c pushd.el --- implementation of pushd/popd in Lisp | ||
| 656 | @c interface.el -- a mode for reading command-line input from the user | ||
| 657 | @c @item create a mode `eshell-browse' | ||
| 658 | @c It would treat the Eshell buffer as a outline. Collapsing the outline | ||
| 659 | @c hides all of the output text. Collapsing again would show only the | ||
| 660 | @c first command run in each directory | ||
| 661 | @c @item look through the Korn Shell book for feature ideas | ||
| 662 | @c @item allow other version of a file to be referenced by "file{rev}" | ||
| 663 | @c This would be expanded by `eshell-expand-file-name' | ||
| 664 | @c @item print "You have new mail" when the "Mail" icon gets turned on | ||
| 665 | @c @item implement M-| | ||
| 666 | @c @item implement input redirection | ||
| 667 | @c If it's a lisp function, input redirection implies "xargs" (in a | ||
| 668 | @c way..). And if input redirection is added, don't forget to update the | ||
| 669 | @c file-name-quote-list, and the delimiter list. | ||
| 670 | @c @item allow #<WORD ARG> to be a generic syntax | ||
| 671 | @c With the handling of "word" specified by an `eshell-special-alist'. | ||
| 672 | @c @item in `eval-using-options', have a :complete tag | ||
| 673 | @c It would be used to provide completion rules for that command. Then | ||
| 674 | @c the macro will automagically define the completion function | ||
| 675 | @c @item for `eshell-command-on-region', redirections apply to the result | ||
| 676 | @c So that "+ > 'blah" will cause the result of the `+' (using input from | ||
| 677 | @c the current region) to be inserting in the symbol `blah'. | ||
| 678 | @c | ||
| 679 | @c If a disk command is being invoked, the input is sent as standard | ||
| 680 | @c input, as if a "cat <region> |" were invoked. | ||
| 681 | @c | ||
| 682 | @c If a lisp command, or an alias, is invoked, then: if the line has no | ||
| 683 | @c ^J characters, it is divided by whitespace and passed as arguments to | ||
| 684 | @c the lisp function. Otherwise, it is divided at the ^J characters. | ||
| 685 | @c Thus, invoking `+' on a series of numbers will add them; `min' would | ||
| 686 | @c display the smallest figure. | ||
| 687 | @c @item write `eshell-script-mode' as a minor mode | ||
| 688 | @c It would provide syntax, abbrev, highlighting and indenting support | ||
| 689 | @c like emacs-lisp-mode + shell-mode. | ||
| 690 | @c @item in the history mechanism, finish bash-style support | ||
| 691 | @c For !n, !#, !:%, and !:1- as separate from !:1* | ||
| 692 | @c @item support the -n command line option for "history" | ||
| 693 | @c @item implement `fc' | ||
| 694 | @c @item specifying a frame as a redirection target implies point's buffer | ||
| 695 | @c @item implement ">FUNC-OR-FUNC-LIST" | ||
| 696 | @c This would allow for an "output translator", that takes a function to | ||
| 697 | @c modify output with, and the target. Devise a syntax that words well | ||
| 698 | @c with pipes, and can accomodate multiple functions (i.e.,">'(upcase | ||
| 699 | @c regexp-quote)" or ">'upcase"). | ||
| 700 | @c @item allow Eshell to read/write to/from standard input and output | ||
| 701 | @c This would be optional, rather than always using the Eshell buffer. | ||
| 702 | @c This would allow it to be run from the command line. | ||
| 703 | @c @item write a "help" command | ||
| 704 | @c It could even call subcommands with "--help" (or "-h" or "/?"). | ||
| 705 | @c @item implement stty | ||
| 706 | @c @item support rc's matching operator, "~ (list) regexp" | ||
| 707 | @c @item implement "bg" and "fg" to edit `eshell-process-list' | ||
| 708 | @c Using "bg" on a process that is already in the background does | ||
| 709 | @c nothing. Specifying redirection targets replaces (or adds) to the | ||
| 710 | @c list current being used. | ||
| 711 | @c @item have "jobs" print only the processes for the current eshell | ||
| 712 | @c @item how do I discover that a background process has requested input? | ||
| 713 | @c @item support 2>&1 and >& and 2> and |& | ||
| 714 | @c The syntax table for parsing these should be customizable, such that | ||
| 715 | @c the user could change it to use rc syntax: >[2=1]. | ||
| 716 | @c @item allow $_[-1], which reads the last element of the array, etc. | ||
| 717 | @c @item make $x[*] equal to listing out the full contents of x | ||
| 718 | @c Return them as a list, so that $_[*] is all the arguments of the last | ||
| 719 | @c command. | ||
| 720 | @c @item move ANSI code handling from `term' into `eshell-term' | ||
| 721 | @c And make it possible for the user to send char-by-char to the | ||
| 722 | @c underlying process. Ultimately, I should be able to move away from | ||
| 723 | @c using term.el altogether, since everything but the ANSI code handling | ||
| 724 | @c is already part of Eshell. Then, things would work correctly on Win32 | ||
| 725 | @c as well (which doesn't have "/bin/sh", though term tries to use it) | ||
| 726 | @c @item have other shell spawning commands be visual | ||
| 727 | @c Make (su, bash, telnet, rlogin, rsh, etc.) be part of | ||
| 728 | @c `eshell-visual-commands'. The only exception is if rsh/su/bash are | ||
| 729 | @c simply being used to invoke a single command. Then, it should be | ||
| 730 | @c based on what that command is. | ||
| 731 | @c @item create an alias "open" | ||
| 732 | @c This will search for some way to open its argument (similar to opening | ||
| 733 | @c a file in the Windows Explorer). Perhaps using ffap... | ||
| 734 | @c @item alias "read" to be the same as "open", except read-only | ||
| 735 | @c @item write a "tail -f" alias which does a view-file | ||
| 736 | @c I.e., it moves point to the end of the buffer, and then turns on | ||
| 737 | @c auto-revert mode in that buffer at frequent intervals -- and a head | ||
| 738 | @c alias which assums an upper limit of `eshell-maximum-line-length' | ||
| 739 | @c characters per line. | ||
| 740 | @c @item make dgrep load dired, mark everything, then execute the A binding | ||
| 741 | @c @item write emsh.c | ||
| 742 | @c It just runs Emacs with the appropriate arguments to invoke eshell. | ||
| 743 | @c That way, it could be listed as a login shell. | ||
| 744 | @c @item use an intangible PS2 string for multi-line input prompts | ||
| 745 | @c @item auto-detect when a command is visual, by checking TERMCAP usage | ||
| 746 | @c @item First keypress after M-x watson triggers `eshell-send-input' | ||
| 747 | @c @item Emacs 20.3: Figure out why pcomplete won't make | ||
| 748 | @c @item Make / electric | ||
| 749 | @c So that it automatically expands and corrects pathnames. Or make | ||
| 750 | @c pathname completion for pcomplete auto-expand "/u/i/std<TAB>" to | ||
| 751 | @c "/usr/include/std<TAB>". | ||
| 752 | @c @item Write pushd/popd out to disk along with last-dir-ring | ||
| 753 | @c @item add options to eshell/cat which would cause it to sort and uniq | ||
| 754 | @c @item implement in Lisp: wc. Also count sentences, paragraphs, pages. | ||
| 755 | @c @item once piping is added, implement sort and uniq | ||
| 756 | @c @item implement touch | ||
| 757 | @c @item implement epatch | ||
| 758 | @c Calls ediff-patch-file, or ediff-patch-buffer, depending on its | ||
| 759 | @c argument. | ||
| 760 | @c @item have an option for bringing up ls -l result in a dired buffer | ||
| 761 | @c @item write a version of xargs that's based on command rewriting | ||
| 762 | @c find X | xargs Y == Y ${find X}. Maybe I could change | ||
| 763 | @c eshell-do-pipelines to perform this on-thy-fly rewriting. | ||
| 764 | @c @item implement head and tail in Lisp | ||
| 765 | @c @item write an alias for less and more that brings up a view buffer | ||
| 766 | @c Such that they can press SPC and DEL, and then q to return to eshell. | ||
| 767 | @c The more command would be equivalent to: X > #<buffer Y>; view-buffer | ||
| 768 | @c #<buffer Y> | ||
| 769 | @c @item differentiate between aliases and functions | ||
| 770 | @c Allow for a bash-compatible syntax, such as: | ||
| 771 | @c | ||
| 772 | @c alias arg=blah | ||
| 773 | @c function arg () { blah $* } | ||
| 774 | @c @item find the various references to shell-mode within Emacs | ||
| 775 | @c And add support for Eshell there, since now Eshell is going to be part | ||
| 776 | @c of Emacs. | ||
| 777 | @c @item permit umask to be set on a cp target during the cp command | ||
| 778 | @c @item if the first thing that I do after I enter Emacs | ||
| 779 | @c is to run eshell-command and invoke ls, and then I use M-x eshell, it | ||
| 780 | @c doesn't show me anything. | ||
| 781 | @c @item M-RET during a long command doesn't quite work | ||
| 782 | @c Since it keeps the cursor up where the command was invoked. | ||
| 783 | @end table | ||
| 784 | |||
| 785 | @unnumbered Function and Variable Index | ||
| 786 | |||
| 787 | @printindex fn | ||
| 788 | |||
| 789 | @unnumbered Concept Index | ||
| 790 | |||
| 791 | @printindex cp | ||
| 792 | |||
| 793 | @unnumbered Key Index | ||
| 794 | |||
| 795 | @printindex ky | ||
| 796 | |||
| 797 | @setchapternewpage odd | ||
| 798 | @summarycontents | ||
| 799 | @contents | ||
| 800 | @bye | ||