Как правильно печатать специальные последовательности клавиш с terminfo в терминах-агностик?

Я пытаюсь эмулировать пользователя, нажимая такие специальные клавиши, как , , и т. Д. Я слышал, что curses / terminfo может помочь сделать это терминально-агностическим способом, но когда я пытаюсь (со следующим кодом) печатать первую строку «текст», а затем key_left последовательность key_left , я не получаю (с '|' как курсор) "tex|t" , а скорее "textD|" , Зачем? Как это сделать правильно?

 #include  #include  static void putf(const char *name) { putp(name); fflush(stdout); } int main(int argc, char **argv) { setupterm((char*)0, 1, (int*)0); printf("text"); fflush(stdout); putf(key_left); // hang up until user input fgetc(stdin); return 0; } 

Пожалуйста, обратите внимание, что, несмотря на то, что я пользуюсь проклятиями, ncurses неприемлемо в моем случае использования. Также обратите внимание, что я не хочу использовать что-то вроде initscr() , заменяя текущий экран терминала пустым, это не является желаемым поведением.

Экранирующие последовательности, ответственные за перемещение курсора, и escape-последовательности, связанные со стрелками, обычно различны и не должны использоваться вместо друг друга. В базе данных terminfo первые имеют префикс с cursor а последний – с key .

Таким образом, чтобы переместить курсор влево, нужно использовать putp (cursor_left) , а не putp (key_left) .