Portnov
http://iportnov.blogspot.com/
2006-12-12
Я хочу рассказать о продвинутых возможностях Ion3. Чтобы получить общее представление об этом WM, советую ознакомиться со статьями "Обзор оконного менеджера Ion3" от warl0ck и "Ion3: положительный wm" от Dark_Savant.
ion3 поддерживает не только традиционную для него модель фреймов, но и плавающие окна. Если версия вашего ion3 меньше чем 20061015, то для того, чтобы было удобно пользоваться этой возможностью, пишем в cfg_ion.lua:
dopath("detatch.lua")
и в cfg_bindings.lua:
kpress("Mod4+F","detach.topmost_transient_to_float(_sub, nil, true)"),
kpress("Mod4+S","detach.toggle_floatws(_,true)"),
Для 20061015 и более поздних версий - detach.lua прописывать не нужно, его функциональность уже включена в ioncore, а в cfg_bindings нужно прописать
defbindings("WFrame.tiled", {
kpress("Mod4+F","mod_tiling.detach(_sub)"),
})
Теперь по Win-F можно сделать активное окно плавающим. Кроме того, при использовании detatch.lua или новой версии ion3 в cfg_kludges среди свойств окна можно указать float=true - такие окна будут создаваться сразу как плавающие.
Прописываем в cfg_bindings.lua:
bdoc("Resize the frame."),
mdrag("Button1@border", "WFrame.p_resize(_)"),
mdrag(MOD4.."Button3", "WFrame.p_resize(_)"),
bdoc("Move the frame."),
mdrag(MOD4.."Button1", "WFrame.p_move(_)"),
Это позволит перетаскивать окна левой кнопкой мыши при нажатом модификаторе 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"),
dopath("nest_ws")
Например, у меня это подменю добавлено в контекстное меню заголовка окна. Также можно повесить вызов этого меню на горячую клавишу.
Теперь вызываем меню Attach и в нем выбираем пункт WIonWS. В текущем фрейме в качестве окна появляется новое рабочее место. Его можно, как и любое другое разбить на два по вертикали и горизонтали, и делать с ним все, что можно делать с обычным рабочим местом. Но при этом оно остается как бы одним из окон в родительском фрейме. Возможное применение:Теперь у меня одна и та же экранная площадь может легко использоваться либо как единое целое, либо разделенное на две части, либо (sic!) двумя способами вместе: на одном рабочем месте (занимающем весь экран) открыто одно окно, а на другом рабочем месте (на том же десктопе) открыто два окна в двух половинках экрана. Это особенно удобно, когда многие привязки окон к рабочим местам определены в cfg_kludges.lua, когда хочется, чтобы одни приложения занимали, скажем, пол-экрана, а другие - весь экран, запускаясь при этом на одном и том же десктопе. Так, я много работаю с gimp, и под него у меня "расчерчен" отдельный десктоп. Изображение по умолчанию открывается в фрейме, занимающем почти весь экран. Но часто приходится работать с двумя изображениями паралельно - и на этом же фрейме у меня есть рабочее место, разделенное надвое по вертикали. При этом в "умолчальном" рабочем пространстве (на почти весь экран) может быть открыто третье изображение.