*** ../bash-3.0-patched/lib/readline/display.c	Wed Sep  8 11:07:51 2004
--- lib/readline/display.c	Sat Jan  8 21:51:40 2005
***************
*** 181,184 ****
--- 186,201 ----
  static int prompt_physical_chars;
  
+ /* Variables to save and restore prompt and display information. */
+ 
+ /* These are getting numerous enough that it's time to create a struct. */
+ 
+ static char *saved_local_prompt;
+ static char *saved_local_prefix;
+ static int saved_last_invisible;
+ static int saved_visible_length;
+ static int saved_prefix_length;
+ static int saved_invis_chars_first_line;
+ static int saved_physical_chars;
+ 
  /* Expand the prompt string S and return the number of visible
     characters in *LP, if LP is not null.  This is currently more-or-less
***************
*** 1797,1803 ****
    return ((ISPRINT (uc)) ? 1 : 2);
  }
- 
  /* How to print things in the "echo-area".  The prompt is treated as a
     mini-modeline. */
  
  #if defined (USE_VARARGS)
--- 1825,1831 ----
    return ((ISPRINT (uc)) ? 1 : 2);
  }
  /* How to print things in the "echo-area".  The prompt is treated as a
     mini-modeline. */
+ static int msg_saved_prompt = 0;
  
  #if defined (USE_VARARGS)
***************
*** 1830,1835 ****
--- 1858,1874 ----
    va_end (args);
  
+   if (saved_local_prompt == 0)
+     {
+       rl_save_prompt ();
+       msg_saved_prompt = 1;
+     }
    rl_display_prompt = msg_buf;
+   local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+ 					 &prompt_last_invisible,
+ 					 &prompt_invis_chars_first_line,
+ 					 &prompt_physical_chars);
+   local_prompt_prefix = (char *)NULL;
    (*rl_redisplay_function) ();
+ 
    return 0;
  }
***************
*** 1841,1846 ****
--- 1880,1897 ----
    sprintf (msg_buf, format, arg1, arg2);
    msg_buf[sizeof(msg_buf) - 1] = '\0';	/* overflow? */
+ 
    rl_display_prompt = msg_buf;
+   if (saved_local_prompt == 0)
+     {
+       rl_save_prompt ();
+       msg_saved_prompt = 1;
+     }
+   local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+ 					 &prompt_last_invisible,
+ 					 &prompt_invis_chars_first_line,
+ 					 &prompt_physical_chars);
+   local_prompt_prefix = (char *)NULL;
    (*rl_redisplay_function) ();
+       
    return 0;
  }
***************
*** 1852,1855 ****
--- 1903,1911 ----
  {
    rl_display_prompt = rl_prompt;
+   if (msg_saved_prompt)
+     {
+       rl_restore_prompt ();
+       msg_saved_prompt = 0;
+     }
    (*rl_redisplay_function) ();
    return 0;
***************
*** 1866,1878 ****
  }
  
- /* These are getting numerous enough that it's time to create a struct. */
- 
- static char *saved_local_prompt;
- static char *saved_local_prefix;
- static int saved_last_invisible;
- static int saved_visible_length;
- static int saved_invis_chars_first_line;
- static int saved_physical_chars;
- 
  void
  rl_save_prompt ()
--- 1922,1925 ----
***************
*** 1880,1883 ****
--- 1927,1931 ----
    saved_local_prompt = local_prompt;
    saved_local_prefix = local_prompt_prefix;
+   saved_prefix_length = prompt_prefix_length;
    saved_last_invisible = prompt_last_invisible;
    saved_visible_length = prompt_visible_length;
***************
*** 1886,1890 ****
  
    local_prompt = local_prompt_prefix = (char *)0;
!   prompt_last_invisible = prompt_visible_length = 0;
    prompt_invis_chars_first_line = prompt_physical_chars = 0;
  }
--- 1934,1938 ----
  
    local_prompt = local_prompt_prefix = (char *)0;
!   prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0;
    prompt_invis_chars_first_line = prompt_physical_chars = 0;
  }
***************
*** 1898,1905 ****
--- 1946,1959 ----
    local_prompt = saved_local_prompt;
    local_prompt_prefix = saved_local_prefix;
+   prompt_prefix_length = saved_prefix_length;
    prompt_last_invisible = saved_last_invisible;
    prompt_visible_length = saved_visible_length;
    prompt_invis_chars_first_line = saved_invis_chars_first_line;
    prompt_physical_chars = saved_physical_chars;
+ 
+   /* can test saved_local_prompt to see if prompt info has been saved. */
+   saved_local_prompt = saved_local_prefix = (char *)0;
+   saved_last_invisible = saved_visible_length = saved_prefix_length = 0;
+   saved_invis_chars_first_line = saved_physical_chars = 0;
  }
  
