0
|
1
|
|
2 @node Picture, Sending Mail, Abbrevs, Top
|
|
3 @chapter Editing Pictures
|
|
4 @cindex pictures
|
|
5 @findex edit-picture
|
|
6
|
|
7 If you want to create a picture made out of text characters (for example,
|
|
8 a picture of the division of a register into fields, as a comment in a
|
|
9 program), use the command @code{edit-picture} to enter Picture mode.
|
|
10
|
|
11 In Picture mode, editing is based on the @dfn{quarter-plane} model of
|
|
12 text. In this model, the text characters lie studded on an area that
|
|
13 stretches infinitely far to the right and downward. The concept of the end
|
|
14 of a line does not exist in this model; the most you can say is where the
|
|
15 last non-blank character on the line is found.
|
|
16
|
|
17 Of course, Emacs really always considers text as a sequence of
|
|
18 characters, and lines really do have ends. But in Picture mode most
|
|
19 frequently-used keys are rebound to commands that simulate the
|
|
20 quarter-plane model of text. They do this by inserting spaces or by
|
|
21 converting tabs to spaces.
|
|
22
|
|
23 Most of the basic editing commands of Emacs are redefined by Picture mode
|
|
24 to do essentially the same thing but in a quarter-plane way. In addition,
|
|
25 Picture mode defines various keys starting with the @kbd{C-c} prefix to
|
|
26 run special picture editing commands.
|
|
27
|
|
28 One of these keys, @kbd{C-c C-c}, is pretty important. Often a picture
|
|
29 is part of a larger file that is usually edited in some other major mode.
|
|
30 @kbd{M-x edit-picture} records the name of the previous major mode.
|
|
31 You can then use the @kbd{C-c C-c} command (@code{picture-mode-exit}) to
|
|
32 restore that mode. @kbd{C-c C-c} also deletes spaces from the ends of
|
|
33 lines, unless you give it a numeric argument.
|
|
34
|
|
35 The commands used in Picture mode all work in other modes (provided the
|
|
36 @file{picture} library is loaded), but are only bound to keys in
|
|
37 Picture mode. Note that the descriptions below talk of moving ``one
|
|
38 column'' and so on, but all the picture mode commands handle numeric
|
|
39 arguments as their normal equivalents do.
|
|
40
|
|
41 @vindex picture-mode-hook
|
|
42 Turning on Picture mode calls the value of the variable
|
|
43 @code{picture-mode-hook} as a function, with no arguments, if that value
|
|
44 exists and is non-@code{nil}.
|
|
45
|
|
46 @menu
|
|
47 * Basic Picture:: Basic concepts and simple commands of Picture Mode.
|
|
48 * Insert in Picture:: Controlling direction of cursor motion
|
|
49 after "self-inserting" characters.
|
|
50 * Tabs in Picture:: Various features for tab stops and indentation.
|
|
51 * Rectangles in Picture:: Clearing and superimposing rectangles.
|
|
52 @end menu
|
|
53
|
|
54 @node Basic Picture, Insert in Picture, Picture, Picture
|
|
55 @section Basic Editing in Picture Mode
|
|
56
|
|
57 @findex picture-forward-column
|
|
58 @findex picture-backward-column
|
|
59 @findex picture-move-down
|
|
60 @findex picture-move-up
|
|
61 Most keys do the same thing in Picture mode that they usually do, but do
|
|
62 it in a quarter-plane style. For example, @kbd{C-f} is rebound to run
|
|
63 @code{picture-forward-column}, which moves point one column to
|
|
64 the right, by inserting a space if necessary, so that the actual end of the
|
|
65 line makes no difference. @kbd{C-b} is rebound to run
|
|
66 @code{picture-backward-column}, which always moves point left one column,
|
|
67 converting a tab to multiple spaces if necessary. @kbd{C-n} and @kbd{C-p}
|
|
68 are rebound to run @code{picture-move-down} and @code{picture-move-up},
|
|
69 which can either insert spaces or convert tabs as necessary to make sure
|
|
70 that point stays in exactly the same column. @kbd{C-e} runs
|
|
71 @code{picture-end-of-line}, which moves to after the last non-blank
|
|
72 character on the line. There was no need to change @kbd{C-a}, as the choice
|
|
73 of screen model does not affect beginnings of lines.@refill
|
|
74
|
|
75 @findex picture-newline
|
|
76 Insertion of text is adapted to the quarter-plane screen model through
|
|
77 the use of Overwrite mode (@pxref{Minor Modes}). Self-inserting characters
|
|
78 replace existing text, column by column, rather than pushing existing text
|
|
79 to the right. @key{RET} runs @code{picture-newline}, which just moves to
|
|
80 the beginning of the following line so that new text will replace that
|
|
81 line.
|
|
82
|
|
83 @findex picture-backward-clear-column
|
|
84 @findex picture-clear-column
|
|
85 @findex picture-clear-line
|
|
86 Text is erased instead of deleted and killed. @key{DEL}
|
|
87 (@code{picture-backward-clear-column}) replaces the preceding character
|
|
88 with a space rather than removing it. @kbd{C-d}
|
|
89 (@code{picture-clear-column}) does the same in a forward direction.
|
|
90 @kbd{C-k} (@code{picture-clear-line}) really kills the contents of lines,
|
|
91 but never removes the newlines from a buffer.@refill
|
|
92
|
|
93 @findex picture-open-line
|
|
94 To do actual insertion, you must use special commands. @kbd{C-o}
|
|
95 (@code{picture-open-line}) creates a blank line, but does so after
|
|
96 the current line; it never splits a line. @kbd{C-M-o}, @code{split-line},
|
|
97 makes sense in Picture mode, so it remains unchanged. @key{LFD}
|
|
98 (@code{picture-duplicate-line}) inserts another line
|
|
99 with the same contents below the current line.@refill
|
|
100
|
|
101 @kindex C-c C-d (Picture mode)
|
|
102 @findex delete-char
|
|
103
|
|
104 To actually delete parts of the picture, use @kbd{C-w}, or with
|
|
105 @kbd{C-c C-d} (which is defined as @code{delete-char}, as @kbd{C-d} is
|
|
106 in other modes), or with one of the picture rectangle commands
|
|
107 (@pxref{Rectangles in Picture}).
|
|
108
|
|
109 @node Insert in Picture, Tabs in Picture, Basic Picture, Picture
|
|
110 @section Controlling Motion After Insert
|
|
111
|
|
112 @findex picture-movement-up
|
|
113 @findex picture-movement-down
|
|
114 @findex picture-movement-left
|
|
115 @findex picture-movement-right
|
|
116 @findex picture-movement-nw
|
|
117 @findex picture-movement-ne
|
|
118 @findex picture-movement-sw
|
|
119 @findex picture-movement-se
|
|
120 @kindex C-c < (Picture mode)
|
|
121 @kindex C-c > (Picture mode)
|
|
122 @kindex C-c ^ (Picture mode)
|
|
123 @kindex C-c . (Picture mode)
|
|
124 @kindex C-c ` (Picture mode)
|
|
125 @kindex C-c ' (Picture mode)
|
|
126 @kindex C-c / (Picture mode)
|
|
127 @kindex C-c \ (Picture mode)
|
|
128 Since ``self-inserting'' characters just overwrite and move point in
|
|
129 Picture mode, there is no essential restriction on how point should be
|
|
130 moved. Normally point moves right, but you can specify any of the eight
|
|
131 orthogonal or diagonal directions for motion after a ``self-inserting''
|
|
132 character. This is useful for drawing lines in the buffer.
|
|
133
|
|
134 @table @kbd
|
|
135 @item C-c <
|
|
136 Move left after insertion (@code{picture-movement-left}).
|
|
137 @item C-c >
|
|
138 Move right after insertion (@code{picture-movement-right}).
|
|
139 @item C-c ^
|
|
140 Move up after insertion (@code{picture-movement-up}).
|
|
141 @item C-c .
|
|
142 Move down after insertion (@code{picture-movement-down}).
|
|
143 @item C-c `
|
|
144 Move up and left (``northwest'') after insertion @*(@code{picture-movement-nw}).
|
|
145 @item C-c '
|
|
146 Move up and right (``northeast'') after insertion @*
|
|
147 (@code{picture-movement-ne}).
|
|
148 @item C-c /
|
|
149 Move down and left (``southwest'') after insertion
|
|
150 @*(@code{picture-movement-sw}).
|
|
151 @item C-c \
|
|
152 Move down and right (``southeast'') after insertion
|
|
153 @*(@code{picture-movement-se}).
|
|
154 @end table
|
|
155
|
|
156 @kindex C-c C-f (Picture mode)
|
|
157 @kindex C-c C-b (Picture mode)
|
|
158 @findex picture-motion
|
|
159 @findex picture-motion-reverse
|
|
160 Two motion commands move based on the current Picture insertion
|
|
161 direction. The command @kbd{C-c C-f} (@code{picture-motion}) moves in the
|
|
162 same direction as motion after ``insertion'' currently does, while @kbd{C-c
|
|
163 C-b} (@code{picture-motion-reverse}) moves in the opposite direction.
|
|
164
|
|
165 @node Tabs in Picture, Rectangles in Picture, Insert in Picture, Picture
|
|
166 @section Picture Mode Tabs
|
|
167
|
|
168 @kindex M-TAB
|
|
169 @findex picture-tab-search
|
|
170 @vindex picture-tab-chars
|
|
171 Two kinds of tab-like action are provided in Picture mode.
|
|
172 Context-based tabbing is done with @kbd{M-@key{TAB}}
|
|
173 (@code{picture-tab-search}). With no argument, it moves to a point
|
|
174 underneath the next ``interesting'' character that follows whitespace in
|
|
175 the previous non-blank line. ``Next'' here means ``appearing at a
|
|
176 horizontal position greater than the one point starts out at''. With an
|
|
177 argument, as in @kbd{C-u M-@key{TAB}}, the command moves to the next such
|
|
178 interesting character in the current line. @kbd{M-@key{TAB}} does not
|
|
179 change the text; it only moves point. ``Interesting'' characters are
|
|
180 defined by the variable @code{picture-tab-chars}, which contains a string
|
|
181 of characters considered interesting. Its default value is
|
|
182 @code{"!-~"}.@refill
|
|
183
|
|
184 @findex picture-tab
|
|
185 @key{TAB} itself runs @code{picture-tab}, which operates based on the
|
|
186 current tab stop settings; it is the Picture mode equivalent of
|
|
187 @code{tab-to-tab-stop}. Without arguments it just moves point, but with
|
|
188 a numeric argument it clears the text that it moves over.
|
|
189
|
|
190 @kindex C-c TAB (Picture mode)
|
|
191 @findex picture-set-tab-stops
|
|
192 The context-based and tab-stop-based forms of tabbing are brought
|
|
193 together by the command @kbd{C-c @key{TAB}} (@code{picture-set-tab-stops}.)
|
|
194 This command sets the tab stops to the positions which @kbd{M-@key{TAB}}
|
|
195 would consider significant in the current line. If you use this command
|
|
196 with @key{TAB}, you can get the effect of context-based tabbing. But
|
|
197 @kbd{M-@key{TAB}} is more convenient in the cases where it is sufficient.
|
|
198
|
|
199 @node Rectangles in Picture,, Tabs in Picture, Picture
|
|
200 @section Picture Mode Rectangle Commands
|
|
201 @cindex rectangle
|
|
202
|
|
203 Picture mode defines commands for working on rectangular pieces of the
|
|
204 text in ways that fit with the quarter-plane model. The standard rectangle
|
|
205 commands may also be useful (@pxref{Rectangles}).
|
|
206
|
|
207 @table @kbd
|
|
208 @item C-c C-k
|
|
209 Clear out the region-rectangle (@code{picture-clear-rectangle}). With
|
|
210 argument, kill it.
|
|
211 @item C-c C-w @var{r}
|
|
212 Similar but save rectangle contents in register @var{r} first
|
|
213 (@code{picture-clear-rectangle-to-register}).
|
|
214 @item C-c C-y
|
|
215 Copy last killed rectangle into the buffer by overwriting, with upper
|
|
216 left corner at point (@code{picture-yank-rectangle}). With argument,
|
|
217 insert instead.
|
|
218 @item C-c C-x @var{r}
|
|
219 Similar, but use the rectangle in register @var{r}@*
|
|
220 (@code{picture-yank-rectangle-from-register}).
|
|
221 @end table
|
|
222
|
|
223 @kindex C-c C-k (Picture mode)
|
|
224 @kindex C-c C-w (Picture mode)
|
|
225 @findex picture-clear-rectangle
|
|
226 @findex picture-clear-rectangle-to-register
|
|
227 The picture rectangle commands @kbd{C-c C-k}
|
|
228 (@code{picture-clear-rectangle}) and @kbd{C-c C-w}
|
|
229 (@code{picture-clear-rectangle-to-register}) differ from the standard
|
|
230 rectangle commands in that they normally clear the rectangle instead of
|
|
231 deleting it; this is analogous with the way @kbd{C-d} is changed in Picture
|
|
232 mode.@refill
|
|
233
|
|
234 However, deletion of rectangles can be useful in Picture mode, so these
|
|
235 commands delete the rectangle if given a numeric argument.
|
|
236
|
|
237 @kindex C-c C-y (Picture mode)
|
|
238 @kindex C-c C-x (Picture mode)
|
|
239 @findex picture-yank-rectangle
|
|
240 @findex picture-yank-rectangle-from-register
|
|
241 The Picture mode commands for yanking rectangles differ from the standard
|
|
242 ones in overwriting instead of inserting. This is the same way that
|
|
243 Picture mode insertion of other text is different from other modes.
|
|
244 @kbd{C-c C-y} (@code{picture-yank-rectangle}) inserts (by overwriting) the
|
|
245 rectangle that was most recently killed, while @kbd{C-c C-x}
|
|
246 (@code{picture-yank-rectangle-from-register}) does for the
|
|
247 rectangle found in a specified register.
|
|
248
|
|
249 Since most region commands in Picture mode operate on rectangles, when you
|
|
250 select a region of text with the mouse in Picture mode, it is highlighted
|
|
251 as a rectangle.
|