( locsemege | 2014. 02. 13., cs – 02:08 )

Épp szükségem volt egy ilyen megoldásra a live Fedorámon, így az igényeimhez igazítottam, némileg általánosabb formában. A script /usr/local/bin/runrise, s így néz ki:

#!/bin/bash

PRG="${0##*/}"
[ x"$PRG" = x'runrise' ] && exit 1
if [ $# -eq 0 ]; then
    wmctrl -xa "$PRG" && exit 0
    pgrep -u "$USER" -x "$PRG" | grep -Evq "^$$\$" && exit 0
fi
PATH="${PATH/:\/usr\/local\/bin:/:}"
exec "$PRG" "$@"

A kívánt programok nevével symlinket kell csinálni a /usr/local/bin-be úgy, hogy a link a runrise scriptre mutasson. Mivel a PATH környezeti változóban a /usr/local/bin előrébb van, mint a /usr/bin, így amennyiben nem elérési úttal hivatkozunk a programra, csak a nevével, úgy a symlink miatt a runrise script indul, de beleteszi PRG változóba, milyen névvel indították. Paraméter nélkül hívva megpróbálkozik a fókusz áthelyezésével a kívánt program ablakára. Ha ez nem sikerül, akkor lehet, hogy még nincs ablaka a programnak, mert az lassan indul. Ezért megvizsgálom, hogy ezzel a névvel fut-e már process, de ebből önmagunkat nem vesszük figyelembe. Ha fut, kilépünk, mert akkor lesz ablak, csak idő kérdése, mikor.

Amennyiben nincs kívánt process, illetve, ha vannak parancssori paraméterek, úgy kiveszem a PATH-ból a /usr/local/bin-t, hogy ne a script hívódjon vissza, majd átadjuk a vezérlést a kívánt programnak.

Ezzel elég a symlinkeket megcsinálni, nem kell hozzányúlnom a menü konfigurációjához. Kipróbáltam, működik. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE