[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: un caracter



On 5 Mar 2002, Ekeko wrote:

> arturo@ler:~$ echo '#include <stdlib.h>
> > #include <stdio.h>
> > #include <curses.h>
> > 
> > WINDOW *win;
> > 
> > main(){
> >         int ch;
> > 
> >         win=initscr();
> >         noecho();
> >         raw();
> >         cbreak();
> >         keypad(win, TRUE);
> >         ch=getch();
> >         endwin();
> >         printf("%c\n", ch);
> >         /* printf("%d\n", ch); */
> > }' > getc.c
> arturo@ler:~$ cc getc.c -lncurses -o getc
> arturo@ler:~$ a=`echo sdasd | ./getc`
> 
> en a queda:
> $'\E(B\E)0\E[?1049h\E[1;24r\E[m\017\E[4l\E[?7h\E[?1h\E=\E[H\E[2J\E[24;1H\E[?1049l\r\E[?1l\E>s'

En primer lugar getch()  no lee de stdin sino desde la ventana y por lo tanto 
a=`echo sdasd | ./getc` no funcionará correctamente.

En cuanto a los códigos extraños que recibes asegurate de que tienes 
la variable TERM exportable y con valor 'linux'.

El ejemplo no estaba perfecto porque se recibe igualmente la secuencia de 
borrado de la pantalla pero se puede filtrar. En el ejemplo se enviaba un 
caracter y el salto de linea que para lo que tu quieres también sobra.

Sustituye    printf("%c\n", ch); 
      por    printf("%c", ch);

Ahora para usarlo

TECLA=`./getc | tail --bytes=1`

Acabo de probarlo y funciona.

Puedes probar otras cosas que te han comentado tal como 
poner el terminal en modo raw con stty tal como Diego te comentó
pero no olvides que ncurses es la librería ideal para estas cosas.

En mi caso podrías incluso capturar las secuencias formadas por
ESC y otro código ASCII enviadas por teclas de función, flechas etc, 
y te devolverá un código único. keypad(3NCURSES). 

Para ello sería seguramente mejor hacer  printf("%d", ch);

> y yo sólo quiero que reciba un caracter.
> en este caso hay mucho ruido antes del caracter 's' que me interesa.

Ese ruido seguramente es la secuencia de escape para el borrado de la 
pantalla.


Un saludo

Antonio Castro

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        /\     /\      Ciberdroide Informática (Tienda de Linux)
          \\W//            <<< http://www.ciberdroide.com >>>
	 _|0 0|_                                                    
+-oOOO--(___o___)--OOOo----------------------------------------------------+ 
|  . . . . U U . . . . Antonio Castro Snurmacher  acastro@ciberdroide.com  |  
|  . . . . . . . . . .                                                     | 
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>>            |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+




Reply to: