A megoldás:
wmctrl -x -a program || program -param1 -param2
Ilyen scriptet írtam hozzá run néven:
#!/bin/bash
# info: run app or raise its window if already running
if [ -z "$2" ]; then
wmctrl -x -a $1 || $1
else
$@
fi
Futtatás:
run firefox
vagy
run firefox hup.hu
Így nem kell használom semmilyen Window list megoldást vagy hosszú taskbar-t tele ablakokkal vagy Alt-tab-ot a sűrű program váltogatásokhoz, hanem csak a bazi ikonokat, amelyeket kiteszek a panelra.
- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 1762 megtekintés
Hozzászólások
Kösz, ez jó!
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
Erdekes megoldas. Csak azon gondolodom, hogy mintha a panelra kirakott ikonoknal be lehetne allitani azt, hogy onallo peldany legyen-e, vagy epp ne. Az nem ugyanazt az eredmenyt hozza?
- A hozzászóláshoz be kell jelentkezni
Átnéztem minden beállítást, de nem találtam.
- A hozzászóláshoz be kell jelentkezni
Valamiert az "Inditasi ertesites"-re gondoltam, hogy ezt a funkciot jelnti. De most nem vagyok kepes vele eleri ezt a viselkedest, uh vagy beneztem, vagy nem ez volt. Bocs.
- A hozzászóláshoz be kell jelentkezni
Feliratkozom, ezt a wmctrl-t nem ismertem és tetszik.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
welcome to windows 7
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
De az elavult... 2009-es, az XFCE meg 2012-es.
- A hozzászóláshoz be kell jelentkezni
Pontosan olyat akartam, illetve Win7 előtt szerintem Mac OS volt ilyen még.
- A hozzászóláshoz be kell jelentkezni
Ilyenkor szoktam örülni, hogy ismerek egy-két "programozható" ablakkezelőt, amivel ezek az "egyedi" igények nagyon könnyedén megoldhatóak.
- A hozzászóláshoz be kell jelentkezni
Melyikekkel szoktál játszani?
- A hozzászóláshoz be kell jelentkezni
Több évig awesome volt, utána egy-két hónapig i3, de aztán megtaláltam a herbstluftwm-et (+ conky, dzen2, dmenu), ami gyakorlatilag teljesen lefedi az igényeimet.
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
szintén
---
| Dropbox | Ubuntu One | SugarSync |
- A hozzászóláshoz be kell jelentkezni
> $@
En ezt lecserelnem exec "$@" -re. Just for fun.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Idézőjellel nem egyben próbálja elindítani a paraméterekkel, mintha a program név és paraméter név egyben lenne a fájlnév?
Az exec miért?
- A hozzászóláshoz be kell jelentkezni
Amire te gondolsz, az az "$*".
$* = $@ = $1 " " $2 " " $3 ... - N db. sztring, de ha parameterben SPACE / TAB / ENTER van, osszekuszalodik.
"$*" = "$1 $2 $3 ..." - 1 db sztring, amiben szokozokkel elvalasztva ott van az osszes parameter
"$@" = "$1" "$2" "$3" ... - pontosan annyi db sztring, amennyi parameter volt, es pont a parameterek vannak ott (es nem zavaro a SPACE / TAB / ENTER)
Az exec meg csak azert kell, hogy sporolj egy processzt, amelyik egyebkent ott varna a programod lefutasaig csak azert, hogy utana kilepjen.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Sub. Nekem is a kedvenc ablakkezelőm. Ezt kipróbálom...
- A hozzászóláshoz be kell jelentkezni
sub
int getRandomNumber() { return 4; } // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű. xkcd
- A hozzászóláshoz be kell jelentkezni
É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
- A hozzászóláshoz be kell jelentkezni
Jól hangzik.
Versenyhelyzet még így is kialakulhat, ha a programot kétszer próbálják elindítani a script elindulása és lefutása közötti időtartamban. Erre érdemes lenne esetleg betenni egy ilyet az elejére:
exec 200<"$0" ; flock -n 200 || exit 1 # locking
- A hozzászóláshoz be kell jelentkezni
Lehet, szebb, ha tőle kérünk descriptort, akkor biztosan nem futunk bele annak esetleges foglaltságába. Most nincs időm kipróbálni:
exec {fd}<"$0"
if ! flock -n $fd; then
eval "exec $fd>&-"
exit 1
fi
...
eval "exec $fd>&-"
Tegyük hozzá, nekem ez azért kellett, hogy lassú gépen ne lehessen elindítani sok példányban a böngészőt live-on, mert felzabálja a memóriát, tovább lassul, majd hatalmas load mellett közel meghal a gép. Ha két nagyon gyors kattintásra két példány elindul, az még belefér, de már az sem túl valószínű, hiszen nézem, fut-e már az illető process.
Ettől függetlenül a javaslatod korrektnek tűnik, az ötletet a következő verzióba bele fogom építeni. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Valami baj van vele, debugolnom kell. Úgy tűnik, többnyire működik, de előfordul, hogy abban az esetben, amikor nem fut még az alkalmazás, az indító ikonjára kattintva a script valamiért nem indítja el. Talán lesz időm napközben foglalkozni vele. Remélem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Na, ilyen lett, jól működik. Talán picit nem korrekt, de a gyakorlatban jó, egyszerű:
#!/bin/bash
PRG="${0##*/}"
[ x"$PRG" = x'runrise' ] && exit 1
if [ $# -eq 0 ]; then
wmctrl -xa "$PRG" && exit 0
[ `pgrep -c -u "$USER" -x "$PRG"` -gt 1 ] && exit 0
fi
PATH="${PATH/:\/usr\/local\/bin:/:}"
exec "$PRG" "$@"
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni