diff --git a/src/marker.c b/src/marker.c index febdb17..f2c4d24 100644 --- a/src/marker.c +++ b/src/marker.c @@ -426,11 +426,12 @@ DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0, static void attach_marker (struct Lisp_Marker *m, struct buffer *b, - ptrdiff_t charpos, ptrdiff_t bytepos) + ptrdiff_t charpos, ptrdiff_t bytepos, + struct buffer *sb) { /* In a single-byte buffer, two positions must be equal. Otherwise, every character is at least one byte. */ - if (BUF_Z (b) == BUF_Z_BYTE (b)) + if ((BUF_Z (sb) == BUF_Z_BYTE (sb))) eassert (charpos == bytepos); else eassert (charpos <= bytepos); @@ -514,7 +515,8 @@ set_marker_internal (Lisp_Object marker, Lisp_Object position, (restricted ? BUF_BEGV_BYTE (b) : BUF_BEG_BYTE (b), bytepos, restricted ? BUF_ZV_BYTE (b) : BUF_Z_BYTE (b)); - attach_marker (m, b, charpos, bytepos); + attach_marker (m, b, charpos, bytepos, + MARKERP (position) ? XMARKER (position)->buffer : b); } return marker; } @@ -552,7 +554,7 @@ set_marker_both (Lisp_Object marker, Lisp_Object buffer, m = XMARKER (marker); if (b) - attach_marker (m, b, charpos, bytepos); + attach_marker (m, b, charpos, bytepos, b); else unchain_marker (m); return marker; @@ -575,7 +577,8 @@ set_marker_restricted_both (Lisp_Object marker, Lisp_Object buffer, attach_marker (m, b, clip_to_bounds (BUF_BEGV (b), charpos, BUF_ZV (b)), - clip_to_bounds (BUF_BEGV_BYTE (b), bytepos, BUF_ZV_BYTE (b))); + clip_to_bounds (BUF_BEGV_BYTE (b), bytepos, BUF_ZV_BYTE (b)), + b); } else unchain_marker (m);