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.