binutils-gdb/gdb/tui/tui-io.h
Tom Tromey 9e820dec13 Use a curses pad for source and disassembly windows
This changes the TUI source and disassembly windows to use a curses
pad for their text.  This is an important step toward properly
handling non-ASCII characters, because it makes it easy to scroll
horizontally without needing gdb to also understand multi-byte
character boundaries -- this can be wholly delegated to curses.
Horizontal scrolling is probably also faster now, because no
re-rendering is required.

gdb/ChangeLog
2020-09-27  Tom Tromey  <tom@tromey.com>

	* unittests/tui-selftests.c: Update.
	* tui/tui-winsource.h (struct tui_source_window_base)
	<extra_margin, show_line_number, refresh_pad>: New methods.
	<m_max_length, m_pad>: New members.
	(tui_copy_source_line): Update.
	* tui/tui-winsource.c (tui_copy_source_line): Remove line_no,
	first_col, line_width, ndigits parameters.  Add length.
	(tui_source_window_base::show_source_line): Write to pad.  Line
	number now 0-based.
	(tui_source_window_base::refresh_pad): New method.
	(tui_source_window_base::show_source_content): Write to pad.  Call
	refresh_pad.
	(tui_source_window_base::do_scroll_horizontal): Call refresh_pad,
	not refill.
	(tui_source_window_base::update_exec_info): Call
	show_line_number.
	* tui/tui-source.h (struct tui_source_window) <extra_margin>: New
	method.
	<m_digits>: New member.
	* tui/tui-source.c (tui_source_window::set_contents): Set m_digits
	and m_max_length.
	(tui_source_window::show_line_number): New method.
	* tui/tui-io.h (tui_puts): Fix comment.
	* tui/tui-disasm.c (tui_disasm_window::set_contents): Set
	m_max_length.
2020-09-27 20:30:32 -06:00

59 lines
1.8 KiB
C++

/* TUI support I/O functions.
Copyright (C) 1998-2020 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef TUI_TUI_IO_H
#define TUI_TUI_IO_H
#include "gdb_curses.h"
struct ui_out;
class cli_ui_out;
/* Print the string in the given curses window. If no window is
provided, the command window is used. */
extern void tui_puts (const char *, WINDOW * = nullptr);
/* Print LENGTH characters from the buffer pointed to by BUF to the
curses command window. */
extern void tui_write (const char *buf, size_t length);
/* Setup the IO for curses or non-curses mode. */
extern void tui_setup_io (int mode);
/* Initialize the IO for gdb in curses mode. */
extern void tui_initialize_io (void);
/* Readline callback.
Redisplay the command line with its prompt after readline has
changed the edited text. */
extern void tui_redisplay_readline (void);
/* Enter/leave reverse video mode. */
extern void tui_set_reverse_mode (WINDOW *w, bool reverse);
/* Apply STYLE to the window. */
extern void tui_apply_style (WINDOW *w, ui_file_style style);
extern struct ui_out *tui_out;
extern cli_ui_out *tui_old_uiout;
#endif /* TUI_TUI_IO_H */