2 Punkte von GN⁺ 2024-06-07 | 1 Kommentare | Auf WhatsApp teilen
  • AeroSpace ist ein Tiling Window Manager für macOS im Beta-Stadium, der eine i3-ähnliche Bedienung bietet und auf baumbasierte Layouts sowie einen tastaturzentrierten Workflow ausgerichtet ist
  • Statt auf die nativen macOS Spaces zu setzen, nutzt AeroSpace eine eigene Emulation virtueller Workspaces und wirbt mit schnellen Workspace-Wechseln ohne Animationen sowie einer Konfiguration, die ohne Deaktivierung von SIP funktioniert
  • Die Konfiguration basiert auf Plain-Text-TOML und ist CLI-first ausgelegt; enthalten sind manpages und Shell-Autovervollständigung, Multi-Monitor-Setups werden nach einem i3-ähnlichen Paradigma unterstützt
  • Derzeit ist AeroSpace in der Public Beta und alltagstauglich, vor Version 1.0 sind jedoch Breaking Changes zu erwarten; vor 1.0 stehen noch ein größeres Refactoring, shellartige Kombinatoren und Untersuchungen zur globalen Shortcut-API aus
  • Die Projektwerte sind auf Power-User und Entwickler, Tastaturzentrierung, praktische Funktionen sowie Wartung auf Basis öffentlicher Accessibility-APIs ausgerichtet; GUI-Konfiguration, Harmonie mit macOS Spaces und Ricing haben niedrige Priorität

Die macOS-Tiling-Umgebung von AeroSpace

Kernfunktionen und Design

  • Die Fensteranordnung ist als Tiling Window Manager auf Basis eines Tree-Paradigmas aufgebaut
  • Die User Experience ist von i3 inspiriert
  • Workspace-Wechsel funktionieren schnell und ohne Animationen; eine Deaktivierung von SIP ist nicht erforderlich
  • Die nativen macOS Spaces weisen erhebliche Einschränkungen auf und werden daher nicht genutzt; AeroSpace emuliert eigene virtuelle Workspaces
  • Die Konfiguration erfolgt als Plain Text und eignet sich für dotfiles; ein Beispiel für die Standardkonfiguration findet sich in default-config.toml
  • Das Design ist CLI-first und umfasst manpage sowie Shell-Autovervollständigung
  • Multi-Monitor-Setups werden nach einem i3-ähnlichen Paradigma unterstützt

Installation und sicherheitsbezogene Bedingungen

  • Die empfohlene Installationsmethode ist Homebrew cask, womit automatische Updates verfügbar sind
brew install --cask nikitabobko/tap/aerospace
  • In Multi-Monitor-Umgebungen sollte geprüft werden, ob die Monitore korrekt angeordnet sind
  • Weitere Installationsmethoden stehen im Installationsleitfaden
  • AeroSpace ist nicht notarized
    • Das Homebrew-Installationsskript ist so konfiguriert, dass es das Attribut com.apple.quarantine automatisch entfernt
    • Durch diese Konfiguration sollte die App direkt funktionieren, ohne die Warnung „Apple cannot check AeroSpace for malicious software“ anzuzeigen

Projektstatus und Arbeiten vor 1.0

  • Der aktuelle Status ist Public Beta
  • Die tägliche Nutzung ist möglich, vor Erreichen von 1.0 sollte jedoch mit Breaking Changes gerechnet werden
  • Zu den Arbeiten, die ein 1.0-Release noch blockieren, gehören folgende Punkte
    • Performance-Issue: Die Implementierung eines Threads pro application, um die blocking AX API von macOS zu umgehen, ist abgeschlossen
    • Großes Refactoring: Neuschreiben der mutable double-linked core tree-Datenstruktur als immutable single-linked persistent tree
      • Wichtig für Stabilität und potenzielle Performance
      • Hilft dabei, ein Stabilitätsproblem zu beheben, bei dem Fenster zufällig in den fokussierten Workspace verschoben werden können
      • Hilft bei der Unterstützung von macOS native tabs
    • Implementierung shellartiger Kombinatoren
      • Der wahrscheinlichste Minimalansatz ist die Einführung von ||, &&, ; sowie eines eval-Befehls, der mehrere Befehle auf einmal sendet
    • Untersuchung der Möglichkeit, die API CGEvent.tapCreate für globale Shortcuts zu verwenden
      • Möglicherweise lassen sich linke und rechte modifier unterscheiden, möglicherweise auch nicht
  • Zu den größeren Issues, die nach 1.0 geplant sind, gehören sticky windows und Dynamic TWM

