суббота, сентября 08, 2007

"Состояния клавиатуры" в ion3

У меня на клавиатуре есть такие специальные клавиши для управления плеером (XF86AudioPlay итп). Использовать их по назначению довольно удобно, да вот беда - я редко запускаю плеер. В итоге большую часть времени они не использовались. Так что захотелось мне повесить на них запуск часто используемых приложений. Но и основные свои функции они должны выполнять, когда надо. Для этого пришлось сделать два "состояния клавиатуры" средствами ion3. Сначала код:

STATE=0

function toggle_state(ws)
if STATE==1 then
STATE=0
ioncore.exec_on(ws,"xset -led 3")
else
STATE=1
ioncore.exec_on(ws,"xset led 3")
end
end

function exec_on_if(ws,prog_true,prog_false)
if STATE==1 then
ioncore.exec_on(ws,prog_true)
else
ioncore.exec_on(ws,prog_false)
end
end

function exec_if(prog_true,prog_false)
return "exec_on_if(_,'"..prog_true.."','"..prog_false.."')"
end

....

kpress("Scroll_Lock","toggle_state(_)"),

kpress("XF86AudioPlay", exec_if('audacious -t', GIMP)),
kpress("XF86AudioStop", exec_if('audacious -s', 'mypaint')),
kpress("XF86AudioNext", exec_if('audacious -f', 'gedit')),
kpress("XF86AudioPrev", exec_if('audacious -r', 'gqview')),
kpress("XF86AudioMute", exec_if('xvolume toggle', 'inkscape')),
kpress("XF86AudioRaiseVolume", exec_if('xvolume 5+%', 'liferea')),
kpress("XF86AudioLowerVolume", exec_if('xvolume 5-%', 'f-spot')),


Как это работает.
В режиме "0" (по умолчанию) "аудио" клавиши запускают приложения. В режиме "1" - управляют плеером. Переключение между режимами - клавишей ScrollLock. Индикация режима - соответствующей лампочкой на клавиатуре.

Конечно, постоянно переключать режимы - не очень удобно, но изредка - в самый раз.

2 комментария:

  1. А как аудашиус запущен? В headless-режиме?
    Он у меня вешается что-то регулярно и перестаёт реагировать на нажатия клавиш :(

    ОтветитьУдалить
  2. Анонимный10/19/2007 10:51 AM

    audacious запускается самым обыкновенным образом, соответствующей командой. Окошки его висят на первом десктопе, куда я редко заглядываю ;)

    ОтветитьУдалить