aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/editfns.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/editfns.c b/src/editfns.c
index e6fcbfdf35d..aa97aee21c1 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1366,6 +1366,12 @@ use `save-excursion' outermost:\n\
1366 return unbind_to (count, val); 1366 return unbind_to (count, val);
1367} 1367}
1368 1368
1369/* Buffer for the most recent text displayed by Fmessage. */
1370static char *message_text;
1371
1372/* Allocated length of that buffer. */
1373static int message_length;
1374
1369DEFUN ("message", Fmessage, Smessage, 1, MANY, 0, 1375DEFUN ("message", Fmessage, Smessage, 1, MANY, 0,
1370 "Print a one-line message at the bottom of the screen.\n\ 1376 "Print a one-line message at the bottom of the screen.\n\
1371The first argument is a control string.\n\ 1377The first argument is a control string.\n\
@@ -1389,7 +1395,19 @@ minibuffer contents show.")
1389 { 1395 {
1390 register Lisp_Object val; 1396 register Lisp_Object val;
1391 val = Fformat (nargs, args); 1397 val = Fformat (nargs, args);
1392 message2 (XSTRING (val)->data, XSTRING (val)->size); 1398 /* Copy the data so that it won't move when we GC. */
1399 if (! message_text)
1400 {
1401 message_text = (char *)xmalloc (80);
1402 message_length = 80;
1403 }
1404 if (XSTRING (val)->size > message_length)
1405 {
1406 message_length = XSTRING (val)->size;
1407 message_text = (char *)xrealloc (message_text, message_length);
1408 }
1409 bcopy (XSTRING (val)->data, message_text, XSTRING (val)->size);
1410 message2 (message_text, XSTRING (val)->size);
1393 return val; 1411 return val;
1394 } 1412 }
1395} 1413}