- AeroSpace é um gerenciador de janelas em mosaico em fase beta para macOS que oferece uma forma de uso semelhante ao i3, com foco em layouts baseados em árvore e em um fluxo de trabalho centrado no teclado
- Ele não depende dos Spaces nativos do macOS; usa sua própria emulação de workspaces virtuais, destacando trocas rápidas de workspace sem animações e uma configuração que funciona sem desativar o SIP
- A configuração é baseada em TOML em texto simples, com design CLI-first, incluindo manpage e autocompletar no shell; múltiplos monitores são suportados em um paradigma semelhante ao do i3
- Atualmente está em Public Beta e pode ser usado no dia a dia, mas breaking changes são esperadas antes da versão 1.0; antes da 1.0, ainda restam uma grande refatoração, combinadores no estilo shell e investigação de APIs de atalhos globais
- Os valores do projeto são voltados a usuários avançados e desenvolvedores, uso centrado no teclado, recursos práticos e manutenção baseada em APIs públicas de acessibilidade; configuração via GUI, harmonia com macOS Spaces e ricing têm baixa prioridade
O ambiente de tiling para macOS oferecido pelo AeroSpace
- AeroSpace é um gerenciador de janelas em mosaico para macOS, semelhante ao i3
- Demonstrações e documentação são fornecidas separadamente
Principais recursos e design
- A organização das janelas é composta como um gerenciador de janelas em mosaico baseado no paradigma de árvore
- A experiência de uso é inspirada no i3
- A troca de workspaces funciona rapidamente, sem animações, e não exige desativar o SIP
- Os Spaces nativos do macOS têm limitações significativas, por isso não são usados; o AeroSpace emula seus próprios workspaces virtuais
- A configuração é em texto simples, adequada para dotfiles, e um exemplo de configuração padrão pode ser visto em default-config.toml
- O design prioriza a CLI e inclui manpage e autocompletar no shell
- Múltiplos monitores são suportados em um paradigma semelhante ao do i3
Instalação e condições relacionadas à segurança
- O método de instalação recomendado é o Homebrew cask, com suporte a atualizações automáticas
brew install --cask nikitabobko/tap/aerospace
- Em ambientes com múltiplos monitores, é preciso verificar se os monitores estão posicionados corretamente
- Outros métodos de instalação estão no guia de instalação
- O AeroSpace não está notarized
- O script de instalação do Homebrew é configurado para remover automaticamente o atributo
com.apple.quarantine
- Por causa dessa configuração, o app deve funcionar diretamente, sem o aviso “Apple cannot check AeroSpace for malicious software”
Status do projeto e trabalhos antes da 1.0
- O status atual é Public Beta
- É possível usá-lo no dia a dia, mas deve-se esperar breaking changes até chegar à versão 1.0
- Entre os trabalhos que ainda bloqueiam o lançamento da 1.0 estão os itens abaixo
- Problema de desempenho: a implementação de uma thread por application para contornar a blocking AX API do macOS já foi concluída
- Grande refatoração: reescrever a estrutura de dados mutable double-linked core tree como uma immutable single-linked persistent tree
- É importante para estabilidade e desempenho potencial
- Ajuda a corrigir um problema de estabilidade em que uma janela pode se mover aleatoriamente para o workspace em foco
- Ajuda no suporte a macOS native tabs
- Implementação de combinadores no estilo shell
- A abordagem mínima mais provável é introduzir
||, &&, ; e o comando eval, que envia vários comandos de uma vez
- Investigação sobre a possibilidade de usar a API
CGEvent.tapCreate para atalhos globais
- Talvez seja possível, ou talvez não, distinguir modifiers esquerdo e direito
- Entre os grandes temas planejados para depois da 1.0 estão sticky windows e Dynamic TWM
Valores e não objetivos do projeto
- O AeroSpace é voltado a usuários avançados e desenvolvedores
- O uso centrado no teclado é um objetivo
- Breaking changes em arquivos de configuração, CLI e comportamento são evitadas sempre que possível, mas mudanças desse tipo podem ocorrer com cautela para evitar a estagnação do software
- Após a 1.0, é garantido que breaking changes elevem a versão major segundo SemVer
- Antes da 1.0, breaking changes podem simplesmente acontecer
- GUI não é usada salvo quando estritamente necessário
- Não há plano de oferecer uma GUI para configuração
- Um ícone de menu de status para feedback visual é permitido
- Recursos são avaliados pela praticidade; recursos visuais como bordas de janela, transparência e animações não são considerados recursos práticos
- “Dark magic”, como private API e injeção de código, é evitada sempre que possível
- Atualmente, apenas uma private API,
_AXUIElementGetWindow, é usada para obter o window ID de um objeto de acessibilidade
- Fora isso, são usadas APIs públicas de accessibility do macOS
- Não exige desativar o SIP
- O objetivo é uma configuração resistente a atualizações do macOS e fácil de manter
- Integrar-se bem a recursos existentes do macOS não é um objetivo
- A existência dos macOS Spaces não é reconhecida, e a própria emulação de workspaces é usada
- Ricing tem baixa prioridade
- Há apenas suporte mínimo a gaps e alguns callbacks para integração com bar
- O maintainer atual não tem interesse em ricing, e a maioria das issues relacionadas recebe baixa prioridade ou é ignorada
- Se surgirem mais maintainers, a posição sobre ricing pode mudar
Compatibilidade, comunidade e projetos relacionados
- A compatibilidade com macOS depende do modo de build
- Executar o binário do AeroSpace: macOS 13+
- Debug build a partir do código-fonte: macOS 14+
- Release build a partir do código-fonte: macOS 15+, exige Xcode 26+
- Issues não são aceitas diretamente; é solicitado criar primeiro uma Discussion
- O GitHub Discussions tem canais de geral, anúncios, anúncios de releases, ideias de recursos, general, possíveis bugs e perguntas e respostas
- Os projetos relacionados apresentados são os seguintes
- Amethyst: gerenciador de janelas em mosaico no estilo xmonad
- InstantSpaceSwitcher: alternância imediata de space por meio da síntese de gestos de trackpad artificialmente rápidos
- yabai: gerenciador de janelas em mosaico para macOS baseado em binary space partitioning
1 comentários
Opiniões no Hacker News
Uso isso todos os dias e minha conclusão é que é a melhor forma de gerenciar janelas no Mac, mas ainda fica atrás do i3/sway
Em especial, o suporte para arrastar janelas e reorganizá-las em posições relativas umas às outras é muito limitado, então não dá para criar novas divisões verticais/horizontais como no sway. Por isso, para criar o layout de janelas que quero, na maioria das vezes preciso contornar isso com comandos de teclado meio desajeitados
Por exemplo, quando há duas janelas lado a lado e quero dividir uma delas verticalmente, no sway basta abrir uma nova janela e arrastá-la para a metade superior/inferior da janela existente. No AeroSpace, o melhor que encontrei foi abrir uma nova janela, transformar as três janelas em uma pilha vertical e então focar a janela que originalmente estava à esquerda e executar
move leftSe você deixar a normalização (normalization) ativada, não precisa “mudar para pilha vertical”
Neste layout:
h_tiles
├── window1 (focused)
├── window2
└── window3
Ao executar
move left, fica assim:h_tiles
├── window1 (focused)
└── v_tiles
├── window2
└── window3
Eu nem sabia que dava para arrastar e soltar janelas no sway. Eu seleciono a janela que quero dividir, defino a divisão vertical com
Command + ve crio uma nova janela, geralmente um terminalOu então movo a janela com
Command + Shift + [hjkl]Estou pensando em testar para ver se meu principal problema é resolvido primeiro. Estou procurando uma forma no Mac que consiga lembrar a disposição das telas de maneira decente
Sempre que acordo o computador após inicializar, minha área de trabalho com 3 telas fica em estado de amnésia completa
Idealmente, eu gostaria de operar meus próprios espaços de trabalho e poder usar só a tela do notebook ou 2–3 monitores externos em mesas diferentes no trabalho/em casa
Uso o Spectacle, mas ele não é mais mantido
Não testei este, mas uso o yabai, e ele funciona exatamente da forma que você descreveu
É muito interessante que não seja necessário desativar o
SIP. Praticamente todos os gerenciadores de janelas parecidos exigem desativar o SIP, então eu ficava hesitanteFico curioso para saber o que o AeroSpace faz de diferente para conseguir funcionar com o SIP
O que encontrei no README:
O AeroSpace não exige que você desative o SIP (System Integrity Protection). Por exemplo, o yabai exige que o SIP seja desativado para usar alguns recursos. O AeroSpace encontra outros caminhos, por exemplo emulando espaços de trabalho, ou simplesmente não implementa o recurso. Transparência de janelas e sombras de janelas não são recursos práticos
Mas eu realmente gostava do recurso do yabai em que o foco segue o mouse, então fico me perguntando se seria possível deixar o AeroSpace cuidando dos recursos tipo i3 e usar o yabai só para isso
Excelente. Eu vinha usando o Amethyst até agora, mas gostei mais do AeroSpace imediatamente
O que mais me incomoda no Amethyst é que ele arremessa janelas de um jeito muito lento e instável. No AeroSpace, as janelas se movem instantaneamente para outro espaço de trabalho/monitor e não falham
Também gosto do fato de ele abandonar completamente os espaços de trabalho nativos do macOS e usar seus próprios espaços de trabalho virtuais. Como o autor disse, o método nativo é bem insatisfatório, e esta abordagem torna uma configuração com vários monitores suportável e até um pouco agradável de usar
No meu computador de trabalho, eu não podia usar o yabai porque exigia desativar o SIP, e o autor do AeroSpace é explicitamente contra isso; essa decisão me parece razoável
Quando eu usava Linux, migrei do i3 para o xmonad, mas no macOS o AeroSpace definitivamente parece melhor. Todos os três gerenciadores de janelas do macOS ficam atrás dos gerenciadores de janelas de verdade do Linux, mas o AeroSpace parece chegar perto do melhor possível dentro das limitações
Gosto da abordagem de Spaces falsos
Já pensei em tentar algo parecido minimizando janelas, mas nunca fiz de fato
No macOS, por falta de APIs, o tiling inevitavelmente acaba sendo deprimente. Ainda assim, esta provavelmente é a abordagem com melhor desempenho
Usei o yabai, mas só para mover janelas e para o foco seguir o mouse; não usei para tiling. Era instável, e não por culpa do yabai
Obrigado, nikitabobko
Agora, se eu descobrir como fazer o alt-tab ignorar as janelas de todos os espaços de trabalho falsos reunidas no canto, começo a usar na hora
O JankyBorders linkado na documentação também é bom
https://github.com/koekeishiya/yabai
https://github.com/lwouis/alt-tab-macos
https://github.com/FelixKratz/JankyBorders
alt+h/alt+jCommand+Tabé troca global de janelas, enquanto os atalhos acima são para troca local dentro do contexto do espaço de trabalhoEu me acostumei em certo grau com a ferramenta de gerenciamento de janelas do Raycast, mas na prática é difícil usá-la junto com o AeroSpace
Por exemplo, no Raycast dá para usar a opção
reasonable sizepara abrir a janela em um tamanho adequado e centralizá-la. Também é possível criar divisões na metade esquerda/direita, maximizar ou usar quadrantes/terçosMas, no AeroSpace, mesmo tentando mover uma janela dentro de um tile para a metade esquerda, metade direita, 2/3 à esquerda, ou fazê-la flutuar com
reasonable size, não funcionaTambém há um bug ao mover apps com “next desktop” e “previous desktop”. O AeroSpace parece implementar os vários desktops do Mac como seus próprios workspaces, então o guia em vídeo na verdade mostra a alternância entre workspaces diferentes, não entre desktops diferentes
Como resultado, usar “next desktop” e “previous desktop” destrói completamente o tiling. Seria uma pena menor se os workspaces fossem diretamente vinculados a cada desktop do Mac, de modo que mover de workspace fosse o mesmo que mover de desktop, pois isso também teria alguma compatibilidade com o Raycast e os recursos nativos do macOS
O Raycast é realmente muito bom
Acho que vai se consolidar como um app padrão para power users de Mac daqui para frente
Tem tantos recursos úteis que preciso explorar direito. Eu uso mais a integração com o Linear.app
Nas últimas 5 versões do macOS, usei bastante o yabai no computador de trabalho sem desativar o SIP
Gosto muito dele, e o tiling só fica instável mais ou menos uma vez a cada poucos dias. Mesmo eu executando comandos do yabai pelo menos uma vez por minuto, deixei
yabai --restart-serviceatrelado a um atalho de teclado, e sempre volta imediatamente quando executoPor isso acho bem estável e excelente. Multimonitor é difícil e não uso muito, mas stacks e a minimização rápida no estilo “tela cheia” são muito bons
Em algumas atualizações de versão, o antivírus da empresa o identifica como vírus e o desativa por 24 horas; nesse dia, usar o computador parece tão lento e deprimente que dá até vontade de não usar
Venho usando há alguns meses. O i3 é quase perfeito e o AeroSpace é uma boa tentativa, mas ainda está bem longe do i3 e é bastante instável
Provavelmente porque o Mac OS X não permite controle total como um gerenciador de janelas Unix
Mesmo assim, ainda não encontrei nada melhor. Quando o Linux rodar bem no Apple Silicon, pretendo instalá-lo. Pelo menos para mim, só o i3 já é motivo suficiente para usar Linux, e o Mac OS X é realmente ruim em termos de gerenciador de janelas
Mexi um pouco numa área parecida como projeto de hobby, e o motivo é que as APIs oficiais são limitadas
No fim, você passa a depender muito de APIs privadas não documentadas e de hacks. Essas coisas são internas, então são instáveis, e o próprio sistema operacional não foi projetado para cooperar bem com situações em que há muita interferência no gerenciamento de janelas/processos. Por isso o sistema operacional e apps de terceiros acabam frequentemente pisando no pé um do outro
Tenho o mesmo problema. Ainda não encontrei um gerenciador de janelas que lide direito com o modo de tela cheia nativo do OSX
O AeroSpace fica perdido quando se usa a tela cheia nativa. Ele se confunde sobre onde deve colocar o foco
No meu caso:
Workspace 1: terminal
Workspace 2: app do Slack
Abrir o Chrome em tela cheia nativa
Agora, se eu trocar para o workspace 1, o problema aparece
Por enquanto pretendo continuar usando sem apps em tela cheia nativa. Espero que assim funcione melhor
Tenho curiosidade sobre a diferença de experiência de uso entre este produto e o Yabai. Não acho que o problema do SIP no Yabai seja uma grande questão. Entre os usuários de Yabai que conheço, ninguém desativa o SIP, e todos parecem usar bem
Fico curioso se a diferença é o estilo i3
Pessoalmente, uso um utilitário que, como o Fluxbox, permite redimensionar e mover janelas com o mouse a partir de qualquer ponto da janela enquanto mantenho pressionada uma combinação de teclas modificadoras. Não é automatizado, mas também não é instável. Em vez de ir para um modo totalmente gerenciado, é mais algo que reduz o movimento do mouse e torna o floating muito mais fácil
Usei bastante os dois e prefiro o AeroSpace
Para mim, o decisivo é o suporte a múltiplos monitores, além de outras pequenas vantagens
No Yabai, quando você move um workspace para um novo monitor, o ID muda, então não dá para continuar acessando por atalhos de teclado.
alt+2quebra porque ele não é mais o workspace 2, e sim 11 ou algum outro número. No AeroSpace, dá para mover facilmente workspaces entre monitores comalt+mealt+shift+mOutro recurso é que as janelas se encaixam instantaneamente, sem a animação do Mission Control. Isso era algo que realmente me incomodava muito
Essas duas são as funções de que preciso quase todos os dias, e por causa do suporte ruim a workspaces o Yabai, para mim, fica praticamente inutilizável
No Yabai, para lidar com Spaces de qualquer forma, mudar a ordem de empilhamento das janelas ou usar muitos outros recursos, é preciso desativar o SIP [0]
Se você não usa esses recursos, é escolha sua, mas para muitos usuários eles são funções essenciais
[0] https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...
Tenho curiosidade sobre o que o diferencia do Amethyst. O Amethyst ficou muito mais estável recentemente e estou usando com satisfação
A configuração baseada em texto parece bem boa à primeira vista, mas não sei se vale a pena migrar
Eu usava o Amethyst até agora, mas gostei mais do AeroSpace de cara
O que mais me incomoda no Amethyst é que ele joga as janelas de forma muito lenta e instável. No AeroSpace, as janelas se movem para outro workspace/monitor num instante e sem falhar
Também gosto do fato de ele abandonar completamente os workspaces integrados do macOS e usar seus próprios workspaces virtuais. Graças a isso, lidar com uma configuração de múltiplos monitores ficou tolerável e até um pouco agradável
Na época do Linux, migrei do i3 para o xmonad, mas no macOS o AeroSpace definitivamente parece melhor. Todos os três gerenciadores de janelas do macOS ficam aquém dos gerenciadores de janelas de verdade do Linux, mas o AeroSpace parece chegar perto do melhor possível dentro das limitações
Pela minha experiência, o AeroSpace é muito melhor na maioria dos aspectos
Há algumas coisas estranhas e ainda preciso abrir alguns bug reports, mas ele tornou o macOS muito mais tolerável do que o Amethyst
O Amethyst também permite configuração baseada em texto
https://github.com/ianyh/Amethyst/blob/development/docs/conf...
Usei isso nos últimos meses e, no geral, gosto bastante. Gosto do fato de toda a configuração ficar em um único arquivo, ou seja, de não haver GUI
Um problema é que, quando um app usa as abas nativas do Mac, o AeroSpace trata cada aba como uma janela, o que quebra completamente o recurso de tela cheia. O Alacritty é um exemplo, e fica bem estranho
Há uma issue relacionada aberta:
https://github.com/nikitabobko/AeroSpace/issues/68