Projektwerte und Nicht-Ziele

  • AeroSpace richtet sich an Power-User und Entwickler
  • Es ist auf tastaturzentrierte Nutzung ausgelegt
  • Breaking Changes an Konfigurationsdatei, CLI und Verhalten werden nach Möglichkeit vermieden, können aber sorgfältig vorgenommen werden, um Software-Stagnation zu verhindern
    • Nach 1.0 wird garantiert, dass bei Breaking Changes die Semver-Major-Version erhöht wird
    • Vor 1.0 können Breaking Changes einfach auftreten
  • Eine GUI wird nur eingesetzt, wenn sie unbedingt erforderlich ist
    • Es ist nicht geplant, eine GUI zur Konfiguration bereitzustellen
    • Ein Statusleisten-Icon für visuelles Feedback ist zulässig
  • Funktionen werden nach praktischem Nutzen bewertet; optische Features wie Fensterränder, Transparenz und Animationen gelten nicht als praktische Funktionen
  • „Dark Magic“ wie private APIs oder Code Injection wird nach Möglichkeit vermieden
    • Derzeit wird nur eine private API, _AXUIElementGetWindow, verwendet, um die window ID eines Accessibility-Objekts zu erhalten
    • Ansonsten werden die öffentlichen accessibility APIs von macOS verwendet
    • Eine Deaktivierung von SIP wird nicht verlangt
    • Ziel ist eine Konfiguration, die robust gegenüber macOS-Updates und leicht wartbar ist
  • Gute Integration mit bestehenden macOS-Funktionen ist kein Ziel
    • AeroSpace erkennt die Existenz von macOS Spaces nicht an und nutzt eine eigene Workspace-Emulation
  • Ricing hat niedrige Priorität
    • Es gibt nur minimale Unterstützung für gaps und einige callbacks zur bar-Integration
    • Der aktuelle Maintainer hat kein Interesse an Ricing; entsprechende Issues haben meist niedrige Priorität oder werden ignoriert
    • Wenn weitere Maintainer hinzukommen, kann sich die Haltung zu Ricing ändern

Kompatibilität, Community und verwandte Projekte

  • Die macOS-Kompatibilität hängt von der Build-Methode ab
    • Ausführen des AeroSpace-Binary: macOS 13+
    • debug build aus dem Source: macOS 14+
    • release build aus dem Source: macOS 15+, Xcode 26+ erforderlich
  • Issues werden nicht direkt angenommen; stattdessen wird darum gebeten, zuerst eine Discussion zu erstellen
  • GitHub Discussions bietet Kanäle für Allgemeines, Ankündigungen, Release-Ankündigungen, Feature-Ideen, General, potenzielle Bugs sowie Fragen und Antworten
  • Als verwandte Projekte werden genannt
    • Amethyst: ein xmonad-artiger Tiling Window Manager
    • InstantSpaceSwitcher: sofortiger Space-Wechsel durch Simulation künstlich schneller Trackpad-Gesten
    • yabai: ein macOS-Tiling-Window-Manager auf Basis von binary space partitioning

