Benutzerdefinierter Hotkey / Verknüpfung zum Öffnen / Vornebringen einer App

11

Ich kann mir nicht vorstellen, dass dies in das System eingebaut ist, aber ist es möglich, dies ohne allzu großen Aufwand zu tun?

Angenommen, ich öffne ein bestimmtes Programm mit einem Hotkey. Wenn ich diesen Hotkey erneut drücke, wird das Programmfenster nach vorne verschoben.

Ich möchte dies unter Ubuntu 9.04 tun.

Vielleicht mit D-Bus? Irgendwelche Experten?

Update : Folgendes habe ich erhalten, falls es jemandem hilft:

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

Sicher kann es vereinfacht werden, aber ich bin kein bashZauberer. Damit mein Beispiel funktioniert, habe ich in Terminal ein benutzerdefiniertes Profil erstellt, das dem Fenster einen eindeutigen Titel zuweist, damit es später gefunden werden kann. Die Möglichkeiten sind endlos!

Ivan
quelle
1
Für diese einfache Aufgabe funktioniert die Methode von jtb besser, da xdotools manchmal X-Fehler auslöst und wmctrl schneller ist.
Ivan

Antworten:

10

Das wmctrlProgramm ist genau das, wonach Sie suchen ( sudo apt-get install wmctrl). Mit dem wmctrl -a "AppTitle"Befehl können Sie die App nach vorne bringen. wmctrl -llistet alle verfügbaren Fenster auf, daher sollte es einfach sein, ein Shell-Skript zu schreiben, das prüft, ob Ihr Programm ausgeführt wird, und es entweder startet oder nach vorne bringt. Dann können Sie das einfach an eine Tastenkombination binden.

Speichern Sie zuerst das folgende Skript irgendwo, ich werde es verwenden /home/jtb/code/bringToFront. Es werden zwei Argumente benötigt: Das erste ist das, was Sie am Terminal eingeben würden, um das Programm zu starten, das zweite ist eine Teilzeichenfolge des Titels des Programmfensters. Wenn der Titel keine konstante eindeutige Zeichenfolge enthält, müssen Sie etwas mehr Arbeit leisten, um das Programmfenster zu finden.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Führen Sie das Skript in Ihrem aktuellen Verzeichnis aus, chmod +x bringToFrontum es ausführbar zu machen. Stellen Sie dann sicher, dass es funktioniert. Zum Starten / Fokussieren von Firefox können Sie ausführen ./bringToFront firefox "Mozilla Firefox".

  2. Jetzt müssen wir eine Tastenkombination binden. Führen Sie gconf-editordie Ordnerstruktur aus und navigieren Sie nach links zu /apps/metacity/keybinding_commands.

  3. Doppelklicken Sie commandwahrscheinlich auf den ersten mit einem leeren Wert command_1. Geben Sie den vollständigen Pfad zum Skript ein und geben Sie die beiden Parameter an, z /home/jtb/code/bringToFront firefox Firefox.

  4. Wählen Sie im linken Bereich global_keybindingsden nächsten Ordner aus. Suchen runSie wahrscheinlich den Eintrag, der dem gerade definierten Befehl entspricht run_command_1. Doppelklicken Sie darauf und geben Sie die gewünschte Tastenkombination ein. Setzen Sie die Modifikatoren in spitze Klammern, z <Ctrl><Alt>F.

Jetzt Control+ Alt+ Fbringt Ihr Firefox-Fenster nach vorne oder startet es, wenn es noch nicht läuft.

jtb
quelle
Ja, das habe ich vor ein paar Minuten herausgefunden, aber ich habe mich für xdotool entschieden. Vielen Dank!
Ivan
Ich habe vergessen zu erwähnen, dass ich auch die globalen Verknüpfungen und Befehle in gconf verwendet habe, um den Effekt vollständig zu erzielen (die Quake-Konsole eines armen Mannes!).
Ivan
Ah, ja, ich habe xdotool selbst nicht verwendet, aber es sieht so aus, als würde es Ihnen mehr Flexibilität geben. Guter Punkt über gconf. Da dies nicht offensichtlich ist, kann ich die Antwort genauso gut bearbeiten, um weitere Details für alle anderen zu enthalten, die dies tun möchten.
jtb
Poort Man's Quake-Konsole? Du meinst wie Tilda? freshmeat.net/projects/tilda
Prestomation
Ja, ich verwende auch Tilda, aber ich arbeite die ganze Woche über an mehreren Projekten. Für jedes Projekt öffne ich immer drei oder vier Registerkarten. Daher ist es für mich sehr nützlich, schnell zur Projektkonsole ("Arbeitsbereich") zu wechseln, ohne Tilda zu überladen.
Ivan
3

Hier ist eine andere Möglichkeit, dies zu tun xdotools. Der zu öffnende Prozess wird an der Befehlszeile erkannt, die zum Ausführen ausgegeben wurde (keine PID-Datei oder eindeutiger Fenstertitel erforderlich).

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

Die Antwort von jtb ist ausgezeichnet, aber manchmal möchten Sie genaue Titel finden (z. B. möchten Sie "GitKraken" öffnen, aber der Titel Ihres Browsers "GitKraken vs CLI" stimmt auch mit der Abfrage überein).

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

Jetzt können Sie Ihr bringToFront-Skript wie folgt aufrufen:

#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
quelle
0

Diese Lösung ist nicht parametrisiert, aber ich habe sie verwendet, um den Gnomenrechner zu fokussieren oder zu starten .

Die Option -R findet das Fenster oder schlägt fehl, wenn es gefunden wird, wird es auf den aktuellen Desktop verschoben, angehoben und fokussiert. Der Gnomenrechner benennt sein Fenster mit dem Namen Rechner , es könnte leicht parametriert werden, aber ich habe nie die Notwendigkeit gefunden, dies zu tun. Ich habe es zugeordnet 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
quelle