LINUX.ORG.RU

Поделитесь вашими наработками в плане старта клиентов в определенной геометрии

 


1

1

Кто-нибудь себе запилил старт клиентов или изменение размеров уже работающего клиента в определенной геометрии?

Например, есть работающий клиент в режиме floating:

+-------------+
|             |
| +------+    |
| |      |    |
| |  C   |    |
| |      |    |
| +------+    |
|             |
+-------------+

хотелось бы его по хоткею максимизировать по левой стороне наполовину экрана:

+------+------+
|      |      |
|      |      |
|  C   |      |
|      |      |
|      |      |
|      |      |
+------+------+
или в верхней части:
+------------+
|            |
|     C      |
|            |
+------------+
|            |
|            |
+------------+
Поделитесь вашими наработками, желательно для 3.5.*.


{ rule = { class = "mpv" },             properties = { floating = true }, callback = function(c)
  local w_area = screen[ c.screen ].geometry
  c:geometry( { width = 640, height = 400})
  c:geometry( { x = (w_area.width - c:geometry().width), y = (w_area.height - c:geometry().height) } )
end},

Запускаю mpv небольшим окном в нижнем правом углу

disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 1)
Ответ на: комментарий от disarmer

Спасибо, но со стартом определенных приложений в заранее указанных размерах всё понятно, имелось в виду управлять размером любого приложения по хоткею.

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

управлять размером

и не просто управлять размером и расположением, типа так:

awful.key({ modkey }, "Next",   function () awful.client.moveresize( 20,  20, -40, -40) end),
awful.key({ modkey }, "Prior",  function () awful.client.moveresize(-20, -20,  40,  40) end),
awful.key({ modkey }, "Down",   function () awful.client.moveresize(  0,  20,   0,   0) end),
awful.key({ modkey }, "Up",     function () awful.client.moveresize(  0, -20,   0,   0) end),
awful.key({ modkey }, "Left",   function () awful.client.moveresize(-20,   0,   0,   0) end),
awful.key({ modkey }, "Right",  function () awful.client.moveresize( 20,   0,   0,   0) end),
а именно как указано в первом посте, максимизировать по правой стороне во весь рост и т.п.

vim
() автор топика

Я пользовался осомом еще второй версии, там у меня был хоткей, помещающий текущее окно в лэйаут. Куда прилепится окно зависело от лэйаута. Это динамический тайлинг, а тебе нужен статический, не знаю умеет ли его осом.

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

имелось в виду управлять размером любого приложения по хоткею.

Ну, как мне видится, привязать хоткеи к каждому клиенту, там уже ресайзить как угодно, вроде:

clientkeys = awful.util.table.join(
  awful.key({ modkey }, "Next", function (c) c:geometry( {...}) end)
)

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

А если у тебя ужо одно окно приклеено, а второе во флоате, а ты второй раз нажмешь хоткей? Что ж все клещами вытягивать приходится, партизан что ли?

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

Спасибо, запилил себе:

local wa = screen[mouse.screen].workarea
ww = wa.width
wh = wa.height

clientkeys = awful.util.table.join(

    awful.key({ modkey, "Control" }, "Left", function (c)
        c:geometry( { width = ww / 2, height = wh, x = 0, y = 22 } )
    end),

    awful.key({ modkey, "Control" }, "Right", function (c)
        c:geometry( { width = ww / 2, height = wh, x = ww / 2, y = 22 } )
    end),

    awful.key({ modkey, "Control" }, "Up", function (c)
        c:geometry( { width = ww, height = wh / 2, x = 0, y = 22 } )
    end),

    awful.key({ modkey, "Control" }, "Down", function (c)
        c:geometry( { width = ww, height = wh / 2, x = 0, y = wh / 2 } )
    end),

)
Можно конечно на mod4+Ctrl+hjkl, надо прикинуть.

Возможно можно как-то короче, но работает отлично - уже хорошо.

Всем спасибо.

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

для нижнего положения нужно еще добавить 22 пикселя высоты панели:

awful.key({ modkey, "Control" }, "Down", function (c)
        c:geometry( { width = ww, height = wh / 2, x = 0, y = wh / 2 + 22 } )
    end),
можно еще доработать, чтобы не указывать высоту панели, а жрат из mywibox[s].height или как-то так.

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

Сломается, если сменить разрешение на ходу или есть два дисплея с разным разрешением.

Возможно можно как-то короче,

Можно, но с потерей читаемости, с четырьмя кнопками не стоит

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

Сломается

если сменить разрешение на ходу

Частенько у тебя такое бывает на настроенной рабочей станции? :)

или есть два дисплея с разным разрешением

мне как раз доставят послезавтра 27" Iiyama, затестю отпишу.

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

Частенько у тебя такое бывает

бывает иногда, из-за фиговых игр

А чего тестировать, видно же что геометрия экрана считается при запуске всего один раз, ww и wh берутся из дисплея, на котором находится курсор. Соответственно на соседнем дисплее с другим разрешением будет выравнивать не так. Очевидно, что для починки надо вычислять ww/wh в каждом колбеке, но это почти в два раза увеличит код

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

Я пользовался осомом еще второй версии

попробуй вышеуказанный кусок

Ну ок.

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

Ух ты, iiyama ещё жива!

Мы их мониторы когда-то покупали для заказчика, потом они как-то выпали из моего поля зрения. Хорошие были мониторы.

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