Script para editar el menú de LXPANEL de manera gráfica
Si, ya sé que todos saben editar el menú de lxpanel, pero... ¿no les parece muy poco práctico editarlo a mano?
Esto me llevó a practicar un poco en bash, y el resultado fue un simple script que van a ver más abajo.
Tal vez algunos de ustedes hayan hecho, o encontrado, algún script para editarlo rapidamente, pero como no encontré ninguno y hay muchos novatos que no saben nada de bash, quise compartirlo con ustedes.
En resúmen, lo que hace el script es editar los archivos con extensión ".desktop" que están en el directorio "/usr/share/applications", y cambia el valor de la variable "NoDisplay" de cada uno, si esta variable no se encuentra, la agrega en la última línea del archivo. Todo esto lo controlamos mediante una caja de diálogos hecha en zenity (tienen que tenerlo instalado).
Obviamente, para editar los archivos hay que ejecutar el script como administrador.
sudo sh lxmenu-editor
EDIT: Dejo el link de pastebin porque algunos tuvieron problemas al copiarlo desde acá.
Los invito a mirar el código. Correcciones o críticas constructivas son bienvenidas
#!/bin/bash
RUTA=(/usr/share/applications/*.desktop)
CONTADOR=0
IFS=":"
for i in "${RUTA[@]}"
do
ACTUAL=${RUTA[$CONTADOR]}
VERIFICAR=$(cat $ACTUAL | awk '/NoDisplay/ {print "1"}' )
if [ "$VERIFICAR" != "1" ]; then
printf "n" >> $ACTUAL ; printf "NoDisplay=false" >> $ACTUAL
fi
let CONTADOR=$CONTADOR+1
done
CONTADOR=0
for b in "${RUTA[@]}"
do
ACTUAL=${RUTA[$CONTADOR]}
ARCHIVO=$(echo $ACTUAL | sed "s#/usr/share/applications/#""#")
INVALOR=$(cat $ACTUAL | awk -F"=" '/NoDisplay/ {print $2} ' )
if [ "$INVALOR" = "true" ]; then
echo "+ false +" >> lxcheckbox.txt
fi
if [ "$INVALOR" = "false" ]; then
echo "+ true +" >> lxcheckbox.txt
fi
sed -e '$s#$# '$ARCHIVO# -i lxcheckbox.txt
let CONTADOR=$CONTADOR+1
done
REMOVER=$(cat lxcheckbox.txt | tr -d ' n' | sed -e "s#+# #g")
echo $REMOVER > lxcheckbox.txt
CHECKBOX=$(cat lxcheckbox.txt)
OPCION=$(eval zenity --title="Edita el menú de LXPANEL" --width=300 --height=550 --list --checklist --multiple --column="Mostrar" --column="Item" $CHECKBOX --separator=":" )
OPCION1=($OPCION)
CONTADOR=0
CONTADOR1=0
ENCONTRADO=0
if [ "$OPCION1" != "" ]; then
for c in "${RUTA[@]}"
do
ACTUAL=${RUTA[$CONTADOR]}
ARCHIVO=$(echo $ACTUAL | sed "s#"/usr/share/applications/"#""#")
VALOR=$(cat $ACTUAL | awk -F"=" '/NoDisplay/ {print $2} ' | sed -e "s# #""#g" )
for d in "${OPCION1[@]}"
do
OPCION2=${OPCION1[$CONTADOR1]}
if [ "$OPCION2" = "$ARCHIVO" ]; then
ENCONTRADO=1
fi
let CONTADOR1=$CONTADOR1+1
done
if [ "$ENCONTRADO" = "1" -a "$VALOR" = "true" ]; then
sed -e 's/NoDisplay=true/NoDisplay=false/g' -i "$ACTUAL"
fi
if [ "$ENCONTRADO" = "0" -a "$VALOR" = "false" ]; then
sed -e 's/NoDisplay=false.*/NoDisplay=true/g' -i "$ACTUAL"
fi
ENCONTRADO=0
CONTADOR1=0
let CONTADOR=$CONTADOR+1
done
fi
rm lxcheckbox.txt
Propia