CPR Cursor Position Report
-
Hallo!
Ich versuche gerade, die aktuelle Cursorposition im Terminal zu bestimmen.
Dazu muss man die Ansi Escape Sequenz "\033[6n" mit printf oder write oder sonstige print funktionen auf den Terminal schreiben. Dieser liefert dann einen Text im Format "\033[x;yR" in den Tastaturbuffer, wobei für X und Y die Zahlenwerte eingesetzt werden.
Aber wenn ich dann mit read oder mit getc versuche, aus dem stdin zu lesen, muss ich immer zuerst ENTER drücken, damit mit dem Lesen gestartet wird.
Hat jemand eine Ahnung, wie ich das ausbessern kann?
Hier die Funktion:BOOL ConsoleGetCursorPos(int *x, int *y) { static char buf[9]; //memset(buf, '\0', sizeof(buf)); (void) write(fileno(stdin), "\033[6n", 4); /* only works on ANSI-compatibles */ (void) read(fileno(stdin), (void *)buf, 8); //Hier muss ENTER gedrückt werden, damit gelesen wird /* try to interpret as a position report */ if (sscanf(buf, "\033[%d;%dR", y, x) != 2) { printf("position probe failed\n"); //Nur zum Debug return FALSE; } else printf("position OK : %d, %d\n", *x, *y); //Nur zum Debug return TRUE; }
Danke
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39509.html
mit der getch-Funktion aus der FAQ.
-
Ok! Danke. Das werde ich gleich mal ausprobieren
-
Es funktioniert!
Danke