From 62f29fda90cf1d5a1899f57ef78452471c707fd6 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 9 Oct 2018 22:21:05 -0600 Subject: Highlight source code using GNU Source Highlight This changes gdb to highlight source using GNU Source Highlight, if it is available. This affects the output of the "list" command and also the TUI source window. No new test because I didn't see a way to make it work when Source Highlight is not found. gdb/ChangeLog 2018-12-28 Tom Tromey * utils.h (can_emit_style_escape): Declare. * utils.c (can_emit_style_escape): No longer static. * cli/cli-style.c (set_style_enabled): New function. (_initialize_cli_style): Use it. * tui/tui-winsource.c (tui_show_source_line): Use tui_puts. (tui_alloc_source_buffer): Change how source lines are allocated. * tui/tui-source.c (copy_source_line): New function. (tui_set_source_content): Use source cache. * tui/tui-io.h (tui_puts): Update. * tui/tui-io.c (tui_puts_internal): Add window parameter. (tui_puts): Likewise. (tui_redisplay_readline): Update. * tui/tui-data.c (free_content_elements): Change how source window contents are freed. * source.c (forget_cached_source_info): Clear the source cache. (print_source_lines_base): Use the source cache. * source-cache.h: New file. * source-cache.c: New file. * configure.ac: Check for GNU Source Highlight library. * configure: Update. * config.in: Update. * Makefile.in (SRCHIGH_LIBS, SRCHIGH_CFLAGS): New variables. (INTERNAL_CFLAGS_BASE): Add SRCHIGH_CFLAGS. (CLIBS): Add SRCHIGH_LIBS. (COMMON_SFILES): Add source-cache.c. (HFILES_NO_SRCDIR): Add source-cache.h. --- gdb/tui/tui-winsource.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'gdb/tui/tui-winsource.c') diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 0bf7438..00b4b9e 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -31,6 +31,7 @@ #include "tui/tui.h" #include "tui/tui-data.h" +#include "tui/tui-io.h" #include "tui/tui-stack.h" #include "tui/tui-win.h" #include "tui/tui-wingeneral.h" @@ -277,8 +278,9 @@ tui_show_source_line (struct tui_win_info *win_info, int lineno) if (line->which_element.source.is_exec_point) wattron (win_info->generic.handle, A_STANDOUT); - mvwaddstr (win_info->generic.handle, lineno, 1, - line->which_element.source.line); + wmove (win_info->generic.handle, lineno, 1); + tui_puts (line->which_element.source.line, + win_info->generic.handle); if (line->which_element.source.is_exec_point) wattroff (win_info->generic.handle, A_STANDOUT); @@ -595,7 +597,6 @@ tui_update_exec_info (struct tui_win_info *win_info) enum tui_status tui_alloc_source_buffer (struct tui_win_info *win_info) { - char *src_line_buf; int i, line_width, max_lines; /* The window width/height includes the highlight box. Determine actual @@ -603,20 +604,14 @@ tui_alloc_source_buffer (struct tui_win_info *win_info) max_lines = win_info->generic.height - 2; line_width = win_info->generic.width - 2 + 1; - /* - * Allocate the buffer for the source lines. Do this only once - * since they will be re-used for all source displays. The only - * other time this will be done is when a window's size changes. - */ + /* Allocate the buffer for the source lines. */ if (win_info->generic.content == NULL) { - src_line_buf = (char *) - xmalloc ((max_lines * line_width) * sizeof (char)); /* Allocate the content list. */ win_info->generic.content = tui_alloc_content (max_lines, SRC_WIN); for (i = 0; i < max_lines; i++) win_info->generic.content[i]->which_element.source.line - = src_line_buf + (line_width * i); + = (char *) xmalloc (line_width); } return TUI_SUCCESS; -- cgit v1.1