diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/python.texi | 6 | ||||
-rw-r--r-- | gdb/python/py-tui.c | 20 |
4 files changed, 30 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9d06a77..739e773 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-05-27 Hannes Domani <ssbssa@yahoo.de> + + * python/py-tui.c (tui_py_window::output): Add full_window + argument. + (gdbpy_tui_write): Parse "full_window" argument. + 2021-05-27 Simon Marchi <simon.marchi@polymtl.ca> * make-init-c: Add option to reverse function calls. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 51503a7..2743079 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,5 +1,10 @@ 2021-05-27 Hannes Domani <ssbssa@yahoo.de> + * python.texi (TUI Windows In Python): Document "full_window" + argument. + +2021-05-27 Hannes Domani <ssbssa@yahoo.de> + * python.texi (Symbols In Python): Document gdb.SYMBOL_LOC_LABEL. 2021-05-25 Hannes Domani <ssbssa@yahoo.de> diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 9127b96..23e6ac6 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -5959,10 +5959,14 @@ displayed above the window. This attribute can be modified. Remove all the contents of the window. @end defun -@defun TuiWindow.write (@var{string}) +@defun TuiWindow.write (@var{string} @r{[}, @var{full_window}@r{]}) Write @var{string} to the window. @var{string} can contain ANSI terminal escape styling sequences; @value{GDBN} will translate these as appropriate for the terminal. + +If the @var{full_window} parameter is @code{True}, then @var{string} +contains the full contents of the window. This is similar to calling +@code{erase} before @code{write}, but avoids the flickering. @end defun The factory function that you supply should return an object diff --git a/gdb/python/py-tui.c b/gdb/python/py-tui.c index 22f4b0f..97e9de7 100644 --- a/gdb/python/py-tui.c +++ b/gdb/python/py-tui.c @@ -111,8 +111,9 @@ public: } } - /* Write STR to the window. */ - void output (const char *str); + /* Write STR to the window. FULL_WINDOW is true to erase the window + contents beforehand. */ + void output (const char *str, bool full_window); /* A helper function to compute the viewport width. */ int viewport_width () const @@ -229,12 +230,18 @@ tui_py_window::do_scroll_vertical (int num_to_scroll) } void -tui_py_window::output (const char *text) +tui_py_window::output (const char *text, bool full_window) { if (m_inner_window != nullptr) { + if (full_window) + werase (m_inner_window.get ()); + tui_puts (text, m_inner_window.get ()); - tui_wrefresh (m_inner_window.get ()); + if (full_window) + check_and_display_highlight_if_needed (); + else + tui_wrefresh (m_inner_window.get ()); } } @@ -405,13 +412,14 @@ gdbpy_tui_write (PyObject *self, PyObject *args) { gdbpy_tui_window *win = (gdbpy_tui_window *) self; const char *text; + int full_window = 0; - if (!PyArg_ParseTuple (args, "s", &text)) + if (!PyArg_ParseTuple (args, "s|i", &text, &full_window)) return nullptr; REQUIRE_WINDOW (win); - win->window->output (text); + win->window->output (text, full_window); Py_RETURN_NONE; } |