diff options
author | Richard M. Stallman <rms@gnu.org> | 1993-03-15 06:02:29 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1993-03-15 06:02:29 +0000 |
commit | 4e03165f8bf6c4a24a4b1d7ade5a29db7fc67715 (patch) | |
tree | 2c0db2844f1ebcaec37948802eb70ac62a4e328b /src/print.c | |
parent | 2ea258c38d9e7a72caa306a0ed3c3004b2e6742a (diff) | |
download | emacs-4e03165f8bf6c4a24a4b1d7ade5a29db7fc67715.tar.gz |
(PRINTPREPARE): Handle marker that points nowhere.
Diffstat (limited to 'src/print.c')
-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) Lisp_Object original; */ -#define PRINTPREPARE \ - original = printcharfun; \ - if (NILP (printcharfun)) printcharfun = Qt; \ - if (XTYPE (printcharfun) == Lisp_Buffer) \ - { if (XBUFFER (printcharfun) != current_buffer) Fset_buffer (printcharfun); \ - printcharfun = Qnil;}\ - if (XTYPE (printcharfun) == Lisp_Marker) \ - { if (XMARKER (original)->buffer != current_buffer) \ - set_buffer_internal (XMARKER (original)->buffer); \ - old_point = point; \ - SET_PT (marker_position (printcharfun)); \ - start_point = point; \ +#define PRINTPREPARE \ + original = printcharfun; \ + if (NILP (printcharfun)) printcharfun = Qt; \ + if (XTYPE (printcharfun) == Lisp_Buffer) \ + { if (XBUFFER (printcharfun) != current_buffer) \ + Fset_buffer (printcharfun); \ + printcharfun = Qnil;} \ + if (XTYPE (printcharfun) == Lisp_Marker) \ + { if (!(XMARKER (original)->buffer)) \ + error ("Marker does not point anywhere"); \ + if (XMARKER (original)->buffer != current_buffer) \ + set_buffer_internal (XMARKER (original)->buffer); \ + old_point = point; \ + SET_PT (marker_position (printcharfun)); \ + start_point = point; \ printcharfun = Qnil;} -#define PRINTFINISH \ - if (XTYPE (original) == Lisp_Marker) \ - Fset_marker (original, make_number (point), Qnil); \ - if (old_point >= 0) \ - SET_PT ((old_point >= start_point ? point - start_point : 0) + old_point); \ - if (old != current_buffer) \ +#define PRINTFINISH \ + if (XTYPE (original) == Lisp_Marker) \ + Fset_marker (original, make_number (point), Qnil); \ + if (old_point >= 0) \ + SET_PT (old_point + (old_point >= start_point \ + ? point - start_point : 0)); \ + if (old != current_buffer) \ set_buffer_internal (old) #define PRINTCHAR(ch) printchar (ch, printcharfun) |