This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix truncation of TUI command history


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d9080678121a84fc433a5f2ee141ee98512d2167

commit d9080678121a84fc433a5f2ee141ee98512d2167
Author: Patrick Palka <patrick@parcs.ath.cx>
Date:   Tue Feb 10 18:44:56 2015 -0500

    Fix truncation of TUI command history
    
    If we submit a command while the prompt cursor is somewhere other than
    at the end of the command line, the command line gets truncated as the
    command window gets shifted one line up.  This happens because we fail
    to properly move the cursor to the end of the command line before
    transmitting the newline to ncurses.  We need to move the cursor because
    when ncurses outputs a newline it truncates any text that appears
    past the end of the cursor.
    
    The fix is generic enough to work properly even in multi-line secondary
    prompts like the quit prompt.
    
    gdb/ChangeLog:
    
    	* tui/tui-io.c (tui_getc): Move cursor to the end of the command
    	line before printing a newline.

Diff:
---
 gdb/ChangeLog    |  7 ++++++-
 gdb/tui/tui-io.c | 13 ++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fe61d24..2a75cea 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,8 +1,13 @@
+2015-02-11  Patrick Palka  <patrick@parcs.ath.cx>
+
+	* tui/tui-io.c (tui_getc): Move cursor to the end of the command
+	line before printing a newline.
+
 2015-02-11  Mark Wielaard  <mjw@redhat.com>
 
 	* utils.c (producer_is_gcc): Return true or false.
 
-2015-02-04  Mark Wielaard  <mjw@redhat.com>
+2015-02-10  Mark Wielaard  <mjw@redhat.com>
 
 	* utils.h (producer_is_gcc): Change return type to bool. Add major
 	argument.
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index 21b2a00..4083cde 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -627,9 +627,16 @@ tui_getc (FILE *fp)
         }
       else
         {
-          wmove (w, TUI_CMD_WIN->detail.command_info.cur_line,
-                 TUI_CMD_WIN->detail.command_info.curch);
-          waddch (w, ch);
+	  /* Move cursor to the end of the command line before emitting the
+	     newline.  We need to do so because when ncurses outputs a newline
+	     it truncates any text that appears past the end of the cursor.  */
+	  int px = TUI_CMD_WIN->detail.command_info.curch;
+	  int py = TUI_CMD_WIN->detail.command_info.cur_line;
+	  px += rl_end - rl_point;
+	  py += px / TUI_CMD_WIN->generic.width;
+	  px %= TUI_CMD_WIN->generic.width;
+	  wmove (w, py, px);
+	  waddch (w, ch);
         }
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]