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]