OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src Date: 02-Oct-2004 12:23:17 Branch: HEAD Handle: 2004100211231600 Added files: openpkg-src/readline readline.patch Modified files: openpkg-src/readline readline.spec Log: apply GNU readline related patches from the official GNU bash patch set Summary: Revision Changes Path 1.3 +230 -0 openpkg-src/readline/readline.patch 1.18 +3 -1 openpkg-src/readline/readline.spec ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/readline/readline.patch ============================================================================ $ cvs diff -u -r0 -r1.3 readline.patch --- /dev/null 2004-10-02 12:23:16 +0200 +++ readline.patch 2004-10-02 12:23:17 +0200 @@ -0,0 +1,230 @@ +This patch adds an explicit recognition for terminal sequence "kD" to be +"Delete" key. This is derived from Debian GNU/Linux and SuSE Linux. + +Index: terminal.c +--- terminal.c.orig 2003-09-18 17:03:42 +0200 ++++ terminal.c 2004-07-27 20:03:17 +0200 +@@ -145,6 +145,9 @@ + static char *_rl_term_kH; + static char *_rl_term_at7; /* @7 */ + ++/* The key sequence sent by the Delete key, if any. */ ++static char *_rl_term_kD; ++ + /* Insert key */ + static char *_rl_term_kI; + +@@ -313,6 +316,7 @@ + { "ei", &_rl_term_ei }, + { "ic", &_rl_term_ic }, + { "im", &_rl_term_im }, ++ { "kD", &_rl_term_kD }, /* delete */ + { "kH", &_rl_term_kH }, /* home down ?? */ + { "kI", &_rl_term_kI }, /* insert */ + { "kd", &_rl_term_kd }, +@@ -492,6 +496,7 @@ + + rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */ + rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line); /* End */ ++ rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete); /* Delete */ + + _rl_keymap = xkeymap; + } + +----------------------------------------------------------------------------- + +These are the accumulated patches to GNU readline as contained in +the official GNU bash 3.0 patches numbered 001 to 013. + +Index: display.c +--- display.c.orig 2004-10-02 12:19:25 +0200 ++++ display.c 2004-10-02 12:19:25 +0200 +@@ -201,7 +201,7 @@ + int *lp, *lip, *niflp, *vlp; + { + char *r, *ret, *p; +- int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars; ++ int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; + + /* Short-circuit if we can. */ + if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0) +@@ -222,6 +222,7 @@ + r = ret = (char *)xmalloc (l + 1); + + 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++) + { +@@ -249,7 +250,10 @@ + while (l--) + *r++ = *p++; + if (!ignoring) +- rl += ind - pind; ++ { ++ rl += ind - pind; ++ physchars += _rl_col_width (pmt, pind, ind); ++ } + else + ninvis += ind - pind; + p--; /* compensate for later increment */ +@@ -259,16 +263,19 @@ + { + *r++ = *p; + if (!ignoring) +- rl++; /* visible length byte counter */ ++ { ++ rl++; /* visible length byte counter */ ++ physchars++; ++ } + else + ninvis++; /* invisible chars byte counter */ + } + +- if (rl >= _rl_screenwidth) +- invfl = ninvis; +- +- if (ignoring == 0) +- physchars++; ++ if (invflset == 0 && rl >= _rl_screenwidth) ++ { ++ invfl = ninvis; ++ invflset = 1; ++ } + } + } + +@@ -417,7 +424,7 @@ + register int in, out, c, linenum, cursor_linenum; + register char *line; + int c_pos, inv_botlin, lb_botlin, lb_linenum; +- int newlines, lpos, temp, modmark; ++ int newlines, lpos, temp, modmark, n0, num; + char *prompt_this_line; + #if defined (HANDLE_MULTIBYTE) + wchar_t wc; +@@ -573,6 +580,7 @@ + + #if defined (HANDLE_MULTIBYTE) + memset (_rl_wrapped_line, 0, vis_lbsize); ++ num = 0; + #endif + + /* prompt_invis_chars_first_line is the number of invisible characters in +@@ -591,13 +599,32 @@ + probably too much work for the benefit gained. How many people have + prompts that exceed two physical lines? + Additional logic fix from Edward Catmur <[EMAIL PROTECTED]> */ ++#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)) + : ((newlines == 0) ? wrap_offset :0)); + + inv_lbreaks[++newlines] = temp; ++#if defined (HANDLE_MULTIBYTE) ++ lpos -= _rl_col_width (local_prompt, n0, num); ++#else + lpos -= _rl_screenwidth; ++#endif + } + + prompt_last_screen_line = newlines; +Index: mbutil.c +--- mbutil.c.orig 2004-01-14 15:44:52 +0100 ++++ mbutil.c 2004-10-02 12:19:25 +0200 +@@ -126,11 +126,11 @@ + if (find_non_zero) + { + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); +- while (wcwidth (wc) == 0) ++ while (tmp > 0 && wcwidth (wc) == 0) + { + point += tmp; + tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); +- if (tmp == (size_t)(0) || tmp == (size_t)(-1) || tmp == (size_t)(-2)) ++ if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp)) + break; + } + } +Index: misc.c +--- misc.c.orig 2004-07-07 14:56:32 +0200 ++++ misc.c 2004-10-02 12:19:25 +0200 +@@ -276,12 +276,6 @@ + _rl_saved_line_for_history->line = savestring (rl_line_buffer); + _rl_saved_line_for_history->data = (char *)rl_undo_list; + } +- else if (STREQ (rl_line_buffer, _rl_saved_line_for_history->line) == 0) +- { +- free (_rl_saved_line_for_history->line); +- _rl_saved_line_for_history->line = savestring (rl_line_buffer); +- _rl_saved_line_for_history->data = (char *)rl_undo_list; /* XXX possible memleak */ +- } + + return 0; + } +Index: vi_mode.c +--- vi_mode.c.orig 2004-10-02 12:19:25 +0200 ++++ vi_mode.c 2004-10-02 12:19:25 +0200 +@@ -692,7 +692,7 @@ + { + wchar_t wc; + char mb[MB_LEN_MAX+1]; +- int mblen; ++ int mblen, p; + mbstate_t ps; + + memset (&ps, 0, sizeof (mbstate_t)); +@@ -715,11 +715,14 @@ + /* Vi is kind of strange here. */ + if (wc) + { ++ p = rl_point; + mblen = wcrtomb (mb, wc, &ps); + if (mblen >= 0) + mb[mblen] = '\0'; + rl_begin_undo_group (); +- rl_delete (1, 0); ++ rl_vi_delete (1, 0); ++ if (rl_point < p) /* Did we retreat at EOL? */ ++ rl_point++; /* XXX - should we advance more than 1 for mbchar? */ + rl_insert_text (mb); + rl_end_undo_group (); + rl_vi_check (); +@@ -1312,12 +1315,16 @@ + rl_vi_delete (1, c); + #if defined (HANDLE_MULTIBYTE) + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) +- while (_rl_insert_char (1, c)) +- { +- RL_SETSTATE (RL_STATE_MOREINPUT); +- c = rl_read_key (); +- RL_UNSETSTATE (RL_STATE_MOREINPUT); +- } ++ { ++ if (rl_point < p) /* Did we retreat at EOL? */ ++ rl_point++; ++ while (_rl_insert_char (1, c)) ++ { ++ RL_SETSTATE (RL_STATE_MOREINPUT); ++ c = rl_read_key (); ++ RL_UNSETSTATE (RL_STATE_MOREINPUT); ++ } ++ } + else + #endif + { @@ . patch -p0 <<'@@ .' Index: openpkg-src/readline/readline.spec ============================================================================ $ cvs diff -u -r1.17 -r1.18 readline.spec --- openpkg-src/readline/readline.spec 4 Aug 2004 10:59:29 -0000 1.17 +++ openpkg-src/readline/readline.spec 2 Oct 2004 10:23:16 -0000 1.18 @@ -39,10 +39,11 @@ Group: Converter License: GPL Version: %{V_real}.%{V_patch} -Release: 20040804 +Release: 20041002 # list of sources Source0: ftp://ftp.gnu.org/gnu/readline/readline-%{V_real}.tar.gz +Patch0: readline.patch # build information Prefix: %{l_prefix} @@ -71,6 +72,7 @@ %prep %setup -q -n readline-%{V_real} + %patch -p0 %build CC="%{l_cc}" \ @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]