HN Lançamento: FlashSpace – alternativa rápida e open source ao Spaces do macOS
(github.com/wojciech-kulik)- O FlashSpace é um gerenciador de workspaces virtuais que complementa e substitui o Spaces padrão do macOS, com o objetivo de oferecer troca rápida de workspaces sem esperar pelas animações do macOS
- Permite atribuir apps e displays a cada workspace e, ao alternar, mostra os apps atribuídos naquele display e oculta os demais, oferecendo alternância independente em múltiplos displays
- Oferece Space Control, Workspace Switcher baseado em
Option + Tab, Focus Manager, perfis, gestos de swipe, Floating Apps, configuração em JSON/YAML/TOML, CLI e integração com SketchyBar e Raycast - Requer macOS 14.0 ou superior e a opção “Displays have separate Spaces” ativada; oferece instalação via Homebrew, download de binário e build a partir do código-fonte
- Não oferece workspaces por janela individual nem gerenciamento de layout; mantém um design centrado em mostrar/ocultar apps por causa da ausência de uma API pública do macOS para ocultar janelas específicas e por motivos de simplicidade e desempenho
O que o FlashSpace faz
- O FlashSpace é um gerenciador de workspaces virtuais para macOS, projetado para complementar e substituir o Spaces padrão do macOS
- O objetivo é permitir troca rápida de workspaces sem esperar pelas animações do macOS
- Apps são atribuídos a cada workspace, e o próprio workspace é atribuído a um display específico
- Ao alternar para um workspace, os apps atribuídos são exibidos automaticamente, enquanto os outros apps no mesmo display são ocultados
- É possível alternar workspaces de forma independente em vários displays
Instalação e fluxo básico de uso
- Os requisitos são macOS 14.0 ou superior e a opção “Displays have separate Spaces” ativada em
Desktop & Docknas configurações do sistema - Os métodos de instalação incluem Homebrew, download do binário de release e build a partir do código-fonte
- O comando de instalação via Homebrew é
brew install flashspace - O binário pode ser obtido na Releases Page
- O comando de instalação via Homebrew é
- O fluxo básico de uso é o seguinte
- Mova todos os apps para um único macOS Space por display
- Crie workspaces
- Atribua apps
- Atribua displays aos workspaces ou use o modo dinâmico
- Configure atalhos para ativação rápida
- Aplique o mesmo procedimento aos outros workspaces
- Alterne para o workspace configurado usando o atalho
- Para manter o mesmo app em vários workspaces, use o recurso Floating Apps nas configurações do app ou adicione o app a vários workspaces pela janela principal do app
Principais recursos
- Oferece troca rápida de workspaces e suporte a múltiplos displays
- O Space Control permite visualizar e alternar entre todos os workspaces em uma grade
- É possível alternar workspaces com
0-9e as setas do teclado
- É possível alternar workspaces com
- O Workspace Switcher exibe e alterna a lista de workspaces usando
Option + Tabpor padrão- Funciona de modo semelhante ao alternador de apps do macOS,
CMD + Tab
- Funciona de modo semelhante ao alternador de apps do macOS,
- O Focus Manager permite mover o foco entre janelas na direção desejada usando atalhos e também oferece suporte a saltos entre displays
- Outros recursos incluem
- Ativação de workspace após detectar o foco de um app
- Cursor manager, que centraliza automaticamente o cursor na janela ativa
- Profiles para alternar rapidamente entre várias configurações
- Barra de menus com ícones e texto configuráveis por workspace
- Personalização de ações de gestos de swipe no trackpad
- Configuração via GUI e arquivos de configuração
- Suporte a arquivos de configuração nos formatos JSON, YAML e TOML
- Controle do app via CLI
- Suporte a Picture-in-Picture
- Integração com SketchyBar
- Suporte à Raycast extension
Modos de atribuição de display
- O FlashSpace oferece dois modos de atribuição de displays: modo estático e modo dinâmico
- O modo estático é o padrão e atribui cada workspace a um display específico
- É adequado para quem quer workspaces dedicados por display, como no macOS Spaces
- Pode ser difícil quando se usa vários displays e se muda a disposição com frequência
- O modo dinâmico atribui automaticamente cada workspace ao display onde estão os apps desse workspace
- Um único workspace pode ser exibido em vários displays ao mesmo tempo
- É útil quando você quer reorganizar workspaces movendo apps entre displays
- Nesse modo, workspaces vazios não podem ser exibidos
- O modo de atribuição de displays pode ser alterado em Workspaces nas configurações do app
Suporte e limitações do Picture-in-Picture
- O FlashSpace oferece suporte ao modo Picture-in-Picture, mas ele é experimental
- Esse recurso pode ser desativado em
App Settings -> Workspaces - O macOS não oferece uma API pública para ocultar apenas janelas específicas; ao ocultar um app, a janela PiP também é ocultada
- Para contornar esse problema, o FlashSpace identifica se o app oferece suporte a PiP e oculta no canto da tela todas as janelas, exceto a janela PiP
- Se a janela PiP não estiver visível, o comportamento padrão é aplicado
- Os navegadores compatíveis são Safari, Zen Browser, Chrome, Firefox, Brave, Vivaldi, Arc, Dia, Opera, Microsoft Edge e Comet
- Se o idioma do navegador não estiver configurado como English, esse recurso pode não funcionar
Princípios de design e não suporte intencional
- Os valores do projeto são desempenho, simplicidade, estabilidade, comportamento não intrusivo e a filosofia UNIX
- O FlashSpace trata o gerenciamento de workspaces como uma única tarefa e segue a ideia de fazer bem essa tarefa
-
Comportamento não intrusivo
- O FlashSpace não gerencia janelas de forma agressiva
- Se, depois de alternar para um workspace, você abrir um app que não está atribuído a esse workspace, esse app será exibido por cima dos apps do workspace
- Esse comportamento permite acessar rapidamente outros apps enquanto evita glitches ou trocas de workspace
- Em gerenciadores de janelas em tiling, glitches podem ser comuns por causa de pop-ups ou caixas de diálogo não configurados
- O FlashSpace interage com o sistema sem interferir, deixando de gerenciar janelas e apps não atribuídos
-
Sem suporte a workspaces por janela individual de app
- O FlashSpace não oferece suporte ao conceito de separar janelas individuais de um app por workspace
- Essa é uma decisão intencional para manter o app simples e rápido
- Ele depende das funções nativas de mostrar/ocultar para gerenciar e alternar workspaces com eficiência
- Essa abordagem é melhor para a bateria e não quebra recursos do sistema, como o Mission Control
- Dar suporte a janelas individuais adicionaria muita complexidade e poderia impactar negativamente o desempenho
- O macOS não tem uma API pública para ocultar janelas específicas; as opções atuais são mover a janela para o canto da tela ou minimizá-la, e ambas não são experiências ideais para o usuário
-
Sem suporte a layouts
- O FlashSpace não oferece suporte a mover janelas, redimensioná-las nem alterar layouts
- Esse recurso aumentaria muito a complexidade e poderia impactar negativamente o desempenho
- Seria necessário muito trabalho para lidar com todos os casos de borda e glitches
- Ele pode ser usado junto com apps de gerenciamento de janelas como Magnet, Rectangle e Raycast, portanto não duplica esses recursos
Integrações, CLI e build
- É possível integrá-lo com SketchyBar e outros, executando scripts configuráveis quando o workspace muda
- A CLI oferece suporte ao gerenciamento de workspaces, apps e perfis
- Ela deve ser instalada primeiro em CLI nas configurações do app
- Use
flashspace --helppara ver os comandos disponíveis
- O build a partir do código-fonte usa XcodeGen para gerar um projeto Xcode a partir de
project.yml- Após clonar o repositório, instale as dependências com
brew bundle - Execute
xcodegen generatee depois abraFlashSpace.xcodeprojno Xcode para fazer o build - É necessário executar
xcodegen generatenovamente sempre que trocar de branch ou fizer pull de alterações - Para gerar o projeto incluindo as configurações de assinatura, use
XCODE_DEVELOPMENT_TEAM=YOUR_TEAM_ID xcodegen generate
- Após clonar o repositório, instale as dependências com
Dicas de uso
- O macOS tem um bug em que apps aparecem no display errado após o repouso
- Isso acontece quando o app estava oculto durante o repouso
- Se todos os displays forem ligados depois de despertar e antes do login, os apps podem aparecer no display correto
- O macOS 15 oferece recursos de mover e redimensionar janelas sem apps de terceiros
- Confira o submenu
Move & ResizeemWindowna barra de menus - O ajuste de atalhos é limitado; para uma abordagem mais flexível, use apps de gerenciamento de janelas como Raycast e Magnet
- Confira o submenu
- É possível alternar o foco entre janelas do mesmo app com o atalho
Cmd + `do macOS - SKHD é uma ferramenta CLI para definir atalhos globais personalizados e pode ser usada junto com a CLI do FlashSpace
- Usuários do Raycast podem gerenciar o FlashSpace sem tirar as mãos do teclado usando a Raycast extension
1 comentários
Estou curioso para saber se é compatível com o Amethyst. Quero janelas em mosaico, mas não quero a latência na troca de espaços
Muito bom! Espero que possam adicionar uma visualização em grade dos espaços de trabalho. Sinto falta do TotalSpaces
Em boa hora. Eu estava reavaliando as opções nessa área e acabei escolhendo o AeroSpace. Vou experimentar este produto
Obrigado! Acabei de instalar e, até agora, está funcionando bem
Uso o AeroSpace para esse propósito há mais de um ano. Desativei todos os recursos de tiling nas configurações e uso apenas dois atalhos: alternar para um espaço de trabalho e mover a janela atual para um espaço de trabalho. É essencial ao trabalhar em uma tela pequena