"Умные" горячие клавиши fluxbox/xterm


vti - Posted on 28 Март 2007

Иногда просто горячих клавиш для запуска приложений недостаточно....

Представим себе, что у вас открыто куча окон на куче рабочих столов и вы вдруг обнаруживаете, что в вашем icq-клиенте, конечно же micq, вам пришло сообщение. Каковы ваши действия?

Чтобы сэкономить время и нервы, предлагается на ту же горячую клавишу запуска повесить обработчик, который при наличие запущенной программы просто вызовет соответствующее окно. Делать будем с помощью wmctrl на примере fluxbox.

$ vi .fluxbox/keys

Mod4 i :ExecCommand if wmctrl -l | grep micq; then wmctrl -R micq; else xterm -T micq -e micq; fi

где

- Mod4 i - соответствующая горячая клавиша
- if wmctrl -l | grep micq // в выводе списка всех окон проверяется есть ли нужно
- then wmctrl -R micq // вызываем это окно
- else xterm -T micq -e micq // иначе, запускаем приложение

Делаем reload config и наслаждаемся результатом.

0
Ваша оценка: Ничего

как дополнение скриптик:

========================================
#!/usr/bin/perl

my $search = shift @ARGV;
my $cmd = shift @ARGV || $search;

if ( qx/wmctrl -l | grep -i $search/ ) {
qx/wmctrl -R $search/;
} else {
qx/$cmd/;
}
========================================

назовем его wmctrlrun и положим в ~/bin, где ~/bin прописан в PATH ;)

таким образом:

wmctrlrun firefox запустит firefox, если он еще не запущен, или перескочит на него :)

неплохой совет, но он плавно вытекает из оффициального мануала по флюксу. но все равно полезный )

у нас наверное маны разные.. можете показать цитату? Ж:-)
--
Signature invent in progress 23% #.........

А можно сделать, чтоб если окно активно, то по тому же хоткею и пряталось?

Список окон можно получить с помощью программки wmctrl. Я, правда, делал не чтобы пряталось, а чтобы не запускалось второй раз. Т.е. что-то типа raise. В описании клавиш запускаете `wmctrlrun firefox`, а сам скрипт выгладит так:

#!/usr/bin/perl
 
my $search = shift @ARGV;
my $cmd = shift @ARGV || $search;
 
if ( qx/wmctrl -l | grep -i ^$search/ ) {
    qx/wmctrl -a $search/;
} else {
    qx/$cmd/;
}

Почитайте man wmctrl - там много опций полезных.