Este es uno de los capítulos del tutorial Diálogos para scripts. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.
En el primer capítulo de este tutorial sobre diálogos para scripts viste las posibilidades que te ofrece la herramienta dialog
, para crear diálogos en el terminal. Esto te puede venir perfecto para crear una interfaz para tu script que corra en un servidor. Sin embargo, para un usuario que no quiera recurrir al terminal, o para ti, que no quieras ejecutar ese script en el terminal, no es la mejor solución. Así, en este nuevo capítulo de este tutorial, te voy a mostrar una primera herramienta que te permite crear diálogos para tus scripts pero con interfaz gráfica, y sin la necesidad de recurrir al terminal, que era inicialmente, el objetivo de este tutorial. En este caso, propongo implementar diálogos con gxmessage.
Diálogos con gxmessage
La segunda de las herramientas que te propongo para crear diálogos es gxmessage. Aunque, con interfaz gráfica sería realmente la primera, pero esto es entrar en disquisiciones filosóficas que no llevan a ninguna parte.
Lo primero es indicarte que esta herramienta no te va a dar todas las posibilidades que te ofrece dialog
, pero como contrapartida, te ofrece esa interfaz gráfica que probablemente si necesites, y el resto lo puedes aportar tu, con un poco (o mucho) de programación.
Instalación
Lo primero que necesitarás para poder empezar a utilizar esta herramienta, es instalarla. Pero no te tienes que preocupara de nada, porque esta aplicación se encuentra disponible en los repositorios oficiales de la mayoría de las distribuciones, con lo que para instalarla, en el caso de Ubuntu, solo tienes que ejecutar la siguiente instrucción,
sudo apt install gxmessage
Ya lo tienes a partir de aquí a empezar a utilizar esta herramienta, y sobre todo a empezar a disfrutar de la misma
Un diálogo sencillo
Siguiendo los ejemplos que te mostré en el capítulo sobre dialog
, en este capítulo, intentaré reproducir los mismos ejemplos, o al menos los que esta herramienta ofrezca, para que veas las similitudes y diferencias entre una herramienta. De esta manera, podrás elegir entre las opciones que tienes a tu alcance y utilizar la que mas te interesa en cada momento.
Así el primer ejemplo, es el siguiente,
gxmessage --title "https://atareao.es" \
--center \
"Este es el mensaje que se muestra"
En este caso he utilizado la opción --center
para centrar el cuadro de diálogo en la pantalla. Siempre me ha parecido mucho mas elegante así, pero entiendo que esto va a gustos.
Preguntando al usuario
El siguiente paso es poder preguntar al usuario y esperar una respuesta. A continuación, en función de la respuesta, que nuestro script actúe en consecuencia. Por ejemplo,
gxmessage --title "https://atareao.es" \
--center \
--buttons "Si:0,No:1" \
"¿Quiere continuar?"
ans=$?
echo $ans
if [ $ans -eq 0 ]
then
echo "Respondió si"
else
echo "Respondió no"
fi
Diálogo para introducir texto
Al igual que hicimos en el capítulo sobre la herramienta dialog
, en este capítulo, vamos a preguntar al usuario por su nombre. Por ejemplo,
respuesta=$(gxmessage --title "https://atareao.es" \
--center \
--entry \
"¿Cual es tu nombre?")
echo "Tu nombre es: $respuesta"
Ahora bien, de esta forma no das posibilidad al usuario a que no responda nada. Tiene que responder a la pregunta. Para poder dar esta posibilidad, de nuevo tienes que recurrir a la opción --buttons
. Por ejemplo,
respuesta=$(gxmessage --title "https://atareao.es" \
--center \
--entry \
--buttons "Si:0,No:1" \
"¿Cual es tu nombre?")
ans=$?
if [ $ans -eq 0 ]
then
echo "Tu nombre es: $respuesta"
else
echo "No respondió a la pregunta formulada"
fi
¿Y si quisieras que se mostrara un texto por defecto? En ese caso, en lugar de utilizar la opción --entry
, tienes que introducir la opción --entrytext <defecto>
. Donde el texto que poner a continuación es el texto que se mostrará por defecto.
Un cuadro de diálogo para seleccionar una opción
Hasta aquí has podido ver las opciones que ofrece gxmessage
para obtener respuesta del usuario. Como ves tienes pocas opciones. El resto, como te comentaba anteriormente, lo tienes que resolver con ingenio o a base de implementar código. Es posible, que para cuestiones mas complicadas tengas que utilizar algunas de las opciones que te mostraré en los siguientes capítulos del tutorial.
Sin embargo, es mas o menos sencillo mostrar un cuadro de diálogo para que el usuario pueda seleccionar una opción, en este caso, podrías hacerlo como te muestro a continuación,
gxmessage --title "https://atareao.es" \
--center \
--buttons "Personal:1,Profesional:2,Otro:3" \
"Elige una opción"
ans=$?
if [ $ans -eq 1 ]
then
echo "Personal"
elif [ $ans -eq 2 ]
then
echo "Profesional"
elif [ $ans -eq 3 ]
then
echo "Otro"
else
echo "No ha respondido"
fi
Mostrar el contenido de un archivo
Si lo que quieres es mostrar el contenido de un archivo, puedes utilizar la opción -file <nombre-del-archivo>
, tal y como te muestro en el siguiente ejemplo,
gxmessage --title "https://atareao.es" \
--center \
--file "contenido.txt" \
--buttons "Continuar:0,Cancelar:1"
ans=$?
echo $ans
if [ $ans -eq 0 ]
then
echo "Respondió si"
else
echo "Respondió no"
fi
Esperar un tiempo
Otra opción que tienes es la de cerrar el cuadro de diálogo transcurrido un tiempo. Esta opción, puede ser para dar una respuesta por defecto. En este caso, cuando se cierra por timeout
el valor que se obtiene es siempre 0
. Esto lo tienes que tener muy en cuenta para tus scripts. Por ejemplo, adaptando el caso anterior, y añadiendo la opción del tiempo tendrías lo siguiente,
gxmessage --title "https://atareao.es" \
--center \
--file "contenido.txt" \
--timeout 3 \
--buttons "Continuar:0,Cancelar:1"
En el caso de que se alcanzaran los 3
segundos del ejemplo $?
devolvería 0
.
Otras opciones interesantes
Otras opciones interesantes que deberías tener en cuenta a la hora de utilizar gxmessage,
son las siguientes,
--nearmouse
. En este caso el cuadro de diálogo se mostrará cerca del ratón, siempre y cuando no tengas también la opción--center
, en cuyo caso, prevalecerá la opción de centrar el cuadro de diálogo en la pantalla en la que te encuentres.--borderless
. Esta opción te mostrará el cuadro de diálogo sin bordes.--ontop
. Mantendrá el cuadro de diálogo encima de todas las ventanas que tengas en el escritorio.--nofocus
. Esto te permite mostrar el cuadro de diálogo pero sin centrar el foco en el mismo.
Conclusiones
Como ves las opciones que te ofrece gxmessage son bastante mas reducidas de las que viste con dialog
. Sin embargo, en determinadas circunstancias, con estas pocas opciones tienes mas que suficientes. No se trata de una tener una herramienta que pueda hacer cualquier cosa. Se trata de tener la herramienta que lo que hace lo hace bien.
De cualquier forma, si esta herramienta se te queda corta, y necesitas una herramienta con mas opciones, pero que sea también para tu entorno de escritorio, no te preocupes, que en los próximos capítulos del tutorial llegaremos a ellas.
Imagen de portada de Ales Nesetril en Unsplash