diff options
| author | Richard M. Stallman | 1993-03-15 06:02:29 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-03-15 06:02:29 +0000 |
| commit | cdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b (patch) | |
| tree | d070259e9aee3f5601a22eb0cddd3d1ab1cc3b55 /src | |
| parent | 7cf2444d4f8163c57f15b1dde29b603cde877ef1 (diff) | |
| download | emacs-cdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b.tar.gz emacs-cdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b.zip | |
(PRINTPREPARE): Handle marker that points nowhere.
Diffstat (limited to 'src')
| -rw-r--r-- | src/print.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/print.c b/src/print.c index a43a774c0f4..ba41e46454e 100644 --- a/src/print.c +++ b/src/print.c | |||
| @@ -141,26 +141,30 @@ glyph_to_str_cpy (glyphs, str) | |||
| 141 | Lisp_Object original; | 141 | Lisp_Object original; |
| 142 | */ | 142 | */ |
| 143 | 143 | ||
| 144 | #define PRINTPREPARE \ | 144 | #define PRINTPREPARE \ |
| 145 | original = printcharfun; \ | 145 | original = printcharfun; \ |
| 146 | if (NILP (printcharfun)) printcharfun = Qt; \ | 146 | if (NILP (printcharfun)) printcharfun = Qt; \ |
| 147 | if (XTYPE (printcharfun) == Lisp_Buffer) \ | 147 | if (XTYPE (printcharfun) == Lisp_Buffer) \ |
| 148 | { if (XBUFFER (printcharfun) != current_buffer) Fset_buffer (printcharfun); \ | 148 | { if (XBUFFER (printcharfun) != current_buffer) \ |
| 149 | printcharfun = Qnil;}\ | 149 | Fset_buffer (printcharfun); \ |
| 150 | if (XTYPE (printcharfun) == Lisp_Marker) \ | 150 | printcharfun = Qnil;} \ |
| 151 | { if (XMARKER (original)->buffer != current_buffer) \ | 151 | if (XTYPE (printcharfun) == Lisp_Marker) \ |
| 152 | set_buffer_internal (XMARKER (original)->buffer); \ | 152 | { if (!(XMARKER (original)->buffer)) \ |
| 153 | old_point = point; \ | 153 | error ("Marker does not point anywhere"); \ |
| 154 | SET_PT (marker_position (printcharfun)); \ | 154 | if (XMARKER (original)->buffer != current_buffer) \ |
| 155 | start_point = point; \ | 155 | set_buffer_internal (XMARKER (original)->buffer); \ |
| 156 | old_point = point; \ | ||
| 157 | SET_PT (marker_position (printcharfun)); \ | ||
| 158 | start_point = point; \ | ||
| 156 | printcharfun = Qnil;} | 159 | printcharfun = Qnil;} |
| 157 | 160 | ||
| 158 | #define PRINTFINISH \ | 161 | #define PRINTFINISH \ |
| 159 | if (XTYPE (original) == Lisp_Marker) \ | 162 | if (XTYPE (original) == Lisp_Marker) \ |
| 160 | Fset_marker (original, make_number (point), Qnil); \ | 163 | Fset_marker (original, make_number (point), Qnil); \ |
| 161 | if (old_point >= 0) \ | 164 | if (old_point >= 0) \ |
| 162 | SET_PT ((old_point >= start_point ? point - start_point : 0) + old_point); \ | 165 | SET_PT (old_point + (old_point >= start_point \ |
| 163 | if (old != current_buffer) \ | 166 | ? point - start_point : 0)); \ |
| 167 | if (old != current_buffer) \ | ||
| 164 | set_buffer_internal (old) | 168 | set_buffer_internal (old) |
| 165 | 169 | ||
| 166 | #define PRINTCHAR(ch) printchar (ch, printcharfun) | 170 | #define PRINTCHAR(ch) printchar (ch, printcharfun) |