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





  • Ok! Danke. Das werde ich gleich mal ausprobieren



  • Es funktioniert!
    Danke


Anmelden zum Antworten