<Left Arrow>
, <Backspace>
, <Delete>
등과 같은 특수 키를 눌러 사용자를 에뮬레이트하려고합니다. curses/terminfo가 터미널에 독립적 인 방법으로 그렇게하는 데 도움이 될 것이라고 들었지만 처음 코드 "text"를 인쇄하고 key_left
시퀀스를 내보내려고하면 (다음 코드 사용) 커서가 나타나지 않습니다 (커서가 '|'
인 경우)) "tex|t"
이지만, 오히려 "textD|"
입니다. 왜? 어떻게 제대로 할 수 있을까요?terminal-agnostic 방식으로 terminfo와 함께 특수 키 시퀀스를 올바르게 인쇄하는 방법은 무엇입니까?
#include <term.h>
#include <stdio.h>
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;
}
curses를 사용해도 괜찮지 만 ncurses는 사용 사례에서 용납되지 않습니다. 또한, 현재 터미널 화면을 공백으로 바꾸는 것과 같은 것을 사용하고 싶지는 않습니다. 바람직한 동작이 아니기 때문에 initscr()
과 같은 것을 사용하고 싶지는 않습니다.
키 시퀀스는 커서 이동 명령이 아닙니다. 그것들을 전혀 출력해서는 안되며 단지 입력에서 그것들을 탐지해야합니다. –
일종의 독자적인 readline을 구현하고 있으며 현재 터미널 유형 및 설정에 따라 시퀀스를 이스케이프 처리하기 위해 편집 명령을 렌더링해야합니다. –
커서를 왼쪽으로 이동하려면'key_left'가 아니라'cursor_left'를 사용하십시오. 더 많은 명령은'man terminfo'를보십시오. –