Sunday, November 08, 2009

Crear tu propia "alarmita" rapida en unix

Ok, debería estar estudiando, pero....
Ponía la pava para el mate, me iba a estudiar, y se me hervía el agua! siempre! entonces pensé esta solución: usar un programita en linux para que suene un "ring" después de N minutos.

El problema es que no lo encontré! pero hice el mio en un ratito! Así es como:
hice muchos comanditos

timbre: Lo ejecutás, y hace sonar un timbre
mplayer $HOME/timbre.wav
con-retardo: Llama a sleep, y luego ejecuta un comando pasado por parametro.
sleep $1
shift #shift remueve el primer argumento
$@

con-retardo-bg: Igual que con-retardo, pero lo hace en background.
nohup con-retardo $@ &

Con esos tres comandos alcanza para definir una alarma, "con-retardo-bg TIEMPO timbre" hace sonar una alarma transcurrido el tiempo TIEMPO. Y así defini el comando alarma.

pero yo quería un poquito más, poder hacer click en un icono, que se me abra una ventanita y me pregunte el tiempo, y luego se corra la alarma. Me hubiera bastado un programa que abra una ventana y lea un input y lo imprima por standard error, pero ese programa no existe, asi que defini estos otros comandos:


leer-y-ejecutar: Imprime el primer argumento, luego espera un input del usuario, y luego ejecuta el resto de los argumentos como si fuera un comando pero con el input del usuario al final. Algo así:

nicolas@desktop:~/bin$ leer-y-ejecutar "Ingrese un texto" echo aca se ve el texto lol:
Ingrese un texto
esto es un textoooooo
aca se ve el texto lol: esto es un textoooooo

Y lo definí así:
echo $1
read VAL # lee un valor y lo setea en la variable VAL
shift
$@ $VAL

alarma-window: Abre una terminal que me pregunta el tiempo, y luego ejecuta el programa alarma
gnome-terminal -x leer-y-ejecutar "Tiempo (segundos):" alarma
# abre una terminal que ejecuta el programa y después se cierra


Y eso es todo. puse alarma-window como un icono en mi panel de gnome y ya está, corre al toque!

Este es el código completo no resumido, si te interesa. Como alarma usé este bonito timbre: http://www.freesound.org/samplesViewSingle.php?id=9218

nicolas@desktop:~/bin$ cat timbre
#!/bin/sh
mplayer $HOME/timbre.wav
nicolas@desktop:~/bin$ cat con-retardo
#!/bin/sh
if [ $# -eq 0 ]; then
echo Uso: con-retardo SEGUNDOS-DE-RETARDO comando argumentos...
exit
fi

sleep $1
shift
$@
nicolas@desktop:~/bin$ cat con-retardo-bg
#!/bin/sh
if [ $# -eq 0 ]; then
echo Uso: con-retardo-bg TIEMPO-DE-RETARDO comando argumentos...
exit
fi
nohup con-retardo $@ &

nicolas@desktop:~/bin$ cat alarma
#!/bin/sh
if [ $# -ne 1 ]; then
echo uso: alarma SEGUNDOS
exit
fi

con-retardo-bg $1 timbre

nicolas@desktop:~/bin$ cat leer-y-ejecutar
#!/bin/sh
echo $1
read VAL
shift
$@ $VAL

nicolas@desktop:~/bin$ cat alarma-window
#!/bin/sh
gnome-terminal -x leer-y-ejecutar "Tiempo (segundos):" alarma

No comments: