[Bug cli/28887] colored prompt length not calculated correctly

cvs-commit at gcc dot gnu.org sourceware-bugzilla@sourceware.org
Sat Jul 19 15:37:06 GMT 2025


https://sourceware.org/bugzilla/show_bug.cgi?id=28887

--- Comment #10 from Sourceware Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tom de Vries <vries@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cf03713dd1c4ecacc84c9f8a7d805003efa73ae3

commit cf03713dd1c4ecacc84c9f8a7d805003efa73ae3
Author: Tom de Vries <tdevries@suse.de>
Date:   Sat Jul 19 17:37:01 2025 +0200

    [gdb/cli] Document \001 and \002 usage for set prompt

    PR cli/28887 reports the following problem when using a custom prompt.

    First, we set up the custom prompt (with ^ marking the position of the
    blinking cursor on the line above):
    ...
    $ gdb -q -ex "set prompt \033[31mgdb$ \033[0m"
    gdb$
         ^
    ...

    Then we type some string, and enter it into the command history:
    ...
    gdb$ some long command
    âï¸ Undefined command: "some".  Try "help".
    gdb$
         ^
    ...

    We use C-p to fetch the previous command:
    ...
    gdb$ some long command
                          ^
    ...
    Sofar, so good.

    Finally, we use C-a which should move the cursor to just after the prompt,
but
    instead we get:
    ...
    gdb$ some long command
                  ^
    ...

    This is fixed by using \001 and \002:
    ...
    (gdb) set prompt \001\033[31m\002gdb$ \001\033[0m\002
    ...
    aka as RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE [1].

    Add an example to the documentation showing the use of these markers.

    The added example is the equivalent of the "\[\e[0;34m\](gdb)\[\e[0m\]"
    example documented at gdb.prompt.substitute_string that can be used with
    "set extended-prompt".

    While working on this, I noticed that "show prompt" doesn't show back the
    original string, using '\e' instead of '\033':
    ...
    gdb$ show prompt
    Gdb's prompt is "\001\e[31m\002gdb$ \001\e[0m\002".
    ...
    and that the shown string can't be used as an argument to "set prompt":
    ...
    gdb$ set prompt \001\e[31m\002gdb$ \001\e[0m\002
    e[31mgdb$ e[0m
    ...

    I've filed this as PR cli/33184.

    Approved-By: Eli Zaretskii <eliz@gnu.org>

    [1] https://tiswww.case.edu/php/chet/readline/readline.html

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Gdb-prs mailing list