428
+ − 1
+ − 2 @iftex
+ − 3 @chapter Miscellaneous Commands
+ − 4
+ − 5 This chapter contains several brief topics that do not fit anywhere else.
+ − 6
+ − 7 @end iftex
+ − 8
+ − 9 @node Sorting, Shell, Calendar/Diary, Top
+ − 10 @section Sorting Text
+ − 11 @cindex sorting
+ − 12
+ − 13 XEmacs provides several commands for sorting text in a buffer. All
+ − 14 operate on the contents of the region (the text between point and the
+ − 15 mark). They divide the text of the region into many @dfn{sort records},
+ − 16 identify a @dfn{sort key} for each record, and then reorder the records
+ − 17 using the order determined by the sort keys. The records are ordered so
+ − 18 that their keys are in alphabetical order, or, for numerical sorting, in
+ − 19 numerical order. In alphabetical sorting, all upper-case letters `A'
+ − 20 through `Z' come before lower-case `a', in accordance with the ASCII
+ − 21 character sequence.
+ − 22
+ − 23 The sort commands differ in how they divide the text into sort
+ − 24 records and in which part of each record they use as the sort key. Most of
+ − 25 the commands make each line a separate sort record, but some commands use
+ − 26 paragraphs or pages as sort records. Most of the sort commands use each
+ − 27 entire sort record as its own sort key, but some use only a portion of the
+ − 28 record as the sort key.
+ − 29
+ − 30 @findex sort-lines
+ − 31 @findex sort-paragraphs
+ − 32 @findex sort-pages
+ − 33 @findex sort-fields
+ − 34 @findex sort-numeric-fields
+ − 35 @table @kbd
+ − 36 @item M-x sort-lines
+ − 37 Divide the region into lines and sort by comparing the entire
+ − 38 text of a line. A prefix argument means sort in descending order.
+ − 39
+ − 40 @item M-x sort-paragraphs
+ − 41 Divide the region into paragraphs and sort by comparing the entire
+ − 42 text of a paragraph (except for leading blank lines). A prefix
+ − 43 argument means sort in descending order.
+ − 44
+ − 45 @item M-x sort-pages
+ − 46 Divide the region into pages and sort by comparing the entire
+ − 47 text of a page (except for leading blank lines). A prefix
+ − 48 argument means sort in descending order.
+ − 49
+ − 50 @item M-x sort-fields
+ − 51 Divide the region into lines and sort by comparing the contents of
+ − 52 one field in each line. Fields are defined as separated by
+ − 53 whitespace, so the first run of consecutive non-whitespace characters
+ − 54 in a line constitutes field 1, the second such run constitutes field
+ − 55 2, etc.
+ − 56
+ − 57 You specify which field to sort by with a numeric argument: 1 to sort
+ − 58 by field 1, etc. A negative argument means sort in descending
+ − 59 order. Thus, minus 2 means sort by field 2 in reverse-alphabetical
+ − 60 order.
+ − 61
+ − 62 @item M-x sort-numeric-fields
+ − 63 Like @kbd{M-x sort-fields}, except the specified field is converted
+ − 64 to a number for each line and the numbers are compared. @samp{10}
+ − 65 comes before @samp{2} when considered as text, but after it when
+ − 66 considered as a number.
+ − 67
+ − 68 @item M-x sort-columns
+ − 69 Like @kbd{M-x sort-fields}, except that the text within each line
+ − 70 used for comparison comes from a fixed range of columns. An explanation
+ − 71 is given below.
+ − 72 @end table
+ − 73
+ − 74 For example, if the buffer contains:
+ − 75
+ − 76 @smallexample
+ − 77 On systems where clash detection (locking of files being edited) is
+ − 78 implemented, XEmacs also checks the first time you modify a buffer
+ − 79 whether the file has changed on disk since it was last visited or
+ − 80 saved. If it has, you are asked to confirm that you want to change
+ − 81 the buffer.
+ − 82 @end smallexample
+ − 83
+ − 84 @noindent
+ − 85 then if you apply @kbd{M-x sort-lines} to the entire buffer you get:
+ − 86
+ − 87 @smallexample
+ − 88 On systems where clash detection (locking of files being edited) is
+ − 89 implemented, XEmacs also checks the first time you modify a buffer
+ − 90 saved. If it has, you are asked to confirm that you want to change
+ − 91 the buffer.
+ − 92 whether the file has changed on disk since it was last visited or
+ − 93 @end smallexample
+ − 94
+ − 95 @noindent
+ − 96 where the upper case `O' comes before all lower case letters. If you apply
+ − 97 instead @kbd{C-u 2 M-x sort-fields} you get:
+ − 98
+ − 99 @smallexample
+ − 100 saved. If it has, you are asked to confirm that you want to change
+ − 101 implemented, XEmacs also checks the first time you modify a buffer
+ − 102 the buffer.
+ − 103 On systems where clash detection (locking of files being edited) is
+ − 104 whether the file has changed on disk since it was last visited or
+ − 105 @end smallexample
+ − 106
+ − 107 @noindent
+ − 108 where the sort keys were @samp{If}, @samp{XEmacs}, @samp{buffer},
+ − 109 @samp{systems}, and @samp{the}.@refill
+ − 110
+ − 111 @findex sort-columns
+ − 112 @kbd{M-x sort-columns} requires more explanation. You specify the
+ − 113 columns by putting point at one of the columns and the mark at the other
+ − 114 column. Because this means you cannot put point or the mark at the
+ − 115 beginning of the first line to sort, this command uses an unusual
+ − 116 definition of `region': all of the line point is in is considered part of
+ − 117 the region, and so is all of the line the mark is in.
+ − 118
+ − 119 For example, to sort a table by information found in columns 10 to 15,
+ − 120 you could put the mark on column 10 in the first line of the table, and
+ − 121 point on column 15 in the last line of the table, and then use this command.
+ − 122 Or you could put the mark on column 15 in the first line and point on
+ − 123 column 10 in the last line.
+ − 124
+ − 125 This can be thought of as sorting the rectangle specified by point and
+ − 126 the mark, except that the text on each line to the left or right of the
+ − 127 rectangle moves along with the text inside the rectangle.
+ − 128 @xref{Rectangles}.
+ − 129
+ − 130 @node Shell, Narrowing, Sorting, Top
+ − 131 @section Running Shell Commands from XEmacs
+ − 132 @cindex subshell
+ − 133 @cindex shell commands
+ − 134
+ − 135 XEmacs has commands for passing single command lines to inferior shell
+ − 136 processes; it can also run a shell interactively with input and output to
+ − 137 an XEmacs buffer @samp{*shell*}.
+ − 138
+ − 139 @table @kbd
+ − 140 @item M-!
+ − 141 Run a specified shell command line and display the output
+ − 142 (@code{shell-command}).
+ − 143 @item M-|
+ − 144 Run a specified shell command line with region contents as input;
+ − 145 optionally replace the region with the output
+ − 146 (@code{shell-command-on-region}).
+ − 147 @item M-x shell
+ − 148 Run a subshell with input and output through an XEmacs buffer.
+ − 149 You can then give commands interactively.
+ − 150 @item M-x term
+ − 151 Run a subshell with input and output through an XEmacs buffer.
+ − 152 You can then give commands interactively.
+ − 153 Full terminal emulation is available.
+ − 154 @end table
+ − 155
+ − 156 @menu
+ − 157 * Single Shell:: How to run one shell command and return.
+ − 158 * Interactive Shell:: Permanent shell taking input via XEmacs.
+ − 159 * Shell Mode:: Special XEmacs commands used with permanent shell.
+ − 160 * Terminal emulator:: An XEmacs window as a terminal emulator.
+ − 161 * Term Mode:: Special XEmacs commands used in Term mode.
+ − 162 * Paging in Term:: Paging in the terminal emulator.
+ − 163 @end menu
+ − 164
+ − 165 @node Single Shell, Interactive Shell, Shell, Shell
+ − 166 @subsection Single Shell Commands
+ − 167
+ − 168 @kindex M-!
+ − 169 @findex shell-command
+ − 170 @kbd{M-!} (@code{shell-command}) reads a line of text using the
+ − 171 minibuffer and creates an inferior shell to execute the line as a command.
+ − 172 Standard input from the command comes from the null device. If the shell
+ − 173 command produces any output, the output goes to an XEmacs buffer named
+ − 174 @samp{*Shell Command Output*}, which is displayed in another window but not
+ − 175 selected. A numeric argument, as in @kbd{M-1 M-!}, directs this command to
+ − 176 insert any output into the current buffer. In that case, point is left
+ − 177 before the output and the mark is set after the output.
+ − 178
+ − 179 @kindex M-|
+ − 180 @findex shell-command-on-region
+ − 181 @kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!} but passes
+ − 182 the contents of the region as input to the shell command, instead of no
+ − 183 input. If a numeric argument is used to direct output to the current
+ − 184 buffer, then the old region is deleted first and the output replaces it as
+ − 185 the contents of the region.@refill
+ − 186
+ − 187 @vindex shell-file-name
+ − 188 @cindex environment
+ − 189 Both @kbd{M-!} and @kbd{M-|} use @code{shell-file-name} to specify the
+ − 190 shell to use. This variable is initialized based on your @code{SHELL}
+ − 191 environment variable when you start XEmacs. If the file name does not
+ − 192 specify a directory, the directories in the list @code{exec-path} are
+ − 193 searched; this list is initialized based on the @code{PATH} environment
+ − 194 variable when you start XEmacs. You can override either or both of these
442
+ − 195 default initializations in your init file. @xref{Init File}.@refill
428
+ − 196
+ − 197 When you use @kbd{M-!} and @kbd{M-|}, XEmacs has to wait until the
+ − 198 shell command completes. You can quit with @kbd{C-g}; that terminates
+ − 199 the shell command.
+ − 200
+ − 201 @node Interactive Shell, Shell Mode, Single Shell, Shell
+ − 202 @subsection Interactive Inferior Shell
+ − 203
+ − 204 @findex shell
+ − 205 To run a subshell interactively with its typescript in an XEmacs
+ − 206 buffer, use @kbd{M-x shell}. This creates (or reuses) a buffer named
+ − 207 @samp{*shell*} and runs a subshell with input coming from and output going
+ − 208 to that buffer. That is to say, any ``terminal output'' from the subshell
+ − 209 will go into the buffer, advancing point, and any ``terminal input'' for
+ − 210 the subshell comes from text in the buffer. To give input to the subshell,
+ − 211 go to the end of the buffer and type the input, terminated by @key{RET}.
+ − 212
+ − 213 XEmacs does not wait for the subshell to do anything. You can switch
+ − 214 windows or buffers and edit them while the shell is waiting, or while it is
+ − 215 running a command. Output from the subshell waits until XEmacs has time to
+ − 216 process it; this happens whenever XEmacs is waiting for keyboard input or
+ − 217 for time to elapse.
+ − 218
+ − 219 To get multiple subshells, change the name of buffer
+ − 220 @samp{*shell*} to something different by using @kbd{M-x rename-buffer}. The
+ − 221 next use of @kbd{M-x shell} creates a new buffer @samp{*shell*} with
+ − 222 its own subshell. By renaming this buffer as well you can create a third
+ − 223 one, and so on. All the subshells run independently and in parallel.
+ − 224
+ − 225 @vindex explicit-shell-file-name
+ − 226 The file name used to load the subshell is the value of the variable
+ − 227 @code{explicit-shell-file-name}, if that is non-@code{nil}. Otherwise, the
+ − 228 environment variable @code{ESHELL} is used, or the environment variable
+ − 229 @code{SHELL} if there is no @code{ESHELL}. If the file name specified
+ − 230 is relative, the directories in the list @code{exec-path} are searched
+ − 231 (@pxref{Single Shell,Single Shell Commands}).@refill
+ − 232
+ − 233 As soon as the subshell is started, it is sent as input the contents of
+ − 234 the file @file{~/.emacs_@var{shellname}}, if that file exists, where
+ − 235 @var{shellname} is the name of the file that the shell was loaded from.
+ − 236 For example, if you use @code{csh}, the file sent to it is
+ − 237 @file{~/.emacs_csh}.@refill
+ − 238
+ − 239 @vindex shell-pushd-regexp
+ − 240 @vindex shell-popd-regexp
+ − 241 @vindex shell-cd-regexp
+ − 242 @code{cd}, @code{pushd}, and @code{popd} commands given to the inferior
+ − 243 shell are watched by XEmacs so it can keep the @samp{*shell*} buffer's
+ − 244 default directory the same as the shell's working directory. These
+ − 245 commands are recognized syntactically by examining lines of input that are
+ − 246 sent. If you use aliases for these commands, you can tell XEmacs to
+ − 247 recognize them also. For example, if the value of the variable
+ − 248 @code{shell-pushd-regexp} matches the beginning of a shell command line,
+ − 249 that line is regarded as a @code{pushd} command. Change this variable when
+ − 250 you add aliases for @samp{pushd}. Likewise, @code{shell-popd-regexp} and
+ − 251 @code{shell-cd-regexp} are used to recognize commands with the meaning of
+ − 252 @samp{popd} and @samp{cd}.@refill
+ − 253
+ − 254 @kbd{M-x shell-resync-dirs} queries the shell and resynchronizes XEmacs'
+ − 255 idea of what the current directory stack is. @kbd{M-x
+ − 256 shell-dirtrack-toggle} turns directory tracking on and off.
+ − 257
+ − 258 @vindex input-ring-size
+ − 259 XEmacs keeps a history of the most recent commands you have typed in the
+ − 260 @samp{*shell*} buffer. If you are at the beginning of a shell command
+ − 261 line and type @key{M-p}, the previous shell input is inserted into the
+ − 262 buffer before point. Immediately typing @key{M-p} again deletes that
+ − 263 input and inserts the one before it. By repeating @key{M-p} you can
+ − 264 move backward through your commands until you find one you want to
+ − 265 repeat. You may then edit the command before typing @key{RET} if you
+ − 266 wish. @key{M-n} moves forward through the command history, in case you
+ − 267 moved backward past the one you wanted while using @key{M-p}. If you
+ − 268 type the first few characters of a previous command and then type
+ − 269 @key{M-p}, the most recent shell input starting with those characters is
+ − 270 inserted. This can be very convenient when you are repeating a sequence
+ − 271 of shell commands. The variable @code{input-ring-size} controls how
+ − 272 many commands are saved in your input history. The default is 30.
+ − 273
+ − 274
+ − 275 @node Shell Mode, Terminal emulator, Interactive Shell, Shell
+ − 276 @subsection Shell Mode
+ − 277
+ − 278 @cindex Shell mode
+ − 279 The shell buffer uses Shell mode, which defines several special keys
+ − 280 attached to the @kbd{C-c} prefix. They are chosen to resemble the usual
+ − 281 editing and job control characters present in shells that are not under
+ − 282 XEmacs, except that you must type @kbd{C-c} first. Here is a list
+ − 283 of the special key bindings of Shell mode:
+ − 284
+ − 285 @kindex RET (Shell mode)
+ − 286 @kindex C-c C-d (Shell mode)
+ − 287 @kindex C-d (Shell mode)
+ − 288 @kindex C-c C-u (Shell mode)
+ − 289 @kindex C-c C-w (Shell mode)
+ − 290 @kindex C-c C-c (Shell mode)
+ − 291 @kindex C-c C-z (Shell mode)
+ − 292 @kindex C-c C-\ (Shell mode)
+ − 293 @kindex C-c C-o (Shell mode)
+ − 294 @kindex C-c C-r (Shell mode)
+ − 295 @kindex C-c C-y (Shell mode)
+ − 296 @kindex M-p (Shell mode)
+ − 297 @kindex M-n (Shell mode)
+ − 298 @kindex TAB (Shell mode)
+ − 299 @findex send-shell-input
+ − 300 @findex shell-send-eof
+ − 301 @findex comint-delchar-or-maybe-eof
+ − 302 @findex interrupt-shell-subjob
+ − 303 @findex stop-shell-subjob
+ − 304 @findex quit-shell-subjob
+ − 305 @findex kill-output-from-shell
+ − 306 @findex show-output-from-shell
+ − 307 @findex copy-last-shell-input
+ − 308 @findex comint-previous-input
+ − 309 @findex comint-next-input
+ − 310 @findex comint-dynamic-complete
+ − 311 @vindex shell-prompt-pattern
+ − 312 @table @kbd
+ − 313 @item @key{RET}
+ − 314 At end of buffer send line as input; otherwise, copy current line to end of
+ − 315 buffer and send it (@code{send-shell-input}). When a line is copied, any
+ − 316 text at the beginning of the line that matches the variable
+ − 317 @code{shell-prompt-pattern} is left out; this variable's value should be a
+ − 318 regexp string that matches the prompts that you use in your subshell.
+ − 319 @item C-c C-d
+ − 320 Send end-of-file as input, probably causing the shell or its current
+ − 321 subjob to finish (@code{shell-send-eof}).
+ − 322 @item C-d
+ − 323 If point is not at the end of the buffer, delete the next character just
+ − 324 like most other modes. If point is at the end of the buffer, send
+ − 325 end-of-file as input, instead of generating an error as in other modes
+ − 326 (@code{comint-delchar-or-maybe-eof}).
+ − 327 @item C-c C-u
+ − 328 Kill all text that has yet to be sent as input (@code{kill-shell-input}).
+ − 329 @item C-c C-w
+ − 330 Kill a word before point (@code{backward-kill-word}).
+ − 331 @item C-c C-c
+ − 332 Interrupt the shell or its current subjob if any
+ − 333 (@code{interrupt-shell-subjob}).
+ − 334 @item C-c C-z
+ − 335 Stop the shell or its current subjob if any (@code{stop-shell-subjob}).
+ − 336 @item C-c C-\
+ − 337 Send quit signal to the shell or its current subjob if any
+ − 338 (@code{quit-shell-subjob}).
+ − 339 @item C-c C-o
+ − 340 Delete last batch of output from shell (@code{kill-output-from-shell}).
+ − 341 @item C-c C-r
+ − 342 Scroll top of last batch of output to top of window
+ − 343 (@code{show-output-from-shell}).
+ − 344 @item C-c C-y
+ − 345 Copy the previous bunch of shell input and insert it into the
+ − 346 buffer before point (@code{copy-last-shell-input}). No final newline
+ − 347 is inserted, and the input copied is not resubmitted until you type
+ − 348 @key{RET}.
+ − 349 @item M-p
+ − 350 Move backward through the input history. Search for a matching command
+ − 351 if you have typed the beginning of a command (@code{comint-previous-input}).
+ − 352 @item M-n
+ − 353 Move forward through the input history. Useful when you are
+ − 354 using @key{M-p} quickly and go past the desired command
+ − 355 (@code{comint-next-input}).
+ − 356 @item @key{TAB}
+ − 357 Complete the file name preceding point (@code{comint-dynamic-complete}).
+ − 358 @end table
+ − 359
+ − 360 @node Terminal emulator, Term Mode, Shell Mode, Shell
+ − 361 @subsection Interactive Inferior Shell with Terminal Emulator
+ − 362 @findex term
+ − 363
+ − 364 To run a subshell in a terminal emulator, putting its typescript in an XEmacs
+ − 365 buffer, use @kbd{M-x term}. This creates (or reuses) a buffer named
+ − 366 @samp{*term*} and runs a subshell with input coming from your keyboard and
+ − 367 output going to that buffer.
+ − 368
+ − 369 All the normal keys that you type are sent without any interpretation
+ − 370 by XEmacs directly to the subshell, as ``terminal input.''
+ − 371 Any ``echo'' of your input is the responsibility of the subshell.
+ − 372 (The exception is the terminal escape character,
+ − 373 which by default is @kbd{C-c}. @pxref{Term Mode}.)
+ − 374 Any ``terminal output'' from the subshell goes into the buffer,
+ − 375 advancing point.
+ − 376
+ − 377 Some programs (such as XEmacs itself) need to control the
+ − 378 appearance on the terminal screen in detail. They do this by
+ − 379 sending special control codes. The exact control
+ − 380 codes needed vary from terminal to terminal, but nowadays
+ − 381 most terminals and terminal emulators (including xterm)
+ − 382 understand the so-called "ANSI escape sequences" (first
+ − 383 popularized by the Digital's VT100 family of terminal).
+ − 384 The term mode also understands these escape sequences,
+ − 385 and for each control code does the appropriate thing
+ − 386 to change the buffer so that the appearance of the window
+ − 387 will match what it would be on a real terminal.
+ − 388 Thus you can actually run XEmacs inside an XEmacs Term window!
+ − 389
+ − 390 XEmacs does not wait for the subshell to do anything. You can switch
+ − 391 windows or buffers and edit them while the shell is waiting, or while
+ − 392 it is running a command. Output from the subshell waits until XEmacs
+ − 393 has time to process it; this happens whenever XEmacs is waiting for
+ − 394 keyboard input or for time to elapse.
+ − 395
+ − 396 To make multiple terminal emulators, rename the buffer @samp{*term*}
+ − 397 to something different using @kbd{M-x rename-uniquely},
+ − 398 just as with Shell mode.
+ − 399
+ − 400 The file name used to load the subshell is determined
+ − 401 the same way as for Shell mode.
+ − 402
+ − 403 Unlike Shell mode, Term mode does not track the current directory
+ − 404 by examining your input. Instead, if you use a programmable
+ − 405 shell, you can have it tell Term what the current directory is.
+ − 406 This is done automatically by bash for version 1.15 and later.
+ − 407
+ − 408 @node Term Mode, Paging in Term, Terminal emulator, Shell
+ − 409 @subsection Term Mode
+ − 410 @cindex Term mode
+ − 411 @cindex mode, Term
+ − 412
+ − 413 Term uses Term mode, which has two input modes:
+ − 414 In line mode, Term basically acts like Shell mode. @xref{Shell Mode}.
+ − 415 In Char mode, each character is sent directly to the inferior subshell,
+ − 416 except for the Term escape character, normally @kbd{C-c}.
+ − 417
+ − 418 To switch between line and char mode, use these commands:
+ − 419 @table @kbd
936
+ − 420 @kindex C-c C-j @r{(Term mode)}
428
+ − 421 findex term-char-mode
936
+ − 422 @item C-c C-j
428
+ − 423 Switch to line mode. Do nothing if already in line mode.
+ − 424
936
+ − 425 @kindex C-c C-k @r{(Term mode)}
428
+ − 426 @findex term-line-mode
936
+ − 427 @item C-c C-k
428
+ − 428 Switch to char mode. Do nothing if already in char mode.
+ − 429 @end table
+ − 430
+ − 431 The following commands are only available in Char mode:
+ − 432 @table @kbd
+ − 433 @item C-c C-c
+ − 434 Send a literal @key{C-c} to the sub-shell.
+ − 435
+ − 436 @item C-c C-x
+ − 437 A prefix command to conveniently access the global @key{C-x} commands.
+ − 438 For example, @kbd{C-c C-x o} invokes the global binding of
+ − 439 @kbd{C-x o}, which is normally @samp{other-window}.
+ − 440 @end table
+ − 441
+ − 442 @node Paging in Term,, Term Mode, Shell
+ − 443 @subsection Paging in the terminal emulator
+ − 444
+ − 445 Term mode has a pager feature. When the pager is enabled,
+ − 446 term mode will pause at the end of each screenful.
+ − 447
+ − 448 @table @kbd
+ − 449 @kindex C-c C-q @r{(Term mode)}
+ − 450 @findex term-pager-toggle
+ − 451 @item C-c C-q
+ − 452 Toggles the pager feature: Disables the pager if it is enabled,
+ − 453 and vice versa. This works in both line and char modes.
+ − 454 If the pager enabled, the mode-line contains the word @samp{page}.
+ − 455 @end table
+ − 456
+ − 457 If the pager is enabled, and Term receives more than a screenful
+ − 458 of output since your last input, Term will enter More break mode.
+ − 459 This is indicated by @samp{**MORE**} in the mode-line.
+ − 460 Type a @kbd{Space} to display the next screenful of output.
+ − 461 Type @kbd{?} to see your other options. The interface is similar
+ − 462 to the Unix @samp{more} program.
+ − 463
+ − 464 @node Narrowing, Hardcopy, Shell, Top
+ − 465 @section Narrowing
+ − 466 @cindex widening
+ − 467 @cindex restriction
+ − 468 @cindex narrowing
+ − 469
+ − 470 @dfn{Narrowing} means focusing in on some portion of the buffer, making
+ − 471 the rest temporarily invisible and inaccessible. Cancelling the narrowing
+ − 472 and making the entire buffer once again visible is called @dfn{widening}.
+ − 473 The amount of narrowing in effect in a buffer at any time is called the
+ − 474 buffer's @dfn{restriction}.
+ − 475
+ − 476 @c WideCommands
+ − 477 @table @kbd
+ − 478 @item C-x n n
+ − 479 Narrow down to between point and mark (@code{narrow-to-region}).
+ − 480 @item C-x n w
+ − 481 Widen to make the entire buffer visible again (@code{widen}).
+ − 482 @end table
+ − 483
+ − 484 Narrowing sometimes makes it easier to concentrate on a single
+ − 485 subroutine or paragraph by eliminating clutter. It can also be used to
+ − 486 restrict the range of operation of a replace command or repeating
+ − 487 keyboard macro. The word @samp{Narrow} appears in the mode line
+ − 488 whenever narrowing is in effect. When you have narrowed to a part of the
+ − 489 buffer, that part appears to be all there is. You can't see the rest,
+ − 490 can't move into it (motion commands won't go outside the visible part),
+ − 491 and can't change it in any way. However, the invisible text is not
+ − 492 gone; if you save the file, it will be saved.
+ − 493
+ − 494 @kindex C-x n n
+ − 495 @findex narrow-to-region
+ − 496 The primary narrowing command is @kbd{C-x n n} (@code{narrow-to-region}).
+ − 497 It sets the current buffer's restrictions so that the text in the current
+ − 498 region remains visible but all text before the region or after the region
+ − 499 is invisible. Point and mark do not change.
+ − 500
+ − 501 Because narrowing can easily confuse users who do not understand it,
+ − 502 @code{narrow-to-region} is normally a disabled command. Attempting to use
+ − 503 this command asks for confirmation and gives you the option of enabling it;
+ − 504 once you enable the command, confirmation will no longer be required. @xref{Disabling}.
+ − 505
+ − 506 @kindex C-x n w
+ − 507 @findex widen
+ − 508 To undo narrowing, use @kbd{C-x n w} (@code{widen}). This makes all
+ − 509 text in the buffer accessible again.
+ − 510
+ − 511 Use the @kbd{C-x =} command to get information on what part of the
+ − 512 buffer you narrowed down. @xref{Position Info}.
+ − 513
+ − 514 @node Hardcopy, Recursive Edit, Narrowing, Top
+ − 515 @section Hardcopy Output
+ − 516 @cindex hardcopy
+ − 517
+ − 518 The XEmacs commands for making hardcopy derive their names from the
+ − 519 Unix commands @samp{print} and @samp{lpr}.
+ − 520
+ − 521 @table @kbd
+ − 522 @item M-x print-buffer
+ − 523 Print hardcopy of current buffer using Unix command @samp{print}
+ − 524 @*(@samp{lpr -p}). This command adds page headings containing the file name
+ − 525 and page number.
+ − 526 @item M-x lpr-buffer
+ − 527 Print hardcopy of current buffer using Unix command @samp{lpr}.
+ − 528 This command does not add page headings.
+ − 529 @item M-x print-region
+ − 530 Like @code{print-buffer}, but prints only the current region.
+ − 531 @item M-x lpr-region
+ − 532 Like @code{lpr-buffer}, but prints only the current region.
+ − 533 @end table
+ − 534
+ − 535 @findex print-buffer
+ − 536 @findex print-region
+ − 537 @findex lpr-buffer
+ − 538 @findex lpr-region
+ − 539 @vindex lpr-switches
+ − 540 All the hardcopy commands pass extra switches to the @code{lpr} program
+ − 541 based on the value of the variable @code{lpr-switches}. Its value should
+ − 542 be a list of strings, each string a switch starting with @samp{-}. For
+ − 543 example, the value could be @code{("-Pfoo")} to print on printer
+ − 544 @samp{foo}.
+ − 545
+ − 546 @node Recursive Edit, Dissociated Press, Hardcopy, Top
+ − 547 @section Recursive Editing Levels
+ − 548 @cindex recursive editing level
+ − 549 @cindex editing level, recursive
+ − 550
+ − 551 A @dfn{recursive edit} is a situation in which you are using XEmacs
+ − 552 commands to perform arbitrary editing while in the middle of another
+ − 553 XEmacs command. For example, when you type @kbd{C-r} inside a
+ − 554 @code{query-replace}, you enter a recursive edit in which you can change
+ − 555 the current buffer. When you exit from the recursive edit, you go back to
+ − 556 the @code{query-replace}.
+ − 557
+ − 558 @kindex C-M-c
+ − 559 @findex exit-recursive-edit
+ − 560 @cindex exiting
+ − 561 @dfn{Exiting} a recursive edit means returning to the unfinished
+ − 562 command, which continues execution. For example, exiting the recursive
+ − 563 edit requested by @kbd{C-r} in @code{query-replace} causes query replacing
+ − 564 to resume. Exiting is done with @kbd{C-M-c} (@code{exit-recursive-edit}).
+ − 565
+ − 566 @kindex C-]
+ − 567 @findex abort-recursive-edit
+ − 568 You can also @dfn{abort} a recursive edit. This is like exiting, but
+ − 569 also quits the unfinished command immediately. Use the command @kbd{C-]}
+ − 570 (@code{abort-recursive-edit}) for this. @xref{Quitting}.
+ − 571
+ − 572 The mode line shows you when you are in a recursive edit by displaying
+ − 573 square brackets around the parentheses that always surround the major
+ − 574 and minor mode names. Every window's mode line shows the square
+ − 575 brackets, since XEmacs as a whole, rather than any particular buffer, is
+ − 576 in a recursive edit.
+ − 577
+ − 578 @findex top-level
+ − 579 It is possible to be in recursive edits within recursive edits. For
+ − 580 example, after typing @kbd{C-r} in a @code{query-replace}, you might
+ − 581 type a command that entered the debugger. In such a case, two or
+ − 582 more sets of square brackets appear in the mode line(s). Exiting the
+ − 583 inner recursive edit (here with the debugger @kbd{c} command)
+ − 584 resumes the query-replace command where it called the debugger. After
+ − 585 the end of the query-replace command, you would be able to exit the
+ − 586 first recursive edit. Aborting exits only one level of recursive edit;
+ − 587 it returns to the command level of the previous recursive edit. You can
+ − 588 then abort that one as well.
+ − 589
+ − 590 The command @kbd{M-x top-level} aborts all levels of
+ − 591 recursive edits, returning immediately to the top level command reader.
+ − 592
+ − 593 The text you edit inside the recursive edit need not be the same text
+ − 594 that you were editing at top level. If the command that invokes the
+ − 595 recursive edit selects a different buffer first, that is the buffer you
+ − 596 will edit recursively. You can switch buffers within the recursive edit
+ − 597 in the normal manner (as long as the buffer-switching keys have not been
+ − 598 rebound). While you could theoretically do the rest of your editing
+ − 599 inside the recursive edit, including visiting files, this could have
+ − 600 surprising effects (such as stack overflow) from time to time. It is
+ − 601 best if you always exit or abort a recursive edit when you no longer
+ − 602 need it.
+ − 603
+ − 604 In general, XEmacs tries to avoid using recursive edits. It is
+ − 605 usually preferable to allow users to switch among the possible editing
+ − 606 modes in any order they like. With recursive edits, the only way to get
+ − 607 to another state is to go ``back'' to the state that the recursive edit
+ − 608 was invoked from.
+ − 609
+ − 610 @node Dissociated Press, CONX, Recursive Edit, Top
+ − 611 @section Dissociated Press
+ − 612
+ − 613 @findex dissociated-press
+ − 614 @kbd{M-x dissociated-press} is a command for scrambling a file of text
+ − 615 either word by word or character by character. Starting from a buffer of
+ − 616 straight English, it produces extremely amusing output. The input comes
+ − 617 from the current XEmacs buffer. Dissociated Press writes its output in a
+ − 618 buffer named @samp{*Dissociation*}, and redisplays that buffer after every
+ − 619 couple of lines (approximately) to facilitate reading it.
+ − 620
+ − 621 @code{dissociated-press} asks every so often whether to continue
+ − 622 operating. Answer @kbd{n} to stop it. You can also stop at any time by
+ − 623 typing @kbd{C-g}. The dissociation output remains in the @samp{*Dissociation*}
+ − 624 buffer for you to copy elsewhere if you wish.
+ − 625
+ − 626 @cindex presidentagon
+ − 627 Dissociated Press operates by jumping at random from one point in the
+ − 628 buffer to another. In order to produce plausible output rather than
+ − 629 gibberish, it insists on a certain amount of overlap between the end of one
+ − 630 run of consecutive words or characters and the start of the next. That is,
+ − 631 if it has just printed out `president' and then decides to jump to a
+ − 632 different point in the file, it might spot the `ent' in `pentagon' and
+ − 633 continue from there, producing `presidentagon'. Long sample texts produce
+ − 634 the best results.
+ − 635
+ − 636 @cindex againformation
+ − 637 A positive argument to @kbd{M-x dissociated-press} tells it to operate
+ − 638 character by character, and specifies the number of overlap characters. A
+ − 639 negative argument tells it to operate word by word and specifies the number
+ − 640 of overlap words. In this mode, whole words are treated as the elements to
+ − 641 be permuted, rather than characters. No argument is equivalent to an
+ − 642 argument of two. For your againformation, the output goes only into the
+ − 643 buffer @samp{*Dissociation*}. The buffer you start with is not changed.
+ − 644
+ − 645 @cindex Markov chain
+ − 646 @cindex ignoriginal
+ − 647 @cindex techniquitous
+ − 648 Dissociated Press produces nearly the same results as a Markov chain
+ − 649 based on a frequency table constructed from the sample text. It is,
+ − 650 however, an independent, ignoriginal invention. Dissociated Press
+ − 651 techniquitously copies several consecutive characters from the sample
+ − 652 between random choices, whereas a Markov chain would choose randomly for
+ − 653 each word or character. This makes for more plausible sounding results
+ − 654 and runs faster.
+ − 655
+ − 656 @cindex outragedy
+ − 657 @cindex buggestion
+ − 658 @cindex properbose
+ − 659 It is a mustatement that too much use of Dissociated Press can be a
+ − 660 developediment to your real work. Sometimes to the point of outragedy.
+ − 661 And keep dissociwords out of your documentation, if you want it to be well
+ − 662 userenced and properbose. Have fun. Your buggestions are welcome.
+ − 663
+ − 664 @node CONX, Amusements, Dissociated Press, Top
+ − 665 @section CONX
+ − 666 @cindex random sentences
+ − 667
+ − 668 Besides producing a file of scrambled text with Dissociated Press, you
+ − 669 can generate random sentences by using CONX.
+ − 670
+ − 671 @table @kbd
+ − 672 @item M-x conx
+ − 673 Generate random sentences in the @code{*conx*} buffer.
+ − 674 @item M-x conx-buffer
+ − 675 Absorb the text in the current buffer into the @code{conx} database.
+ − 676 @item M-x conx-init
+ − 677 Forget the current word-frequency tree.
+ − 678 @item M-x conx-load
+ − 679 Load a @code{conx} database that has been previously saved with
+ − 680 @code{M-x conx-save}.
+ − 681 @item M-x conx-region
+ − 682 Absorb the text in the current buffer into the @code{conx} database.
+ − 683 @item M-x conx-save
+ − 684 Save the current @code{conx} database to a file for future retrieval.
+ − 685 @end table
+ − 686
+ − 687 @findex conx
+ − 688 @findex conx-buffer
+ − 689 @findex conx-load
+ − 690 @findex conx-region
+ − 691 @findex conx-init
+ − 692 @findex conx-save
+ − 693
+ − 694 Copy text from a buffer using @kbd{M-x conx-buffer} or @kbd{M-x conx-region}
+ − 695 and then type @kbd{M-x conx}. Output is continuously generated until you
+ − 696 type @key{^G}. You can save the @code{conx} database to a file with
+ − 697 @kbd{M-x conx-save}, which you can retrieve with @code{M-x conx-load}.
+ − 698 To clear the database, use @code{M-x conx-init}.
+ − 699
+ − 700 @node Amusements, Emulation, CONX, Top
+ − 701 @section Other Amusements
+ − 702 @cindex boredom
+ − 703 @findex hanoi
+ − 704 @findex yow
+ − 705
+ − 706 If you are a little bit bored, you can try @kbd{M-x hanoi}. If you are
+ − 707 considerably bored, give it a numeric argument. If you are very, very
+ − 708 bored, try an argument of 9. Sit back and watch.
+ − 709
+ − 710 When you are frustrated, try the famous Eliza program. Just do
+ − 711 @kbd{M-x doctor}. End each input by typing @kbd{RET} twice.
+ − 712
+ − 713 When you are feeling strange, type @kbd{M-x yow}.
+ − 714
+ − 715 @node Emulation, Customization, Amusements, Top
+ − 716 @comment node-name, next, previous, up
+ − 717 @section Emulation
+ − 718 @cindex other editors
+ − 719 @cindex vi
+ − 720 @cindex EDT
+ − 721
+ − 722 XEmacs can be programmed to emulate (more or less) most other
+ − 723 editors. Standard facilities can emulate these:
+ − 724
+ − 725 @table @asis
+ − 726 @item Viper (a vi emulator)
+ − 727 @cindex Viper
+ − 728 In XEmacs, Viper is the preferred emulation of vi within XEmacs.
+ − 729 Viper is designed to allow you to take advantage of the best
+ − 730 features of XEmacs while still doing your basic editing in a
+ − 731 familiar, vi-like fashion. Viper provides various different
+ − 732 levels of vi emulation, from a quite complete emulation that
+ − 733 allows almost no access to native XEmacs commands, to an
+ − 734 ``expert'' mode that combines the most useful vi commands with
+ − 735 the most useful XEmacs commands.
+ − 736
+ − 737 To start Viper, put the command
+ − 738
+ − 739 @example
+ − 740 (viper-mode)
+ − 741 @end example
+ − 742
442
+ − 743 in your init file. @xref{Init File}.
428
+ − 744
+ − 745 Viper comes with a separate manual that is provided standard
+ − 746 with the XEmacs distribution.
+ − 747
+ − 748 @ignore
+ − 749 @item evi (alternative vi emulator)
+ − 750 @cindex evi
+ − 751 evi is an alternative vi emulator that also provides a nearly complete
+ − 752 emulation of vi.
+ − 753
+ − 754 evi comes with a separate manual that is provided standard
+ − 755 with the XEmacs distribution.
+ − 756
+ − 757 Warning: loading more than one vi emulator at once may cause name
+ − 758 conflicts; no one has checked.
+ − 759 @end ignore
+ − 760
+ − 761 @item EDT (DEC VMS editor)
+ − 762 @findex edt-emulation-on
+ − 763 @findex edt-emulation-off
+ − 764 Turn on EDT emulation with @kbd{M-x edt-emulation-on}. @kbd{M-x
+ − 765 @*edt-emulation-off} restores normal Emacs command bindings.
+ − 766
+ − 767 Most of the EDT emulation commands are keypad keys, and most standard
+ − 768 Emacs key bindings are still available. The EDT emulation rebindings
+ − 769 are done in the global keymap, so there is no problem switching
+ − 770 buffers or major modes while in EDT emulation.
+ − 771
+ − 772 @end table