суббота, сентября 08, 2007
"Состояния клавиатуры" в 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. Индикация режима - соответствующей лампочкой на клавиатуре.
Конечно, постоянно переключать режимы - не очень удобно, но изредка - в самый раз.
вторник, января 30, 2007
Еще одна примочка для ion3
function toggle_tabbar(fr)
if WFrame.mode(fr)=="tiled-alt"
then WFrame.set_mode(fr,"tiled")
else WFrame.set_mode(fr,"tiled-alt")
end
end
defbindings("WFrame", {
...
mpress(MOD4.."Control+Button2", "toggle_tabbar(_)"),
...});
Теперь по Ctrl-среднему клику можно включать/выключать отображение строки заголовков окон для фрейма.
пятница, ноября 24, 2006
Обновил ion3.
Заметные изменения:
1) Исчезли mod_ionws и mod_floatws, зато появился mod_tiling;
2) Соответственно, WIonWS переименовано в WTiling;
3) Функциональность скрипта detach.lua теперь включена в ioncore.
Часть скриптов с офсайта не работают, т.к. еще не переделаны под новый API.
Заодно обновил статью о настройке ion3.
среда, ноября 15, 2006
ion3: Организация рабочего места
Во-первых, конечно же, виртуальные десктопы. У меня их десять. Первый из них разбит по вертикали на две неравные части. Они предназначены для того, чтобы открыть два терминала - получается что-то наподобие двухпанельного файлменеджера, только вместо списков файлов - командные строки zsh. Иногда действительно удобно "находиться в двух директориях сразу". Второй десктоп предназначен для работы с текстами, на нем запускаются gvim, nedit, gedit. Третий десктоп предназначен для работы с графикой, на нем открываются gqview, gimageview, inkscape, xara.
Четвертый десктоп выделен специально для gimp. Он разбит на две неравных части по горизонтали - верхняя часть занимает где-то 10% высоты, в ней показывается гимповский toolbox. В нижней половине добавлен второй слой рабочего пространства, разбитый на две половины по вертикали. Таким образом, открытое в gimp изображение по умолчанию занимает почти весь экран, но когда нужно работать с двумя изображениями, каждое из них переносится в свою половину второго слоя. Окно gimp со списком слоев и прочими диалогами открывается в named scratchpad, который показывается/прячется по нажатию клавиши PauseBreak. Это, собственно, проще показать: см.скриншот.

На пятом десктопе по имени misc тоже два слоя, и один из них разбит по вертикали на две половины. На этом десктопе по умолчанию запускается rox-filer, а с помощью второго слоя я иногда превращаю rox в двухпанельник.
Шестой десктоп выделен для мониторинга системы. Он разбит на две половины по горизонтали, в верхней автоматически при старте иксов запускается xterm -e "tail -f /var/log/messages", в нижней - xterm -e htop.
Седьмой рабочий стол предназначен для работы в интернете - на нем запускаются firefox, sylpheed-claws, liferea и pan. Восьмой разбит по вертикали на две неравные части. На нем запускается dia - панель инструментов в меньшей правой части, документ в основной.
Девятый разбит на пять частей по вертикали и горизонтали, в них открываются различные окна cinepaint. Десятый разделен на четыре части, в одной из них запускается xterm -e maxima, а в остальных открываются окна gnuplot.
Для xchat и gaim выделен named scratchpad, который показывается/прячется по Win-~. Также отдельный скратчпад (растянутый почти на весь экран) выделен для чтения документов - в нем запускаются xpdf, gv, djview.
Переключаются рабочие столы по Win-цифра. Для навигации между фреймами использую клавиши в стиле vim: Win-W,s - разбить фрейм по горизонтали, Win-W,v - по вертикали, Win-W,j - перейти на фрейм ниже, Win-W,k - на фрейм выше, и т.д.
По правой клавише Win запускается uterm - это маленький скрипт, запускающий xterm с цветом фона, случайным образом выбранным из определенного набора. Запуск наиболее часто используемых программ - Win-F3..F12 (Win-F3 - gqview, Win-F7 - gimp, и т.д). Реже используемые программы запускаются по Alt-~,буква (Alt-~,B - blender, Alt-~,D - inkscape, и пр.). Остальные программы запускаются из командной строки, которая открывается по Win-R, или, реже, из главного меню, которое открывается по кнопке Menu.
В строке статуса выводятся: имя текущего десктопа, загрузка системы, сведения о памяти в формате (занято+кэш+буферы)=занято_всего+свободно=всего_памяти, информация об использовании свопа (правда, он обычно не используется вовсе ;)), статус vpn-соединения с входящим трафиком, температуры винчестера, процессора и мат. платы.
Last updated 15-Nov-2006 20:04:14 YEKST
четверг, октября 19, 2006
ion3: продвинутая настройка
Плавающие окна
ion3 поддерживает не только традиционную для него модель фреймов, но и плавающие окна. Если версия вашего ion3 меньше чем 20061015, то для того, чтобы было удобно пользоваться этой возможностью, пишем в cfg_ion.lua:
dopath("detatch.lua") |
и в cfg_bindings.lua:
kpress("Mod4+F","detach.topmost_transient_to_float(_sub, nil, true)"), |
Для 20061015 и более поздних версий - detach.lua прописывать не нужно, его функциональность уже включена в ioncore, а в cfg_bindings нужно прописать
defbindings("WFrame.tiled", { |
Теперь по Win-F можно сделать активное окно плавающим.
Кроме того, при использовании detatch.lua или новой версии ion3 в cfg_kludges среди свойств окна можно указать float=true - такие окна будут создаваться сразу как плавающие.
Удобное изменение размеров и перемещение окон
Прописываем в cfg_bindings.lua:
bdoc("Resize the frame."), |
Это позволит перетаскивать окна левой кнопкой мыши при нажатом модификаторе Win, и изменять размеры окон правым перетаскиванием при нажатой Win.
Возвращение к предыдущему окну
Нередко мы работаем с двумя окнами параллельно, причем хотелось бы, чтобы каждое из них занимало весь десктоп. Типичный пример - окна браузера и текстового редактора при разработке сайта. Следующий код в cfg_bindings.lua позволит быстро переключаться к предыдущему активному окну (по Win-B):
kpress("Mod4+B", "ioncore.goto_previous()"), |
Второй слой рабочих пространств
Это одна из наиболее мощных и в то же время наименее известных особенностей ion-a. Прописываем в cfg_ion.lua:
dopath("nest_ws") |
и добавляем вызов меню под именем menuattach в какое-нибудь меню:
submenu("Attach", "menuattach"), |
Например, у меня это подменю добавлено в контекстное меню заголовка окна. Также можно повесить вызов этого меню на горячую клавишу.
Теперь вызываем меню Attach и в нем выбираем пункт WIonWS. В текущем фрейме в качестве окна появляется новое рабочее место. Его можно, как и любое другое разбить на два по вертикали и горизонтали, и делать с ним все, что можно делать с обычным рабочим местом. Но при этом оно остается как бы одним из окон в родительском фрейме. Возможное применение:
-
Создаю пустой десктоп.
-
Выбираю Attach->WIonWS. Теперь на одном десктопе ютятся, как два окна, два рабочих места.
-
Вновь созданное рабочее место разбиваю на два по вертикали.
-
Сохраняю сессию.
Теперь у меня одна и та же экранная площадь может легко использоваться либо как единое целое, либо разделенное на две части, либо (sic!) двумя способами вместе: на одном рабочем месте (занимающем весь экран) открыто одно окно, а на другом рабочем месте (на том же десктопе) открыто два окна в двух половинках экрана. Это особенно удобно, когда многие привязки окон к рабочим местам определены в cfg_kludges.lua, когда хочется, чтобы одни приложения занимали, скажем, пол-экрана, а другие - весь экран, запускаясь при этом на одном и том же десктопе. Так, я много работаю с gimp, и под него у меня "расчерчен" отдельный десктоп. Изображение по умолчанию открывается в фрейме, занимающем почти весь экран. Но часто приходится работать с двумя изображениями паралельно - и на этом же фрейме у меня есть рабочее место, разделенное надвое по вертикали. При этом в "умолчальном" рабочем пространстве (на почти весь экран) может быть открыто третье изображение.
Обещанные ссылки
http://www.opennet.ru/docs/RUS/ion3/ - "Обзор оконного менеджера Ion3" от warl0ck
http://posix.ru/desktop/ion/ - "Ion3: положительный wm" от Dark_Savant
Last updated 20-Oct-2006 01:11:29 YEKST
