Mercurial > emacs
changeset 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 | f7a1e78fe210 |
children | 74d21e4a28f9 |
files | src/minibuf.c |
diffstat | 1 files changed, 27 insertions(+), 8 deletions(-) [+] |
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. */