LINUX.ORG.RU

Openbox Actions rc.xml

 , ,


0

1

Здравствуйте. Мучаюсь с одной проблемой, для которой никак не могу найти решение. Window snapping в openbox. У меня получилось имитировать функционал при помощи xev для отслеживания перемещений клиента, но xev почему-то не оповещает об эвенте ButtonMotionMask, поэтому пришлось сравнивать начальное положение курсора(при нажатии) и размеры клиента. Также я храню данные о изначальных размерах клиентов, привязанных к углам экрана, в environment variable что ассоциативный массив в виде wid->w:h(изначальные) для других просто - Unmaximize. Проблема осталась в том что при Unmaximize, который привязан к drag действию в контексте titlebar в rc.xml при условии что окно Maximized, клиент восстанавливает свои изначальные размеры И позицию. Я пробовал телепортировать окно с помощью wtp из wmutils что приводит к тому что окно на момент, до того как курсор был перемещён более чем на 1px, перемещается на заданные в wtp координаты, а потом обратно на изначальную позицию(откуда клиент был Maximized) и продолжает своё движение до того как была отпущена кнопка мыши или нажат Enter. Чтоб было понятнее: Click на titlebar maximized клиента->Drag->Клиент возвращает изначальные размеры(unmaximize) и координаты->Клиент перемещается на координаты заданные в wtp(для этого используется шелл скрипт <comand> rc.xml)->Клиент продолжает движение с ИЗНАЧАЛЬНЫХ координат->отпускаю кнопку мыши->Перемещение завершается.

Итак что же находится в чёрном ящике? Внимание, вопрос:

Возможно ли вызывать Openbox Actions в рамках шелл скрипта(из терминала)? Почему такой вариант? Потому что когда я перемещаю клиент при помощи MoveResizeTo клиент ведёт себя так как предполагается, то есть перемещается(телепортируется) на указанные координаты и продолжает движение оттуда. Проблема только в том что в пределах rc.xml нельзя узнать нынешнее положение курсора.

Есть ли другие способы решения этой проблемы?(именно этой, мышью, а не клавиатурой)

Возможно ли вызывать Openbox Actions в рамках шелл скрипта(из терминала)?

Боюсь что нет. А так то внешний интерфейс было бы заманчиво иметь.

bread ()

Что, если просто забиндить колесо мыши над заголовком на MoveResizeTo в нужную область? Там конечно всего 4 варианта, для углов не хватит.

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

Дело в том что я хочу сымитировать то что называется Aero snap по другому, то есть при «отклеивании» окна оно перемещалось бы под курсор, ведь неизвестно, может быть я захочу «переклеить» его в другой угол, например.

little-boy ()

Еще вариант: прописать в главное меню все перемещения. Не очень удобно и наглядно, но позволит рулить активным окном мышкой с любого свободного участка стола (можно оставить поля в пиксель для вызова меню).

bread ()
Ответ на: комментарий от little-boy

Сначала я использовал 2bwm и wmutils, а также lemonbar для тайтлбаров, но потом, подумав что мне придётся искать как бы отследить положение курсора над границами клиента, что, кстати, делать очень легко позволяет тот же xev, например, так как тут нет нажатой кнопки, но всё таки решил пока что остановиться на openbox. Так вот, прикреплять то к границам и отлеплять, и даже восстанавливать размеры окна у меня получается мышью, а в openbox многое делается вообще в rc.xml. Единственное что осталось - телепортировать «откреплённое» окно под курсор. В чём, собственно, и суть треда.

little-boy ()
Ответ на: комментарий от little-boy

Блин, не дописал, отслеживать границы окон для изменения размера мышью, конечно же.

little-boy ()
Ответ на: комментарий от little-boy

то есть при «отклеивании» окна оно перемещалось бы под курсор

А если для drag прописать скрипт с wmctrl, не работает что ли?

bread ()
Ответ на: комментарий от bread
wmctrl -r :ACTIVE:  -b remove,maximized_vert,maximized_horz
wmctrl -r :ACTIVE:  -e 0,x,y,w,h

Как то так. И подставляешь свои вычисленные координаты и размеры. Единственное, нужен же и обычный Move. Тут нужно подумать, проще всего забиндить на другую кнопку мыши.

bread ()
Ответ на: комментарий от little-boy

Что-то нет там такого, блин если только опять же с позицией курсора сверяться и двигать, это же безумие какое-то. Нет, не подойдёт, к сожалению.

little-boy ()

Можешь глянуть в сторону opensnap — правда, проект находится в печальном состоянии.

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