Я пытаюсь раскрасить приглашение приложения на питание от libedit, но я просто не вижу цвета. Любые идеи, что я делаю неправильно здесь?Как раскрасить приглашение приложения editline
#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;
}
Собран с
clang++ editline.cc -ledit && ./a.out
и показывает, к сожалению, только неокрашенную подсказку:
:::
Интересно, что '\ 1 \ [\ 033 [36m \] \ 1 ::: \ 1 \ [\ 033 [0m \] \ 1' дал мне приглашение' [] [] ::: 'с внутренней '] [' раскрашивается. Казалось, что '\ 1' завершает окраску. Действительно, использование '' \ 1 \ 033 [36m ::: \ 033 [0m \ 1 "', без escape-символов в середине, дает цветное приглашение! – mavam
Когда я использую цветное приглашение, ключ backspace больше не работает, он печатает только экранированные символы в TTY. Любые идеи, что может быть проблемой здесь? – mavam
Я считаю, что вся эта проблема является ошибкой в libedit. Я связался с Кристосом Зуласом. Я отправлю сообщение, если я получу ответ. – Chewi