diff src/ex_getln.c @ 195:49748afd794b

updated for version 7.0058
author vimboss
date Tue, 08 Mar 2005 22:40:03 +0000
parents 7e70fc748752
children 9281a51ca7a2
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -172,6 +172,12 @@ getcmdline(firstc, count, indent)
 #endif
     expand_T	xpc;
     long	*b_im_ptr = NULL;
+#if defined(FEAT_WILDMENU) || defined(FEAT_EVAL) || defined(FEAT_SEARCH_EXTRA)
+    /* Everything that may work recursively should save and restore the
+     * current command line in save_ccline.  That includes update_screen(), a
+     * custom status line may invoke ":normal". */
+    struct cmdline_info save_ccline;
+#endif
 
 #ifdef FEAT_SNIFF
     want_sniff_request = 0;
@@ -423,7 +429,9 @@ getcmdline(firstc, count, indent)
 		    p_ls = save_p_ls;
 		    p_wmh = save_p_wmh;
 		    last_status(FALSE);
+		    save_cmdline(&save_ccline);
 		    update_screen(VALID);	/* redraw the screen NOW */
+		    restore_cmdline(&save_ccline);
 		    redrawcmd();
 		    save_p_ls = -1;
 		}
@@ -613,7 +621,6 @@ getcmdline(firstc, count, indent)
 #ifdef FEAT_EVAL
 	    else if (c == 'e')
 	    {
-		struct cmdline_info save_ccline;
 		char_u		    *p = NULL;
 
 		/*
@@ -1061,8 +1068,6 @@ getcmdline(firstc, count, indent)
 		new_cmdpos = -1;
 		if (c == '=')
 		{
-		    struct cmdline_info	    save_ccline;
-
 		    if (ccline.cmdfirstc == '=')/* can't do this recursively */
 		    {
 			beep_flush();
@@ -1665,7 +1670,10 @@ cmdline_changed:
 	    }
 	    validate_cursor();
 
+	    save_cmdline(&save_ccline);
 	    update_screen(NOT_VALID);
+	    restore_cmdline(&save_ccline);
+
 	    msg_starthere();
 	    redrawcmdline();
 	    did_incsearch = TRUE;