public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Use less horizontal space in source window
@ 2019-08-16  2:36 Tom Tromey
  2019-08-16 13:24 ` Andrew Burgess
  2019-08-16 13:55 ` Pedro Alves
  0 siblings, 2 replies; 6+ messages in thread
From: Tom Tromey @ 2019-08-16  2:36 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

The source window currently uses a field width of 6 for line numbers,
and it further aligns to the next tab stop.

This seemed a bit wasteful of horizontal space to me.  This patch
changes the TUI to compute the maximum field width needed for the
current source file, and to only add a single space after the line
number.  Line numbers are now right justified, as well, which I think
also looks better visually when scrolling.

gdb/ChangeLog
2019-08-15  Tom Tromey  <tom@tromey.com>

	* tui/tui-source.c (tui_set_source_content): Compute width of line
	numbers.
	* tui/tui-source.c (copy_source_line): Add "ndigits" parameter.
	Emit fewer spaces between line number and text.
---
 gdb/ChangeLog        |  7 +++++++
 gdb/tui/tui-source.c | 29 ++++++++++++++++++-----------
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 3d88f66d549..e43b8381fe5 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -37,22 +37,22 @@
 #include "tui/tui-source.h"
 #include "gdb_curses.h"
 
+#include <math.h>
+
 /* A helper function for tui_set_source_content that extracts some
-   source text from PTR.  LINE_NO is the line number; FIRST_COL is the
-   first column to extract, and LINE_WIDTH is the number of characters
-   to display.  Returns a string holding the desired text.  */
+   source text from PTR.  LINE_NO is the line number; NDIGITS the
+   number of digits to use for printing; FIRST_COL is the first column
+   to extract, and LINE_WIDTH is the number of characters to display.
+   Returns a string holding the desired text.  */
 
 static std::string
-copy_source_line (const char **ptr, int line_no, int first_col,
-		  int line_width)
+copy_source_line (const char **ptr, int line_no, int ndigits,
+		  int first_col, int line_width)
 {
   const char *lineptr = *ptr;
 
   /* Init the line with the line number.  */
-  std::string result = string_printf ("%-6d", line_no);
-  int len = result.size ();
-  len = len - ((len / tui_tab_width) * tui_tab_width);
-  result.append (len, ' ');
+  std::string result = string_printf ("%*d ", ndigits, line_no);
 
   int column = 0;
   char c;
@@ -141,8 +141,10 @@ tui_set_source_content (tui_source_window_base *win_info,
       nlines = (line_no + (win_info->height - 2)) - line_no;
 
       std::string srclines;
+      const std::vector<off_t> *offsets;
       if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines,
-					    &srclines))
+					    &srclines)
+	  || !g_source_cache.get_line_charpos (s, &offsets))
 	{
 	  if (!noerror)
 	    {
@@ -172,6 +174,11 @@ tui_set_source_content (tui_source_window_base *win_info,
 	  win_info->start_line_or_addr.loa = LOA_LINE;
 	  cur_line_no = win_info->start_line_or_addr.u.line_no = line_no;
 
+	  double l = log10 (offsets->size ());
+	  int digits = (int) l;
+	  if (l > digits)
+	    ++digits;
+
 	  const char *iter = srclines.c_str ();
 	  win_info->content.resize (nlines);
 	  while (cur_line < nlines)
@@ -181,7 +188,7 @@ tui_set_source_content (tui_source_window_base *win_info,
 
 	      std::string text;
 	      if (*iter != '\0')
-		text = copy_source_line (&iter, cur_line_no,
+		text = copy_source_line (&iter, cur_line_no, digits,
 					 win_info->horizontal_offset,
 					 line_width);
 
-- 
2.17.2

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-08-20 22:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-16  2:36 [PATCH] Use less horizontal space in source window Tom Tromey
2019-08-16 13:24 ` Andrew Burgess
2019-08-16 13:55 ` Pedro Alves
2019-08-19 12:09   ` Ruslan Kabatsayev
2019-08-20 22:27     ` Tom Tromey
2019-08-20 22:28   ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).