public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Hannes Domani <ssbssa@yahoo.de>
To: gdb-patches@sourceware.org
Subject: [PATCHv2 2/2] Add optional full_window argument to TuiWindow.write
Date: Fri, 21 May 2021 16:33:22 +0200	[thread overview]
Message-ID: <20210521143322.1293-2-ssbssa@yahoo.de> (raw)
In-Reply-To: <20210521143322.1293-1-ssbssa@yahoo.de>

To prevent flickering when first calling erase, then write, this new
argument indicates that the passed string contains the full contents of
the window.  This fills every unused cell of the window with a space, so
it's not necessary to call erase beforehand.

gdb/ChangeLog:

2021-05-21  Hannes Domani  <ssbssa@yahoo.de>

	* python/py-tui.c (tui_py_window::output): Add full_window
	argument.
	(gdbpy_tui_write): Parse "full_window" argument.

gdb/doc/ChangeLog:

2021-05-21  Hannes Domani  <ssbssa@yahoo.de>

	* python.texi (TUI Windows In Python): Document "full_window"
	argument.
---
v2:
- Add ChangeLog.
- Describe full_window argument in ouput function comment.
---
 gdb/doc/python.texi |  6 +++++-
 gdb/python/py-tui.c | 20 ++++++++++++++------
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index fa9aa703519..aad480b2a5c 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -5961,10 +5961,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 22f4b0ffd43..97e9de7a00c 100644
--- a/gdb/python/py-tui.c
+++ b/gdb/python/py-tui.c
@@ -111,8 +111,9 @@ class tui_py_window : public tui_win_info
       }
   }
 
-  /* 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;
 }
-- 
2.31.1


  reply	other threads:[~2021-05-21 14:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210521143322.1293-1-ssbssa.ref@yahoo.de>
2021-05-21 14:33 ` [PATCHv2 1/2] Prevent flickering when redrawing the TUI python window Hannes Domani
2021-05-21 14:33   ` Hannes Domani [this message]
2021-05-21 14:35     ` [PATCHv2 2/2] Add optional full_window argument to TuiWindow.write Eli Zaretskii
2021-05-24 14:17     ` Tom Tromey
2021-05-24 14:18     ` Tom Tromey
2021-05-24 14:25       ` Hannes Domani
2021-05-27 18:22         ` Tom Tromey
2021-05-27 18:44           ` Hannes Domani
2021-05-24 14:12   ` [PATCHv2 1/2] Prevent flickering when redrawing the TUI python window Tom Tromey
2021-05-24 15:18     ` Hannes Domani

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210521143322.1293-2-ssbssa@yahoo.de \
    --to=ssbssa@yahoo.de \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).