LINUX.ORG.RU

Awesome 4: гибкое управление окнами

 ,


2

3

Хочется использовать что-то более легковесное и клавиатурное, присматриваюсь к Awesome. Основная требуемая функциональность по управлению окнами с клавиатуры:

1. mini/maxi-mize - с этим вроде понятно (modkey-n modkey-m);

2. управление положением окна с клавиатуры - хочется привычное modkey+left/down/up/right для перемещения окна на соответствующую сторону экрана и изменение размера в 100%w 50%h или наоборот в зависимости от стороны. Как реализовать?

3. Быстрое переключение между композитными режимом (п.2 или таскаем мышью с зажатым modkey, прилипаем к краями с изменением размеров ) и тайловым - расположение окон обычно в два рядом, если возможно - автоматически при переходе в режим. titlebar не нужен, границы окна по минимуму. Реализуемо?


Кто-то из лорчан поделился ранее такой наработкой. Использую в своём конфиге:


function gg()
  local wa = screen[mouse.screen].workarea
  ww = wa.width
  wh = wa.height
  wx = wa.x
  wy = wa.y
end

     -- Windows Geometry mover
	awful.key({ modkey }, "KP_Left",  function (c) gg(); c:geometry( { width = ww / 2, height = wh - 2, x = wx, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Right", function (c) gg(); c:geometry( { width = ww / 2, height = wh - 2, x = wx + ww / 2, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Up",    function (c) gg(); c:geometry( { width = ww, height = wh / 2 - 2, x = wx, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Down",  function (c) gg(); c:geometry( { width = ww, height = wh / 2 - 2, x = wx, y = wh / 2 + ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Prior", function (c) gg(); c:geometry( { width = ww / 2, height = wh / 2 - 2, x = wx + ww / 2, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Next",  function (c) gg(); c:geometry( { width = ww / 2, height = wh / 2 - 2, x = wx + ww / 2, y = wh / 2 + ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Home",  function (c) gg(); c:geometry( { width = ww / 2, height = wh / 2 - 2, x = wx, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_End",   function (c) gg(); c:geometry( { width = ww / 2, height = wh / 2 - 2, x = wx, y = wh / 2 + ph } ) end,
			  {description = "position on screen", group = "window actions"}),
	awful.key({ modkey }, "KP_Begin", function (c) gg(); c:geometry( { width = ww, height = wh - 2, x = wx, y = ph } ) end,
			  {description = "position on screen", group = "window actions"}),
     
     -- Window Resize  
    awful.key({ "Control", modkey }, "Next",   function () awful.client.moveresize( 20,  20, -40, -40) end,
			  {description = "smaller window", group = "window actions"}),
    awful.key({ "Control", modkey }, "Prior",  function () awful.client.moveresize(-20, -20,  40,  40) end,
			  {description = "enlarge window", group = "window actions"}),
    awful.key({ "Control", modkey }, "Down",   function () awful.client.moveresize(  0,  20,   0,   0) end,
			  {description = "move down", group = "window actions"}),
    awful.key({ "Control", modkey }, "Up",     function () awful.client.moveresize(  0, -20,   0,   0) end,
			  {description = "move up", group = "window actions"}),
    awful.key({ "Control", modkey }, "Left",   function () awful.client.moveresize(-20,   0,   0,   0) end,
			  {description = "move left", group = "window actions"}),
    awful.key({ "Control", modkey }, "Right",  function () awful.client.moveresize( 20,   0,   0,   0) end,
			  {description = "move right", group = "window actions"})

Deleted
()

Как реализовать?

Для всего уже есть функции, читай документацию.

Реализуемо?

Переключение режимов искаропки, в том числе переключение режима одного окна. Перемещение плавающих окон придётся дописать (получится не больше десяти строк), тоже читай документацию.

mord0d ★★★★★
()

3-e, если я тебя правильно понял, из коробки должно работать если выбран «floating» layout

а поводу перемещения окон я как раз в соседней теме объяснял вкратце свой подход: awesome wm wtf is urgent client (комментарий)

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

Ок, посмотрел, полезно, ковырну.

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

Реально полезная вещь, благодарствую, вкручу в конфиг)

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

Я давно awesome юзаю, понял что дефолт довольно удобен и заморачиваться переделывать конфиг смысла особого нет (виджеты ток).

Учти, что awesome иногда ломается после мажорных апдейтов, будешь править lua и чем больше нахимичишь - тем больше потом править.

Основной кейс юзанья:

«O8» - главное окно и плитка справа, переключения в дефолте: mod+space / shift+mod+space - между флоатом и «О8».

mod+F - фокусное окно в фулскрин и обратно.

mod+j - переключение фокуса, mod+l/h - передвижение гайда между главным окном и правым стэком.

ctrl+mod+space - переключение активного окна в флоат и обратно

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

BaBL ★★★★★
()
Последнее исправление: BaBL (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.