CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
28.06.2017

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Окружение :: Графические среды :: Менеджеры окон

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

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

Из одной из моих предыдущих заметок неявно следует, что описанные в ней так называемые "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-а другие фреймы.





Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
Каталог фирм
24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds