#include "lisp.h"
#include "commands.h"
#include "buffer.h"
+#include "charset.h"
#include "dispextern.h"
#include "frame.h"
#include "window.h"
{
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;
int len;
{
register int l = len;
+ register unsigned char *start = s1;
if (completion_ignore_case)
{
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;
+ }
}
\f
DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
/* Now find first word-break in the stuff found by completion.
i gets index in string of where to stop completing. */
+ {
+ int len, c;
- completion_string = XSTRING (completion)->data;
-
- 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. */