web-dev-qa-db-fra.com

Puis-je forcer la fenêtre à s'ouvrir par-dessus d'autres fenêtres lorsqu'elle est ouverte par un raccourci clavier?

J'utilise SpaceFM comme gestionnaire de fichiers principal sur Ubuntu. J'ouvre généralement le dossier directement par des raccourcis clavier, par exemple Ctrl+Super+W ouvre mon dossier de travail.

Plus précisément, j'utilise exécuter la commande spacefm -w /home/rasmus/Work/ par le raccourci ci-dessus, avec le -w en s'assurant que SpaceFM ouvre une nouvelle fenêtre.

Cependant, cette nouvelle fenêtre n'est pas toujours ouverte au-dessus de la dernière fenêtre active de l'espace de travail. C'est plutôt ennuyeux, car cela signifie que je dois parfois "creuser" pour la fenêtre nouvellement ouverte.

Donc, ma question est: y a-t-il quelque chose de plus que je peux ajouter à la commande exécutée qui garantira que la nouvelle fenêtre sera ouverte sur le dessus?

Des solutions alternatives dans le même sens sont les bienvenues.

4
Rasmus

Comme spacefm utilisait un processus unique. La nouvelle commande passe simplement le signal au processus en cours et cela crée la nouvelle fenêtre au niveau juste au-dessus de sa dernière fenêtre créée.

Sudo apt-get install wmctrl
  • Avec fonction: Il a un retard de 1sec.

    sfm() { spacefm $* & pid=`pgrep spacefm | head -1`; sleep 1;  wmctrl -i -R `wmctrl -lp | grep " $pid" | tail -1 | awk '{ print $1 }'` }
    
    1. Exécutez spacefm avec les mêmes arguments $* ont été passés à la fonction, & en arrière-plan
    2. pgrep spacefm | head -1 récupère le PID du processus principal qui est dans la tête puis le stocke dans la variable pid
    3. sleep 1 attendre le nouveau processus pour le terminal, pour éviter la levée de deux fenêtres (je ne sais pas pourquoi, essayez de le supprimer)
    4. wmctrl -lp obtenir la liste des fenêtres | grep " $pid" filtrez ceux liés à $pid, | tail -1 filtre la dernière ligne/fenêtre puis | awk '{ print $1 }' filtrer l'ID de fenêtre (WID) qui se trouve dans la première colonne $1
    5. wmctrl -i -R WID Déplacez la fenêtre WID vers le bureau actuel, soulevez la fenêtre et donnez-lui le focus.
  • Avec alias: Cela soulèvera 2 fenêtres la nouvelle en haut mais plus simple.

    alias sfm="wmctrl -i -R \`wmctrl -lp | grep ' $(pgrep spacefm)' | tail -1 | awk '{ print $1 }'\`; spacefm"
    
    1. wmctrl -lp obtenir la liste des fenêtres | grep " $pid" filtrez ceux qui sont liés à spacefm, | tail -1 filtre la dernière ligne/fenêtre puis | awk '{ print $1 }' filtrer l'ID de fenêtre (WID) qui se trouve dans la première colonne $1
    2. wmctrl -i -R WID Déplacez la fenêtre WID vers le bureau actuel, soulevez la fenêtre et donnez-lui le focus.
    3. Exécutez spacefm avec les arguments suivants. La nouvelle fenêtre sera créée en haut.

- Comment utiliser: manière similaire à la commande d'origine.

    sfm -w /home/rasmus/Work/

Références: Veuillez rechercher les pages man.

1
user.dz

C'est une vieille question mais toujours pertinente, je vais donc ajouter une solution alternative.

Cela ressemble à un résultat de la prévention de la mise au point de Compiz, essayant d'empêcher les fenêtres de "voler" la mise au point pendant que vous travaillez ailleurs.

La prévention de la mise au point peut être définie à différents niveaux (par défaut: faible) ou complètement désactivée via le Gestionnaire de paramètres CompizConfig.

S'il n'est pas encore installé, faites-le en exécutant:

Sudo apt-get install compizconfig-settings-manager

Ensuite, exécutez-le avec ccsm, accédez à Options générales, passez à l'onglet Focus & Raise Behavior et modifiez le champ Focus Prevention Level (dans votre cas, vous voudrez probablement Off ).

0
Cedric Reichenbach