В настоящее время я пробую удивительный продукт из KDE / MATE уже много лет, и мне это очень нравится. На самом деле есть только одна вещь, которой мне не хватает в моих предыдущих рабочих процессах.
Иногда я работаю с приложениями, в которых много плавающих окон. Что я нашел чрезвычайно полезным в плавающих WM, так это возможность свернуть или заштриховать окно, в основном сохраняя только заголовок приложения, но скрывая его содержимое окна.
Возможно ли это в офигенном? В качестве альтернативы есть другие варианты, такие как вкладки окон (как в i3), или у вас есть другие предложения?
Заранее большое спасибо!
Is this possible in awesome?
Теоретически да, но практически я не знаю никого, кто реализовал необходимую магию, чтобы заставить это работать должным образом. Полухорошим первым приближением может быть изменение размера окна до высоты 1.
Непроверенный скетч:
function toggle_roll_up_or_shade(c)
if c.shade then
c:geometry{ height = c.shade }
c.shade = nil
c.size_hints_honor = c.size_hints_honor_before_shade
elseif c.floating then
c.shade = c.height
c.size_hints_honor_before_shade = c.size_hints_honor
c.size_hints_honor = false
c:geometry{ height = 1 }
end
end
Вышеупомянутая функция затем будет привязана к какой-либо клавише, аналогичной тому, как Mod+Ctrl+Space привязан к awful.client.floating.toggle
в конфигурации по умолчанию.
Вот вариант, который может работать на AwesomeWM v3.5:
function toggle_roll_up_or_shade(c)
if awful.client.property.get(c, "shade") then
c:geometry{ height = c.shade }
awful.client.property.set(c, "shade", nil)
c.size_hints_honor = c.size_hints_honor_before_shade
elseif c.floating then
client.property.set(c, "shade", c.height)
client.property.set(c, "size_hints_honor_before_shade", c.size_hints_honor)
c.size_hints_honor = false
c:geometry{ height = 1 }
end
end
Кроме того, если вы хотите получить высоту заголовка, вы должны использовать local _, height = c:titlebar_top()
. Я не уверен, работает ли это также в AwesomeWM v3.5.
Вот что я имел в виду под отключением подсказок по размеру. Подсказки по размеру позволяют клиентам сказать: "Дорогой WM, мне нужен хотя бы размер 50x30". См., например. awesomewm.org/doc/api/documentation/90-FAQ.md.html. Я обновил ответ, чтобы также отключить подсказки по размеру.
Понятно, теперь это имеет для меня смысл :) Затенение работает, как и ожидалось! Мне просто нужно установить «высоту» в размер моего заголовка, а не 1, чтобы он работал. Последняя проблема, с которой я столкнулся, — вернуть окно в прежний режим. Кажется, я не могу установить пользовательские атрибуты для окон. c.shade
всегда будет возвращать ноль для меня. Как и в вашем примере, я могу получить текущую высоту окна, вызвав c:geometry().height
, но когда я пытаюсь установить c.shade = c:geometry().height
, значение не устанавливается. Какие-либо предложения?
О, вы же написали, что у вас стоит Awesome v3.5.1. Извините, я пропустил эту часть. Только начиная с v4 можно писать произвольные свойства клиентам. Я обновлю свой ответ, чтобы использовать awful.client.property.set
.
Большое спасибо! Это помогло! Просто пришлось изменить все экземпляры ваших клиентских вызовов на awful.client.property.get/set
, и теперь все работает как положено. Вы здорово помогли! Время, которое вы потратили, помогая мне в этом, высоко ценится :)
Большое спасибо за ваш быстрый отзыв! Я поиграл с вашим фрагментом, но понял, что он в основном ничего не сделал для меня. После расследования я заметил, что могу изменить высоту окон только до определенного размера. К сожалению, высота 1 в соответствии с вашим примером у меня не сработала. Однако, если я изменю его на что-то вроде 50, это сработает.
awful.key({ modkey }, "a", function (c) c:geometry{ height = 50 } end)
Я понял, что совершил ошибку новичка, не упомянув, что я не использую последнюю версию awesome (v 3.5.1), поскольку я использую CentOS. Может ли это быть ограничением?