Печать текста в два столбца с использованием escape-символов ANSI - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь напечатать одну строку в левой половине терминала, а другую - в правой половине терминала. Я должен добиться этого, используя escape-последовательности ANSI, а не ncurses. Я также хочу убедиться, что ни одно слово не разбито в конце строки. Если в строке недостаточно места для печати слова, я хочу напечатать слово на следующей строке.

Я попытался заменить вызовы перемещения на printf (\ n), а затем с помощью перемещения, чтобы добраться до необходимой половины экрана. Вызов переезда, похоже, полностью игнорируется.

#define clear() printf("\033[H\033[J")

void move(int y, int x)
{
    printf("\033[%d;%dH", y, x);
}

void print_left_right(int cols, char * left, char * right)
{
    clear();
    int cols_end = cols / 2;
    int line = 0;
    int current_pos = 0;
    char * l_split = strtok(left, " ");
    move(0, 0);
    while (l_split != NULL)
    {
        current_pos += (strlen(l_split) + 1); // plus one for space
        if (current_pos >= cols_end)
        {
            line += 1; // <----- doesn't seem to work
            move(line, 0); // <----- seems to work
            current_pos = 0;
        }
        printf("%s ", l_split);
        l_split = strtok(NULL, " ");
    }
    line = 0;
    current_pos = cols_end;
    char * r_split = strtok(right, " ");
    move(0, cols_end);
    while (r_split != NULL)
    {
        current_pos += (strlen(r_split) + 1);
        if (current_pos >= cols)
        {
            ++line;
            move(line, cols_end);
            current_pos = cols_end;
        }
        printf("%s ", r_split);
        r_split = strtok(NULL, " ");
    }
}

Я разбил данные строки на слова, используя strtok, и попытался распечатать его. Если слово не подходит, я ожидал, что переменная строки будет увеличиваться и переходить к другой строке. Однако строковая переменная не увеличивается, и этот код всегда переписывает одну и ту же строку. Как ни странно, движение, кажется, правильно перемещается в правильную половину терминала. Я думаю, я делаю что-то невероятно глупое ...

...