[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-bash] `read -e -p`, colors, and invisible chars
From: |
Dennis Williamson |
Subject: |
Re: [Help-bash] `read -e -p`, colors, and invisible chars |
Date: |
Wed, 26 Aug 2015 20:42:35 -0500 |
On Aug 26, 2015 8:06 PM, "Mike Frysinger" <address@hidden> wrote:
>
> my desire is simple:
> show a custom colorized prompt when reading input and leverage readline
> (for editing & history)
>
> the `read` builtin almost gets me there:
> - the -p flag allows you to specify a custom prompt
> - the -e flag uses readline for input
>
> however, the -p flag does not parse escape sequences. np, just expand
> that myself ahead of time using `printf %b`. simple example:
> prompt=$(printf '%bfoo>%b ' '\033[1;33m' '\033[0m')
> read -e -p "${prompt}"
>
> now i hit the classic invisible char problem when readline tries to
> redraw the prompt (just hold up on the arrow key to draw many lines
> from your history). normally i'd leverage \[ and \], but bash does
> not seem to support that w/the read builtin -- they get rendered in
> the output directly instead of being consumed.
> $ prompt=$(printf '%bfoo>%b ' '\[\033[1;33m\]' '\[\033[0m\]')
> $ read -e -p "${prompt}"
> \[\]foo>\[\]
> (yes, moving the \[ and \] to the printf string yields same behavior)
>
> am i out of luck ? if so, can we change the behavior of -p to support
> escape sequences naturally ? maybe have it go through the same prompt
> code paths as the bash loop ? e.g. this would "just work":
> read -e -p "$PS1"
>
> if we're worried about breaking existing -p users (who might have an
> escape sequence in there and actually want it), maybe we can add a
> new -P flag ? although i'd say too bad and just put it behind the
> existing bash version compat shopt settings ...
> -mike
Use \001 and \002 instead of \[ and \].