Raccourci clavier «Application ciblée» dans Lubuntu (LXDE)

6

Dans Unity, appuyez sur Super + 1 pour activer 9 ou activer le focus sur une application. Puis-je attribuer un raccourci clavier avec une propriété similaire dans Lubuntu (c'est-à-dire dans LXDE)?

Plus précisément, puis-je configurer un raccourci de sorte que si l'application est déjà ouverte, le focus est activé et que l'espace de travail change en conséquence (comme dans Unity)? Jusqu'à présent, je n'ai réussi qu'à attribuer un raccourci qui lance (une nouvelle instance de) l'application.

    
posée DustByte 05.08.2014 - 11:27
la source

1 réponse

7

Openbox (le gestionnaire de fenêtres de LXDE) n’a pas de fonctionnalité intégrée, mais avec un peu d’aide de la part de xdotool nous pouvons écrire un script qui peut répliquer et même améliorer le comportement de Unity.

Tout d'abord, assurez-vous que xdotool est installé:

sudo apt-get install xdotool

Enregistrez le script suivant sous le nom de focus_or_launch et rendez-le exécutable:

 #!/bin/bash

# NAME:         focus_or_launch
# VERSION:      0.4
# AUTHOR:       (c) 2014 Glutanimate <https://github.com/Glutanimate/>
#
# DESCRIPTION:  Focus existing app window or launch application if no
#               window found
#
#               Simplified version of a script by Henning Bekel
#               (https://bbs.archlinux.org/viewtopic.php?pid=625009#p625009)
#
# DEPENDENCIES: xdotool
#
# LICENSE:      GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)
#
# NOTICE:       THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 
#               EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
#               PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
#               IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
#               AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND 
#               PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
#               YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#
#               IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY 
#               COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS 
#               PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 
#               INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 
#               THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED 
#               INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE 
#               PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER 
#               PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#
# USAGE:        focus_or_launch <command>
# EXAMPLE:      focus_or_launch google-chrome


############# GLOBVAR/PREP ###############

Executable="$1"
ExecutableBase="$(basename "$Executable")"
Usage="\
Usage: $(basename $0) command
E.g.:  $(basename $0) google-chrome\
"

############## USGCHECKS #################

if [[ $# -ne 1 || "$1" =~ ^(-h|--help)$ ]]; then
  echo "$Usage"
  exit 1
fi

################ MAIN ####################

MostRecentWID="$(xdotool search --class --name "$ExecutableBase" | tail -1 2> /dev/null)"

if [[ -z "$MostRecentWID" ]]; then
  echo "$ExecutableBase not found. Launching new window."
  "$Executable" > /dev/null 2>&1 &
  disown
else
  echo "Focusing existing instance of $ExecutableBase."
  # use brute-force approach if activating most recent WID doesn't work
  xdotool windowactivate "$MostRecentWID" 2>&1 | grep failed \
  && xdotool search --class --name "$ExecutableBase" windowactivate %@
fi

Voici comment fonctionne le script: Lorsque vous exécuterez focus_or_launch application xdotool recherchera les instances existantes de l’application et en activera l’une. Si aucune instance n’est trouvée, le script en lancera une nouvelle.

Pour intégrer ce script à votre session de bureau, éditez votre fichier de configuration Openbox (par exemple, ~/.config/openbox/lxde-rc.xml , ../lubuntu-rc.xml ou ../rc.xml ) et ajoutez une section semblable à la suivante pour chaque application à contrôler:

<keybind key="W-g">
  <action name="Execute">
    <command>focus_or_launch gedit</command>
  </action>
</keybind>

Assurez-vous de remplacer focus_or_launch par le chemin d'accès au script sur votre système ou copiez le script sur votre $PATH .

Si vous ne souhaitez pas que le script lance une nouvelle instance d'application, supprimez simplement la section suivante:

"$Executable" > /dev/null 2>&1 &
disown

P.S .: Ce script devrait fonctionner sur tous les environnements de bureau compatibles xdotool (par exemple, Unity, GNOME, XFCE ...)

    
réponse donnée Glutanimate 05.08.2014 - 13:23
la source

Lire d'autres questions sur les étiquettes