Tastenkürzel „Fokus-Anwendung“ in Lubuntu (LXDE)

7

Drücken Sie in Unity Super+ 1, 9um eine Anwendung zu starten oder zu wechseln. Kann ich in Lubuntu (dh in LXDE) eine Tastenkombination mit einer ähnlichen Eigenschaft zuweisen?

Kann ich eine Verknüpfung so einrichten, dass, wenn die Anwendung bereits geöffnet ist, der Fokus darauf wechselt und sich der Arbeitsbereich entsprechend ändert (wie in Unity)? Bisher konnte ich nur eine Verknüpfung zuweisen, die die Anwendung startet (eine neue Instanz von).

DustByte
quelle

Antworten:

8

Openbox (der LXDE-Fenstermanager) hat hierfür keine eingebaute Funktionalität, aber mit ein wenig Hilfe von xdotool können wir ein Skript schreiben, das das Verhalten von Unity replizieren und sogar verbessern kann.

Stellen Sie zunächst sicher, dass Sie xdotool installiert haben:

sudo apt-get install xdotool

Speichern Sie das folgende Skript als focus_or_launchund machen Sie es ausführbar:

 #!/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

So funktioniert das Skript: Wenn Sie focus_or_launch applicationxdotool ausführen, wird nach vorhandenen Instanzen der Anwendung gesucht und eine davon fokussiert. Wird keine Instanz gefunden, startet das Skript eine neue.

Zur Integration dieses Skript mit dem Desktop - Sitzung bearbeiten Ihre openbox Konfigurationsdatei (zB ~/.config/openbox/lxde-rc.xml, ../lubuntu-rc.xmloder ../rc.xml) und fügen Sie einen Abschnitt ähnlich dem folgenden für jede Anwendung , die Sie steuern möchten:

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

Stellen Sie sicher, dass focus_or_launchder Pfad zum Skript auf Ihrem System angegeben ist, oder kopieren Sie das Skript auf Ihren Computer $PATH.

Wenn Sie nicht möchten, dass das Skript eine neue App-Instanz startet, entfernen Sie einfach den folgenden Abschnitt:

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

PS: Dieses Skript sollte auf allen xdotool-kompatiblen Desktop-Umgebungen (z. B. Unity, GNOME, XFCE ...) funktionieren.

Glutanimate
quelle
1
Super Skript .. Vielen Dank :) Ich musste nur ersetzen, wenn [[$ # -ne 1 || "$ 1" = ~ ^ (- h | --help) $]]; dann mit if [[$ # -ne 1]]; dann, damit es funktioniert ... und endlich habe ich die letzten 10 Stunden das bekommen, wonach ich gesucht habe.
@ Nitin Froh zu hören, dass es für Sie funktioniert :)
Glutanimate