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 @item Gosling Emacs
|
|
773 @findex set-gosmacs-bindings
|
|
774 @findex set-gnu-bindings
|
|
775 Turn on emulation of Gosling Emacs (aka Unipress Emacs) with @kbd{M-x
|
|
776 set-gosmacs-bindings}. This redefines many keys, mostly on the
|
|
777 @kbd{C-x} and @kbd{ESC} prefixes, to work as they do in Gosmacs.
|
|
778 @kbd{M-x set-gnu-bindings} returns to normal XEmacs by rebinding
|
|
779 the same keys to the definitions they had at the time @kbd{M-x
|
|
780 set-gosmacs-bindings} was done.
|
|
781
|
|
782 It is also possible to run Mocklisp code written for Gosling Emacs.
|
|
783 @xref{Mocklisp}.
|
|
784 @end table
|