| [4232f0e] | 1 | Submitted By: Joe Ciccone <jciccone@gmail.com> | 
|---|
|  | 2 | Date: 2007-07-23 | 
|---|
|  | 3 | Initial Package Version: 5.2 | 
|---|
|  | 4 | Origin: ftp://ftp.cwru.edu/pub/bash/readline-5.2-patches | 
|---|
|  | 5 | Upstream Status: From Upstream | 
|---|
|  | 6 | Description: Contains patches 001 - 004 from upstream | 
|---|
|  | 7 |  | 
|---|
|  | 8 | diff -Naur readline-5.2.orig/display.c readline-5.2/display.c | 
|---|
|  | 9 | --- readline-5.2.orig/display.c 2007-07-23 20:10:10.000000000 -0400 | 
|---|
|  | 10 | +++ readline-5.2/display.c      2007-07-23 20:10:27.000000000 -0400 | 
|---|
|  | 11 | @@ -561,6 +561,17 @@ | 
|---|
|  | 12 | wrap_offset = prompt_invis_chars_first_line = 0; | 
|---|
|  | 13 | } | 
|---|
|  | 14 |  | 
|---|
|  | 15 | +#if defined (HANDLE_MULTIBYTE) | 
|---|
|  | 16 | +#define CHECK_INV_LBREAKS() \ | 
|---|
|  | 17 | +      do { \ | 
|---|
|  | 18 | +       if (newlines >= (inv_lbsize - 2)) \ | 
|---|
|  | 19 | +         { \ | 
|---|
|  | 20 | +           inv_lbsize *= 2; \ | 
|---|
|  | 21 | +           inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ | 
|---|
|  | 22 | +           _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ | 
|---|
|  | 23 | +         } \ | 
|---|
|  | 24 | +      } while (0) | 
|---|
|  | 25 | +#else | 
|---|
|  | 26 | #define CHECK_INV_LBREAKS() \ | 
|---|
|  | 27 | do { \ | 
|---|
|  | 28 | if (newlines >= (inv_lbsize - 2)) \ | 
|---|
|  | 29 | @@ -569,6 +580,7 @@ | 
|---|
|  | 30 | inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ | 
|---|
|  | 31 | } \ | 
|---|
|  | 32 | } while (0) | 
|---|
|  | 33 | +#endif /* HANDLE_MULTIBYTE */ | 
|---|
|  | 34 |  | 
|---|
|  | 35 | #if defined (HANDLE_MULTIBYTE) | 
|---|
|  | 36 | #define CHECK_LPOS() \ | 
|---|
|  | 37 | @@ -1586,8 +1598,22 @@ | 
|---|
|  | 38 | temp = nls - nfd; | 
|---|
|  | 39 | if (temp > 0) | 
|---|
|  | 40 | { | 
|---|
|  | 41 | +             /* If nfd begins at the prompt, or before the invisible | 
|---|
|  | 42 | +                characters in the prompt, we need to adjust _rl_last_c_pos | 
|---|
|  | 43 | +                in a multibyte locale to account for the wrap offset and | 
|---|
|  | 44 | +                set cpos_adjusted accordingly. */ | 
|---|
|  | 45 | _rl_output_some_chars (nfd, temp); | 
|---|
|  | 46 | -             _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; | 
|---|
|  | 47 | +             if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | 
|---|
|  | 48 | +               { | 
|---|
|  | 49 | +                  _rl_last_c_pos += _rl_col_width (nfd, 0, temp); | 
|---|
|  | 50 | +                  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible)) | 
|---|
|  | 51 | +                   { | 
|---|
|  | 52 | +                     _rl_last_c_pos -= wrap_offset; | 
|---|
|  | 53 | +                     cpos_adjusted = 1; | 
|---|
|  | 54 | +                   } | 
|---|
|  | 55 | +               } | 
|---|
|  | 56 | +              else | 
|---|
|  | 57 | +                _rl_last_c_pos += temp; | 
|---|
|  | 58 | } | 
|---|
|  | 59 | } | 
|---|
|  | 60 | /* Otherwise, print over the existing material. */ | 
|---|
|  | 61 | @@ -1595,8 +1621,20 @@ | 
|---|
|  | 62 | { | 
|---|
|  | 63 | if (temp > 0) | 
|---|
|  | 64 | { | 
|---|
|  | 65 | +             /* If nfd begins at the prompt, or before the invisible | 
|---|
|  | 66 | +                characters in the prompt, we need to adjust _rl_last_c_pos | 
|---|
|  | 67 | +                in a multibyte locale to account for the wrap offset and | 
|---|
|  | 68 | +                set cpos_adjusted accordingly. */ | 
|---|
|  | 69 | _rl_output_some_chars (nfd, temp); | 
|---|
|  | 70 | _rl_last_c_pos += col_temp;               /* XXX */ | 
|---|
|  | 71 | +             if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | 
|---|
|  | 72 | +               { | 
|---|
|  | 73 | +                 if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible)) | 
|---|
|  | 74 | +                   { | 
|---|
|  | 75 | +                     _rl_last_c_pos -= wrap_offset; | 
|---|
|  | 76 | +                     cpos_adjusted = 1; | 
|---|
|  | 77 | +                   } | 
|---|
|  | 78 | +               } | 
|---|
|  | 79 | } | 
|---|
|  | 80 | lendiff = (oe - old) - (ne - new); | 
|---|
|  | 81 | if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | 
|---|
|  | 82 | @@ -1732,7 +1770,10 @@ | 
|---|
|  | 83 | if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | 
|---|
|  | 84 | { | 
|---|
|  | 85 | dpos = _rl_col_width (data, 0, new); | 
|---|
|  | 86 | -      if (dpos > prompt_last_invisible)                /* XXX - don't use woff here */ | 
|---|
|  | 87 | +      /* Use NEW when comparing against the last invisible character in the | 
|---|
|  | 88 | +        prompt string, since they're both buffer indices and DPOS is a | 
|---|
|  | 89 | +        desired display position. */ | 
|---|
|  | 90 | +      if (new > prompt_last_invisible)         /* XXX - don't use woff here */ | 
|---|
|  | 91 | { | 
|---|
|  | 92 | dpos -= woff; | 
|---|
|  | 93 | /* Since this will be assigned to _rl_last_c_pos at the end (more | 
|---|
|  | 94 | @@ -2380,6 +2421,8 @@ | 
|---|
|  | 95 |  | 
|---|
|  | 96 | if (end <= start) | 
|---|
|  | 97 | return 0; | 
|---|
|  | 98 | +  if (MB_CUR_MAX == 1 || rl_byte_oriented) | 
|---|
|  | 99 | +    return (end - start); | 
|---|
|  | 100 |  | 
|---|
|  | 101 | memset (&ps, 0, sizeof (mbstate_t)); | 
|---|
|  | 102 |  | 
|---|