GDB: Add `NUMBER' completion to `set' integer commands
authorMaciej W. Rozycki <macro@embecosm.com>
Thu, 30 Jun 2022 18:57:34 +0000 (19:57 +0100)
committerMaciej W. Rozycki <macro@embecosm.com>
Thu, 30 Jun 2022 18:57:34 +0000 (19:57 +0100)
Fix a completion consistency issue with `set' commands accepting integer
values and the special `unlimited' keyword:

(gdb) complete print -elements
print -elements NUMBER
print -elements unlimited
(gdb)

vs:

(gdb) complete set print elements
set print elements unlimited
(gdb)

(there is a space entered at the end of both commands, not shown here)
which also means if you strike <Tab> with `set print elements ' input,
it will, annoyingly, complete to `set print elements unlimited' right
away rather than showing a choice between `NUMBER' and `unlimited'.

Add `NUMBER' then as an available completion for such `set' commands:

(gdb) complete set print elements
set print elements NUMBER
set print elements unlimited
(gdb)

Adjust the testsuite accordingly.  Also document the feature in the
Completion section of the manual in addition to the Command Options
section already there.

gdb/NEWS
gdb/cli/cli-decode.c
gdb/doc/gdb.texinfo
gdb/testsuite/gdb.base/settings.exp

index 5576c355b7a7d004a8ae0a46827ee54402616a6b..c4f4a02a7c086d3730bf69129d880218f138e186 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
   emit to indicate where a breakpoint should be placed to break in a function
   past its prologue.
 
+* Completion now also offers "NUMBER" for "set" commands that accept
+  a numeric argument and the "unlimited" keyword.  For example:
+
+   (gdb) set width <TAB>
+   NUMBER     unlimited
+
+  and consequently:
+
+   (gdb) complete set width
+   set width NUMBER
+   set width unlimited
+
 * New commands
 
 maintenance set ignore-prologue-end-flag on|off
index a15283421fef03a3265d096addfd3c3ed4a4ccc4..fde554c7e6cf0a20b8bed67f8e03f7805aa78750 100644 (file)
@@ -989,6 +989,8 @@ integer_unlimited_completer (struct cmd_list_element *ignore,
       NULL,
     };
 
+  if (*text == '\0')
+    tracker.add_completion (make_unique_xstrdup ("NUMBER"));
   complete_on_enum (tracker, keywords, text, word);
 }
 
index 39c49f29edd7f2413697f40d33a47d04e7e1fdf3..f7b02c262b841c15d562d62d71037cb3396c4d2f 100644 (file)
@@ -1960,6 +1960,21 @@ After displaying the available possibilities, @value{GDBN} copies your
 partial input (@samp{b make_} in the example) so you can finish the
 command.
 
+If the command you are trying to complete expects either a keyword or a
+number to follow, then @samp{NUMBER} will be shown among the available
+completions, for example:
+
+@smallexample
+(@value{GDBP}) print -elements @key{TAB}@key{TAB}
+NUMBER     unlimited
+(@value{GDBP}) print -elements@tie{}
+@end smallexample
+
+@noindent
+Here, the option expects a number (e.g., @code{100}), not literal
+@code{NUMBER}.  Such metasyntactical arguments are always presented in
+uppercase.
+
 If you just want to see the list of alternatives in the first place, you
 can press @kbd{M-?} rather than pressing @key{TAB} twice.  @kbd{M-?}
 means @kbd{@key{META} ?}.  You can type this either by holding down a
index dafc5e4d8fdb7a7c6e2dd4e02a9627923d5c6f5d..890a2befc592bd92e60e9bd7f975a8827640a973 100644 (file)
@@ -215,8 +215,14 @@ proc test-integer {variant} {
        test_gdb_complete_none \
            "$set_cmd "
     } else {
+       test_gdb_complete_multiple "$set_cmd " "" "" {
+           "NUMBER"
+           "unlimited"
+       }
+       test_gdb_complete_none \
+           "$set_cmd 1"
        test_gdb_complete_unique \
-           "$set_cmd " \
+           "$set_cmd u" \
            "$set_cmd unlimited"
     }