Pages : 1
#1 Le 15/01/2007, à 22:37
- simonishe
Génération automatique de lanceur sur le panneau
Bonjour à tous,
Est-ce que quelqu'un connaîtrait un moyen automatique de générer un lanceur sur le panneau
pour une application ? Dans gnome on fait clic-droit, puis on choisit une application, sans avoir à rentrer soi-même le chemin et le nom de l'icône. Je n'arrive pas à trouver une fonctionnalité similaire avec xfce.
En attendant une meilleure option, j'ai fait un petit script, qui marche pas mal chez moi.
Il cherche les fichiers .desktop sur le système. Marche mieux si on a le paquet menu-xdg installé.
On le lance en disant par exemple : xfdesktop2panel application (application=abiword,mc, etc.)
Si xfce4-panel est présent au moment de l'exécution, mon script l'arrête et le relance après. Le seul problème, c'est qu'on doit peut-être faire un ctrl-alt-backspace pour sortir de la session X. Il faudrait envoyer un message à xfce4-panel, ce serait plus compliqué à faire. N'ai pas le courage de me plonger dans dbus...
Mais si quelqu'un veut le faire, je serais ravi !
J'attends les commentaires éventuels.
A bientôt
#!/bin/bash
# Ajoute une application dans le panneau xfce, d'après un fichier xdg-desktop,
# ou en cherchant lui-meme dans les fichiers .desktop
# usage xfdesktop2panel [fichier.desktop | nom_application]
# exemple : xfdesktop2panel abiword
# xfdesktop2panel /usr/share/applications/abiword.desktop
# 0.0.20070115b
# 14/01/2007
# (C) Simon
#besoin sed, awk grep, md5sum, killall, find, basename
TMP=/tmp/desktop$$
mkdir -p $TMP || exit 1
ISRUNNING=0
SOURCE=""
EXECUTABLE=""
if [ -e "$1" ] ; then
SOURCE="$1"
else
EXECUTABLE="`which \"$1\"`"
if [ -n "$EXECUTABLE" ] ; then
for i in `find /usr/share/applications/ -name "*.desktop"` \
`find /var/lib/menu-xdg/applications/ -name "*.desktop"` ; do
grep -q -e "^Exec=$EXECUTABLE" -e "^Exec=`basename $EXECUTABLE`" \
"$i" && echo "$i" >>$TMP/desktopfiles
done
if [ -s $TMP/desktopfiles ] ; then
SOURCE="`sed -e '1!d' $TMP/desktopfiles`"
fi
fi
fi
if [ -e "$SOURCE" ] ; then
GREP="`sed -e '1!d' "$SOURCE" | grep -e '\[Desktop Entry\]'`"
if [ -n "$GREP" ] ; then
RUNNING=`ps -C xfce4-panel -o pid | sed -e '2!d'`
if [ -n "$RUNNING" ] ; then
echo "xfce4-panel déjà présent, arret temporaire" >&2
ISRUNNING=1
RELANCE="`ps -p $RUNNING -o cmd | sed -e '2!d'`"
killall -9 xfce4-panel
fi
sed -e 's/^\[Desktop Entry\]/[Entry 0]/' -e '/Type=Application/d' \
"$SOURCE" >$TMP/source
MDS=`md5sum $TMP/source | awk '{print $1}'`
cp $TMP/source ~/.config/xfce4/panel/launcher-$MDS.rc
PANELS=~/.config/xfce4/panel/panels.xml
NOLIGNE=`grep -n -e '<item name="launcher" id="' $PANELS |\
awk '{print $1}' | sed -e '$!d' -e 's/:.*$//'`
if [ -z "$NOLIGNE" ] ; then
NOLIGNE=`grep -n -e '<item name="xfce4-menu" id="' $PANELS |\
awk '{print $1}' | sed -e '1!d' -e 's/:.*$//'`
fi
if [ -z "$NOLIGNE" ] ; then
NOLIGNE=`grep -n -e '<items>' $PANELS |\
awk '{print $1}' | sed -e '1!d' -e 's/:.*$//'`
fi
sed -e "${NOLIGNE}a\
<item name=\"launcher\" id=\"$MDS\" \/>" \
$PANELS >$TMP/panels
mv $TMP/panels $PANELS
fi
fi
rm -r -f $TMP
if [ $ISRUNNING -eq 1 ] ; then
exec $RELANCE
fi
exit
Hors ligne
Pages : 1