wmctrl
program je přesně to, co hledáte (sudo apt-get install wmctrl
). Můžete použít wmctrl -a "AppTitle"
příkaz přenést aplikaci dopředu. wmctrl -l
zobrazí seznam všech dostupných oken, takže by mělo být snadné napsat skript shellu, který zkontroluje, zda váš program běží, a buď jej spustí, nebo přenese do popředí. Pak to stačí svázat s klávesovou zkratkou.
Nejprve si někam uložte následující skript, já použiji /home/jtb/code/bringToFront
. Vyžaduje dva argumenty, první je to, co byste zadali na terminálu pro spuštění programu, druhý je podřetězec názvu okna programu. Pokud v názvu není žádný konstantní jedinečný řetězec, budete muset udělat trochu více práce, abyste našli okno programu.
#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]
then
wmctrl -a "$2"
else
$1 &
fi
-
Se skriptem v aktuálním adresáři spusťte
chmod +x bringToFront
aby byl skript spustitelný. Pak se ujistěte, že to funguje; ke spuštění/zaměření firefoxu můžete spustit./bringToFront firefox "Mozilla Firefox"
. -
Nyní musíme svázat klávesovou zkratku. Spusťte
gconf-editor
a přejděte ve struktuře složek doleva na/apps/metacity/keybinding_commands
. -
Dvakrát klikněte na první
command
s prázdnou hodnotou, pravděpodobněcommand_1
. Zadejte úplnou cestu ke skriptu a zadejte dva parametry, např./home/jtb/code/bringToFront firefox Firefox
. -
Na panelu vlevo vyberte
global_keybindings
, další složka nahoru. Najděterun
záznam odpovídající příkazu, který jste právě definovali, pravděpodobněrun_command_1
. Dvakrát na něj klikněte a zadejte klávesovou zkratku, kterou chcete použít. Vložte modifikátory do lomených závorek, např.<Ctrl><Alt>F
.
Nyní Ovládejte + Alt + F přenese vaše okno firefox dopředu nebo jej spustí, pokud již neběží.
Zde je další způsob, jak to udělat s xdotools
. Proces vyskakovacího okna rozpozná příkazový řádek vydaný k jeho spuštění (není potřeba žádný soubor pid ani jedinečný název okna).
#!/bin/bash
cmd="[email protected]"
# 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