LINUX.ORG.RU

Orcsome — расширение для NetWM совместимых менеджеров окон

 , , , ,


0

2

В основе Orcsome лежит простая идея: отрисовка окон возлагается на стабильный, проверенный временем, быстрый менеджер окон, а управление им осуществляется при помощи скрипта на Python.
Это позволяет в широких пределах варьировать поведение любых менеджеров окон, даже имеющих весьма бедные возможности для настройки.

Теоретически возможности Orcsome ограничены только вашими знаниями Xlib — библиотеки функций клиента X Window.
Если вы не обладаете таковыми знаниями совсем или обладаете, но в недостаточной степени, Orcsome предоставляет обёртку, реализующую самые распространённые задачи по управлению окнами:

  • управление фокусом, вызов окна на передний план с активацией нужного рабочего стола;
  • перемещение окна на указанный рабочий стол;
  • возможность перемещать окно внутри стека;
  • выборка и фильтрация окон по их свойствам;
  • подписка на события X Window: нажатие горячих клавиш, создание/удаление окна, изменение свойств окна;
  • захват клавиатуры и мыши;
  • история фокуса.

Всё это в сочетании с понятным скриптовым языком позволяет реализовывать достаточно сложные операции, например, такое популярное действие, как «spawn or raise» — запуск приложения или передача ему фокуса, если оно уже запущено.

>>> Пример конфигурации от baverman

>>> Документация

>>> Страница проекта на github'e

★★★

Проверено: Shaman007 ()

> позволяют реализовывать достаточно сложные вещи, например такое популярное действие, как spawn_or_raise.

Создаешь фейковое окно и запускаешь реальное приложение при попытке активации окна?

geekless ★★ ()

Нужен ещё его брат-побратим Trollsome - это когда открыт браузер, а что сказать - не знаешь, а копипастить с других сайтов «умные» мысли - лениво. И тогда за дело берётся скрипт на питоне...

kid_lester ()
Ответ на: комментарий от geekless

>Создаешь фейковое окно и запускаешь реальное приложение при попытке активации окна?

Насколько я понимаю, если программа запущена, активировать окно, а если не запущена — запустить и активировать окно.

gentoo_root ★★★★★ ()
Ответ на: комментарий от geekless

> Создаешь фейковое окно и запускаешь реальное приложение при попытке активации окна?

Чур меня. Пользователь просто задает матчеры, по которым определяется, есть уже такой клиент или надо запустить новый.

baverman ★★★ ()
Ответ на: комментарий от baverman

> Чур меня. Пользователь просто задает матчеры, по которым определяется, есть уже такой клиент или надо запустить новый.

Ну это по хоткеям или кустомным кнопкам.

А если исходить из модульности, то надо, чтобы spawn_or_raise понимала любая панель задач, и делать указанный костыль. :)

geekless ★★ ()
Ответ на: комментарий от geekless

> понимала любая панель задач

Не понял. Если в таскбаре уже висит клиент, то зачем его опять запускать?

baverman ★★★ ()
Ответ на: комментарий от geekless

Все, перечитал первое сообщение. Костыльность костыля осознал в полной мере. Кому такая функциональность может понадобится?

baverman ★★★ ()

Можешь поправить выпендрёжность типа «помогайка», «питон», «имплементирующую», переведи «spawn_or_raise», оформи список с маленьких букв с точказапятая в конце строки и точкой в последнем пункте. А то это сделаю я!

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Будь так добр. У меня уже четвертый час ночи, все как в тумане, а еще надо 200мл самогона довыгнать.

baverman ★★★ ()

>spawn_or_raise

А этим разве не панель занимается?

anonymousss ★★ ()
Ответ на: комментарий от anonymousss

> А этим разве не панель занимается?

За последние семь лет не видел ни одной панели, которая это делает.

baverman ★★★ ()
Ответ на: комментарий от anonymousss

Конечно же это не значит, что таких нет. А же обскурант в этом плане, всякое гламурье не ставлю.

baverman ★★★ ()
Ответ на: комментарий от baverman

Для не-гламурья есть dockbarx (на выбор в виде самостоятельного дока или апплета для гномопанели, + автор вроде как собирается на xfce4-panel портировать) с минималистичной темой.

Еще такая возможность есть в кедах из коробки, но работает она так, что лучше не включать.

anonymousss ★★ ()

>> spawn_or_raise

> Насколько я понимаю, если программа запущена, активировать окно, а если не запущена — запустить и активировать окно.

Эм... По моему скрипт на баше + wmctrl + xbindkeys как-то проще будет, не?

another ★★★★ ()
Ответ на: комментарий от anonymousss

> Для не-гламурья есть dockbarx

Шоткаты можно лаунчерам назначать? Если нет, тогда это просто игрушка.

baverman ★★★ ()
Ответ на: комментарий от another

> По моему скрипт на баше + wmctrl + xbindkeys как-то проще

Если нужно только это, да. Я же полностью перетащил поведение окружения, как оно было настроено у меня в awesome.

baverman ★★★ ()
Ответ на: комментарий от baverman

> Если нужно только это, да. Я же полностью перетащил поведение окружения, как оно было настроено у меня в awesome.

Нет, нужно не только это и у меня, например, много чего сидит на этой связке. Просто то, что я для себя сделал - оно просто и понятно (для меня), а то что у тебя... Учить синтаксис конфига, честно говоря, лениво, с учетом того, что и так все работает, что нужно (используется openbox, wmctrl, devilspie, xbindkey + баш в некоторых случаях). Прокомментировал бы конфиг подробней, что ли. А то пробовать желания особо нет.

another ★★★★ ()
Ответ на: комментарий от another

> А то пробовать желания особо нет.

Хозяин-барин.

baverman ★★★ ()
Ответ на: комментарий от baverman

> Кому такая функциональность может понадобится?

Хз. :)

geekless ★★ ()

А на что готовы пойти вы, чтобы не читать man fvwm?

Hoodoo ★★★★★ ()
Ответ на: комментарий от Hoodoo

> man fvwm

Где-то уже был мой нытик тред, как я с ним бился три дня и три ночи, и как даже хотел к нему свой модуль писать. А сейчас, по конфигурябельности, openbox+orcsome ему сто очков вперед дадут.

baverman ★★★ ()

твой английский - сплошной фэйл. попроси кого-нить исправить кучу ошибок...

anonymous ()
Ответ на: комментарий от baverman

orly? что можно сделать с orcsome, чего нельзя (при должном желании) сдлеать с FvwmPerl?

yoghurt ★★★★★ ()
Ответ на: комментарий от baverman

Ну не факт. Учитывая наличие FvwmPerl и возможность передачи функциям разных параметров окна (см. ман) тут получается ситуация «слон или кит».

А чо было-то, мне теперь интересно.

Hoodoo ★★★★★ ()
Ответ на: комментарий от baverman

С ходу есть кстати вопрос: Orcsome понимает контексты? То есть в зависимости от того, у какого окна (или элемента окна) в данный момент фокус, можно ли назначить на один и тот же хоткей разные действия?

Hoodoo ★★★★★ ()
Ответ на: комментарий от Hoodoo

> То есть в зависимости от того, у какого окна (или элемента окна) в данный момент фокус, можно ли назначить на один и тот же хоткей разные действия?

Можно назначить хоткей конкретному окну.

baverman ★★★ ()
Ответ на: комментарий от yoghurt

> что можно сделать с orcsome, чего нельзя (при должном желании) сдлеать с FvwmPerl?

Разобраться за вечер. API xlib и то проще чем лютая каша fvwm'овских функций.

baverman ★★★ ()
Ответ на: комментарий от anonymous

> твой английский - сплошной фэйл

Да. Я знаю. Моя документация не претендует на пулицеровскую премию.

Если найдешь место, где смысл передается неверно или меня могут неправильно понять, буду благодарен.

baverman ★★★ ()
Ответ на: комментарий от baverman

fvwm можно допилить до вида «бокс на стероидах» часа за полтора, и при этом понять, как устроены функции. После этого исползовать мануал чисто для справки и допиливать под свои пожелания по мере надобности.

http://box-look.org/content/show.php/fvwm+starter%27s+kit?content=123415

(да, я везде сую эту ссылку)

Hoodoo ★★★★★ ()

Любопытно... А JavaScript API GNOME3 позволяет наваять подобное?.. Надо покопатсья...

tentaclius ()
Ответ на: комментарий от Hoodoo

Внешний вид это дело десятое.

На сколько просто на fvwm, можно реализовать следующее:

###################################
# Gimp toolbar switching on Tab key
last_image_window = [None]

@wm.on_create(cls='Gimp', role='gimp-image-window|gimp-dock|gimp-toolbox$')
def bind_gimp_keys():
    @wm.on_key(wm.event_window, 'Tab')
    def toggle_gimp_toolbars():
        cw = wm.current_window
        clients = wm.get_stacked_clients()

        if wm.is_match(cw, role='gimp-image-window'):
            gimp_windows = wm.find_clients(clients,
                cls='Gimp', role='gimp-image-window|gimp-dock|gimp-toolbox')

            if cw.id == gimp_windows[-1].id:
                last_image_window[0] = cw

                for c in wm.find_clients(clients, cls='Gimp', role='gimp-dock|gimp-toolbox'):
                    wm.place_window_above(c)
            else:
                wm.place_window_above(cw)

        else:
            w = last_image_window[0] or wm.find_client(clients, cls='Gimp', role='gimp-image-window')
            if w:
                wm.focus_and_raise(w)

То есть по Tab'у показывает/скрывает гимповские тулбоксы. Как видишь, здесь реализация абсолютно прямая.

baverman ★★★ ()

Питон? Нет пути! Наелся в portage. Ждём пока хоть как-то устаканится.

alx_me ★★☆ ()

Давай lua или Perl. Тогда поговорим.

alx_me ★★☆ ()

Давай lua или Perl. Тогда поговорим._

alx_me ★★☆ ()
Ответ на: комментарий от alx_me

> Питон? Нет пути!

Если про перфоманс, то с моим конфигом отъедает столько же cpu сколько и панелька. А в сумме openbox + orcsome + bmpanel2 — в пять раз меньше, чем awesome. Что дало лишних полчаса на батарейке.

baverman ★★★ ()
Ответ на: комментарий от alx_me

> Давай lua

Спасибо, накушался этими таблицами по самые помидоры. Парадоксальный язык — полностью на таблицах, а средств для управления ими практически нет.

baverman ★★★ ()
Ответ на: комментарий от baverman

С fvwm давно слез, так что не тестировал и мог ошибиться, но, думаю, получится что-то типа такого:

DestroyFunc ShowOrHideGimpToolboxes
AddToFunc ShowOrHideGimpToolboxes
 + I All (gimp-dock|gimp-toolbox) RaiseLower

Key (gimp-image-window) Tab W A ShowOrHideGimpToolboxes
Laz ★★★★ ()

Это делается как замена awesome? Возможно ли реализовать тайлинг с помощью orcsome?

Psych218 ★★★★★ ()

Зачем оно нужно? Почему это не под катом?

Hexs ()
Ответ на: комментарий от Laz

Не то.

Оно работает, но если не переключаться на другие окна.

baverman ★★★ ()
Ответ на: комментарий от baverman

ion3 смотрит на вас как то не так. Как, впрочем, и не относящийся к делу wireshark.

alx_me ★★☆ ()
Ответ на: комментарий от Psych218

> Это делается как замена awesome?

Нет. Это делается, чтобы привнести гибкость в обычные WM. Ни панельки, ни тайлинга не будет.

> Возможно ли реализовать тайлинг с помощью orcsome?

Сейчас нет ни одной функции для управления геометрией окон. Но если полистать NetWM, то никаких проблем быть не должно. Хотя, если нужен тайлинг, я бы просто взял pytyle.

baverman ★★★ ()
Ответ на: комментарий от baverman

ion3 форкать. Нет, сначала руки помыть после питона, потом форкать.

alx_me ★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.