Для нового вопроса:
Ваш фрагмент кода не работает, потому что вы проверяете, виден ли клиент, а затем переключаете случайный wibox (хорошо, не такой случайный). Wibox будет отображаться и скрываться много раз, если вы делаете это для каждого клиента. Таким образом, вы получаете ~ 50% изменение возврата к исходному состоянию и ~ 50% изменение отсутствия wibox и возможности его вернуть.
Я расширю последнюю часть моего предыдущего ответа, поскольку теперь это вопрос.
Что вы хотите:
- Скрыть вайбар (
mywibox
) при запуске rofi
- Скрыть всех клиентов при запуске rofi
- Восстановить wibar, когда rofi существует
- Возможно, снова отобразить тег (или нет, на ваше усмотрение).
Проблемы:
- Вы не знаете, когда Рофи выходит
- Вы не знаете, когда появится Рофи
- Вы не знаете имен вещей, которые хотите скрыть
- Нужно скрыть теги и вайбар
Проблема 3:
Не ваша вина, в версии 3.5 нет документации по этому поводу, и вики в равной степени сбивает с толку.
awful.wibox
(теперь переименованный в wibar) — это штука в верхней части экрана.
wibox
— это случайный свободно плавающий виджет на экране. Вибар — это тип вайбокса, работающий как панель.
- Клиент — это окно на экране
- Тег похож на виртуальную рабочую область
Проблема 2:
Это сложно. Когда вы запускаете команду, существует задержка между этим и появлением приложения. Есть способы его обнаружить, но они не тривиальны. Пока вы можете игнорировать эту проблему.
Проблема 1:
Это то, что вам действительно нужно решить. Awesome 3.5 не имеет хорошего API для отслеживания жизненного цикла от команды до выхода из приложения. Awesome 4.0 немного лучше, но решить эту проблему сложно. Однако вы должны знать class
rofi (используя xprop
). Как только вы это узнаете, вы можете упростить проблему, заботясь только о том, чтобы «создать событие, когда rofi выходит». Код для этого:
client.connect_signal("unmanage", function(c)
if c.class == "whatever_its_class_is" then
-- watch out of you have multiple screens, this may be too simplified.
mywibox[mouse.screen].visible = true
-- show the first tag, change this to what you prefer
awful.tag.gettags(mouse.screen)[1].selected = true
end
end)
Проблема 4:
Простой способ скрыть текущий тег (предполагается, что у вас есть 1 экран и 1 выбранный тег для простоты)
awful.tag.selected().selected = false
Скрыть основной вайбар (при условии, что вы сохранили имя по умолчанию)
mywibox[mouse.screen].visible = false
Исходный ответ: (вопрос изменился)
Ну, c
это просто переменная. В данном случае вы никогда его не определяли, так что это nil
.
Я думаю, вы хотите, чтобы все видимые в настоящее время client. Чтобы проверить это, используйте client:isvisible().
Вы можете зациклиться на всех клиентах, используя
for _, c in ipairs(client.get()) do
if c:isvisible() then
-- do something
end
end
Как показано в документации клиента (https://awesomewm.org/apidoc/classes/client.html [1])
При этом я не понимаю, как подходят описание и вопрос/код. Если вы хотите скрыть все, снимите все теги и скройте вайбар. Возиться с заголовками (вещь поверх клиентов) кажется довольно ненужным.
[1] Ссылка предназначена для Awesome 4.0, но в данном случае не сильно отличается от API 3.5.
person
Emmanuel Lepage Vallee
schedule
09.01.2017