1 Kommentare

 
GN⁺ 2024-06-07
Meinungen auf Hacker News
  • Ich nutze das täglich, und mein Fazit ist: Es ist die beste Methode, Fenster auf dem Mac zu verwalten, kommt aber nicht an i3/sway heran.
    Insbesondere ist die Unterstützung dafür, Fenster per Drag-and-drop relativ zueinander neu anzuordnen, sehr eingeschränkt, sodass man nicht wie in sway neue vertikale/horizontale Splits erstellen kann. Um das gewünschte Fensterlayout zu bekommen, muss man deshalb meist umständlich über Tastaturbefehle ausweichen.
    Wenn man zum Beispiel zwei Fenster links und rechts hat und eine Seite vertikal teilen möchte, öffnet man in sway ein neues Fenster und zieht es einfach in die obere/untere Hälfte des bestehenden Fensters. In AeroSpace war die beste Methode, ein neues Fenster zu öffnen, alle drei Fenster in einen vertikalen Stack umzuwandeln, dann das ursprünglich linke Fenster zu fokussieren und move left auszuführen.

    • Wenn Normalisierung (normalization) aktiviert ist, muss man nicht „in einen vertikalen Stack wechseln“.
      In diesem Layout:

      h_tiles
      ├── window1 (focused)
      ├── window2
      └── window3

      führt move left zu folgendem Ergebnis:

      h_tiles
      ├── window1 (focused)
      └── v_tiles
      ├── window2
      └── window3

    • Ich wusste nicht einmal, dass man in sway Fenster per Drag-and-drop verschieben kann. Ich wähle das Fenster aus, das ich teilen möchte, setze mit Command + v einen vertikalen Split und erstelle dann ein neues Fenster, meist ein Terminal.
      Oder ich verschiebe Fenster mit Command + Shift + [hjkl].

    • Ich will es ausprobieren, um zu sehen, ob mein Hauptproblem zuerst gelöst wird. Ich suche nach einer halbwegs brauchbaren Möglichkeit, auf dem Mac Bildschirmanordnungen zu merken.
      Jedes Mal nach dem Aufwachen nach dem Booten ist mein Desktop mit drei Bildschirmen völlig amnesisch.
      Idealerweise würde ich gern meine Workspaces selbst verwalten und entweder nur den Laptop-Bildschirm nutzen oder an unterschiedlichen Schreibtischen im Büro/zu Hause zwei bis drei externe Monitore verwenden können.

    • Ich nutze Spectacle, aber das wird nicht mehr unterstützt.

    • Das hier habe ich nicht ausprobiert, aber ich nutze yabai, und es verhält sich genau so, wie beschrieben.

  • Sehr interessant, dass man SIP nicht deaktivieren muss. Praktisch alle ähnlichen Fenstermanager verlangen eine Deaktivierung von SIP, was mich bisher zögern ließ.
    Ich frage mich, was AeroSpace anders macht, damit es zusammen mit SIP funktioniert.

    Aus dem README:

    AeroSpace verlangt nicht, SIP (System Integrity Protection) zu deaktivieren. yabai etwa erfordert für einige Funktionen, dass SIP ausgeschaltet wird. AeroSpace findet entweder einen anderen Weg, emuliert zum Beispiel Workspaces, oder implementiert die betreffende Funktion gar nicht. Fenstertransparenz und Fensterschatten sind keine praktischen Funktionen.

    • Ich habe yabai ausprobiert, aber das Wechseln zwischen macOS Spaces war viel zu langsam. Ich bin zu AeroSpace gewechselt und mag die Workspace-Implementierung wirklich sehr.
      Allerdings gefällt mir yabais Focus-follows-mouse-Funktion enorm, daher frage ich mich, ob es möglich ist, AeroSpace für die i3-ähnlichen Funktionen zu nutzen und yabai nur für diese eine Funktion.
    • Ich frage mich, ob Focus-follows-mouse ohne Deaktivierung von SIP möglich ist. Das ist eine der Funktionen, die ich auch bei anderen macOS-Fenstermanagern nicht gesehen habe.
  • Großartig. Bisher habe ich Amethyst verwendet, aber AeroSpace gefiel mir sofort besser.
    Mein größter Kritikpunkt an Amethyst ist, dass es Fenster sehr träge und unzuverlässig hin- und herwirft. In AeroSpace wechseln Fenster blitzschnell auf andere Workspaces/Monitore und scheitern dabei nicht.
    Mir gefällt auch, dass es die eingebauten macOS-Workspaces komplett hinter sich lässt und eigene virtuelle Workspaces verwendet. Wie der Autor sagt, ist der eingebaute Ansatz ziemlich unbefriedigend, und diese Methode macht Multi-Monitor-Setups erträglich und sogar ein wenig angenehm.

    Auf meinem Arbeitsrechner konnte ich yabai nicht nutzen, weil dafür SIP deaktiviert werden müsste; der AeroSpace-Autor spricht sich ausdrücklich dagegen aus, und diese Entscheidung wirkt vernünftig.

    Zu Linux-Zeiten bin ich von i3 zu xmonad gewechselt, aber unter macOS fühlt sich AeroSpace eindeutig besser an. Alle drei Fenstermanager unter macOS reichen nicht an echte Fenstermanager unter Linux heran, aber AeroSpace scheint innerhalb des Möglichen ziemlich nahe am Optimum zu sein.

    • yabai funktioniert auch ohne ausgeschaltetes SIP gut. AeroSpace habe ich noch nicht ausprobiert, daher kann ich die Funktionen nicht vergleichen.
  • Mir gefällt der Ansatz mit Fake Spaces.
    Ich hatte schon einmal überlegt, Fenster zu minimieren, um etwas Ähnliches zu erreichen, habe es aber nie tatsächlich gemacht.
    Unter macOS kann Tiling wegen fehlender APIs nur deprimierend sein. Trotzdem dürfte dieser Ansatz wahrscheinlich der leistungsfähigste sein.
    yabai habe ich ausprobiert, aber nur für das Verschieben von Fenstern und Focus-follows-mouse, nicht fürs Tiling. Das lag an der Instabilität und ist nicht yabai anzulasten.
    Danke an nikitabobko.

    Jetzt muss ich nur noch herausfinden, wie man alt-tab dazu bringt, Fenster in allen Fake-Workspaces zu ignorieren, die in einer Ecke gesammelt sind, dann probiere ich es sofort aus.
    Das in der Dokumentation verlinkte JankyBorders ist auch gut.

    https://github.com/koekeishiya/yabai
    https://github.com/lwouis/alt-tab-macos
    https://github.com/FelixKratz/JankyBorders

    • Ich löse das, indem ich Stack verwende und mit alt+h/alt+j zwischen Fenstern wechsle.
      Command+Tab ist der globale Fensterwechsel, die obigen Shortcuts sind für den lokalen Wechsel im Kontext eines Workspaces gedacht.
  • Ich habe mich einigermaßen an Raycasts Fensterverwaltung gewöhnt, aber mit AeroSpace lässt sie sich praktisch kaum zusammen nutzen.
    In Raycast kann man zum Beispiel mit der Option reasonable size ein Fenster in passender Größe öffnen und zentrieren. Man kann Splits für linke/rechte Hälfte erstellen, maximieren oder Quadranten/Drittel verwenden.
    In AeroSpace funktioniert es jedoch nicht, ein Fenster innerhalb eines Tiles in die linke Hälfte, rechte Hälfte oder linken zwei Drittel zu verschieben oder es mit reasonable size floaten zu lassen.

