Свернуть / затенить плавающие окна в awesome?

В настоящее время я пробую удивительный продукт из KDE / MATE уже много лет, и мне это очень нравится. На самом деле есть только одна вещь, которой мне не хватает в моих предыдущих рабочих процессах.

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

Возможно ли это в офигенном? В качестве альтернативы есть другие варианты, такие как вкладки окон (как в i3), или у вас есть другие предложения?

Заранее большое спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
364
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.

Большое спасибо за ваш быстрый отзыв! Я поиграл с вашим фрагментом, но понял, что он в основном ничего не сделал для меня. После расследования я заметил, что могу изменить высоту окон только до определенного размера. К сожалению, высота 1 в соответствии с вашим примером у меня не сработала. Однако, если я изменю его на что-то вроде 50, это сработает. awful.key({ modkey }, "a", function (c) c:geometry{ height = 50 } end) Я понял, что совершил ошибку новичка, не упомянув, что я не использую последнюю версию awesome (v 3.5.1), поскольку я использую CentOS. Может ли это быть ограничением?

julsVFX 11.04.2019 23:02

Вот что я имел в виду под отключением подсказок по размеру. Подсказки по размеру позволяют клиентам сказать: "Дорогой WM, мне нужен хотя бы размер 50x30". См., например. awesomewm.org/doc/api/documentation/90-FAQ.md.html. Я обновил ответ, чтобы также отключить подсказки по размеру.

Uli Schlachter 13.04.2019 09:08

Понятно, теперь это имеет для меня смысл :) Затенение работает, как и ожидалось! Мне просто нужно установить «высоту» в размер моего заголовка, а не 1, чтобы он работал. Последняя проблема, с которой я столкнулся, — вернуть окно в прежний режим. Кажется, я не могу установить пользовательские атрибуты для окон. c.shade всегда будет возвращать ноль для меня. Как и в вашем примере, я могу получить текущую высоту окна, вызвав c:geometry().height, но когда я пытаюсь установить c.shade = c:geometry().height, значение не устанавливается. Какие-либо предложения?

julsVFX 14.04.2019 16:11

О, вы же написали, что у вас стоит Awesome v3.5.1. Извините, я пропустил эту часть. Только начиная с v4 можно писать произвольные свойства клиентам. Я обновлю свой ответ, чтобы использовать awful.client.property.set.

Uli Schlachter 15.04.2019 17:38

Большое спасибо! Это помогло! Просто пришлось изменить все экземпляры ваших клиентских вызовов на awful.client.property.get/set, и теперь все работает как положено. Вы здорово помогли! Время, которое вы потратили, помогая мне в этом, высоко ценится :)

julsVFX 15.04.2019 21:19

Другие вопросы по теме