Commit ec067ec7 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(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.
parent 88817f3b
...@@ -867,6 +867,19 @@ If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are a ...@@ -867,6 +867,19 @@ If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are a
} }
} }
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, DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
"Return common substring of all completions of STRING in ALIST.\n\ "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\ Each car of each element of ALIST is tested to see if it begins with STRING.\n\
...@@ -1062,7 +1075,7 @@ or the symbol from the obarray.") ...@@ -1062,7 +1075,7 @@ or the symbol from the obarray.")
don't change the case of what the user typed. */ don't change the case of what the user typed. */
if (completion_ignore_case && bestmatchsize == XSTRING (string)->size if (completion_ignore_case && bestmatchsize == XSTRING (string)->size
&& XSTRING (bestmatch)->size > bestmatchsize) && XSTRING (bestmatch)->size > bestmatchsize)
return string; return minibuf_conform_representation (string, bestmatch);
/* Return t if the supplied string is an exact match (counting case); /* Return t if the supplied string is an exact match (counting case);
it does not require any change to be made. */ it does not require any change to be made. */
...@@ -1821,7 +1834,7 @@ It can find the completion buffer in `standard-output'.") ...@@ -1821,7 +1834,7 @@ It can find the completion buffer in `standard-output'.")
write_string ("Possible completions are:", -1); write_string ("Possible completions are:", -1);
for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++) for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
{ {
Lisp_Object tem; Lisp_Object tem, string;
int length; int length;
Lisp_Object startpos, endpos; Lisp_Object startpos, endpos;
...@@ -1887,15 +1900,22 @@ It can find the completion buffer in `standard-output'.") ...@@ -1887,15 +1900,22 @@ It can find the completion buffer in `standard-output'.")
Qnil, Vstandard_output); Qnil, Vstandard_output);
} }
/* Output this element and update COLUMN. */ /* Output this element.
If necessary, convert it to unibyte first. */
if (CONSP (elt)) if (CONSP (elt))
{ string = Fcar (elt);
Fprinc (Fcar (elt), Qnil);
Fprinc (Fcar (Fcdr (elt)), Qnil);
}
else 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; column += length;
/* If output is to a buffer, recompute COLUMN in a way /* If output is to a buffer, recompute COLUMN in a way
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment