Требуется секунда или две, чтобы открыть программу (то есть - Anki или Slack), и я часто открываю несколько программ одновременно - в разных рабочих пространствах. Вот что я хотел бы случиться:

  • Нажмите Mod + R и введите "Anki" в Workspace 1
  • Переключитесь в Workspace 2 нажмите Mod + R и введите "Discord"
  • Переключитесь в рабочую Workspace 3 нажмите Mod + R и введите "libreoffice"
  • Переключитесь на Workspace 4 и просмотрите Firefox
  • Anki открывается в Workspace 1 , Discord открывается в Workspace 2 , Libre Office открывается в Workspace 3 , все время, пока я смотрю Workspace 4 .

Вместо этого в конечном итоге происходит то, что Anki, Discord и Libre Office открываются в Workspace 4 независимо от того, какое рабочее пространство я просматривал, когда запускал их.

Есть ли способ достижения вышеупомянутой маркированной ситуации без необходимости явного назначения программы рабочей области? (Например, я не всегда хочу Anki в Workspace 1 ; я хочу, чтобы она открывалась в рабочей области, которую я просматривал, когда набирал "anki".)

1 ответ1

0

Я сделал ваш вопрос моей задачей на сегодня, и мне удалось получить рабочую версию. Будьте осторожны, это довольно хакерский! Насколько я знаю, нет другого способа сделать это. Тем более, что есть проблема в применении правил.

Что мы делаем? При выполнении 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".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .