--- /dev/null
+
+@iftex
+@chapter Miscellaneous Commands
+
+ This chapter contains several brief topics that do not fit anywhere else.
+
+@end iftex
+
+@node Sorting, Shell, Calendar/Diary, Top
+@section Sorting Text
+@cindex sorting
+
+ XEmacs provides several commands for sorting text in a buffer. All
+operate on the contents of the region (the text between point and the
+mark). They divide the text of the region into many @dfn{sort records},
+identify a @dfn{sort key} for each record, and then reorder the records
+using the order determined by the sort keys. The records are ordered so
+that their keys are in alphabetical order, or, for numerical sorting, in
+numerical order. In alphabetical sorting, all upper-case letters `A'
+through `Z' come before lower-case `a', in accordance with the ASCII
+character sequence.
+
+ The sort commands differ in how they divide the text into sort
+records and in which part of each record they use as the sort key. Most of
+the commands make each line a separate sort record, but some commands use
+paragraphs or pages as sort records. Most of the sort commands use each
+entire sort record as its own sort key, but some use only a portion of the
+record as the sort key.
+
+@findex sort-lines
+@findex sort-paragraphs
+@findex sort-pages
+@findex sort-fields
+@findex sort-numeric-fields
+@table @kbd
+@item M-x sort-lines
+Divide the region into lines and sort by comparing the entire
+text of a line. A prefix argument means sort in descending order.
+
+@item M-x sort-paragraphs
+Divide the region into paragraphs and sort by comparing the entire
+text of a paragraph (except for leading blank lines). A prefix
+argument means sort in descending order.
+
+@item M-x sort-pages
+Divide the region into pages and sort by comparing the entire
+text of a page (except for leading blank lines). A prefix
+argument means sort in descending order.
+
+@item M-x sort-fields
+Divide the region into lines and sort by comparing the contents of
+one field in each line. Fields are defined as separated by
+whitespace, so the first run of consecutive non-whitespace characters
+in a line constitutes field 1, the second such run constitutes field
+2, etc.
+
+You specify which field to sort by with a numeric argument: 1 to sort
+by field 1, etc. A negative argument means sort in descending
+order. Thus, minus 2 means sort by field 2 in reverse-alphabetical
+order.
+
+@item M-x sort-numeric-fields
+Like @kbd{M-x sort-fields}, except the specified field is converted
+to a number for each line and the numbers are compared. @samp{10}
+comes before @samp{2} when considered as text, but after it when
+considered as a number.
+
+@item M-x sort-columns
+Like @kbd{M-x sort-fields}, except that the text within each line
+used for comparison comes from a fixed range of columns. An explanation
+is given below.
+@end table
+
+For example, if the buffer contains:
+
+@smallexample
+On systems where clash detection (locking of files being edited) is
+implemented, XEmacs also checks the first time you modify a buffer
+whether the file has changed on disk since it was last visited or
+saved. If it has, you are asked to confirm that you want to change
+the buffer.
+@end smallexample
+
+@noindent
+then if you apply @kbd{M-x sort-lines} to the entire buffer you get:
+
+@smallexample
+On systems where clash detection (locking of files being edited) is
+implemented, XEmacs also checks the first time you modify a buffer
+saved. If it has, you are asked to confirm that you want to change
+the buffer.
+whether the file has changed on disk since it was last visited or
+@end smallexample
+
+@noindent
+where the upper case `O' comes before all lower case letters. If you apply
+instead @kbd{C-u 2 M-x sort-fields} you get:
+
+@smallexample
+saved. If it has, you are asked to confirm that you want to change
+implemented, XEmacs also checks the first time you modify a buffer
+the buffer.
+On systems where clash detection (locking of files being edited) is
+whether the file has changed on disk since it was last visited or
+@end smallexample
+
+@noindent
+where the sort keys were @samp{If}, @samp{XEmacs}, @samp{buffer},
+@samp{systems}, and @samp{the}.@refill
+
+@findex sort-columns
+ @kbd{M-x sort-columns} requires more explanation. You specify the
+columns by putting point at one of the columns and the mark at the other
+column. Because this means you cannot put point or the mark at the
+beginning of the first line to sort, this command uses an unusual
+definition of `region': all of the line point is in is considered part of
+the region, and so is all of the line the mark is in.
+
+ For example, to sort a table by information found in columns 10 to 15,
+you could put the mark on column 10 in the first line of the table, and
+point on column 15 in the last line of the table, and then use this command.
+Or you could put the mark on column 15 in the first line and point on
+column 10 in the last line.
+
+ This can be thought of as sorting the rectangle specified by point and
+the mark, except that the text on each line to the left or right of the
+rectangle moves along with the text inside the rectangle.
+@xref{Rectangles}.
+
+@node Shell, Narrowing, Sorting, Top
+@section Running Shell Commands from XEmacs
+@cindex subshell
+@cindex shell commands
+
+ XEmacs has commands for passing single command lines to inferior shell
+processes; it can also run a shell interactively with input and output to
+an XEmacs buffer @samp{*shell*}.
+
+@table @kbd
+@item M-!
+Run a specified shell command line and display the output
+(@code{shell-command}).
+@item M-|
+Run a specified shell command line with region contents as input;
+optionally replace the region with the output
+(@code{shell-command-on-region}).
+@item M-x shell
+Run a subshell with input and output through an XEmacs buffer.
+You can then give commands interactively.
+@item M-x term
+Run a subshell with input and output through an XEmacs buffer.
+You can then give commands interactively.
+Full terminal emulation is available.
+@end table
+
+@menu
+* Single Shell:: How to run one shell command and return.
+* Interactive Shell:: Permanent shell taking input via XEmacs.
+* Shell Mode:: Special XEmacs commands used with permanent shell.
+* Terminal emulator:: An XEmacs window as a terminal emulator.
+* Term Mode:: Special XEmacs commands used in Term mode.
+* Paging in Term:: Paging in the terminal emulator.
+@end menu
+
+@node Single Shell, Interactive Shell, Shell, Shell
+@subsection Single Shell Commands
+
+@kindex M-!
+@findex shell-command
+ @kbd{M-!} (@code{shell-command}) reads a line of text using the
+minibuffer and creates an inferior shell to execute the line as a command.
+Standard input from the command comes from the null device. If the shell
+command produces any output, the output goes to an XEmacs buffer named
+@samp{*Shell Command Output*}, which is displayed in another window but not
+selected. A numeric argument, as in @kbd{M-1 M-!}, directs this command to
+insert any output into the current buffer. In that case, point is left
+before the output and the mark is set after the output.
+
+@kindex M-|
+@findex shell-command-on-region
+ @kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!} but passes
+the contents of the region as input to the shell command, instead of no
+input. If a numeric argument is used to direct output to the current
+buffer, then the old region is deleted first and the output replaces it as
+the contents of the region.@refill
+
+@vindex shell-file-name
+@cindex environment
+ Both @kbd{M-!} and @kbd{M-|} use @code{shell-file-name} to specify the
+shell to use. This variable is initialized based on your @code{SHELL}
+environment variable when you start XEmacs. If the file name does not
+specify a directory, the directories in the list @code{exec-path} are
+searched; this list is initialized based on the @code{PATH} environment
+variable when you start XEmacs. You can override either or both of these
+default initializations in your init file. @xref{Init File}.@refill
+
+ When you use @kbd{M-!} and @kbd{M-|}, XEmacs has to wait until the
+shell command completes. You can quit with @kbd{C-g}; that terminates
+the shell command.
+
+@node Interactive Shell, Shell Mode, Single Shell, Shell
+@subsection Interactive Inferior Shell
+
+@findex shell
+ To run a subshell interactively with its typescript in an XEmacs
+buffer, use @kbd{M-x shell}. This creates (or reuses) a buffer named
+@samp{*shell*} and runs a subshell with input coming from and output going
+to that buffer. That is to say, any ``terminal output'' from the subshell
+will go into the buffer, advancing point, and any ``terminal input'' for
+the subshell comes from text in the buffer. To give input to the subshell,
+go to the end of the buffer and type the input, terminated by @key{RET}.
+
+ XEmacs does not wait for the subshell to do anything. You can switch
+windows or buffers and edit them while the shell is waiting, or while it is
+running a command. Output from the subshell waits until XEmacs has time to
+process it; this happens whenever XEmacs is waiting for keyboard input or
+for time to elapse.
+
+ To get multiple subshells, change the name of buffer
+@samp{*shell*} to something different by using @kbd{M-x rename-buffer}. The
+next use of @kbd{M-x shell} creates a new buffer @samp{*shell*} with
+its own subshell. By renaming this buffer as well you can create a third
+one, and so on. All the subshells run independently and in parallel.
+
+@vindex explicit-shell-file-name
+ The file name used to load the subshell is the value of the variable
+@code{explicit-shell-file-name}, if that is non-@code{nil}. Otherwise, the
+environment variable @code{ESHELL} is used, or the environment variable
+@code{SHELL} if there is no @code{ESHELL}. If the file name specified
+is relative, the directories in the list @code{exec-path} are searched
+(@pxref{Single Shell,Single Shell Commands}).@refill
+
+ As soon as the subshell is started, it is sent as input the contents of
+the file @file{~/.emacs_@var{shellname}}, if that file exists, where
+@var{shellname} is the name of the file that the shell was loaded from.
+For example, if you use @code{csh}, the file sent to it is
+@file{~/.emacs_csh}.@refill
+
+@vindex shell-pushd-regexp
+@vindex shell-popd-regexp
+@vindex shell-cd-regexp
+ @code{cd}, @code{pushd}, and @code{popd} commands given to the inferior
+shell are watched by XEmacs so it can keep the @samp{*shell*} buffer's
+default directory the same as the shell's working directory. These
+commands are recognized syntactically by examining lines of input that are
+sent. If you use aliases for these commands, you can tell XEmacs to
+recognize them also. For example, if the value of the variable
+@code{shell-pushd-regexp} matches the beginning of a shell command line,
+that line is regarded as a @code{pushd} command. Change this variable when
+you add aliases for @samp{pushd}. Likewise, @code{shell-popd-regexp} and
+@code{shell-cd-regexp} are used to recognize commands with the meaning of
+@samp{popd} and @samp{cd}.@refill
+
+@kbd{M-x shell-resync-dirs} queries the shell and resynchronizes XEmacs'
+idea of what the current directory stack is. @kbd{M-x
+shell-dirtrack-toggle} turns directory tracking on and off.
+
+@vindex input-ring-size
+XEmacs keeps a history of the most recent commands you have typed in the
+@samp{*shell*} buffer. If you are at the beginning of a shell command
+line and type @key{M-p}, the previous shell input is inserted into the
+buffer before point. Immediately typing @key{M-p} again deletes that
+input and inserts the one before it. By repeating @key{M-p} you can
+move backward through your commands until you find one you want to
+repeat. You may then edit the command before typing @key{RET} if you
+wish. @key{M-n} moves forward through the command history, in case you
+moved backward past the one you wanted while using @key{M-p}. If you
+type the first few characters of a previous command and then type
+@key{M-p}, the most recent shell input starting with those characters is
+inserted. This can be very convenient when you are repeating a sequence
+of shell commands. The variable @code{input-ring-size} controls how
+many commands are saved in your input history. The default is 30.
+
+
+@node Shell Mode, Terminal emulator, Interactive Shell, Shell
+@subsection Shell Mode
+
+@cindex Shell mode
+ The shell buffer uses Shell mode, which defines several special keys
+attached to the @kbd{C-c} prefix. They are chosen to resemble the usual
+editing and job control characters present in shells that are not under
+XEmacs, except that you must type @kbd{C-c} first. Here is a list
+of the special key bindings of Shell mode:
+
+@kindex RET (Shell mode)
+@kindex C-c C-d (Shell mode)
+@kindex C-d (Shell mode)
+@kindex C-c C-u (Shell mode)
+@kindex C-c C-w (Shell mode)
+@kindex C-c C-c (Shell mode)
+@kindex C-c C-z (Shell mode)
+@kindex C-c C-\ (Shell mode)
+@kindex C-c C-o (Shell mode)
+@kindex C-c C-r (Shell mode)
+@kindex C-c C-y (Shell mode)
+@kindex M-p (Shell mode)
+@kindex M-n (Shell mode)
+@kindex TAB (Shell mode)
+@findex send-shell-input
+@findex shell-send-eof
+@findex comint-delchar-or-maybe-eof
+@findex interrupt-shell-subjob
+@findex stop-shell-subjob
+@findex quit-shell-subjob
+@findex kill-output-from-shell
+@findex show-output-from-shell
+@findex copy-last-shell-input
+@findex comint-previous-input
+@findex comint-next-input
+@findex comint-dynamic-complete
+@vindex shell-prompt-pattern
+@table @kbd
+@item @key{RET}
+At end of buffer send line as input; otherwise, copy current line to end of
+buffer and send it (@code{send-shell-input}). When a line is copied, any
+text at the beginning of the line that matches the variable
+@code{shell-prompt-pattern} is left out; this variable's value should be a
+regexp string that matches the prompts that you use in your subshell.
+@item C-c C-d
+Send end-of-file as input, probably causing the shell or its current
+subjob to finish (@code{shell-send-eof}).
+@item C-d
+If point is not at the end of the buffer, delete the next character just
+like most other modes. If point is at the end of the buffer, send
+end-of-file as input, instead of generating an error as in other modes
+(@code{comint-delchar-or-maybe-eof}).
+@item C-c C-u
+Kill all text that has yet to be sent as input (@code{kill-shell-input}).
+@item C-c C-w
+Kill a word before point (@code{backward-kill-word}).
+@item C-c C-c
+Interrupt the shell or its current subjob if any
+(@code{interrupt-shell-subjob}).
+@item C-c C-z
+Stop the shell or its current subjob if any (@code{stop-shell-subjob}).
+@item C-c C-\
+Send quit signal to the shell or its current subjob if any
+(@code{quit-shell-subjob}).
+@item C-c C-o
+Delete last batch of output from shell (@code{kill-output-from-shell}).
+@item C-c C-r
+Scroll top of last batch of output to top of window
+(@code{show-output-from-shell}).
+@item C-c C-y
+Copy the previous bunch of shell input and insert it into the
+buffer before point (@code{copy-last-shell-input}). No final newline
+is inserted, and the input copied is not resubmitted until you type
+@key{RET}.
+@item M-p
+Move backward through the input history. Search for a matching command
+if you have typed the beginning of a command (@code{comint-previous-input}).
+@item M-n
+Move forward through the input history. Useful when you are
+using @key{M-p} quickly and go past the desired command
+(@code{comint-next-input}).
+@item @key{TAB}
+Complete the file name preceding point (@code{comint-dynamic-complete}).
+@end table
+
+@node Terminal emulator, Term Mode, Shell Mode, Shell
+@subsection Interactive Inferior Shell with Terminal Emulator
+@findex term
+
+ To run a subshell in a terminal emulator, putting its typescript in an XEmacs
+buffer, use @kbd{M-x term}. This creates (or reuses) a buffer named
+@samp{*term*} and runs a subshell with input coming from your keyboard and
+output going to that buffer.
+
+All the normal keys that you type are sent without any interpretation
+by XEmacs directly to the subshell, as ``terminal input.''
+Any ``echo'' of your input is the responsibility of the subshell.
+(The exception is the terminal escape character,
+which by default is @kbd{C-c}. @pxref{Term Mode}.)
+Any ``terminal output'' from the subshell goes into the buffer,
+advancing point.
+
+ Some programs (such as XEmacs itself) need to control the
+appearance on the terminal screen in detail. They do this by
+sending special control codes. The exact control
+codes needed vary from terminal to terminal, but nowadays
+most terminals and terminal emulators (including xterm)
+understand the so-called "ANSI escape sequences" (first
+popularized by the Digital's VT100 family of terminal).
+The term mode also understands these escape sequences,
+and for each control code does the appropriate thing
+to change the buffer so that the appearance of the window
+will match what it would be on a real terminal.
+Thus you can actually run XEmacs inside an XEmacs Term window!
+
+ XEmacs does not wait for the subshell to do anything. You can switch
+windows or buffers and edit them while the shell is waiting, or while
+it is running a command. Output from the subshell waits until XEmacs
+has time to process it; this happens whenever XEmacs is waiting for
+keyboard input or for time to elapse.
+
+ To make multiple terminal emulators, rename the buffer @samp{*term*}
+to something different using @kbd{M-x rename-uniquely},
+just as with Shell mode.
+
+ The file name used to load the subshell is determined
+the same way as for Shell mode.
+
+Unlike Shell mode, Term mode does not track the current directory
+by examining your input. Instead, if you use a programmable
+shell, you can have it tell Term what the current directory is.
+This is done automatically by bash for version 1.15 and later.
+
+@node Term Mode, Paging in Term, Terminal emulator, Shell
+@subsection Term Mode
+@cindex Term mode
+@cindex mode, Term
+
+ Term uses Term mode, which has two input modes:
+In line mode, Term basically acts like Shell mode. @xref{Shell Mode}.
+In Char mode, each character is sent directly to the inferior subshell,
+except for the Term escape character, normally @kbd{C-c}.
+
+To switch between line and char mode, use these commands:
+@table @kbd
+@kindex C-c C-j @r{(Term mode)}
+findex term-char-mode
+@item C-c C-j
+Switch to line mode. Do nothing if already in line mode.
+
+@kindex C-c C-k @r{(Term mode)}
+@findex term-line-mode
+@item C-c C-k
+Switch to char mode. Do nothing if already in char mode.
+@end table
+
+The following commands are only available in Char mode:
+@table @kbd
+@item C-c C-c
+Send a literal @key{C-c} to the sub-shell.
+
+@item C-c C-x
+A prefix command to conveniently access the global @key{C-x} commands.
+For example, @kbd{C-c C-x o} invokes the global binding of
+@kbd{C-x o}, which is normally @samp{other-window}.
+@end table
+
+@node Paging in Term,, Term Mode, Shell
+@subsection Paging in the terminal emulator
+
+Term mode has a pager feature. When the pager is enabled,
+term mode will pause at the end of each screenful.
+
+@table @kbd
+@kindex C-c C-q @r{(Term mode)}
+@findex term-pager-toggle
+@item C-c C-q
+Toggles the pager feature: Disables the pager if it is enabled,
+and vice versa. This works in both line and char modes.
+If the pager enabled, the mode-line contains the word @samp{page}.
+@end table
+
+If the pager is enabled, and Term receives more than a screenful
+of output since your last input, Term will enter More break mode.
+This is indicated by @samp{**MORE**} in the mode-line.
+Type a @kbd{Space} to display the next screenful of output.
+Type @kbd{?} to see your other options. The interface is similar
+to the Unix @samp{more} program.
+
+@node Narrowing, Hardcopy, Shell, Top
+@section Narrowing
+@cindex widening
+@cindex restriction
+@cindex narrowing
+
+ @dfn{Narrowing} means focusing in on some portion of the buffer, making
+the rest temporarily invisible and inaccessible. Cancelling the narrowing
+and making the entire buffer once again visible is called @dfn{widening}.
+The amount of narrowing in effect in a buffer at any time is called the
+buffer's @dfn{restriction}.
+
+@c WideCommands
+@table @kbd
+@item C-x n n
+Narrow down to between point and mark (@code{narrow-to-region}).
+@item C-x n w
+Widen to make the entire buffer visible again (@code{widen}).
+@end table
+
+ Narrowing sometimes makes it easier to concentrate on a single
+subroutine or paragraph by eliminating clutter. It can also be used to
+restrict the range of operation of a replace command or repeating
+keyboard macro. The word @samp{Narrow} appears in the mode line
+whenever narrowing is in effect. When you have narrowed to a part of the
+buffer, that part appears to be all there is. You can't see the rest,
+can't move into it (motion commands won't go outside the visible part),
+and can't change it in any way. However, the invisible text is not
+gone; if you save the file, it will be saved.
+
+@kindex C-x n n
+@findex narrow-to-region
+ The primary narrowing command is @kbd{C-x n n} (@code{narrow-to-region}).
+It sets the current buffer's restrictions so that the text in the current
+region remains visible but all text before the region or after the region
+is invisible. Point and mark do not change.
+
+ Because narrowing can easily confuse users who do not understand it,
+@code{narrow-to-region} is normally a disabled command. Attempting to use
+this command asks for confirmation and gives you the option of enabling it;
+once you enable the command, confirmation will no longer be required. @xref{Disabling}.
+
+@kindex C-x n w
+@findex widen
+ To undo narrowing, use @kbd{C-x n w} (@code{widen}). This makes all
+text in the buffer accessible again.
+
+ Use the @kbd{C-x =} command to get information on what part of the
+buffer you narrowed down. @xref{Position Info}.
+
+@node Hardcopy, Recursive Edit, Narrowing, Top
+@section Hardcopy Output
+@cindex hardcopy
+
+ The XEmacs commands for making hardcopy derive their names from the
+Unix commands @samp{print} and @samp{lpr}.
+
+@table @kbd
+@item M-x print-buffer
+Print hardcopy of current buffer using Unix command @samp{print}
+@*(@samp{lpr -p}). This command adds page headings containing the file name
+and page number.
+@item M-x lpr-buffer
+Print hardcopy of current buffer using Unix command @samp{lpr}.
+This command does not add page headings.
+@item M-x print-region
+Like @code{print-buffer}, but prints only the current region.
+@item M-x lpr-region
+Like @code{lpr-buffer}, but prints only the current region.
+@end table
+
+@findex print-buffer
+@findex print-region
+@findex lpr-buffer
+@findex lpr-region
+@vindex lpr-switches
+ All the hardcopy commands pass extra switches to the @code{lpr} program
+based on the value of the variable @code{lpr-switches}. Its value should
+be a list of strings, each string a switch starting with @samp{-}. For
+example, the value could be @code{("-Pfoo")} to print on printer
+@samp{foo}.
+
+@node Recursive Edit, Dissociated Press, Hardcopy, Top
+@section Recursive Editing Levels
+@cindex recursive editing level
+@cindex editing level, recursive
+
+ A @dfn{recursive edit} is a situation in which you are using XEmacs
+commands to perform arbitrary editing while in the middle of another
+XEmacs command. For example, when you type @kbd{C-r} inside a
+@code{query-replace}, you enter a recursive edit in which you can change
+the current buffer. When you exit from the recursive edit, you go back to
+the @code{query-replace}.
+
+@kindex C-M-c
+@findex exit-recursive-edit
+@cindex exiting
+ @dfn{Exiting} a recursive edit means returning to the unfinished
+command, which continues execution. For example, exiting the recursive
+edit requested by @kbd{C-r} in @code{query-replace} causes query replacing
+to resume. Exiting is done with @kbd{C-M-c} (@code{exit-recursive-edit}).
+
+@kindex C-]
+@findex abort-recursive-edit
+ You can also @dfn{abort} a recursive edit. This is like exiting, but
+also quits the unfinished command immediately. Use the command @kbd{C-]}
+(@code{abort-recursive-edit}) for this. @xref{Quitting}.
+
+ The mode line shows you when you are in a recursive edit by displaying
+square brackets around the parentheses that always surround the major
+and minor mode names. Every window's mode line shows the square
+brackets, since XEmacs as a whole, rather than any particular buffer, is
+in a recursive edit.
+
+@findex top-level
+ It is possible to be in recursive edits within recursive edits. For
+example, after typing @kbd{C-r} in a @code{query-replace}, you might
+type a command that entered the debugger. In such a case, two or
+more sets of square brackets appear in the mode line(s). Exiting the
+inner recursive edit (here with the debugger @kbd{c} command)
+resumes the query-replace command where it called the debugger. After
+the end of the query-replace command, you would be able to exit the
+first recursive edit. Aborting exits only one level of recursive edit;
+it returns to the command level of the previous recursive edit. You can
+then abort that one as well.
+
+ The command @kbd{M-x top-level} aborts all levels of
+recursive edits, returning immediately to the top level command reader.
+
+ The text you edit inside the recursive edit need not be the same text
+that you were editing at top level. If the command that invokes the
+recursive edit selects a different buffer first, that is the buffer you
+will edit recursively. You can switch buffers within the recursive edit
+in the normal manner (as long as the buffer-switching keys have not been
+rebound). While you could theoretically do the rest of your editing
+inside the recursive edit, including visiting files, this could have
+surprising effects (such as stack overflow) from time to time. It is
+best if you always exit or abort a recursive edit when you no longer
+need it.
+
+ In general, XEmacs tries to avoid using recursive edits. It is
+usually preferable to allow users to switch among the possible editing
+modes in any order they like. With recursive edits, the only way to get
+to another state is to go ``back'' to the state that the recursive edit
+was invoked from.
+
+@node Dissociated Press, CONX, Recursive Edit, Top
+@section Dissociated Press
+
+@findex dissociated-press
+ @kbd{M-x dissociated-press} is a command for scrambling a file of text
+either word by word or character by character. Starting from a buffer of
+straight English, it produces extremely amusing output. The input comes
+from the current XEmacs buffer. Dissociated Press writes its output in a
+buffer named @samp{*Dissociation*}, and redisplays that buffer after every
+couple of lines (approximately) to facilitate reading it.
+
+ @code{dissociated-press} asks every so often whether to continue
+operating. Answer @kbd{n} to stop it. You can also stop at any time by
+typing @kbd{C-g}. The dissociation output remains in the @samp{*Dissociation*}
+buffer for you to copy elsewhere if you wish.
+
+@cindex presidentagon
+ Dissociated Press operates by jumping at random from one point in the
+buffer to another. In order to produce plausible output rather than
+gibberish, it insists on a certain amount of overlap between the end of one
+run of consecutive words or characters and the start of the next. That is,
+if it has just printed out `president' and then decides to jump to a
+different point in the file, it might spot the `ent' in `pentagon' and
+continue from there, producing `presidentagon'. Long sample texts produce
+the best results.
+
+@cindex againformation
+ A positive argument to @kbd{M-x dissociated-press} tells it to operate
+character by character, and specifies the number of overlap characters. A
+negative argument tells it to operate word by word and specifies the number
+of overlap words. In this mode, whole words are treated as the elements to
+be permuted, rather than characters. No argument is equivalent to an
+argument of two. For your againformation, the output goes only into the
+buffer @samp{*Dissociation*}. The buffer you start with is not changed.
+
+@cindex Markov chain
+@cindex ignoriginal
+@cindex techniquitous
+ Dissociated Press produces nearly the same results as a Markov chain
+based on a frequency table constructed from the sample text. It is,
+however, an independent, ignoriginal invention. Dissociated Press
+techniquitously copies several consecutive characters from the sample
+between random choices, whereas a Markov chain would choose randomly for
+each word or character. This makes for more plausible sounding results
+and runs faster.
+
+@cindex outragedy
+@cindex buggestion
+@cindex properbose
+ It is a mustatement that too much use of Dissociated Press can be a
+developediment to your real work. Sometimes to the point of outragedy.
+And keep dissociwords out of your documentation, if you want it to be well
+userenced and properbose. Have fun. Your buggestions are welcome.
+
+@node CONX, Amusements, Dissociated Press, Top
+@section CONX
+@cindex random sentences
+
+Besides producing a file of scrambled text with Dissociated Press, you
+can generate random sentences by using CONX.
+
+@table @kbd
+@item M-x conx
+Generate random sentences in the @code{*conx*} buffer.
+@item M-x conx-buffer
+Absorb the text in the current buffer into the @code{conx} database.
+@item M-x conx-init
+Forget the current word-frequency tree.
+@item M-x conx-load
+Load a @code{conx} database that has been previously saved with
+@code{M-x conx-save}.
+@item M-x conx-region
+Absorb the text in the current buffer into the @code{conx} database.
+@item M-x conx-save
+Save the current @code{conx} database to a file for future retrieval.
+@end table
+
+@findex conx
+@findex conx-buffer
+@findex conx-load
+@findex conx-region
+@findex conx-init
+@findex conx-save
+
+Copy text from a buffer using @kbd{M-x conx-buffer} or @kbd{M-x conx-region}
+and then type @kbd{M-x conx}. Output is continuously generated until you
+type @key{^G}. You can save the @code{conx} database to a file with
+@kbd{M-x conx-save}, which you can retrieve with @code{M-x conx-load}.
+To clear the database, use @code{M-x conx-init}.
+
+@node Amusements, Emulation, CONX, Top
+@section Other Amusements
+@cindex boredom
+@findex hanoi
+@findex yow
+
+ If you are a little bit bored, you can try @kbd{M-x hanoi}. If you are
+considerably bored, give it a numeric argument. If you are very, very
+bored, try an argument of 9. Sit back and watch.
+
+ When you are frustrated, try the famous Eliza program. Just do
+@kbd{M-x doctor}. End each input by typing @kbd{RET} twice.
+
+ When you are feeling strange, type @kbd{M-x yow}.
+
+@node Emulation, Customization, Amusements, Top
+@comment node-name, next, previous, up
+@section Emulation
+@cindex other editors
+@cindex vi
+@cindex EDT
+
+ XEmacs can be programmed to emulate (more or less) most other
+editors. Standard facilities can emulate these:
+
+@table @asis
+@item Viper (a vi emulator)
+@cindex Viper
+In XEmacs, Viper is the preferred emulation of vi within XEmacs.
+Viper is designed to allow you to take advantage of the best
+features of XEmacs while still doing your basic editing in a
+familiar, vi-like fashion. Viper provides various different
+levels of vi emulation, from a quite complete emulation that
+allows almost no access to native XEmacs commands, to an
+``expert'' mode that combines the most useful vi commands with
+the most useful XEmacs commands.
+
+To start Viper, put the command
+
+@example
+(viper-mode)
+@end example
+
+in your init file. @xref{Init File}.
+
+Viper comes with a separate manual that is provided standard
+with the XEmacs distribution.
+
+@ignore
+@item evi (alternative vi emulator)
+@cindex evi
+evi is an alternative vi emulator that also provides a nearly complete
+emulation of vi.
+
+evi comes with a separate manual that is provided standard
+with the XEmacs distribution.
+
+Warning: loading more than one vi emulator at once may cause name
+conflicts; no one has checked.
+@end ignore
+
+@item EDT (DEC VMS editor)
+@findex edt-emulation-on
+@findex edt-emulation-off
+Turn on EDT emulation with @kbd{M-x edt-emulation-on}. @kbd{M-x
+@*edt-emulation-off} restores normal Emacs command bindings.
+
+Most of the EDT emulation commands are keypad keys, and most standard
+Emacs key bindings are still available. The EDT emulation rebindings
+are done in the global keymap, so there is no problem switching
+buffers or major modes while in EDT emulation.
+
+@item Gosling Emacs
+@findex set-gosmacs-bindings
+@findex set-gnu-bindings
+Turn on emulation of Gosling Emacs (aka Unipress Emacs) with @kbd{M-x
+set-gosmacs-bindings}. This redefines many keys, mostly on the
+@kbd{C-x} and @kbd{ESC} prefixes, to work as they do in Gosmacs.
+@kbd{M-x set-gnu-bindings} returns to normal XEmacs by rebinding
+the same keys to the definitions they had at the time @kbd{M-x
+set-gosmacs-bindings} was done.
+
+It is also possible to run Mocklisp code written for Gosling Emacs.
+@xref{Mocklisp}.
+@end table