I am trying to colorize the prompt of an application powered by libedit, but I the color simply does not show up. Any ideas what I'm doing wrong here?
#include <iostream>
#include <histedit.h>
char* prompt(EditLine *e)
{
static char p[] = "\1\033[36m\1:::\1\033[0m\1 ";
return p;
}
int main(int argc, char* argv[])
{
EditLine* el = el_init(argv[0], stdin, stdout, stderr);
el_set(el, EL_PROMPT_ESC, &prompt, '\1');
el_set(el, EL_EDITOR, "vi");
while (1)
{
int count;
char const* line = el_gets(el, &count);
if (count > 0)
std::cout << line;
}
el_end(el);
return 0;
}
Compiled with
clang++ editline.cc -ledit && ./a.out
and shows unfortunately just the uncolored prompt of:
:::
\1 is used as a stop/start literal character, so that seems to be the correct behavior.
EL_PROMPT_ESC, char *(*f)(EditLine *), char c Same as EL_PROMPT, but the c argument indicates the start/stop literal prompt character.
The man page states using
0
to unset the color, but it's a little unclear what they mean.Maybe try the escape sequence like this:
Since the
\1
is possibly terminating the color from being used, whereas\[ ... \]
would be the normal terminators in bash.