From: Richard M. Stallman Date: Sun, 4 Feb 1996 20:25:10 +0000 (+0000) Subject: (read_char_minibuf_menu_prompt): Use malloc to allocate X-Git-Tag: emacs-19.34~1370 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=68e0de82384fab6372cb7119b50679cf6885e604;p=emacs.git (read_char_minibuf_menu_prompt): Use malloc to allocate the echo-area prompt buffer. (read_char_minibuf_menu_text, read_char_minibuf_menu_width): New variables. --- diff --git a/src/keyboard.c b/src/keyboard.c index 997020c50af..585561c4076 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -5130,6 +5130,12 @@ read_char_x_menu_prompt (nmaps, maps, prev_event, used_mouse_menu) return Qnil ; } +/* Buffer in use so far for the minibuf prompts for menu keymaps. + We make this bigger when necessary, and never free it. */ +static char *read_char_minibuf_menu_text; +/* Size of that buffer. */ +static int read_char_minibuf_menu_width; + static Lisp_Object read_char_minibuf_menu_prompt (commandflag, nmaps, maps) int commandflag ; @@ -5140,14 +5146,28 @@ read_char_minibuf_menu_prompt (commandflag, nmaps, maps) register Lisp_Object name; int nlength; int width = FRAME_WIDTH (selected_frame) - 4; - char *menu = (char *) alloca (width + 4); int idx = -1; int nobindings = 1; Lisp_Object rest, vector; + char *menu; if (! menu_prompting) return Qnil; + /* Make sure we have a big enough buffer for the menu text. */ + if (read_char_minibuf_menu_text == 0) + { + read_char_minibuf_menu_width = width + 4; + read_char_minibuf_menu_text = (char *) xmalloc (width + 4); + } + else if (width + 4 > read_char_minibuf_menu_width) + { + read_char_minibuf_menu_width = width + 4; + read_char_minibuf_menu_text + = (char *) xrealloc (read_char_minibuf_menu_text, width + 4); + } + menu = read_char_minibuf_menu_text; + /* Get the menu name from the first map that has one (a prompt string). */ for (mapno = 0; mapno < nmaps; mapno++) {