Como você implementa o layout com a inicialização automática de aplicativos no gerenciador de janelas i3?

23

Este é um acompanhamento de uma pergunta anterior sobre como iniciar automaticamente aplicativos em áreas de trabalho individuais com o gerenciador de janelas i3 e o que pode e não pode ser feito dentro do ~/.i3/configarquivo de configuração.

Primeiro, a solução fornecida com base na documentação do Arch Linux e uma atualização fornecida pelo op, onde ele aprimora a lógica:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'

Também é interessante essa discussão sobre como alavancar parte disso diretamente na linha de comando sem duplicar:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

Mas nunca vi uma configuração que inicie automaticamente muitas janelas / aplicativos em cada área de trabalho, de acordo com o layout vertical ou horizontal desejado. Meu objetivo é iniciar automaticamente essa configuração simples que eu uso:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

Então começa com algo assim no configarquivo:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

Mas como você consegue o tipo de layout e a divisão vertical / horizontal que deseja? Estou tentando, mas não está claro como você "mistura" a execução e o layout. A sintaxe parece idiossincrática ao iniciar, porque você está executando i3-imgna configuração do i3. Você usa split h(ou v) - layout split v- exec layout split v- focus down(ou direita) entre cada execchamada?

Para um único espaço de trabalho, a configuração inicia todos os aplicativos na vertical ou na horizontal e não consigo influenciar o layout - ou o último splitcomando da cadeia decide se as janelas são adicionadas na vertical ou na horizontal. i3-msgaparentemente ignora partes do comando que não são formatadas corretamente em alguns casos, por isso é difícil depurar. Isso é ainda mais agravado pelo fato de que você realmente precisa sair do X startxtodas as vezes para verificar os resultados, pois apenas atualizar a configuração mod+shift+Rnão será suficiente, mesmo que você feche tudo em cada um dos espaços de trabalho.

Qual é a maneira correta de configurar isso? Alguém tem uma solução que implementa algo assim? A documentação é bastante boa, mas não fornece um exemplo detalhado que combine execução e layout em vários espaços de trabalho.

Comunidade
fonte
Também expande isso .
Não é necessário usar FF ou urxvt para fornecer uma solução. Até onde eu sei, não há nada de especial nesses programas, para que alguém possa reproduzir o layout nº 2 com quaisquer programas, salvar um arquivo json, removê-lo, ver se ele pode ser iniciado a partir do arquivo de configuração no login e simplesmente alterar os nomes dos programas antes de enviar uma resposta ...
você pode fazer o upload da peça no seu arquivo i3 em combinação com o layout json salvo / restaurado, por favor? Eu tenho o mesmo problema .. mas não o faça funcionar. Você usa vários monitores no seu arquivo config / json?

Respostas:

11

Acredito que você esteja procurando pelo novo recurso de economia de layout que foi introduzido no i3 v4.8 (15/06/2014). A documentação vinculada parece bastante completa.

Citando a partir da documentação:

A economia / restauração de layout permite carregar um arquivo de layout JSON, para que você possa ter um layout básico para começar a trabalhar após ligar o computador. Casos de uso dinâmicos também vêm à mente: se você frequentemente (mas nem sempre!) Precisa de um layout de grade de terminais com comandos ping / traceroute para diagnosticar problemas de rede, é possível automatizar facilmente a abertura dessas janelas no layout certo.

... e as notas de versão :

tl; dr: exporte 1 seu layout atual como arquivo JSON, carregue-o em novas sessões do i3, obtenha janelas de espaço reservado que serão substituídas pelos aplicativos reais assim que você os iniciar.


1. Você pode precisar dos pacotes perl-anyevent-i3 e perl-json-xs para usar o i3-save-treeutilitário.

damien
fonte
3
O recurso de layout é surpreendentemente desafiador de usar. Seu conceito de janela de espaço reservado que "engole" os aplicativos significa que, se você desejar muitas vezes o mesmo aplicativo lxterminalou urxvtpara um único espaço de trabalho, será necessário diferenciá-los usando --name somethingquando executá-los em .i3 / config. O exemplo no documento funciona, mas quando uso uma exportação de um dos meus espaços de trabalho, não consigo fazê-lo funcionar. Você usa classe para o nome e instância para o que usou com --name. Nesse caso, só posso esperar seriamente por uma ferramenta de GUI, pois o formato json tem tantos colchetes!
1
Atualizei agora para 4.8 e estou muito feliz com esse novo recurso. Eu sempre tive alguns problemas para iniciar as coisas de maneira confiável no login, .i3/configtambém nas versões anteriores, mas, quando estou conectado corretamente, tudo funciona bem. O que fiz foi organizar alguns layouts e salvá-los, depois editar apenas as variáveis ​​de classe dos arquivos json. Então, algo como i3-msg workspace 2\; append_layout mylayout.json\;e, em seguida, i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditdeve restaurar o seu primeiro layout desejado. // Obrigado por melhorar minha resposta, btw.
damien