05 декабря, 2006

Расширяя горизонты

Да не обращайте внимания на названия моих заметок. Они вообще имеют мало общего с их содержанием. Это просто некоторые ассоциации, которые вдруг приходят мне на ум и не более того. Это так, к слову. Пойдём дальше.

Из одной из моих предыдущих заметок неявно следует, что описанные в ней так называемые "scratch-приложения" являются по определению однооконными. И в самом деле, если Вы попробуете в полной мере применить описанную методику к любому многоконному приложению (например, таковыми является большинство jabber-клиентов, в т.ч. gaim и gajim, на примере которых я и буду далее рассуждать), то Вы сразу столкнётесь с проблемой организации его многочисленных окон внутри scratchpad-а. И именно решение этой проблемы я Вам сейчас поведаю. Но сначала отвлечёмся на минуту-другую от линии повествования и посмотрим, как это выглядит в случае, если никаких усилий на этот счёт не прилагать:

  • Либо так: Скриншот 1 - окно со списком контактов находится в одной куче с окнами открытых бесед, что может быть не слишком-то и неудобно (сам так жил долгое время и не сказать чтоб сильно мучался), но уж точно неконцептуально :) А главное - показательный пример для описываемого далее подхода.
  • Либо так: Скриншот 2 - расположение видимо удобно автору, но реализовано оно, как видите, не в scratchpad-е.
  • И третий вариант (скриншот для которого мне не удалось подыскать, да и нет в нём особой необходимости) - ограничить себя любимого использованием исключительно однооконных приложений для некоторых задач, в частности использовать для обмена мгновенными сообщениями centericq.
Если Вам не досуг было вдаваться в технические подробности, то поясню, что scratchpad в Ion3 - лишь специфический фрейм (WFrame), т.е. сущность фактически неделимая. Открыть несколько окон в одном фрейме, безусловно, можно, но только как перекрывающиеся. А вот разделить этот фрейм на несколько других с целью более комфортного расположения окон - уже не удастся. Многие читатели, думаю, чисто интуитивно уже догадались, что для решения этой проблемы нужно всего лишь "превратить" наш фрейм в полноценное рабочее пространство, гибкое до бесконечности. Ну, я всё же не волшебник, да и учиться на него пока не планировал, поэтому "превратить" вряд ли получится. Но вот засунуть одно в другое - это всегда пожалуйста. И Ion3 не был бы самим собой, если бы не позволял этого сделать:

_:attach_new({type="WTiling", name="Instant Messaging"}):goto()

Выполняем внутри соответствующего scratchpad-а это несложное Lua-выражение и получаем полноценное рабочее пространство, которое можно поделить так, как бог на душу положит. Полученные в результате деления фреймы именуем так, как того требует внутренний голос и получаем то, во что можно начинать "раскладывать" окна. В моём случае это выглядит примерно так:


Левый фрейм был назван im_sp_conversation,а правый - im_sp_roster. Думаю, названия говорят сами за себя (расшифрую разве что im - instant messaging и sp - scratchpad) и дополнительный пояснений не требуют. Далее, делаем соответствующие настройки для окон (приведу их как для gaim, так и для gajim - авось кому пригодится):

-- Gajim
--
defwinprop {
class = 'Gajim.py',
instance = 'gajim.py',
role = 'roster',
target = 'im_sp_roster',
winlist_ignore = true,
}

defwinprop {
class = 'Gajim.py',
instance = 'gajim.py',
target = 'im_sp_conversation',
jumpto = true,
winlist_ignore = true,
}

-- Gaim
--
defwinprop {
class = 'Gaim',
instance = 'gaim',
role = 'buddy_list',
target = 'im_sp_roster',
winlist_ignore = true,
}

defwinprop {
class = 'Gaim',
instance = 'gaim',
target = 'im_sp_conversation',
jumpto = true,
winlist_ignore = true,
}


Готово! Получите, распишитесь. Спасибо за внимание. Пора работать.

PS: Я также приводил тут небольшой рецепт, который позволяет закрывать одним универсальным сочетанием клавиш любой активный scratchpad. По объективным причинам данный рецепт не будет работать, если вышеописанным образом породить внутри scratchpad-а другие фреймы.

1 комментарий:

codesnik комментирует...

подробненько. спасибо.
я тут пересел на ион с wmii. нравится.
вот только трабл с кириллицей :\
русские буквы показывает каким-то не тем шрифтом, огромным и корявым до невозможности. это при том, что xfontsel при той же маске шрифта показывает всё верно. дело, видимо, в юникодной локали, но как бодать?..

а еще - хочется гномские трей окошки и индикатор раскладки. где-то видел скрин, кажется, где х-чатовская иконка в трее отображалась. как сделать?