Небольшое ноухау для Ion

JaGoTerr
http://jagoterr.blogspot.com

2006-12-07

Вводная такова: на рабочем месте я использую оконный менеджер Ion3. Начну с того, что для перехода к нужным мне приложениям (например к любимому словарику) я с большим удовольствием использую замечательный скрипт app.lua из коллекции вкусностей для Ion3 (тем паче, что сегодня утром благодаря моим небольшим усилиям он стал ещё лучше и функциональнее, надеюсь на скорое появление патча в репозитории). И использование это выражается в keybinding-ах примерно следующего характера:

defbindings("WMPlex.toplevel", {
 kpress(ALTMETA.."D",
        "app.byclass('stardict', 'Stardict', _)"),
})

Ну а с помошью следующего фрагмента конфига:

defwinprop {
   class = 'Stardict',
   instance = 'stardict',
   target = 'tools_sp',
   jumpto = true,
   winlist_ignore = true,
}

запускаемый словарик самостоятельно отправляется при запуске на "своё место". Многие уже догадались по предыдущему фрагменту конфига, что "местом" для данного приложения, как и для многих других, является соответствующий named scratchpad. Но есть проблема - всяческих скратчпадов у меня 5 штук (и не факт, что это конечное их число). И разумеется, я постоянно путаюсь, какой же кнопкой закрывается тот скратчпад, который у меня сейчас активен. Сегодня утром мне это надоело. И был придуман следующий keybinding:

defbindings("WMFrame", {
    kpress( META.."Escape",
            "mod_sp.set_shown(
                ioncore.lookup_region(_:name(), 'WFrame'),
                'unset' )" ),
})

Этот несложный биндинг "прячет" любой активный скратчпад. Вероятно, он может иметь побочный эффект при использовании его "не по назначению", но сей факт меня, честно сказать, не сильно беспокоит.

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

defbindings("WMFrame", {
    kpress( META.."L",
            "WRegion.rqorder(_, 'back')" ),
    kpress( META.."U",
            "WRegion.rqorder(_, 'front')" ),
})

Как несложно догадаться, нажатие Meta+L отправляет активный скратчпад "под" все остальные, а Meta+U "поднимает" его над всеми другими.

PS: вышеупомянутый скрипт app.lua отныне может искать запущенное приложение не только по строке заголовка или Window-class, но также и по атрибуту Window-instance, что особенно полезно в некоторых случаях. Каких? Об этом читайте в следующей заметке.