summaryrefslogtreecommitdiffstats
path: root/package/bash/bash30-006
diff options
context:
space:
mode:
Diffstat (limited to 'package/bash/bash30-006')
-rw-r--r--package/bash/bash30-006165
1 files changed, 165 insertions, 0 deletions
diff --git a/package/bash/bash30-006 b/package/bash/bash30-006
new file mode 100644
index 000000000..fccc33b20
--- /dev/null
+++ b/package/bash/bash30-006
@@ -0,0 +1,165 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 3.0
+Patch-ID: bash30-006
+
+Bug-Reported-by: alexander@skwar.name
+ Tomohiro KUBOTA <debian@tmail.plala.or.jp>
+Bug-Reference-ID: <20040801124721.C69B8A2547A@server.bei.digitalprojects.com>
+ <16688.41450.433668.480445@gargle.gargle.HOWL>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00006.html
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=257540
+
+Bug-Description:
+
+Prompts with multibyte characters or invisible characters following a line
+wrap are displayed incorrectly.
+
+Patch:
+
+*** ../bash-3.0/lib/readline/display.c Thu May 27 22:57:51 2004
+--- lib/readline/display.c Mon Aug 30 11:55:02 2004
+***************
+*** 202,206 ****
+ {
+ char *r, *ret, *p;
+! int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
+
+ /* Short-circuit if we can. */
+--- 202,206 ----
+ {
+ char *r, *ret, *p;
+! int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
+
+ /* Short-circuit if we can. */
+***************
+*** 223,226 ****
+--- 223,227 ----
+
+ invfl = 0; /* invisible chars in first line of prompt */
++ invflset = 0; /* we only want to set invfl once */
+
+ for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
+***************
+*** 250,254 ****
+ *r++ = *p++;
+ if (!ignoring)
+! rl += ind - pind;
+ else
+ ninvis += ind - pind;
+--- 251,258 ----
+ *r++ = *p++;
+ if (!ignoring)
+! {
+! rl += ind - pind;
+! physchars += _rl_col_width (pmt, pind, ind);
+! }
+ else
+ ninvis += ind - pind;
+***************
+*** 260,273 ****
+ *r++ = *p;
+ if (!ignoring)
+! rl++; /* visible length byte counter */
+ else
+ ninvis++; /* invisible chars byte counter */
+ }
+
+! if (rl >= _rl_screenwidth)
+! invfl = ninvis;
+!
+! if (ignoring == 0)
+! physchars++;
+ }
+ }
+--- 264,280 ----
+ *r++ = *p;
+ if (!ignoring)
+! {
+! rl++; /* visible length byte counter */
+! physchars++;
+! }
+ else
+ ninvis++; /* invisible chars byte counter */
+ }
+
+! if (invflset == 0 && rl >= _rl_screenwidth)
+! {
+! invfl = ninvis;
+! invflset = 1;
+! }
+ }
+ }
+***************
+*** 418,422 ****
+ register char *line;
+ int c_pos, inv_botlin, lb_botlin, lb_linenum;
+! int newlines, lpos, temp, modmark;
+ char *prompt_this_line;
+ #if defined (HANDLE_MULTIBYTE)
+--- 425,429 ----
+ register char *line;
+ int c_pos, inv_botlin, lb_botlin, lb_linenum;
+! int newlines, lpos, temp, modmark, n0, num;
+ char *prompt_this_line;
+ #if defined (HANDLE_MULTIBYTE)
+***************
+*** 574,577 ****
+--- 581,585 ----
+ #if defined (HANDLE_MULTIBYTE)
+ memset (_rl_wrapped_line, 0, vis_lbsize);
++ num = 0;
+ #endif
+
+***************
+*** 592,596 ****
+--- 600,619 ----
+ prompts that exceed two physical lines?
+ Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
++ #if defined (HANDLE_MULTIBYTE)
++ n0 = num;
++ temp = local_prompt ? strlen (local_prompt) : 0;
++ while (num < temp)
++ {
++ if (_rl_col_width (local_prompt, n0, num) > _rl_screenwidth)
++ {
++ num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY);
++ break;
++ }
++ num++;
++ }
++ temp = num +
++ #else
+ temp = ((newlines + 1) * _rl_screenwidth) +
++ #endif /* !HANDLE_MULTIBYTE */
+ ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
+ : ((newlines == 1) ? wrap_offset : 0))
+***************
+*** 598,602 ****
+--- 621,629 ----
+
+ inv_lbreaks[++newlines] = temp;
++ #if defined (HANDLE_MULTIBYTE)
++ lpos -= _rl_col_width (local_prompt, n0, num);
++ #else
+ lpos -= _rl_screenwidth;
++ #endif
+ }
+
+
+*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
+--- patchlevel.h Thu Sep 2 15:04:32 2004
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 5
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 6
+
+ #endif /* _PATCHLEVEL_H_ */