Я сделал ваш вопрос моей задачей на сегодня, и мне удалось получить рабочую версию. Будьте осторожны, это довольно хакерский! Насколько я знаю, нет другого способа сделать это. Тем более, что есть проблема в применении правил.
Что мы делаем? При выполнении Mod4 + r
мы сохраняем текущий фокусированный тег в список. При применении правил к появившимся окнам мы выталкиваем соответствующий тег из списка. Нам нужна функция Once, потому что в awesome на данный момент есть ошибка, и она дважды применяет правила к окну. Мы должны исключить наш эмулятор терминала (и все другие программы, которые мы запускаем с привязкой клавиш), потому что в противном случае он открывается в теге, где мы в последний раз нажимали Mod4 + r
.
Вам нужны следующие функции в вашем rc.lua.
local rule_count = 0
local tag_count = 0
local run_tag = {}
local function once()
if rule_count == 1 then
rule_count = 0
else
rule_count = 1
end
return rule_count
end
local function get_run_tag()
if once() == 1 then
if tag_count > 0 then
tag_count = tag_count - 1
return table.remove(run_tag)
else
return "1"
end
end
end
local function push_run_tag(tag)
table.insert(run_tag, tag)
tag_count = tag_count + 1
end
Затем найдите следующую часть в вашем rc.lua:
{ rule_any = {type = { "normal", "dialog" }},
properties = { titlebars_enabled = false } -- or true
},
И добавьте несколько строк, чтобы они выглядели так:
{ rule_any = {type = { "normal", "dialog" }},
except_any = { class = { "Termite" }},
properties = { titlebars_enabled = false, tag = function() return
get_run_tag() end}
},
Вы должны заменить Termite
на консольный эмулятор, который обычно запускается с Mod4 + return
. В дополнение к этому вам нужно добавить каждую программу в таблицу классов, которую вы хотите начать с привязки клавиш.
Затем найдите привязку клавиш Mod4 + r
. На данный момент ему должно понравиться это:
awful.key({ modkey }, "r", awful.screen.focused().mypromptbox:run()
{description = "run prompt", group = "launcher"}),
Измените это так, чтобы это выглядело так:
awful.key({ modkey }, "r", function ()
awful.screen.focused().mypromptbox:run()
push_run_tag(awful.screen.focused().selected_tag.name)
end,
{description = "run prompt", group = "launcher"}),
Буду признателен за лучшие решения!
PS: это не будет работать для приложений, таких как Steam, потому что он всплывает несколько окон. Первый получает правильный тег. Следующее нерестится на теге "1".