+++ /dev/null
-*** braces.c.orig Fri Sep 17 18:42:36 2004
---- braces.c Sat Jan 28 19:24:14 2006
-***************
-*** 81,94 ****
- char *preamble, *postamble, *amble;
- size_t alen;
- char **tack, **result;
-! int i, j, c;
-
- DECLARE_MBSTATE;
-
- /* Find the text of the preamble. */
- tlen = strlen (text);
- i = 0;
-! c = brace_gobbler (text, tlen, &i, '{');
-
- preamble = (char *)xmalloc (i + 1);
- strncpy (preamble, text, i);
---- 81,121 ----
- char *preamble, *postamble, *amble;
- size_t alen;
- char **tack, **result;
-! int i, j, c, c1;
-
- DECLARE_MBSTATE;
-
- /* Find the text of the preamble. */
- tlen = strlen (text);
- i = 0;
-! /* Make sure that when we exit this loop, c == 0 or text[i] begins a
-! valid brace expansion sequence. */
-! do
-! {
-! c = brace_gobbler (text, tlen, &i, '{'); /* } */
-! c1 = c;
-! /* Verify that c begins a valid brace expansion word. If it doesn't, we
-! go on. Loop stops when there are no more open braces in the word. */
-! if (c)
-! {
-! start = j = i + 1; /* { */
-! c = brace_gobbler (text, tlen, &j, '}');
-! if (c == 0) /* it's not */
-! {
-! i++;
-! c = c1;
-! continue;
-! }
-! else /* it is */
-! {
-! c = c1;
-! break;
-! }
-! }
-! else
-! break;
-! }
-! while (c);
-
- preamble = (char *)xmalloc (i + 1);
- strncpy (preamble, text, i);
-***************
-*** 361,366 ****
---- 388,398 ----
- index of the character matching SATISFY. This understands about
- quoting. Return the character that caused us to stop searching;
- this is either the same as SATISFY, or 0. */
-+ /* If SATISFY is `}', we are looking for a brace expression, so we
-+ should enforce the rules that govern valid brace expansions:
-+ 1) to count as an arg separator, a comma or `..' has to be outside
-+ an inner set of braces.
-+ */
- static int
- brace_gobbler (text, tlen, indx, satisfy)
- char *text;
-***************
-*** 368,374 ****
- int *indx;
- int satisfy;
- {
-! register int i, c, quoted, level, pass_next;
- #if defined (SHELL)
- int si;
- char *t;
---- 400,406 ----
- int *indx;
- int satisfy;
- {
-! register int i, c, quoted, level, commas, pass_next;
- #if defined (SHELL)
- int si;
- char *t;
-***************
-*** 376,381 ****
---- 408,414 ----
- DECLARE_MBSTATE;
-
- level = quoted = pass_next = 0;
-+ commas = (satisfy == '}') ? 0 : 1;
-
- i = *indx;
- while (c = text[i])
-***************
-*** 436,442 ****
- }
- #endif
-
-! if (c == satisfy && level == 0 && quoted == 0)
- {
- /* We ignore an open brace surrounded by whitespace, and also
- an open brace followed immediately by a close brace preceded
---- 469,475 ----
- }
- #endif
-
-! if (c == satisfy && level == 0 && quoted == 0 && commas > 0)
- {
- /* We ignore an open brace surrounded by whitespace, and also
- an open brace followed immediately by a close brace preceded
-***************
-*** 456,461 ****
---- 489,499 ----
- level++;
- else if (c == '}' && level)
- level--;
-+ else if (satisfy == '}' && c == brace_arg_separator && level == 0)
-+ commas++;
-+ else if (satisfy == '}' && STREQN (text+i, BRACE_SEQ_SPECIFIER, 2) &&
-+ text[i+2] != satisfy && level == 0)
-+ commas++;
-
- ADVANCE_CHAR (text, tlen, i);
- }
+++ /dev/null
-*** ../../../bash-3.0-patched/lib/readline/display.c 2004-09-08 11:07:51.000000000 -0400
---- display.c 2005-11-06 21:32:59.000000000 -0500
-***************
-*** 1,5 ****
- /* display.c -- readline redisplay facility. */
-
-! /* Copyright (C) 1987-2004 Free Software Foundation, Inc.
-
- This file is part of the GNU Readline Library, a library for
---- 1,5 ----
- /* display.c -- readline redisplay facility. */
-
-! /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
-
- This file is part of the GNU Readline Library, a library for
-***************
-*** 119,122 ****
---- 119,123 ----
-
- int _rl_suppress_redisplay = 0;
-+ int _rl_want_redisplay = 0;
-
- /* The stuff that gets printed out before the actual text of the line.
-***************
-*** 125,129 ****
---- 126,135 ----
-
- /* Pseudo-global variables declared here. */
-+
- /* The visible cursor position. If you print some text, adjust this. */
-+ /* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale
-+ supporting multibyte characters, and an absolute cursor position when
-+ in such a locale. This is an artifact of the donated multibyte support.
-+ Care must be taken when modifying its value. */
- int _rl_last_c_pos = 0;
- int _rl_last_v_pos = 0;
-***************
-*** 181,184 ****
---- 187,202 ----
- 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
-***************
-*** 237,241 ****
- {
- ignoring = 0;
-! last = r - ret - 1;
- continue;
- }
---- 255,260 ----
- {
- ignoring = 0;
-! if (p[-1] != RL_PROMPT_START_IGNORE)
-! last = r - ret - 1;
- continue;
- }
-***************
-*** 336,340 ****
-
- local_prompt = local_prompt_prefix = (char *)0;
-! prompt_last_invisible = prompt_visible_length = 0;
-
- if (prompt == 0 || *prompt == 0)
---- 355,360 ----
-
- local_prompt = local_prompt_prefix = (char *)0;
-! prompt_last_invisible = prompt_invis_chars_first_line = 0;
-! prompt_visible_length = prompt_physical_chars = 0;
-
- if (prompt == 0 || *prompt == 0)
-***************
-*** 441,445 ****
- rl_display_prompt = "";
-
-! if (invisible_line == 0)
- {
- init_line_structures (0);
---- 461,465 ----
- rl_display_prompt = "";
-
-! if (invisible_line == 0 || vis_lbreaks == 0)
- {
- init_line_structures (0);
-***************
-*** 834,838 ****
- if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
- {
-! int nleft, pos, changed_screen_line;
-
- if (!rl_display_fixed || forced_display)
---- 854,858 ----
- if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
- {
-! int nleft, pos, changed_screen_line, tx, fudge;
-
- if (!rl_display_fixed || forced_display)
-***************
-*** 879,883 ****
- (_rl_last_c_pos < visible_first_line_len))
- {
-! nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
- if (nleft)
- _rl_clear_to_eol (nleft);
---- 899,906 ----
- (_rl_last_c_pos < visible_first_line_len))
- {
-! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-! nleft = _rl_screenwidth - _rl_last_c_pos;
-! else
-! nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
- if (nleft)
- _rl_clear_to_eol (nleft);
-***************
-*** 915,919 ****
- but the buffer position needs to be adjusted to account
- for invisible characters. */
-! if (cursor_linenum == 0 && wrap_offset)
- _rl_last_c_pos += wrap_offset;
- }
---- 938,942 ----
- but the buffer position needs to be adjusted to account
- for invisible characters. */
-! if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset)
- _rl_last_c_pos += wrap_offset;
- }
-***************
-*** 948,951 ****
---- 971,980 ----
- nleft = c_pos - pos;
-
-+ /* NLEFT is now a number of characters in a buffer. When in a
-+ multibyte locale, however, _rl_last_c_pos is an absolute cursor
-+ position that doesn't take invisible characters in the prompt
-+ into account. We use a fudge factor to compensate. */
-+ fudge = (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? wrap_offset : 0;
-+
- /* Since _rl_backspace() doesn't know about invisible characters in the
- prompt, and there's no good way to tell it, we compensate for
-***************
-*** 953,961 ****
- if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
- {
-- _rl_backspace (_rl_last_c_pos - nleft);
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-! _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
- else
-! _rl_last_c_pos = nleft;
- }
-
---- 982,994 ----
- if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
- {
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-! tx = _rl_col_width (&visible_line[pos], 0, nleft);
- else
-! tx = nleft;
-! if ((_rl_last_c_pos+fudge) != tx)
-! {
-! _rl_backspace (_rl_last_c_pos + fudge - tx); /* XXX */
-! _rl_last_c_pos = tx;
-! }
- }
-
-***************
-*** 1118,1122 ****
- emulators. In this calculation, TEMP is the physical screen
- position of the cursor. */
-! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
- if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
- && _rl_last_v_pos == current_line - 1)
---- 1151,1158 ----
- emulators. In this calculation, TEMP is the physical screen
- position of the cursor. */
-! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-! temp = _rl_last_c_pos;
-! else
-! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
- if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
- && _rl_last_v_pos == current_line - 1)
-***************
-*** 1324,1328 ****
- {
- _rl_move_vert (current_line);
-! if (current_line == 0 && visible_wrap_offset)
- _rl_last_c_pos += visible_wrap_offset;
- }
---- 1360,1364 ----
- {
- _rl_move_vert (current_line);
-! if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
- _rl_last_c_pos += visible_wrap_offset;
- }
-***************
-*** 1415,1419 ****
- _rl_last_c_pos += col_lendiff;
- }
-! else if (*ols == 0 && lendiff > 0)
- {
- /* At the end of a line the characters do not have to
---- 1451,1455 ----
- _rl_last_c_pos += col_lendiff;
- }
-! else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0)
- {
- /* At the end of a line the characters do not have to
-***************
-*** 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)
---- 1833,1839 ----
- 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 ****
---- 1866,1882 ----
- 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 ****
---- 1888,1905 ----
- 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 ****
---- 1911,1919 ----
- {
- 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 ()
---- 1930,1933 ----
-***************
-*** 1880,1883 ****
---- 1935,1939 ----
- 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;
- }
---- 1942,1946 ----
-
- 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 ****
---- 1954,1967 ----
- 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;
- }
-
-***************
-*** 1935,1938 ****
---- 1997,2002 ----
- }
-
-+ prompt_physical_chars = saved_physical_chars + 1;
-+
- return pmt;
- }
-***************
-*** 1995,1998 ****
---- 2059,2065 ----
- int count, col;
- {
-+ #if defined (__MSDOS__) || defined (__MINGW32__)
-+ _rl_output_some_chars (string, count);
-+ #else
- /* DEBUGGING */
- if (MB_CUR_MAX == 1 || rl_byte_oriented)
-***************
-*** 2033,2036 ****
---- 2100,2104 ----
- tputs (_rl_term_ei, 1, _rl_output_character_function);
- }
-+ #endif /* __MSDOS__ || __MINGW32__ */
- }
-
-***************
-*** 2043,2046 ****
---- 2111,2115 ----
- return;
-
-+ #if !defined (__MSDOS__) && !defined (__MINGW32__)
- if (_rl_term_DC && *_rl_term_DC)
- {
-***************
-*** 2055,2058 ****
---- 2124,2128 ----
- tputs (_rl_term_dc, 1, _rl_output_character_function);
- }
-+ #endif /* !__MSDOS__ && !__MINGW32__ */
- }
-
-***************
-*** 2110,2125 ****
- char *t;
- {
-! char *oldp, *oldl, *oldlprefix;
-! int oldlen, oldlast, oldplen, oldninvis, oldphyschars;
-
-- /* Geez, I should make this a struct. */
- oldp = rl_display_prompt;
-! oldl = local_prompt;
-! oldlprefix = local_prompt_prefix;
-! oldlen = prompt_visible_length;
-! oldplen = prompt_prefix_length;
-! oldlast = prompt_last_invisible;
-! oldninvis = prompt_invis_chars_first_line;
-! oldphyschars = prompt_physical_chars;
-
- rl_display_prompt = t;
---- 2180,2187 ----
- char *t;
- {
-! char *oldp;
-
- oldp = rl_display_prompt;
-! rl_save_prompt ();
-
- rl_display_prompt = t;
-***************
-*** 2129,2142 ****
- &prompt_physical_chars);
- local_prompt_prefix = (char *)NULL;
- rl_forced_update_display ();
-
- rl_display_prompt = oldp;
-! local_prompt = oldl;
-! local_prompt_prefix = oldlprefix;
-! prompt_visible_length = oldlen;
-! prompt_prefix_length = oldplen;
-! prompt_last_invisible = oldlast;
-! prompt_invis_chars_first_line = oldninvis;
-! prompt_physical_chars = oldphyschars;
- }
-
---- 2191,2199 ----
- &prompt_physical_chars);
- local_prompt_prefix = (char *)NULL;
-+
- rl_forced_update_display ();
-
- rl_display_prompt = oldp;
-! rl_restore_prompt();
- }
-