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: