summaryrefslogtreecommitdiffstats
path: root/source/l/readline/readline-5.2-patches/readline52-013
diff options
context:
space:
mode:
Diffstat (limited to 'source/l/readline/readline-5.2-patches/readline52-013')
-rw-r--r--source/l/readline/readline-5.2-patches/readline52-013135
1 files changed, 135 insertions, 0 deletions
diff --git a/source/l/readline/readline-5.2-patches/readline52-013 b/source/l/readline/readline-5.2-patches/readline52-013
new file mode 100644
index 000000000..82a18972a
--- /dev/null
+++ b/source/l/readline/readline-5.2-patches/readline52-013
@@ -0,0 +1,135 @@
+ READLINE PATCH REPORT
+ =====================
+
+Readline-Release: 5.2
+Patch-ID: readline52-013
+
+Bug-Reported-by: slinkp <stuff@slinkp.com>
+Bug-Reference-ID: <da52a26a-9f38-4861-a918-14d3482b539d@c65g2000hsa.googlegroups.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html
+
+Bug-Description:
+
+The presence of invisible characters in a prompt longer than the screenwidth
+with invisible characters on the first and last prompt lines caused readline
+to place the cursor in the wrong physical location.
+
+Patch:
+
+*** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500
+--- display.c 2008-10-23 09:39:46.000000000 -0400
+***************
+*** 911,914 ****
+--- 944,951 ----
+ OFFSET (which has already been calculated above). */
+
++ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset)
++ #define WRAP_OFFSET(line, offset) ((line == 0) \
++ ? (offset ? INVIS_FIRST() : 0) \
++ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0))
+ #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0)
+ #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
+***************
+*** 945,949 ****
+ _rl_last_c_pos > wrap_offset &&
+ o_cpos < prompt_last_invisible)
+! _rl_last_c_pos -= wrap_offset;
+
+ /* If this is the line with the prompt, we might need to
+--- 982,992 ----
+ _rl_last_c_pos > wrap_offset &&
+ o_cpos < prompt_last_invisible)
+! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */
+! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth &&
+! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+! cpos_adjusted == 0 &&
+! _rl_last_c_pos != o_cpos &&
+! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line))
+! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line);
+
+ /* If this is the line with the prompt, we might need to
+***************
+*** 1205,1209 ****
+ {
+ register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+! int temp, lendiff, wsatend, od, nd, o_cpos;
+ int current_invis_chars;
+ int col_lendiff, col_temp;
+--- 1264,1268 ----
+ {
+ register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+! int temp, lendiff, wsatend, od, nd, twidth, o_cpos;
+ int current_invis_chars;
+ int col_lendiff, col_temp;
+***************
+*** 1221,1225 ****
+ 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)
+--- 1280,1284 ----
+ temp = _rl_last_c_pos;
+ else
+! temp = _rl_last_c_pos - WRAP_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)
+***************
+*** 1587,1599 ****
+ {
+ _rl_output_some_chars (nfd + lendiff, temp - lendiff);
+- #if 1
+ /* XXX -- this bears closer inspection. Fixes a redisplay bug
+ reported against bash-3.0-alpha by Andreas Schwab involving
+ multibyte characters and prompt strings with invisible
+ characters, but was previously disabled. */
+! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
+! #else
+! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff);
+! #endif
+ }
+ }
+--- 1648,1660 ----
+ {
+ _rl_output_some_chars (nfd + lendiff, temp - lendiff);
+ /* XXX -- this bears closer inspection. Fixes a redisplay bug
+ reported against bash-3.0-alpha by Andreas Schwab involving
+ multibyte characters and prompt strings with invisible
+ characters, but was previously disabled. */
+! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
+! else
+! twidth = temp - lendiff;
+! _rl_last_c_pos += twidth;
+ }
+ }
+***************
+*** 1789,1793 ****
+ int cpos, dpos; /* current and desired cursor positions */
+
+! woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+ cpos = _rl_last_c_pos;
+ #if defined (HANDLE_MULTIBYTE)
+--- 1850,1854 ----
+ int cpos, dpos; /* current and desired cursor positions */
+
+! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
+ cpos = _rl_last_c_pos;
+ #if defined (HANDLE_MULTIBYTE)
+***************
+*** 1803,1807 ****
+ prompt string, since they're both buffer indices and DPOS is a
+ desired display position. */
+! if (new > prompt_last_invisible) /* XXX - don't use woff here */
+ {
+ dpos -= woff;
+--- 1864,1872 ----
+ prompt string, since they're both buffer indices and DPOS is a
+ desired display position. */
+! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */
+! (prompt_physical_chars > _rl_screenwidth &&
+! _rl_last_v_pos == prompt_last_screen_line &&
+! wrap_offset != woff &&
+! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset)))
+ {
+ dpos -= woff;