Termcaps подчеркивая изменение характера

В настоящее время я изучаю Termcaps Library и я хочу подчеркнуть линию. Моя проблема, когда я делаю это, мой персонаж становится C, У кого-то есть идея, почему? Я собрал с -lcursesВот как я инициализировал мои termcaps:

void        init_termcaps(t_env *e)
{
    char           *name_term;
    int            ierror[2];

    name_term = getenv("TERM");
    ierror[0] = tgetent(NULL, name_term);
    ierror[1] = tcgetattr(0, &e->term);
    print_termcaps_error(ierror);
    e->term.c_lflag &= ~(ECHO | ICANON);
    e->term.c_cc[VMIN] = 1;
    e->term.c_cc[VTIME] = 0;
    if (tcsetattr(0, TCSANOW, &e->term) == -1)
        ft_printexit("ERROR init termcaps\n", 1);
    else
        ft_putendl("termcaps init done.");
}

и вот как я подчеркнул:

void    underline_line(t_llist *tmp)
{
    int i;

    i = 0;
    tputs(ft_tgetstr("us"), AFFCNT, ft_iputchar);
    while (CONTENT->word[i])
    {
        tputs(ft_tgetstr("kr"), AFFCNT, ft_iputchar);
        i++;
    }
    tputs(ft_tgetstr("ue"), AFFCNT, ft_iputchar);
    while (i-- >= 0)
        tputs(ft_tgetstr("le"), AFFCNT, ft_iputchar);
}

1 ответ

Решение

Ваш пример пытается подчеркнуть существующий текст на экране с помощью

  • включение атрибута подчеркивания
  • перемещая курсор слева направо
  • отключение атрибута подчеркивания

Как правило, терминалы не работают таким образом. Ваш пример должен просто (повторно) напечатать слово, которое будет подчеркнуто, а не перемещать курсор. Атрибуты видео применяются к тексту в том виде, в котором он напечатан, и не могут быть изменены, кроме как путем переписывания текста.

Другие вопросы по тегам