From: Richard M. Stallman Date: Wed, 21 Jan 1998 00:37:15 +0000 (+0000) Subject: (unreadchar): For unreading an ASCII char X-Git-Tag: emacs-20.3~2383 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d7760ca97f7c98eb97e10be4b3ff8c6cef01e0cf;p=emacs.git (unreadchar): For unreading an ASCII char thru a buffer or marker, really decrement point or the marker position. --- 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))