Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Denis PILAT <denis.pilat@st.com>,
	Andrew STUBBS <andrew.stubbs@st.com>,
		Eli Zaretskii <eliz@gnu.org>,
	gdb-patches@sources.redhat.com, 	bash-maintainers@gnu.org
Subject: Re: [readline-mingw] backspace key and TUI size
Date: Thu, 23 Feb 2006 18:25:00 -0000	[thread overview]
Message-ID: <20060223182145.GA25411@nevyn.them.org> (raw)
In-Reply-To: <20060220153647.GA16058@nevyn.them.org>

On Mon, Feb 20, 2006 at 10:36:47AM -0500, Daniel Jacobowitz wrote:
> FYI, the standard way to write this changelog entry would be:
> 
> 2005-02-10  Denis Pilat  <denis.pilat@st.com>
> 
> 	* readline/terminal.c (_rl_get_screen_size): Get console size from
> 	the Windows API when compiling with MinGW.

Chet confirmed that he has taken a functionally equivalent patch for
the next release of readline.  So, I've committed the reformatted
version of Denis's patch at the bottom of this message.

This gets show width and show height to work on Windows consoles, and
probably helps the TUI.  However, it does not fix paging.  I'm not
planning to fix it, either - I wasted all morning on it.  Here's the
story in case someone else goes down the same rathole someday.

First, GDB disables paging because tgetnum ("li") fails, so it assumes
we're in a non-console environment.  I could hack up win32-termcap.c
to provide "li" if we're on a console, but that's not all...

Next, readline sets cols to 79 instead of 80 because we don't have
both automatic margins ("am") and ignored newlines beyond the automatic
margins ("xn").  This causes utils.c to start printing the prompt
at the last column of the previous line instead of the first column
of the next line.  In fact, we do have automatic margins, but we don't
have "xn".  So even if I hack up win32-termcap.c further to report
"am", this still happens.  I think it'll happen on any terminal without
"xn", given the current logic in gdb and readline, whether or not the
terminal has "am".  But I don't know any other platform using such a
terminal at the moment, so I don't want to rip up the guts of either
readline or gdb to cope better.  It's just not worth it.

So since the only way I could get the paging prompt to work at all was
graphically pretty nasty, and this console has scrollback anyway, I'm
going to leave paging disabled.

-- 
Daniel Jacobowitz
CodeSourcery

Index: src/readline/terminal.c
===================================================================
--- src.orig/readline/terminal.c	2003-12-30 02:25:18.000000000 -0500
+++ src/readline/terminal.c	2006-02-23 10:44:00.000000000 -0500
@@ -70,6 +70,11 @@
 #include "rlshell.h"
 #include "xmalloc.h"
 
+#if defined (__MINGW32__)
+# include <windows.h>
+# include <wincon.h>
+#endif
+
 #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
 #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
 
@@ -209,6 +214,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))
+	{
+	  _rl_screenwidth = scr.dwSize.X;
+	  _rl_screenheight = scr.srWindow.Bottom - scr.srWindow.Top + 1;
+	}
+    }
+#endif
+
 #if defined (__EMX__)
   _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
 #endif


  reply	other threads:[~2006-02-23 18:21 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-08  8:03 Denis PILAT
2006-02-08 13:43 ` Daniel Jacobowitz
2006-02-08 16:03   ` Denis PILAT
2006-02-08 16:05     ` Bob Rossi
2006-02-08 16:14     ` Daniel Jacobowitz
2006-02-08 16:30       ` Chet Ramey
2006-02-08 16:48       ` Andrew STUBBS
2006-02-08 16:51         ` Daniel Jacobowitz
2006-02-08 17:04           ` Chet Ramey
2006-02-08 17:13             ` Daniel Jacobowitz
2006-02-08 17:54               ` Eli Zaretskii
2006-02-08 17:09           ` Eli Zaretskii
2006-02-08 17:30             ` Andrew STUBBS
2006-02-08 17:40               ` Daniel Jacobowitz
2006-02-09  9:36                 ` Denis PILAT
2006-02-09 13:49                   ` Daniel Jacobowitz
2006-02-10 15:41                     ` Denis PILAT
2006-02-10 18:52                       ` Eli Zaretskii
2006-02-20 15:36                       ` Daniel Jacobowitz
2006-02-23 18:25                         ` Daniel Jacobowitz [this message]
2006-02-24  8:36                           ` Eli Zaretskii
2006-02-24 18:44                             ` Daniel Jacobowitz
2006-02-24 18:48                               ` Eli Zaretskii
2006-02-24 19:29                                 ` Daniel Jacobowitz
2006-02-25 11:35                                   ` Eli Zaretskii
2006-02-08 17:56       ` Eli Zaretskii
2006-02-08 18:03         ` Daniel Jacobowitz
2006-02-08 16:28 ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060223182145.GA25411@nevyn.them.org \
    --to=drow@false.org \
    --cc=andrew.stubbs@st.com \
    --cc=bash-maintainers@gnu.org \
    --cc=denis.pilat@st.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox