Raccourci clavier / raccourci personnalisé pour ouvrir / mettre en avant une application

11

Je n'imagine pas que cela est intégré au système, mais est-il possible de le faire sans trop de tracas?

Supposons que j'ouvre un programme spécifique avec un raccourci clavier, et lorsque j'appuie à nouveau sur ce raccourci, la fenêtre du programme est mise en avant.

Je veux le faire sur Ubuntu 9.04.

Peut-être avec D-Bus? Des experts?

Mise à jour : voici ce que j'ai fini au cas où cela aiderait quelqu'un:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Certes, cela peut être simplifié, mais je ne suis pas un bashsorcier. De plus, pour que mon exemple fonctionne, j'ai créé un profil personnalisé dans Terminal qui applique un titre unique à la fenêtre afin qu'il puisse être trouvé plus tard. Les possibilités sont infinies!

Ivan
la source
1
Pour cette tâche simple, la méthode de jtb fonctionne mieux, car xdotools génère parfois des erreurs X et wmctrl est plus rapide.
Ivan

Réponses:

10

Le wmctrlprogramme est exactement ce que vous recherchez ( sudo apt-get install wmctrl). Vous pouvez utiliser la wmctrl -a "AppTitle"commande pour mettre l'application au premier plan. wmctrl -llistera toutes les fenêtres disponibles, il devrait donc être facile d'écrire un script shell qui vérifie si votre programme est en cours d'exécution et le lance ou le met en avant. Ensuite, vous pouvez simplement le lier à un raccourci clavier.

Enregistrez d'abord le script suivant quelque part, je vais l'utiliser /home/jtb/code/bringToFront. Il faut deux arguments, le premier est ce que vous tapez sur le terminal pour lancer le programme, le second est une sous-chaîne du titre de la fenêtre du programme. S'il n'y a pas de chaîne unique constante dans le titre, vous devrez faire un peu plus de travail pour trouver la fenêtre du programme.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Avec le script dans votre répertoire actuel, exécutez chmod +x bringToFrontpour rendre le script exécutable. Assurez-vous ensuite que cela fonctionne; pour lancer / focus firefox, vous pouvez exécuter ./bringToFront firefox "Mozilla Firefox".

  2. Maintenant, nous devons lier une touche de raccourci. Exécutez gconf-editoret parcourez la structure de dossiers vers la gauche pour /apps/metacity/keybinding_commands.

  3. Double-cliquez sur le premier commandavec une valeur vide, probablement command_1. Tapez le chemin complet du script et fournissez les deux paramètres, par exemple /home/jtb/code/bringToFront firefox Firefox.

  4. Dans le panneau de gauche, sélectionnez global_keybindingsle dossier suivant vers le haut. Recherchez runprobablement l' entrée correspondant à la commande que vous venez de définir run_command_1. Double-cliquez dessus et saisissez le raccourci clavier que vous souhaitez utiliser. Mettez les modificateurs entre parenthèses, par exemple <Ctrl><Alt>F.

Maintenant Control+ Alt+ Famènera votre fenêtre firefox au premier plan, ou la lancera si elle n'est pas déjà en cours d'exécution.

jtb
la source
Oui, je l'ai découvert il y a quelques minutes, mais je suis allé avec xdotool. Merci!
Ivan
J'ai oublié de mentionner que j'ai également utilisé les raccourcis et commandes globaux dans gconf pour accomplir pleinement l'effet (console Quake d'un pauvre homme!).
Ivan
Ah, oui, je n'ai pas utilisé xdotool moi-même, mais il semble que cela vous donnerait plus de flexibilité. Bon point sur gconf. Comme cela n'est pas évident, je pourrais aussi bien modifier la réponse pour inclure plus de détails pour quiconque souhaite le faire.
jtb
La console Poort Man's Quake? Tu veux dire comme Tilda? freshmeat.net/projects/tilda
prestomation
Oui, j'utilise aussi Tilda, mais je travaille sur plusieurs projets au cours de la semaine, et pour chacun j'ouvre toujours trois ou quatre onglets, donc passer rapidement à la console du projet ("espace de travail") sans encombrer Tilda est très utile pour moi.
Ivan
3

Voici une autre façon de le faire xdotools. Le processus de pop-up est reconnu par la ligne de commande émise pour l'exécuter (aucun fichier pid ou titre de fenêtre unique requis).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi
etuardu
la source
0

La réponse postée par jtb plus tôt est excellente mais parfois vous voudriez faire correspondre les titres exacts (par exemple, vous voulez ouvrir "GitKraken" mais le titre de votre navigateur "GitKraken vs CLI" correspond également à la requête).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Alors maintenant, vous pouvez appeler votre script bringToFront comme suit:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>
Sufian
la source
0

Cette solution n'est pas paramétrée, mais je l'ai utilisée pour mettre au point ou démarrer le calculateur gnome.

L'option -R trouve la fenêtre ou échoue, si elle est trouvée, elle est déplacée vers le bureau actuel, surélevée et mise en évidence. Le gnome-calculator nomme sa fenêtre avec le nom Calculator , il pourrait facilement être paramétré, mais je n'ai jamais trouvé la nécessité de le faire. Je l'ai mappé Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi
X Tian
la source