From d7760ca97f7c98eb97e10be4b3ff8c6cef01e0cf Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 21 Jan 1998 00:37:15 +0000 Subject: [PATCH] (unreadchar): For unreading an ASCII char thru a buffer or marker, really decrement point or the marker position. --- src/lread.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/lread.c b/src/lread.c index e69e3f86943..144f991223f 100644 --- a/src/lread.c +++ b/src/lread.c @@ -268,9 +268,41 @@ unreadchar (readcharfun, c) since readchar didn't advance it when we read it. */ ; else if (BUFFERP (readcharfun)) - readchar_backlog++; + { + if (!SINGLE_BYTE_CHAR_P (c)) + readchar_backlog++; + else + { + struct buffer *b = XBUFFER (readcharfun); + int bytepos = BUF_PT_BYTE (b); + + BUF_PT (b)--; + if (! NILP (b->enable_multibyte_characters)) + BUF_DEC_POS (b, bytepos); + else + bytepos--; + + BUF_PT_BYTE (b) = bytepos; + } + } else if (MARKERP (readcharfun)) - readchar_backlog++; + { + if (!SINGLE_BYTE_CHAR_P (c)) + readchar_backlog++; + else + { + struct buffer *b = XMARKER (readcharfun)->buffer; + int bytepos = XMARKER (readcharfun)->bytepos; + + XMARKER (readcharfun)->charpos--; + if (! NILP (b->enable_multibyte_characters)) + BUF_DEC_POS (b, bytepos); + else + bytepos--; + + XMARKER (readcharfun)->bytepos = bytepos; + } + } else if (STRINGP (readcharfun)) read_from_string_index--; else if (EQ (readcharfun, Qget_file_char)) -- 2.39.2