public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom de Vries <vries@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] [gdb/tui] Fix fingerprint for cmd-only layout Date: Wed, 31 May 2023 05:39:34 +0000 (GMT) [thread overview] Message-ID: <20230531053934.9B36E3858D20@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9d66d71cdddec9075c6832054ba07e5469aeca84 commit 9d66d71cdddec9075c6832054ba07e5469aeca84 Author: Tom de Vries <tdevries@suse.de> Date: Wed May 31 07:39:31 2023 +0200 [gdb/tui] Fix fingerprint for cmd-only layout I added a cmd-only layout: ... (gdb) tui new-layout cmd cmd 1 ... and set it: ... (gdb) layout cmd ... which gave me the expect result: only the cmd window in the screen. However, after going back to layout src: ... (gdb) layout src ... I got a source window with only one line in it, and the cmd window taking most of the screen. I traced this back to tui_set_layout, where for both the old and the new layout the fingerprint of the cmd window in the layout is taken. If the fingerprint is the same, an effort will be done to preserve the command window size. The fingerprint is "VC" for both the old (cmd) and new (src) layouts, which explains the behaviour. I think this is essentially a bug in the finger print calculation, and it should be "C" for the cmd layout. Fix this by not adding a V or H in the fingerprint if the list size is one. Tested on x86_64-linux. Reviewed-By: Tom Tromey <tom@tromey.com> Diff: --- gdb/testsuite/gdb.tui/new-layout.exp | 9 +++++++++ gdb/tui/tui-layout.c | 2 +- gdb/tui/tui-layout.h | 5 +++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.tui/new-layout.exp b/gdb/testsuite/gdb.tui/new-layout.exp index eaebac88ce1..3085cc36232 100644 --- a/gdb/testsuite/gdb.tui/new-layout.exp +++ b/gdb/testsuite/gdb.tui/new-layout.exp @@ -142,3 +142,12 @@ foreach_with_prefix layout $layouts { "$gdb_prompt\\s+"] } } + +Term::command "layout src" +Term::command "winheight cmd 8" +Term::check_box "before cmd_only: src box in src layout" 0 0 80 15 + +Term::command "layout cmd_only" + +Term::command "layout src" +Term::check_box "after cmd_only: src box in src layout" 0 0 80 15 diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index 50c568fb7d7..159445dc520 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -1101,7 +1101,7 @@ tui_layout_split::layout_fingerprint () const for (auto &item : m_splits) { std::string fp = item.layout->layout_fingerprint (); - if (!fp.empty ()) + if (!fp.empty () && m_splits.size () != 1) return std::string (m_vertical ? "V" : "H") + fp; } diff --git a/gdb/tui/tui-layout.h b/gdb/tui/tui-layout.h index ff354fb7c2f..a6d34851bef 100644 --- a/gdb/tui/tui-layout.h +++ b/gdb/tui/tui-layout.h @@ -111,7 +111,8 @@ public: non-empty string made of 'V' and 'H' characters, followed by a single 'C' character. Each 'V' and 'H' represents a vertical or horizontal layout that must be passed through in order to find the cmd - window. + window. A vertical or horizontal layout of just one window does not add + a 'V' or 'H' character. Of course, layouts are built recursively, so, when called on a partial layout, if this object represents a single window, then either the @@ -119,7 +120,7 @@ public: containing a single 'C' is returned. For object representing layouts, if the layout contains the cmd - window then we will get back a valid fingerprint string (contains 'V' + window then we will get back a valid fingerprint string (may contain 'V' and 'H', ends with 'C'), or, if this layout doesn't contain the cmd window, an empty string is returned. */ virtual std::string layout_fingerprint () const = 0;
reply other threads:[~2023-05-31 5:39 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20230531053934.9B36E3858D20@sourceware.org \ --to=vries@sourceware.org \ --cc=gdb-cvs@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: linkBe 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).