emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Puzzling behavior from echo area: truncates prompt string at 100 cha


From: Eli Zaretskii
Subject: Re: Puzzling behavior from echo area: truncates prompt string at 100 characters?
Date: Sat, 24 Dec 2011 11:31:48 +0200

[Moved here from help-gnu-emacs.]

> Date: Tue, 20 Dec 2011 20:29:57 -0500
> From: Tom Davey <address@hidden>
> 
> I'm using Emacs 24.0.50.1. The following "message" command, with an
> arbitrarily chosen argument string of exactly 150 characters --
> 
> (message "0123456789 123456789 223456789 323456789 423456789 523456789
> 623456789 723456789 823456789 923456789 023456789 123456789 223456789
> 323456789 423456789")
> 
> -- displays the entire length of the string (all 150 characters) in
> the minibuffer's echo area, as one would expect. In fact, I find that
> the echo area frame will expand in height to display even much longer
> messages. (The variable "message-truncate-lines" is nil.)
> 
> However, if the same 150-character string becomes an argument to an
> "(interactive)" declaration in a defun() function, like this --
> 
> (interactive "c0123456789 123456789 223456789 323456789 423456789
> 523456789 623456789 723456789 823456789 923456789 023456789 123456789
> 223456789 323456789 423456789")
> 
> -- then the display of the prompt string in the echo area is
> truncated. Only the first 99 characters display; the remainder of the
> echo area (to the right) is unused and empty. Nor does the echo area's
> frame expand in height, as it does with the "message" function.
> 
> Naturally, in a real-world application my prompt string would not be
> composed of integers but of helpful alphanumeric text. However, no
> matter what form of a prompt string I supply to the "interactive"
> declaration, the echo area truncates it at the 100th character.
> 
> Does anybody have an idea how I might get a long prompt in an
> interactive declaration to fully display in the echo area?

This happens because call-interactively arbitrarily truncates the
prompt at the 99th character:

  char prompt1[100];
  ...
      strncpy (prompt1, tem + 1, sizeof prompt1 - 1);
      prompt1[sizeof prompt1 - 1] = 0;
      tem1 = strchr (prompt1, '\n');
      if (tem1) *tem1 = 0;

      visargs[0] = build_string (prompt1);
      if (strchr (prompt1, '%'))
        callint_message = Fformat (i, visargs);
      else
        callint_message = visargs[0];
  ...
        case 'c':               /* Character */
          /* Prompt in `minibuffer-prompt' face.  */
          Fput_text_property (make_number (0),
                              make_number (SCHARS (callint_message)),
                              Qface, Qminibuffer_prompt, callint_message);
          args[i] = Fread_char (callint_message, Qnil, Qnil);

This limitation was there since 1991, but AFAICS it is not documented
anywhere.

Do we want to keep this limitation?  If so, it should be at least
documented.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]