# HG changeset patch # User Richard M. Stallman # Date 893906160 0 # Node ID 67719e401cce8ce3a70eff2d74e9e92e7d522706 # Parent 6e93713b7d30d41fb128e68e2621f22d5553241b (minibuf_conform_representation): New function. (Ftry_completion): Use it to return multibyte string if and only if the completion table has a multibyte string. (Fdisplay_completion_list): Convert string to unibyte before displaying it, if default is unibyte. diff -r 6e93713b7d30 -r 67719e401cce src/minibuf.c --- a/src/minibuf.c Thu Apr 30 03:13:09 1998 +0000 +++ b/src/minibuf.c Thu Apr 30 03:16:00 1998 +0000 @@ -867,6 +867,19 @@ } } +static Lisp_Object +minibuf_conform_representation (string, basis) + Lisp_Object string, basis; +{ + if (STRING_MULTIBYTE (string) == STRING_MULTIBYTE (basis)) + return string; + + if (STRING_MULTIBYTE (string)) + return Fstring_make_unibyte (string); + else + return Fstring_make_multibyte (string); +} + DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0, "Return common substring of all completions of STRING in ALIST.\n\ Each car of each element of ALIST is tested to see if it begins with STRING.\n\ @@ -1062,7 +1075,7 @@ don't change the case of what the user typed. */ if (completion_ignore_case && bestmatchsize == XSTRING (string)->size && XSTRING (bestmatch)->size > bestmatchsize) - return string; + return minibuf_conform_representation (string, bestmatch); /* Return t if the supplied string is an exact match (counting case); it does not require any change to be made. */ @@ -1821,7 +1834,7 @@ write_string ("Possible completions are:", -1); for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++) { - Lisp_Object tem; + Lisp_Object tem, string; int length; Lisp_Object startpos, endpos; @@ -1887,15 +1900,22 @@ Qnil, Vstandard_output); } - /* Output this element and update COLUMN. */ + /* Output this element. + If necessary, convert it to unibyte first. */ if (CONSP (elt)) - { - Fprinc (Fcar (elt), Qnil); - Fprinc (Fcar (Fcdr (elt)), Qnil); - } + string = Fcar (elt); else - Fprinc (elt, Qnil); + string = elt; + if (NILP (current_buffer->enable_multibyte_characters) + && STRING_MULTIBYTE (string)) + string = Fstring_make_unibyte (string); + Fprinc (string, Qnil); + /* Output the annotation for this element. */ + if (CONSP (elt)) + Fprinc (Fcar (Fcdr (elt)), Qnil); + + /* Update COLUMN for what we have output. */ column += length; /* If output is to a buffer, recompute COLUMN in a way