Ion3: продвинутая настройка

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. В текущем фрейме в качестве окна появляется новое рабочее место. Его можно, как и любое другое разбить на два по вертикали и горизонтали, и делать с ним все, что можно делать с обычным рабочим местом. Но при этом оно остается как бы одним из окон в родительском фрейме. Возможное применение:

  1. Создаю пустой десктоп.
  2. Выбираю Attach->WIonWS. Теперь на одном десктопе ютятся, как два окна, два рабочих места.
  3. Вновь созданное рабочее место разбиваю на два по вертикали.
  4. Сохраняю сессию.

Теперь у меня одна и та же экранная площадь может легко использоваться либо как единое целое, либо разделенное на две части, либо (sic!) двумя способами вместе: на одном рабочем месте (занимающем весь экран) открыто одно окно, а на другом рабочем месте (на том же десктопе) открыто два окна в двух половинках экрана. Это особенно удобно, когда многие привязки окон к рабочим местам определены в cfg_kludges.lua, когда хочется, чтобы одни приложения занимали, скажем, пол-экрана, а другие - весь экран, запускаясь при этом на одном и том же десктопе. Так, я много работаю с gimp, и под него у меня "расчерчен" отдельный десктоп. Изображение по умолчанию открывается в фрейме, занимающем почти весь экран. Но часто приходится работать с двумя изображениями паралельно - и на этом же фрейме у меня есть рабочее место, разделенное надвое по вертикали. При этом в "умолчальном" рабочем пространстве (на почти весь экран) может быть открыто третье изображение.