Forçando a janela de um aplicativo a abrir no espaço de trabalho no qual ele foi executado

0

Demora um segundo ou dois para abrir um programa (por exemplo, Anki ou Slack) e, com frequência, abro vários programas por vez em diferentes áreas de trabalho. Aqui está o que eu gostaria de acontecer:

  • Pressione Mod + R e digite "anki" em Workspace 1
  • Mude para Workspace 2 press Mod + R e digite "discord"
  • Mude para Workspace 3 press Mod + R e digite "libreoffice"
  • Mude para Workspace 4 e navegue no Firefox
  • Anki abre em Workspace 1 , Discord abre em Workspace 2 , Libre Office é aberto em Workspace 3 , tudo enquanto estou visualizando Workspace 4 .

Em vez disso, o que acaba acontecendo é que Anki, Discord e Libre Office são abertos em Workspace 4 , independentemente de qual espaço de trabalho eu estava visualizando quando os executei.

Existe uma maneira de alcançar a situação marcada acima sem ter que atribuir explicitamente um programa a um espaço de trabalho ? (Eu posso nem sempre querer Anki em Workspace 1 , por exemplo; Eu quero que ele abra em w / e espaço de trabalho que eu estava vendo quando eu digitei "anki".)

    
por AmagicalFishy 16.06.2017 / 13:24

1 resposta

0

Eu fiz a sua pergunta minha tarefa para esta noite e consegui uma versão funcional. Tenha cuidado, é bastante hacky! Tanto quanto sei, não há outro jeito de fazer isso. Especialmente porque há um bug incrível com a aplicação de regras.

O que estamos fazendo? Ao executar Mod4 + r , salvamos a tag focada atual em uma lista. Ao aplicar regras a janelas aparecendo, nós colocamos a tag correspondente na lista. Precisamos da função once porque awesome tem um bug no momento e aplica regras duas vezes para uma janela. Temos que excluir o nosso emulador de terminal (e todos os outros programas que iniciamos com a ligação de chaves) porque, caso contrário, ele está sendo aberto na tag em que pressionamos Mod4 + r pela última vez.

Você precisa das seguintes funções no seu 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

Em seguida, procure a seguinte parte em seu rc.lua:

{ rule_any = {type = { "normal", "dialog" }},
    properties = { titlebars_enabled = false } -- or true
},

Adicione algumas linhas para que pareçam assim:

{ rule_any = {type = { "normal", "dialog" }},
    except_any = { class = { "Termite" }},
    properties = { titlebars_enabled = false, tag = function() return 
get_run_tag() end}
},

Você tem que substituir Termite pelo emulador de console que você geralmente começa com Mod4 + return . Além disso, você precisa adicionar cada programa à tabela de classes que deseja iniciar com as combinações de teclas.

Em seguida, procure a ligação da chave Mod4 + r . No momento, deve gostar deste:

awful.key({ modkey }, "r", awful.screen.focused().mypromptbox:run()
          {description = "run prompt", group = "launcher"}),

Altere para que fique assim:

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"}),

Gostaria de receber melhores soluções!

PS: Isso não funcionará para aplicativos como o Steam porque ele exibe várias janelas. O primeiro recebe a tag correta. Os seguintes estão gerando a tag "1".

    
por 25.11.2017 / 03:09