4.6 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| ghostty-miniterm-einbindung | Prüfung, ob Ghostty/libghostty statt SwiftTerm in den Mac-App-Builder eingebunden werden kann |
|
Projekt __mac-cluade-app-builder (in /home/marcuh/claude-projects/) baut pro Aufruf eine eigenständige macOS-.app mit eigener Bundle-ID → eigenes Dock-Icon + eigener ⌘-Tab-Eintrag. Ein gemeinsames Binary (Sources/MiniTerm/main.swift) liest pro Bundle Info.plist-Keys (MTCommand, MTWorkingDirectory, MTFontSize, MTFontName, MTWindowTitle); make-app.sh assembliert das Bundle. Nutzt heute SwiftTerm (SPM-Dependency). Funktioniert.
Frage: SwiftTerm durch Ghostty ersetzen, weil Terminal besser (GPU-Rendering, Ligaturen, vollere Kompatibilität).
Befund:
- Ghostty.app als Ganzes hilft nicht — eine gemeinsame App löst die Pro-Projekt-Identität (Dock/⌘-Tab) nicht (gleiche
--class-Grenze wie im README). Lösung bleibt: pro Projekt eigenes Bundle. - Richtiger Weg: libghostty (Zig-Kern, C-API) statt SwiftTerm in die eigene Swift-Hülle linken — analog zur jetzigen Konstruktion. Offizielles Minimalbeispiel als Vorlage:
ghostling(github.com/ghostty-org/ghostling). - Genutzte Funktionsfläche ist winzig (Prozess in Login-Shell starten, rendern, Font, Shift+Enter-Key-Monitor, Copy/Paste) → laufendes API-Risiko gering, obwohl libghostty-Embedding-API offiziell noch nicht stabil ist.
- Einmaliger Aufwand = Integration: Zig-Toolchain auf den Mac, libghostty aus Quellbaum bauen, C-Header + lib manuell in die Swift-Hülle linken. Kein fertiges SPM-Paket wie SwiftTerm.
- Zig = einzelnes self-contained Binary (Tarball, kein Installer), aber bestimmte von Ghostty gepinnte Version nötig. Gehört auf den Mac, nicht auf Linux (Build geht nur unter macOS, Xcode CLT/AppKit).
- Bestehende Mac-Tools reichen sonst: swift (Xcode CLT), sips/iconutil/codesign (macOS built-in). Nur Zig ist neu.
- Bundle-Hülle, make-app.sh und Shift+Enter-Key-Monitor bleiben unverändert; SwiftTerm-Variante bleibt als Rückfallpunkt funktionsfähig.
Projekt umgezogen nach ~/projects/claude-app-builder-4-mac (eigenes Git, Remote git.lintus.art); aus ~/claude-projects entfernt.
Stand 2026-06-21: libghostty erfolgreich gebaut. Volle macOS-Variante mit Metal-Renderer (Surface-/App-API: ghostty_app_new, ghostty_surface_new/draw/key…) liegt als vendor/libghostty/{lib/libghostty.a (arm64, 135 MB), include/, patches/, README.md} im Projekt. Quelle Ghostty v1.3.1 + Zig 0.15.2.
Stolpersteine (alle gelöst, im README/Patch dokumentiert):
- Zig 0.15.2 linkt auf dem Host (macOS 26.5) kein natives Binary — libSystem-Inkompatibilität mit dem 26er-SDK (Auto-Erkennung von
26.xscheitert; explizit26.0ginge). 0.16/0.17 linken, aber Ghostty 1.3.1 baut nicht damit (ArrayList/EnvMap/Writer-Drift + requireZig). Kein Patch am Host möglich. - Lösung: Build in macOS-15-VM (tart, cirruslabs-Image, Apple-Silicon-Host) mit aktivem CLT (15.5-SDK) → Zig linkt.
metal-Shader-Compiler nur perDEVELOPER_DIRaus Xcode geholt. - 3 Build-Patches an Ghostty: build.zig (macOS-libghostty.a-Install freischalten, shared
.soraus), GhosttyXCFramework.zig (nur macOS-Slice, kein iOS/Universal), MetallibStep.zig (metal via Xcode-DEVELOPER_DIR).
Link gegen Host-Swift verifiziert: Smoke-Test (modulemap + swiftc -lghostty + Frameworks AppKit/Metal/MetalKit/QuartzCore/CoreText/CoreGraphics/CoreVideo/IOSurface/Carbon/Foundation/CoreFoundation, -lc++) linkt die arm64-.a auf macOS 26.5/SDK-26 und ruft ghostty_info() (Cross-SDK unkritisch).
Surface-Integration gebaut und lauffähig (Stand 2026-06-21): MiniTerm linkt libghostty, kompiliert, läuft, Test-.app startet ohne Crash mit GPU-gerenderter Login-Shell.
Sources/CGhostty/— C-Modul (ghostty.h + modulemap) für die C-API.Sources/MiniTerm/Ghostty.swift—GhosttyApp(init/config/runtime-callbacks/tick) +GhosttySurfaceView(NSView,ghostty_surface_newmit nsview-Zeiger, Größe/Scale/Fokus, Tastatur inkl. Shift+Enter→ghostty_surface_text, Maus/Scroll).main.swift— Engine-Wahl per Info.plistMTEngine(Defaultghostty,swiftterm= Fallback; auch bei libghostty-Init-Fehler).Package.swift— CGhostty-Target + linkerSettings (-Lvendor/libghostty/lib -lghostty+ Frameworks AppKit/Metal/MetalKit/QuartzCore/CoreText/CoreGraphics/CoreVideo/IOSurface/Carbon,-lc++).
Offen/zu prüfen: visuelle Bestätigung (Rendering, Tippen, Resize); Clipboard-Callbacks sind no-op (kein ⌘C/⌘V über libghostty); Font-Family wird nicht gesetzt (nur font_size); arm64-only. VM + Scratch abgeräumt.