aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1993-03-15 06:02:29 +0000
committerRichard M. Stallman1993-03-15 06:02:29 +0000
commitcdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b (patch)
treed070259e9aee3f5601a22eb0cddd3d1ab1cc3b55 /src
parent7cf2444d4f8163c57f15b1dde29b603cde877ef1 (diff)
downloademacs-cdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b.tar.gz
emacs-cdaa87fd065ddd2431ce9ff21c5b9de4f4b6419b.zip
(PRINTPREPARE): Handle marker that points nowhere.
Diffstat (limited to 'src')
-rw-r--r--src/print.c40
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)