diff src/minibuf.c @ 17039:b63ed55bed46

Include charset.h. (read_minibuf): Pay attention to multibyte characters in the arg INITIAL while handling the arg BACKUP_N. (scmp, Fminibuffer_complete_word): Handle multibyte characters.
author Karl Heuer <kwzh@gnu.org>
date Thu, 20 Feb 1997 06:52:47 +0000
parents b33fd17a2873
children b3227e0446cf
line wrap: on
line diff
--- a/src/minibuf.c	Thu Feb 20 06:52:14 1997 +0000
+++ b/src/minibuf.c	Thu Feb 20 06:52:47 1997 +0000
@@ -23,6 +23,7 @@
 #include "lisp.h"
 #include "commands.h"
 #include "buffer.h"
+#include "charset.h"
 #include "dispextern.h"
 #include "frame.h"
 #include "window.h"
@@ -322,7 +323,7 @@
     {
       Finsert (1, &initial);
       if (!NILP (backup_n) && INTEGERP (backup_n))
-	Fforward_char (backup_n);
+	Fgoto_char (make_number (PT + XFASTINT (backup_n)));
     }
 
   echo_area_glyphs = 0;
@@ -921,6 +922,7 @@
      int len;
 {
   register int l = len;
+  register unsigned char *start = s1;
 
   if (completion_ignore_case)
     {
@@ -935,7 +937,15 @@
   if (l == 0)
     return -1;
   else
-    return len - l;
+    {
+      int match = len - l;
+
+      /* Now *--S1 is the unmatching byte.  If it is in the middle of
+         multi-byte form, we must say that the multi-byte character
+         there doesn't match.  */
+      while (match && *--s1 >= 0xA0) match--;
+      return match;
+    }
 }
 
 DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
@@ -1536,13 +1546,22 @@
 
   /* Now find first word-break in the stuff found by completion.
      i gets index in string of where to stop completing.  */
-
-  completion_string = XSTRING (completion)->data;
+  {
+    int len, c;
 
-  for (; i < XSTRING (completion)->size; i++)
-    if (SYNTAX (completion_string[i]) != Sword) break;
-  if (i < XSTRING (completion)->size)
-    i = i + 1;
+    completion_string = XSTRING (completion)->data;
+    for (; i < XSTRING (completion)->size; i += len)
+      {
+	c = STRING_CHAR_AND_LENGTH (completion_string + i,
+				    XSTRING (completion)->size - i,
+				    len);
+	if (SYNTAX (c) != Sword)
+	  {
+	    i += len;
+	    break;
+	  }
+      }
+  }
 
   /* If got no characters, print help for user.  */