Außerdem gibt es einen Bug, wenn man Apps mit „next desktop“ und „previous desktop“ verschiebt. AeroSpace scheint die mehreren Desktops des Mac als eigene Workspaces zu implementieren; der Video-Guide zeigt also eigentlich keinen Wechsel zwischen verschiedenen Desktops, sondern zwischen verschiedenen Workspaces
Dadurch geht das Tiling komplett kaputt, wenn man „next desktop“ und „previous desktop“ nutzt. Schade: Wenn Workspaces direkt mit den jeweiligen Mac-Desktops verbunden wären und ein Workspace-Wechsel damit einem Desktop-Wechsel entspräche, wäre es wohl bis zu einem gewissen Grad auch mit Raycast und den Standardfunktionen von macOS kompatibel gewesen

  • Raycast ist wirklich gut
    Ich glaube, es wird sich künftig bei Mac-Power-Usern fast wie eine Standard-App etablieren
    Es hat so viele nützliche Funktionen, dass ich mich richtig damit beschäftigen sollte. Ich nutze die Linear.app-Integration am häufigsten

  • Ich habe yabai auf meinem Arbeitsrechner über die letzten fünf macOS-Versionen hinweg ziemlich intensiv genutzt, ohne SIP zu deaktivieren
    Es gefällt mir wirklich sehr, und das Tiling wird nur ungefähr alle paar Tage instabil. Obwohl ich mindestens einmal pro Minute einen yabai-Befehl ausführe, habe ich yabai --restart-service auf ein Tastenkürzel gelegt; danach läuft es immer sofort wieder

    Daher empfinde ich es als ziemlich stabil und großartig. Multi-Monitor-Setups sind schwierig und ich nutze sie nicht viel, aber Stacks und die schnelle „Vollbild“-artige Minimierung sind wirklich gut

    Bei manchen Versions-Upgrades stuft der Firmen-Antivirus es als Virus ein und deaktiviert es für 24 Stunden; an solchen Tagen fühlt sich die Nutzung des Computers so träge und deprimierend an, dass ich ihn gar nicht benutzen möchte

  • Ich nutze es seit ein paar Monaten. i3 ist fast perfekt und AeroSpace ist ein guter Versuch, aber es ist noch ziemlich weit von i3 entfernt und recht instabil
    Vermutlich liegt das daran, dass Mac OS X keine vollständige Kontrolle wie ein Unix-Window-Manager erlaubt

    Trotzdem habe ich noch nichts Besseres gefunden. Sobald Linux auf Apple Silicon gut läuft, werde ich es installieren. Zumindest für mich ist i3 allein schon Grund genug, Linux zu nutzen, und Mac OS X ist in Sachen Window-Manager wirklich schlecht

    • Ich habe in einem Hobbyprojekt ein wenig in einem ähnlichen Bereich herumprobiert; der Grund sind die eingeschränkten offiziellen APIs
      Am Ende ist man stark auf undokumentierte private APIs und Hacks angewiesen. Diese sind intern gedacht und daher instabil, und das Betriebssystem selbst ist auch nicht dafür ausgelegt, gut mit Situationen zusammenzuarbeiten, in denen stark in Fenster- und Prozessverwaltung eingegriffen wird. Deshalb treten sich Betriebssystem und Drittanbieter-Apps häufig gegenseitig auf die Füße

    • Ich habe dasselbe Problem. Ich habe noch keinen Window-Manager gefunden, der den nativen Vollbildmodus von OSX richtig handhabt
      AeroSpace kommt durcheinander, wenn man natives Vollbild verwendet. Es weiß nicht, worauf der Fokus liegen soll

      Bei mir:

      Workspace 1: terminal
      Workspace 2: slack app
      Open chrome in native full screen

      Wenn man jetzt zu Workspace 1 wechselt, tritt das Problem auf

      Ich werde es vorerst weiter ohne Apps im nativen Vollbild nutzen. Ich hoffe, dass es dann besser funktioniert

  • Mich interessiert, wie sich die User Experience dieses Produkts von der von Yabai unterscheidet. Das SIP-Problem bei Yabai halte ich nicht für ein großes Thema. Unter den Yabai-Nutzern, die ich kenne, deaktiviert niemand SIP, und alle scheinen gut damit klarzukommen
    Ich frage mich, ob der Unterschied im i3-Stil liegt

    Persönlich nutze ich ein Utility, mit dem man wie bei Fluxbox bei gedrückter Modifikatortasten-Kombination Fenster von jeder Position aus mit der Maus skalieren und verschieben kann. Es ist nicht automatisiert, aber auch nicht instabil. Statt zu einem vollständig verwalteten Ansatz zu wechseln, geht es eher darum, Floating deutlich einfacher zu machen, indem Mausbewegungen reduziert werden

    • Ich habe beide ausgiebig genutzt, und mir gefällt AeroSpace besser
      Ausschlaggebend ist für mich die Multi-Monitor-Unterstützung, daneben gibt es noch kleinere Vorteile

      Wenn man in Yabai einen Workspace auf einen neuen Monitor verschiebt, ändert sich die ID, sodass man ihn nicht mehr zuverlässig per Tastenkürzel erreichen kann. alt+2 bricht, weil es nicht mehr Workspace 2 ist, sondern 11 oder irgendeine andere Nummer. In AeroSpace kann man Workspaces mit alt+m und alt+shift+m einfach zwischen Monitoren verschieben

      Eine weitere Funktion ist, dass Fenster ohne Mission-Control-Animation sofort andocken. Das hat mich wirklich massiv gestört

      Diese beiden Funktionen brauche ich fast täglich, und wegen der schlechten Workspace-Unterstützung ist Yabai für mich nahezu unbenutzbar

    • Wenn man in Yabai Spaces auf irgendeine Weise verwalten, die Stapelreihenfolge von Fenstern ändern oder viele andere Funktionen nutzen will, muss man SIP deaktivieren [0]
      Wenn man diese Funktionen nicht nutzt, ist das eine individuelle Entscheidung, aber für viele Nutzer sind sie Kernfunktionen

      [0] https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...

  • Mich würde interessieren, was der Unterschied zu Amethyst ist. Amethyst ist in letzter Zeit deutlich stabiler geworden, und ich nutze es gern
    Die textbasierte Konfiguration wirkt auf den ersten Blick ziemlich gut, aber ich bin mir nicht sicher, ob sich ein Wechsel lohnt

    • Ich habe bisher Amethyst genutzt, aber AeroSpace hat mir sofort besser gefallen
      Was mich an Amethyst am meisten stört, ist, dass es Fenster sehr träge und unzuverlässig hin- und herwirft. In AeroSpace wechseln Fenster blitzschnell auf andere Workspaces/Monitore und schlagen dabei nicht fehl
      Mir gefällt auch, dass es die eingebauten Workspaces von macOS komplett aufgibt und eigene virtuelle Workspaces nutzt. Dadurch wird ein Multi-Monitor-Setup erträglich und sogar ein bisschen angenehm

      Zu Linux-Zeiten bin ich von i3 zu xmonad gewechselt, aber unter macOS fühlt sich AeroSpace eindeutig besser an. Alle drei Window-Manager unter macOS kommen nicht an echte Window-Manager unter Linux heran, aber AeroSpace scheint innerhalb der Möglichkeiten ziemlich nahe am Optimum zu sein

    • Nach meiner Erfahrung ist AeroSpace in den meisten Punkten deutlich besser
      Es gibt ein paar seltsame Dinge, und ich muss noch einige Bug-Reports einreichen, aber es hat macOS für mich viel erträglicher gemacht als Amethyst

    • Auch in Amethyst kann man eine textbasierte Konfiguration nutzen
      https://github.com/ianyh/Amethyst/blob/development/docs/conf...

  • Ich nutze das seit einigen Monaten und bin insgesamt zufrieden damit. Mir gefällt, dass alles über eine einzelne Datei konfiguriert wird, also ohne GUI.
    Ein Problem ist, dass AeroSpace, wenn eine App die nativen Mac-Tabs verwendet, jeden Tab als Fenster behandelt, wodurch die Vollbildfunktion komplett kaputtgeht. Alacritty ist ein Beispiel dafür, und das ist ziemlich merkwürdig.

    Dazu gibt es ein offenes Issue:
    https://github.com/nikitabobko/AeroSpace/issues/68

    • Yabai hat dasselbe Problem, und der Entwickler konnte es bisher ebenfalls nicht beheben.