2012-07-08 7 views
5

Tengo un programa ncurses simple configurado que lee caracteres de uno en uno con getch() y los copia en un búfer. El problema que estoy teniendo es detectar presionar la tecla de retroceso. Aquí está el código correspondiente:Usando el espacio de fondo con ncurses

while((buffer[i] = c = getch()) != EOF) { 
    ++i; 
    if (c == '\n') { 
     break; 
    } 
    else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) { 
     i--; 
     delch(); 
     buffer[i] = 0; 
    } 
    refresh(); 
} 

Pero cuando se trata de ejecutar este código, esto es lo que aparece en la pantalla después de tratar de eliminar caracteres de la línea "esto es una prueba":

this is a test^?^?^? 

y el contenido de buffer son:

this is a test 

Con gDB sé que la sentencia if comprobación de un borrado/retroceso está siendo llamado, así que ¿qué más debo hacer para que pueda eliminar cha racters?

+0

Es 'esto es una prueba ^? ^? ^?' El contenido de 'buffer', ¿o es lo que aparece en la pantalla? De cualquier manera, ¿cuál es el otro? –

+0

'esto es una prueba ^? ^? ^?' Es lo que aparece en la terminal, el buffer contiene 'esto es una prueba '. – Jumhyn

Respuesta

4

Parece que ^? es lo que se repite en la pantalla cuando ingresa un carácter DEL.

Probablemente podría llamar al delch() dos veces, pero luego tendría que averiguar qué caracteres se repiten como secuencias de dos caracteres (o más).

Su mejor opción es, probablemente, llamar al noecho() e imprimir los caracteres usted mismo.

+0

Eso funcionó perfectamente, de hecho hizo que mi código fuera un poco más limpio también. Además, tuve que disminuir 'i' en 2, ya que lo estoy incrementando antes de buscar un retroceso. ¡Gracias! :) – Jumhyn