c8f5714b1e
- vendor/libghostty: vorgebaute macOS-libghostty.a (arm64) + Header + Build-Patches + README - Sources/CGhostty: C-Modul der libghostty-C-API - Sources/MiniTerm/Ghostty.swift: GhosttyApp + GhosttySurfaceView (Surface, Input, Größe, Fokus) - main.swift: Engine-Wahl per Info.plist MTEngine - Package.swift: CGhostty-Target + Link gegen libghostty + Frameworks - STATUS.md: Stand, Build-Weg (macOS-15-VM), offene Punkte
3.1 KiB
3.1 KiB
Stand: libghostty-Integration in MiniTerm
Stand 2026-06-21. MiniTerm baut pro Aufruf eigenständige macOS-.apps (eigene
Bundle-ID → eigenes Dock-Icon/⌘-Tab). Bisher SwiftTerm als Terminal. Ziel:
SwiftTerm durch libghostty (GPU/Metal-Renderer von Ghostty) ersetzen.
Erreicht
- libghostty gebaut (volle macOS-Variante mit Metal-Renderer, Surface-/App-API),
liegt als
vendor/libghostty/(lib/libghostty.aarm64 ~135 MB,include/,patches/,README.md). Quelle Ghostty v1.3.1 + Zig 0.15.2. - In MiniTerm integriert, kompiliert, linkt, läuft — Test-
.appstartet ohne Crash mit GPU-gerenderter Login-Shell. Mausrad/Scrollback funktioniert.
Warum der Build aufwändig war
- 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). Neuere Zig (0.16/0.17) linken, bauen aber Ghostty 1.3.1 nicht (API-Drift). - 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 dem installierten Xcode geholt. - 3 Build-Patches an Ghostty (in
vendor/libghostty/patches/…patch): build.zig (macOS-libghostty.a-Install frei, shared.soraus), GhosttyXCFramework.zig (nur macOS-Slice, kein iOS), MetallibStep.zig (metal via Xcode-DEVELOPER_DIR). - libghostty.a aus VM herauskopiert; Host-Swift linkt sie problemlos (Cross-SDK unkritisch). VM + Scratch danach abgeräumt.
Neue/geänderte Dateien
Sources/CGhostty/— C-Modul (include/ghostty.h+module.modulemap, leeresshim.c) für die libghostty-C-API.Sources/MiniTerm/Ghostty.swift—GhosttyApp(einmaligghostty_init, Config laden/finalize,ghostty_runtime_config_s-Callbacks,ghostty_app_tickvia wakeup) +GhosttySurfaceView(NSView,ghostty_surface_newmit nsview-Zeiger; Größe/Content-Scale/Fokus; Tastatur inkl. Shift+Enter→ghostty_surface_text; Maus/Scroll).Sources/MiniTerm/main.swift— Engine-Wahl per Info.plistMTEngine(Defaultghostty,swiftterm= Fallback, auch wenn libghostty-Init scheitert).Package.swift— CGhostty-Target + linkerSettings:-L vendor/libghostty/lib -lghostty+ Frameworks AppKit/Metal/MetalKit/ QuartzCore/CoreText/CoreGraphics/CoreVideo/IOSurface/Carbon,-lc++.
Offen / bewusst weggelassen
- Kein Scrollbalken — der ist in Ghostty.app host-seitig (
SurfaceScrollView), nicht in libghostty; unsere View bildet ihn nicht nach (Scrollback per Mausrad geht). Nachrüstbar. - Clipboard-Callbacks no-op — kein ⌘C/⌘V über libghostty.
- Font-Family wird nicht gesetzt (nur
font_size; Family ginge nur über eine Ghostty-Config-Datei viaghostty_config_load_file). - arm64-only (kein x86_64-Slice).
- Visuelle Vollprüfung (Tippen/Resize/Reflow) durch Marcus noch offen.
Reproduzieren ohne VM
vendor/libghostty/lib/libghostty.a + include/ genügen zum Bauen. Neu bauen
nur nötig bei Ghostty-Update → Rezept in vendor/libghostty/README.md.