From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24328 invoked by alias); 1 Apr 2011 09:30:15 -0000 Received: (qmail 24318 invoked by uid 22791); 1 Apr 2011 09:30:14 -0000 X-SWARE-Spam-Status: No, hits=0.4 required=5.0 tests=AWL,BAYES_05,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_WEB,SPF_SOFTFAIL,TW_CG,TW_LR X-Spam-Check-By: sourceware.org Received: from mtaout23.012.net.il (HELO mtaout23.012.net.il) (80.179.55.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 01 Apr 2011 09:30:08 +0000 Received: from conversion-daemon.a-mtaout23.012.net.il by a-mtaout23.012.net.il (HyperSendmail v2007.08) id <0LIY00400VMNVI00@a-mtaout23.012.net.il> for gdb@sourceware.org; Fri, 01 Apr 2011 12:30:03 +0300 (IDT) Received: from HOME-C4E4A596F7 ([77.126.47.180]) by a-mtaout23.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0LIY00485VQ1V910@a-mtaout23.012.net.il>; Fri, 01 Apr 2011 12:30:03 +0300 (IDT) Date: Fri, 01 Apr 2011 09:30:00 -0000 From: Eli Zaretskii Subject: Re: readline rebase 5.1->6.2? In-reply-to: <83oc537wrs.fsf@gnu.org> To: jan.kratochvil@redhat.com, gdb@sourceware.org, ktietz@redhat.com Reply-to: Eli Zaretskii Message-id: <83oc4qpbdw.fsf@gnu.org> References: <20110322154327.GA8966@host1.jankratochvil.net> <83tyev7z7a.fsf@gnu.org> <20110322194836.GA23104@host1.jankratochvil.net> <83oc537wrs.fsf@gnu.org> X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-04/txt/msg00002.txt.bz2 > Date: Tue, 22 Mar 2011 21:58:15 +0200 > From: Eli Zaretskii > Cc: gdb@sourceware.org, ktietz@redhat.com, cgf-use-the-mailinglist-please@gnu.org > > > Date: Tue, 22 Mar 2011 20:48:36 +0100 > > From: Jan Kratochvil > > Cc: gdb@sourceware.org, ktietz@redhat.com, > > cgf-use-the-mailinglist-please@gnu.org > > > > I do not have anything else than you have. I just used diff on > > ftp://ftp.cwru.edu/pub/bash/readline-5.1.tar.gz > > vs. src/readline. But one should rather check individual patches > > with git annotate / git show etc. and compare them against readline-6.2. > > OK, I will have a look. I compared readline-6.2 with our local changes since 5.1, and I see that the changes below are not in 6.2. I only paid attention to DJGPP/MSDOS-specific patches and to MinGW-specific patches, because Jan seemed to have covered the rest. (One of the MinGW-specific patches has a comment saying the underlying problem should be fixed in readline 5.2, but I don't know what is the problem, so I couldn't check whether it is indeed fixed.) The question is, what should we do about these patches? Submitting them to upstream readline would be the best course (assuming the readline maintainer is willing to include them), but that means we will have to either wait for the next readline release or keep our local patches for the time being. --- display.c 20 Apr 2006 20:05:36 -0000 1.1.1.7 +++ display.c 24 Mar 2008 12:59:51 -0000 1.12 @@ -41,6 +41,10 @@ #include +#ifdef __MSDOS__ +# include +#endif + /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" @@ -1782,9 +1792,18 @@ _rl_move_vert (to) } else { /* delta < 0 */ +#ifdef __MSDOS__ + int row, col; + + fflush (rl_outstream); /* make sure the cursor pos is current! */ + ScreenGetCursor (&row, &col); + ScreenSetCursor (row + delta, col); + i = -delta; /* in case someone wants to use it after the loop */ +#else /* !__MSDOS__ */ if (_rl_term_up && *_rl_term_up) for (i = 0; i < -delta; i++) tputs (_rl_term_up, 1, _rl_output_character_function); +#endif /* !__MSDOS__ */ } _rl_last_v_pos = to; /* Now TO is here */ @@ -2036,9 +2057,12 @@ void _rl_clear_to_eol (count) int count; { +#ifndef __MSDOS__ if (_rl_term_clreol) tputs (_rl_term_clreol, 1, _rl_output_character_function); - else if (count) + else +#endif + if (count) space_to_eol (count); } @@ -2059,10 +2083,15 @@ space_to_eol (count) void _rl_clear_screen () { +#if defined (__GO32__) + ScreenClear (); /* FIXME: only works in text modes */ + ScreenSetCursor (0, 0); /* term_clrpag is "cl" which homes the cursor */ +#else if (_rl_term_clrpag) tputs (_rl_term_clrpag, 1, _rl_output_character_function); else rl_crlf (); +#endif } /* Insert COUNT characters from STRING to the output stream at column COL. */ --- emacs_keymap.c 23 Aug 2002 22:02:28 -0000 1.1.1.3 +++ emacs_keymap.c 5 May 2006 18:26:12 -0000 1.6 @@ -278,7 +278,13 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */ { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */ +#ifndef __MINGW32__ { ISFUNC, rl_insert }, /* Latin small letter a with grave */ +#else + /* Temporary - this is a bug in readline 5.1 that should be fixed in + readline 5.2. */ + { ISFUNC, 0 }, /* Must leave this unbound for the arrow keys to work. */ +#endif { ISFUNC, rl_insert }, /* Latin small letter a with acute */ { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter a with tilde */ --- terminal.c 20 Apr 2006 20:05:37 -0000 1.1.1.7 +++ terminal.c 13 Nov 2006 09:33:30 -0000 1.11 @@ -55,6 +55,10 @@ # include #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ +#ifdef __MSDOS__ +# include +#endif + #include "rltty.h" #include "tcap.h" @@ -66,6 +70,11 @@ #include "rlshell.h" #include "xmalloc.h" +#if defined (__MINGW32__) +# include +# include +#endif + #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) @@ -77,8 +86,10 @@ int rl_prefer_env_winsize; /* */ /* **************************************************************** */ +#ifndef __MSDOS__ static char *term_buffer = (char *)NULL; static char *term_string_buffer = (char *)NULL; +#endif /* !__MSDOS__ */ static int tcap_initialized; @@ -207,6 +218,20 @@ _rl_get_screen_size (tty, ignore_env) } #endif /* TIOCGWINSZ */ + /* For MinGW, we get the console size from the Windows API. */ +#if defined (__MINGW32__) + HANDLE hConOut = GetStdHandle (STD_OUTPUT_HANDLE); + if (hConOut != INVALID_HANDLE_VALUE) + { + CONSOLE_SCREEN_BUFFER_INFO scr; + if (GetConsoleScreenBufferInfo (hConOut, &scr)) + { + wc = scr.dwSize.X; + wr = scr.srWindow.Bottom - scr.srWindow.Top + 1; + } + } +#endif + #if defined (__EMX__) _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight); #endif @@ -230,7 +255,10 @@ _rl_get_screen_size (tty, ignore_env) if (_rl_screenwidth <= 0) _rl_screenwidth = wc; -#if !defined (__DJGPP__) +#if defined (__DJGPP__) + if (_rl_screenwidth <= 0) + _rl_screenwidth = ScreenCols (); +#else if (_rl_screenwidth <= 0 && term_string_buffer) _rl_screenwidth = tgetnum ("co"); #endif @@ -246,7 +274,10 @@ _rl_get_screen_size (tty, ignore_env) if (_rl_screenheight <= 0) _rl_screenheight = wr; -#if !defined (__DJGPP__) +#if defined (__DJGPP__) + if (_rl_screenheight <= 0) + _rl_screenheight = ScreenRows (); +#else if (_rl_screenheight <= 0 && term_string_buffer) _rl_screenheight = tgetnum ("li"); #endif @@ -397,6 +431,23 @@ _rl_init_terminal_io (terminal_name) if (term == 0) term = "dumb"; +#ifdef __MSDOS__ + _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; + _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; + _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; + _rl_term_mm = _rl_term_mo = (char *)NULL; + _rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0; + _rl_term_cr = "\r"; + _rl_term_clreol = _rl_term_clrpag = _rl_term_backspace = (char *)NULL; + _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL; + _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL; + _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL; +#if defined(HACK_TERMCAP_MOTION) + _rl_term_forward_char = (char *)NULL; +#endif + + _rl_get_screen_size (tty, 0); +#else /* !__MSDOS__ */ /* I've separated this out for later work on not calling tgetent at all if the calling application has supplied a custom redisplay function, (and possibly if the application has supplied a custom input function). */ @@ -499,6 +550,8 @@ _rl_init_terminal_io (terminal_name) if (!term_has_meta) _rl_term_mm = _rl_term_mo = (char *)NULL; +#endif /* !__MSDOS__ */ + /* Attempt to find and bind the arrow keys. Do not override already bound keys in an overzealous attempt, however. */ @@ -595,10 +648,12 @@ _rl_backspace (count) { register int i; +#ifndef __MSDOS__ if (_rl_term_backspace) for (i = 0; i < count; i++) tputs (_rl_term_backspace, 1, _rl_output_character_function); else +#endif for (i = 0; i < count; i++) putc ('\b', _rl_out_stream); return 0; @@ -628,12 +683,17 @@ rl_ding () default: break; case VISIBLE_BELL: +#ifdef __MSDOS__ + ScreenVisualBell (); + break; +#else if (_rl_visible_bell) { tputs (_rl_visible_bell, 1, _rl_output_character_function); break; } /* FALLTHROUGH */ +#endif case AUDIBLE_BELL: fprintf (stderr, "\007"); fflush (stderr); @@ -685,6 +745,7 @@ void _rl_set_cursor (im, force) int im, force; { +#ifndef __MSDOS__ if (_rl_term_ve && _rl_term_vs) { if (force || im != rl_insert_mode) @@ -695,4 +756,5 @@ _rl_set_cursor (im, force) tputs (_rl_term_ve, 1, _rl_output_character_function); } } +#endif }