]> git.eshelyaron.com Git - emacs.git/commitdiff
(unreadchar): For unreading an ASCII char
authorRichard M. Stallman <rms@gnu.org>
Wed, 21 Jan 1998 00:37:15 +0000 (00:37 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 21 Jan 1998 00:37:15 +0000 (00:37 +0000)
thru a buffer or marker, really decrement point or the marker position.

src/lread.c

index e69e3f869437def26cea507b709566b9472dea6f..144f991223f80802d72dcf5e0a47110202cfa484 100644 (file)
@@ -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))