Mise à jour du 7 avril: Une version différente ajoutée et trouvée Albert, voir mise à jour et Bonus ci-dessous !!!
Concernant la fonctionnalité de tiret : Vous avez demandé " Est-il possible de changer le comportement par défaut du lanceur pour vérifier cela avant d'ouvrir une nouvelle fenêtre ". La réponse de base est, non, en tant qu'utilisateur régulier, vous n'avez aucun moyen d'ajouter ce comportement au tiret. Cependant, s'il y avait un développeur de portée unitaire qui serait disposé à mettre en œuvre cela, vous pouvez les approcher ou en développer un vous-même si vous êtes résolu et disposé à apprendre. Mes compétences en codage sont très modestes, c'est pourquoi j'utilise le script shell et le frontal graphique disponible pour les scripts comme solution de contournement.
Information connexe
Message d'origine:
J'ai écrit un script qui utilise le dialogue zenity et wmctrl pour réaliser ce que vous avez demandé. Notez qu'il s'agit d'un script graphique, ce qui signifie qu'il ne fonctionnera qu'avec Windows, dans l'interface graphique, et ne fonctionnera pas si vous essayez de lancer quelque chose dans tty. D'ailleurs, d'après ce que je comprends, Alfred fait exactement la même chose. Vous pouvez y créer un raccourci sur le bureau ou un raccourci de lancement, comme décrit ici et ici .
Le script:
#!/bin/bash
# Author: Serg Kolo
# Description: A launcher script that checks whether
# or not a window of a particular program already exists
# If a window of such program is open, bring it to focus
# Otherwise - launch a new window
# Written for /ubuntu//q/440142/295286
# Date: April 6 , 2015
#
MYPROG=$( zenity --entry --title='MY LAUNCHER' --text='Type the name of application to run' )
sleep 0.5
wmctrl -lx | awk '{print $3}' | grep -i "$MYPROG"
if [ $? -eq 0 ]; then
sleep 1
wmctrl -xa $MYPROG
#as an alternative try the line bellow
#wmctrl -a $MYPROG
exit 1
else
$MYPROG &
exit 0
fi
Notes annexes: dans la version précédente, le script utilisait echo $ ?, pour tester si les expressions précédentes se terminaient correctement. Selon la suggestion de muru (de l'édition), j'ai changé le code pour une version un peu plus compacte, donc je vous suggère de jeter un œil à la version précédente et à la version actuelle.
En outre, auparavant wmctrl -a $MYPROG
, ne fonctionnait pas avec les tests google-chrome ou chrome-browser; pour une raison stupide, certains programmes ont la propriété WM_CLASS de la fenêtre en majuscule, tandis que le programme tel que répertorié par dpkg --get-selections
est en minuscules (il suffit de le lire man wmctrl
et de l'exécuter wmctrl -lx
, vous le saurez). L'ajout de -ax devrait prendre soin de cela. Le script affiche la fenêtre de chrome déjà ouverte comme il se doit
Une autre chose - wmctlr est quelque peu bizarre dans la mesure où il a parfois besoin d'un délai (avait de l'expérience avec un autre script), donc j'ai dû ajouter une sleep 1
ligne. Auparavant, il était en quelque sorte allumé et éteint avec Firefox, mais fonctionne maintenant à merveille.
Le script en action
Dans l'animation ci-dessous, vous pouvez voir que lors de la première exécution du script, il y a une instance de firefox ouverte, et le script bascule sur cette fenêtre; lors du deuxième test, j'ouvre une nouvelle instance de google-chrome, qui n'a pas été ouverte auparavant. (Remarque: si vous êtes curieux au sujet du bureau, soit dit en passant, c'est openbox avec dock cairo)
Par suggestion dans les commentaires, animation intégrée supprimée, lien publié uniquement. Signalez s'il est cassé s'il vous plaît!
http://i.stack.imgur.com/puuPZ.gif
Mise à jour, 7 avril
J'ai quelque peu amélioré le script pour rendre tous les programmes répertoriés dans la zone de liste déroulante de zenity. Maintenant, l'utilisateur n'a plus à mémoriser chaque programme, mais peut simplement faire défiler une liste d'entre eux à l'aide des touches fléchées ou simplement ouvrir le menu déroulant. De plus, cette version améliorée lève les fenêtres non pas par nom, mais par identifiant de fenêtre, ce qui donne de bien meilleures performances. Remarque, la façon dont je parcours les fichiers .desktop est un peu redondante, en utilisant la commande cut deux fois, mais comme mon script-fu n'est pas si bon jusqu'à présent, c'est tout ce que je peux faire. Les suggestions d'amélioration sont les bienvenues!
#!/bin/bash
# Author: Serg Kolo
# Description: Second version of a launcher script that checks whether
# or not a window of a particular program already exists
# If a window of such program is open, bring it to focus
# Otherwise - launch a new window
# Written for /ubuntu//q/440142/295286
# Date: April 7 , 2015
#
set -x
MYPROG=$(zenity --entry --text 'Select program from list' --entry-text $(ls /usr/share/applications/*.desktop | cut -d'/' -f5 | cut -d'.' -f1 | xargs echo))
sleep 0.5
# Do we have a window of such program ?
wmctrl -lx| awk '{print $3}' | grep -i $MYPROG
if [ $? -eq 0 ]; then
sleep 0.5 # if yes, find that window id, and raise it
WINID=$(wmctrl -lx | grep -i $MYPROG | awk 'NR==1{print $1}')
wmctrl -ia $WINID &
# exit 0
else
echo $MYPROG | grep -i libreoffice
if [ $? -eq 0 ]
then
MYPROG=$(echo $MYPROG | sed 's/-/ --/g')
fi
$MYPROG &
# exit 0
fi
Prime:
J'ai en fait trouvé Albert , qui est la version Linux d'Alfred, mais je ne l'ai pas essayé moi-même. Cela vaut la peine de vérifier cependant. Cependant, comme Jacob l'a déjà noté, il est toujours buggé.
Il existe une application appelée Gnome-Do, qui ressemble graphiquement à Alfred, mais elle n'a pas les mêmes fonctionnalités que ce script.
Faites-moi savoir si vous aimez ce script, s'il y a quelque chose à corriger, et n'oubliez pas de voter pour la réponse si vous le trouvez utile