Je voudrais imiter l'utilisation d'Alfred sur Mac OS X, où si vous essayez d'ouvrir une application après l'avoir recherchée, elle n'ouvrira une nouvelle fenêtre que si le programme n'est pas déjà en cours d'exécution, sinon elle mettra l'accent sur le instance en cours d'exécution de cette application. Est-il possible de changer le comportement par défaut du lanceur pour vérifier cela avant d'ouvrir une nouvelle fenêtre?
16
.desktop
fichiers..desktop
Cependant, si vous remplacez la commande dans le fichier, le clic droit sur l'option Ouvrir avec est rompu.Réponses:
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:
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é pardpkg --get-selections
est en minuscules (il suffit de le lireman wmctrl
et de l'exécuterwmctrl -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 doitUne 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!
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
la source
dpkg --get-selectons
. Le lancement de libreoffice writer en tapant "writer" ne fonctionnera pas, mais vous pouvez créer un lien symbolique vers celui-ci dans votre dossier ~ / bin, / bin ou / usr / bin ou utiliser un alias dans .bashrc ou .profile.1. Dash the Second
Ci-dessous un script qui peut être utilisé comme alternative à Dash, lorsqu'il s'agit d'exécuter des applications comme décrit dans votre question.
Il existe d'une fenêtre avec la même fonctionnalité que Dash; si vous tapez un ou plusieurs caractères de l'application, l'application apparaîtra dans la liste. Appuyez sur Enterpour démarrer ou augmenter l'application, selon qu'elle est déjà en cours d'exécution ou non.
Vous pouvez l'appeler à partir d'une combinaison de touches de raccourci, ou définir une icône dans le lanceur pour l'utiliser de manière similaire à Dash (voir ci-dessous), ou les deux.
Le script
Comment utiliser
Le script doit être
wmctrl
installé:Alors:
dash_alternative.py
Ajoutez-le à une combinaison de touches de raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
Explication
Lorsque le script est exécuté, il répertorie toutes les applications, représentées dans
/usr/share/applications
. Il recherche les.dektop
fichiers, créant une liste de tous les noms d'applications (à partir de la première ligne "Name =") et la commande pour exécuter l'application (à partir de la première ligne "Exec =").Par la suite, une liste Zenity est créée, présentant toutes les applications de manière triée.
Chaque fois qu'une application est sélectionnée, le script regarde dans la liste des processus en cours d'exécution si l'application est en cours d'exécution. Si c'est le cas, la fenêtre correspondante est ouverte. Sinon, une nouvelle instance est ouverte.
Remarques
Pour exécuter le script le 12.04 (puisque la question d'origine a été balisée,
12.04
changez simplement le shebang en#!/usr/bin/env python
et exécutez-le par la commandePour autant que je l'ai testé, le script fonctionne bien. Les commandes et leurs noms de processus (non-) correspondants (par exemple
LibreOffice
<>soffice.bin
), différents types de fenêtres (nautilus
ont plusieurs types de fenêtres différents, en plus des fenêtres "réelles"), plusieurs pids par application (Chromium
,Google-chrome
) peuvent provoquer des exceptions, que j'ai corrigées dans les exemples au dessus. Si quelqu'un rencontre un problème, veuillez le mentionner.2. Supplémentaire: le définir comme une alternative au "vrai" Dash pour exécuter des applications
Enregistrez l'icône ci-dessous (clic droit> sûr comme) sous
dash_alternative.png
Copiez le code ci-dessous dans un fichier vide, enregistrez-le
~/.local/share/applications
sousdash_thesecond.desktop
. Définissez les chemins corrects pour/path/to/dash_alternative.py
(le script) et/path/to/dash_alternative.png
(l'icône)Faites glisser le
.desktop
fichier sur le lanceur:la source
.desktop
fichiers:~/.local/share/applications
. Je pensais que je limiterais la recherche aux applications installées à l'échelle mondiale.Pour le lanceur (le panneau vertical sur le côté gauche de l'écran), c'est déjà le comportement par défaut, car c'est l'interface de changement de tâche.
Pour le tiret (le gros morceau qui s'ouvre lorsque vous cliquez sur le logo Ubuntu), il n'y a aucun moyen de changer le comportement de cette manière, sans une modification vraisemblablement significative du code source lui-même.
Cependant, certaines applications peuvent déjà le faire, car elles sont conçues pour se comporter de cette façon. Cependant, toutes les applications ne sont pas et ne devraient pas nécessairement être implémentées de cette manière.
Cependant, si vous ouvrez la fenêtre étendue avec Super+ Wet commencez à saisir le nom d'une application, les fenêtres de cette application seront les seules affichées.
la source