diff --git a/.github/VOUCHED.td b/.github/VOUCHED.td index cbbbd40ae86..c767a0ec51f 100644 --- a/.github/VOUCHED.td +++ b/.github/VOUCHED.td @@ -18,30 +18,144 @@ # Maintainers can vouch for new contributors by commenting "!vouch" on a # discussion by the author. Maintainers can denounce users by commenting # "!denounce" or "!denounce [username]" on a discussion. +00-kat +04cb +aalhendi +abdurrahmanski +abudvytis +adrum +aindriu80 +alaasdk +alanmoyano +alexfeijoo44 +alexjuca +amadeus +andrejdaskalov +anthonyzhoon +atomk +balazs-szucs bennettp123 +benodiwal bernsno +beryesa +bitigchi bkircher +bo2themax +brentschroeter +cespare +charliie-dev +chernetskyi +cmwetherell +craziestowl +curtismoncoq +d-dudas daiimus +damyanbogoev +danulqua +dariogriffo +dervedro +diaaeddin +dmehala doprz +douglance +douglas +drepper elias8 +ephemera eriksremess filip7 +flou +francescarpi +gagbo +ghokun +gmile +gordonbondon +gpanders +guilhermetk hakonhagland +halosatrio hqnna +icodesign +jacobsandlund jake-stewart jcollie +jguthmiller +jmcgover +johnslavik +josephmart +jparise juniqlim +kawarimidoll +kenvandine +khipp +kirwiisp +kjvdven +kloneets +koranir +kristina8888 +kristofersoler +laxystem +liby +linustalacko +lonsagisawa +mac0ne mahnokropotkinvich +marijagjorgjieva +markdorison +markhuot marrocco-simone +matkotiric +michielvk +miguelelgallo +mihi314 mikailmm +misairuzame +mischief mitchellh +miupa +molechowski +mrmage +mtak +natesmyth +neo773 +nicosuave +nmggithub +noib3 +nwehg +oshdubh +pan93412 +pangoraw +pauley-unsaturated peilingjiang peterdavehello +phush0 +piedrahitac pluiedev pouwerkerk +prakhar54-byte priyans-hu -prsweet qwerasd205 +reo101 +rgehan +rhodes-b +rmengelbrecht rmunn +rockorager +rpfaeffle +secrus +seruman +silveirapf +slsrepo +sunshine-syz +tdslot +ticclick +tnagatomi +trag1c +tristan957 tweedbeetle +uhojin +uzaaft +vlsi yamshta +zenyr +zeshi09 diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml index 7c4256e0e86..7bb39faf2c8 100644 --- a/.github/workflows/flatpak.yml +++ b/.github/workflows/flatpak.yml @@ -30,7 +30,7 @@ jobs: runs-on: ${{ matrix.variant.runner }} steps: - name: Download Source Tarball Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: run-id: ${{ inputs.source-run-id }} artifact-ids: ${{ inputs.source-artifact-id }} diff --git a/.github/workflows/milestone.yml b/.github/workflows/milestone.yml index 49bba4e6ba6..33a074159e9 100644 --- a/.github/workflows/milestone.yml +++ b/.github/workflows/milestone.yml @@ -19,8 +19,7 @@ jobs: if: github.event.pull_request.merged == true with: action: bind-pr # `bind-pr` is the default action - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} # Bind milestone to closed issue that has a merged PR fix - name: Set Milestone for Issue @@ -28,5 +27,4 @@ jobs: if: github.event.issue.state == 'closed' with: action: bind-issue - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index f12ba221149..fe3dd133637 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -41,13 +41,13 @@ jobs: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - name: Setup Nix - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index a24e5a38968..f7d4a7b6e50 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -83,13 +83,13 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable @@ -113,7 +113,7 @@ jobs: nix develop -c minisign -S -m "ghostty-source.tar.gz" -s minisign.key < minisign.password - name: Upload artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: source-tarball path: |- @@ -130,10 +130,20 @@ jobs: GHOSTTY_VERSION: ${{ needs.setup.outputs.version }} GHOSTTY_BUILD: ${{ needs.setup.outputs.build }} GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }} + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + - uses: DeterminateSystems/nix-installer-action@main with: determinate: true @@ -150,7 +160,7 @@ jobs: - name: Setup Sparkle env: - SPARKLE_VERSION: 2.7.3 + SPARKLE_VERSION: 2.9.0 run: | mkdir -p .action/sparkle cd .action/sparkle @@ -174,7 +184,9 @@ jobs: - name: Build Ghostty.app run: | cd macos - xcodebuild -target Ghostty -configuration Release + xcodebuild -target Ghostty -configuration Release \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES # Add all our metadata to Info.plist so we can reference it later. - name: Update Info.plist @@ -219,6 +231,7 @@ jobs: /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Autoupdate" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Updater.app" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework" + /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/PlugIns/DockTilePlugin.plugin" # Codesign the app bundle /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime --entitlements "macos/Ghostty.entitlements" macos/build/Release/Ghostty.app @@ -269,7 +282,7 @@ jobs: zip -9 -r --symlinks ../../../ghostty-macos-universal-dsym.zip Ghostty.app.dSYM/ - name: Upload artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: macos path: |- @@ -286,7 +299,7 @@ jobs: curl -sL https://sentry.io/get-cli/ | bash - name: Download macOS Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: macos @@ -309,13 +322,13 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download macOS Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: macos - name: Setup Sparkle env: - SPARKLE_VERSION: 2.7.3 + SPARKLE_VERSION: 2.9.0 run: | mkdir -p .action/sparkle cd .action/sparkle @@ -340,7 +353,7 @@ jobs: mv appcast_new.xml appcast.xml - name: Upload artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: sparkle path: |- @@ -357,17 +370,17 @@ jobs: GHOSTTY_VERSION: ${{ needs.setup.outputs.version }} steps: - name: Download macOS Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: macos - name: Download Sparkle Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: sparkle - name: Download Source Tarball Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: source-tarball diff --git a/.github/workflows/release-tip.yml b/.github/workflows/release-tip.yml index 2227ae09c42..a2d8c10786b 100644 --- a/.github/workflows/release-tip.yml +++ b/.github/workflows/release-tip.yml @@ -37,7 +37,12 @@ jobs: with: # Important so that build number generation works fetch-depth: 0 - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + path: | + /nix + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -165,12 +170,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -219,6 +224,8 @@ jobs: GHOSTTY_BUILD: ${{ needs.setup.outputs.build }} GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }} GHOSTTY_COMMIT_LONG: ${{ needs.setup.outputs.commit_long }} + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -226,6 +233,14 @@ jobs: # Important so that build number generation works fetch-depth: 0 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -244,7 +259,7 @@ jobs: # Setup Sparkle - name: Setup Sparkle env: - SPARKLE_VERSION: 2.7.3 + SPARKLE_VERSION: 2.9.0 run: | mkdir -p .action/sparkle cd .action/sparkle @@ -263,7 +278,9 @@ jobs: - name: Build Ghostty.app run: | cd macos - xcodebuild -target Ghostty -configuration Release + xcodebuild -target Ghostty -configuration Release \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES # We inject the "build number" as simply the number of commits since HEAD. # This will be a monotonically always increasing build number that we use. @@ -309,6 +326,7 @@ jobs: /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Autoupdate" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Updater.app" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework" + /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/PlugIns/DockTilePlugin.plugin" # Codesign the app bundle /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime --entitlements "macos/Ghostty.entitlements" macos/build/Release/Ghostty.app @@ -438,7 +456,7 @@ jobs: EOF - name: Upload Release URLs - uses: actions/upload-artifact@47309c993abb98030a35d55ef7ff34b7fa1074b5 # v6.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v6.0 with: name: release-urls-${{ inputs.pr || '0' }} path: release-urls.txt @@ -462,6 +480,8 @@ jobs: GHOSTTY_BUILD: ${{ needs.setup.outputs.build }} GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }} GHOSTTY_COMMIT_LONG: ${{ needs.setup.outputs.commit_long }} + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -469,6 +489,14 @@ jobs: # Important so that build number generation works fetch-depth: 0 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -487,7 +515,7 @@ jobs: # Setup Sparkle - name: Setup Sparkle env: - SPARKLE_VERSION: 2.7.3 + SPARKLE_VERSION: 2.9.0 run: | mkdir -p .action/sparkle cd .action/sparkle @@ -506,7 +534,9 @@ jobs: - name: Build Ghostty.app run: | cd macos - xcodebuild -target Ghostty -configuration Release + xcodebuild -target Ghostty -configuration Release \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES # We inject the "build number" as simply the number of commits since HEAD. # This will be a monotonically always increasing build number that we use. @@ -552,6 +582,7 @@ jobs: /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Autoupdate" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Updater.app" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework" + /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/PlugIns/DockTilePlugin.plugin" # Codesign the app bundle /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime --entitlements "macos/Ghostty.entitlements" macos/build/Release/Ghostty.app @@ -646,6 +677,8 @@ jobs: GHOSTTY_BUILD: ${{ needs.setup.outputs.build }} GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }} GHOSTTY_COMMIT_LONG: ${{ needs.setup.outputs.commit_long }} + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -653,6 +686,14 @@ jobs: # Important so that build number generation works fetch-depth: 0 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -671,7 +712,7 @@ jobs: # Setup Sparkle - name: Setup Sparkle env: - SPARKLE_VERSION: 2.7.3 + SPARKLE_VERSION: 2.9.0 run: | mkdir -p .action/sparkle cd .action/sparkle @@ -690,7 +731,9 @@ jobs: - name: Build Ghostty.app run: | cd macos - xcodebuild -target Ghostty -configuration Release + xcodebuild -target Ghostty -configuration Release \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES # We inject the "build number" as simply the number of commits since HEAD. # This will be a monotonically always increasing build number that we use. @@ -736,6 +779,7 @@ jobs: /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Autoupdate" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework/Versions/B/Updater.app" /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/Frameworks/Sparkle.framework" + /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime "macos/build/Release/Ghostty.app/Contents/PlugIns/DockTilePlugin.plugin" # Codesign the app bundle /usr/bin/codesign --verbose -f -s "$MACOS_CERTIFICATE_NAME" -o runtime --entitlements "macos/Ghostty.entitlements" macos/build/Release/Ghostty.app diff --git a/.github/workflows/snap.yml b/.github/workflows/snap.yml index 68ec9cacd28..bdef91c302f 100644 --- a/.github/workflows/snap.yml +++ b/.github/workflows/snap.yml @@ -26,7 +26,7 @@ jobs: ZIG_GLOBAL_CACHE_DIR: /zig/global-cache steps: - name: Download Source Tarball Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: run-id: ${{ inputs.source-run-id }} artifact-ids: ${{ inputs.source-artifact-id }} @@ -38,7 +38,7 @@ jobs: tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 520fba403d5..cbd985558db 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,15 +11,85 @@ concurrency: cancel-in-progress: true jobs: + # Determines whether other jobs should be skipped. Modify this if there + # are other fast skip conditions, and add it as an output. Then modify + # other tests `needs/if` to check them. Document the outputs. + skip: + if: github.repository == 'ghostty-org/ghostty' + runs-on: namespace-profile-ghostty-xsm + outputs: + # 'true' when all changed files are non-code (e.g. only VOUCHED.td), + # signaling that all other jobs can be skipped entirely. + skip: ${{ steps.determine.outputs.skip }} + # Path-based filters to gate specific linter/formatter jobs. + actions_pins: ${{ steps.filter_any.outputs.actions_pins }} + blueprints: ${{ steps.filter_any.outputs.blueprints }} + macos: ${{ steps.filter_any.outputs.macos }} + nix: ${{ steps.filter_any.outputs.nix }} + shell: ${{ steps.filter_any.outputs.shell }} + zig: ${{ steps.filter_any.outputs.zig }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: filter_every + with: + token: ${{ secrets.GITHUB_TOKEN }} + predicate-quantifier: "every" + filters: | + code: + - '**' + - '!.github/VOUCHED.td' + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: filter_any + with: + token: ${{ secrets.GITHUB_TOKEN }} + filters: | + macos: + - '.swiftlint.yml' + - 'macos/**' + actions_pins: + - '.github/workflows/**' + - '.github/pinact.yml' + shell: + - '**/*.sh' + - '**/*.bash' + nix: + - 'nix/**' + - '*.nix' + - 'flake.nix' + - 'flake.lock' + - 'default.nix' + - 'shell.nix' + zig: + - '**/*.zig' + - 'build.zig*' + blueprints: + - 'src/apprt/gtk/**/*.blp' + - 'nix/build-support/check-blueprints.sh' + + - id: determine + name: Determine skip + run: | + if [ "${{ steps.filter_every.outputs.code }}" = "false" ]; then + echo "skip=true" >> "$GITHUB_OUTPUT" + else + echo "skip=false" >> "$GITHUB_OUTPUT" + fi + required: name: "Required Checks: Test" + if: always() runs-on: namespace-profile-ghostty-xsm needs: + - skip - build-bench - build-dist - build-examples - build-flatpak - build-libghostty-vt + - build-libghostty-vt-android + - build-libghostty-vt-macos - build-linux - build-linux-libghostty - build-nix @@ -32,9 +102,11 @@ jobs: - test-gtk - test-sentry-linux - test-i18n + - test-fuzz-libghostty - test-macos - pinact - prettier + - swiftlint - alejandra - typos - shellcheck @@ -77,14 +149,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -120,14 +192,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -153,14 +225,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -187,14 +259,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -231,14 +303,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -252,6 +324,93 @@ jobs: -Dtarget=${{ matrix.target }} \ -Dsimd=false + # lib-vt requires macOS runner for macOS/iOS builds becauase it requires the `apple_sdk` path + build-libghostty-vt-macos: + strategy: + matrix: + target: [aarch64-macos, x86_64-macos, aarch64-ios] + runs-on: namespace-profile-ghostty-macos-tahoe + needs: test + env: + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 + - uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true + - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 + with: + name: ghostty + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: Xcode Select + run: sudo xcode-select -s /Applications/Xcode_26.2.app + + - name: Build + run: | + nix develop -c zig build lib-vt \ + -Dtarget=${{ matrix.target }} + + # lib-vt requires the Android NDK for Android builds + build-libghostty-vt-android: + strategy: + matrix: + target: + [aarch64-linux-android, x86_64-linux-android, arm-linux-androideabi] + runs-on: namespace-profile-ghostty-sm + needs: test + env: + ZIG_LOCAL_CACHE_DIR: /zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /zig/global-cache + ANDROID_NDK_VERSION: r29 + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + path: | + /nix + /zig + + # Install Nix and use that to run our tests so our environment matches exactly. + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 + with: + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 + with: + name: ghostty + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: Setup Android NDK + uses: nttld/setup-ndk@ed92fe6cadad69be94a966a7ee3271275e62f779 # v1.6.0 + id: setup-ndk + with: + ndk-version: r29 + add-to-path: false + link-to-sdk: false + local-cache: true + + - name: Build + run: | + nix develop -c zig build lib-vt \ + -Dtarget=${{ matrix.target }} + env: + ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} + build-linux: strategy: fail-fast: false @@ -267,14 +426,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -296,14 +455,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -329,14 +488,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -375,14 +534,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -398,7 +557,7 @@ jobs: - name: Upload artifact id: upload-artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: source-tarball path: |- @@ -443,10 +602,21 @@ jobs: build-macos: runs-on: namespace-profile-ghostty-macos-tahoe needs: test + env: + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -475,21 +645,38 @@ jobs: # codesigning. IMPORTANT: this must NOT run in a Nix environment. # Nix breaks xcodebuild so this has to be run outside. - name: Build Ghostty.app - run: cd macos && xcodebuild -target Ghostty + run: | + cd macos + xcodebuild -target Ghostty \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES # Build the iOS target without code signing just to verify it works. - name: Build Ghostty iOS run: | cd macos - xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO" + xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO" \ + COMPILATION_CACHE_CAS_PATH=/Users/runner/Library/Developer/Xcode/DerivedData/CompilationCache.noindex \ + COMPILATION_CACHE_KEEP_CAS_DIRECTORY=YES build-macos-freetype: runs-on: namespace-profile-ghostty-macos-tahoe needs: test + env: + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -587,7 +774,8 @@ jobs: run: Get-Content -Path ".\build.log" test: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' + needs: skip runs-on: namespace-profile-ghostty-md outputs: zig_version: ${{ steps.zig.outputs.version }} @@ -604,14 +792,14 @@ jobs: echo "version=$(sed -n -E 's/^\s*\.?minimum_zig_version\s*=\s*"([^"]+)".*/\1/p' build.zig.zon)" >> $GITHUB_OUTPUT - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -646,14 +834,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -694,14 +882,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -729,14 +917,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -751,10 +939,21 @@ jobs: test-macos: runs-on: namespace-profile-ghostty-macos-tahoe needs: test + env: + ZIG_LOCAL_CACHE_DIR: /Users/runner/zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /Users/runner/zig/global-cache steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 - uses: DeterminateSystems/nix-installer-action@main with: @@ -782,7 +981,7 @@ jobs: fail-fast: false matrix: i18n: ["true", "false"] - name: Build -Di18n=${{ matrix.simd }} + name: Build -Di18n=${{ matrix.i18n }} runs-on: namespace-profile-ghostty-sm needs: test env: @@ -793,14 +992,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -812,8 +1011,54 @@ jobs: run: | nix develop -c zig build -Di18n=${{ matrix.i18n }} + test-fuzz-libghostty: + name: Build test/fuzz-libghostty + runs-on: namespace-profile-ghostty-sm + needs: test + env: + ZIG_LOCAL_CACHE_DIR: /zig/local-cache + ZIG_GLOBAL_CACHE_DIR: /zig/global-cache + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + path: | + /nix + /zig + + # Install Nix and use that to run our tests so our environment matches exactly. + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 + with: + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 + with: + name: ghostty + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - name: Install AFL++ and LLVM + run: | + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y afl++ llvm + + - name: Verify AFL++ and LLVM are available + run: | + afl-cc --version + if command -v llvm-config >/dev/null 2>&1; then + llvm-config --version + else + llvm-config-18 --version + fi + + - name: Build fuzzer harness + run: | + nix develop -c sh -c 'cd test/fuzz-libghostty && zig build' + zig-fmt: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.zig == 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -822,12 +1067,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -841,7 +1086,8 @@ jobs: pinact: name: "GitHub Actions Pins" - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.actions_pins == 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 permissions: @@ -852,12 +1098,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -872,7 +1118,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} prettier: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -881,12 +1128,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -898,8 +1145,39 @@ jobs: - name: prettier check run: nix develop -c prettier --check . + swiftlint: + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.macos == 'true' + runs-on: namespace-profile-ghostty-macos-tahoe + needs: skip + timeout-minutes: 60 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Cache + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 + with: + cache: | + xcode + path: | + /Users/runner/zig + + # TODO(tahoe): https://github.com/NixOS/nix/issues/13342 + - uses: DeterminateSystems/nix-installer-action@main + with: + determinate: true + - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 + with: + name: ghostty + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + skipPush: true + useDaemon: false # sometimes fails on short jobs + + - name: swiftlint check + run: nix develop -c swiftlint lint --strict + alejandra: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.nix == 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -908,12 +1186,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -926,7 +1204,8 @@ jobs: run: nix develop -c alejandra --check . typos: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -935,12 +1214,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -953,7 +1232,8 @@ jobs: run: nix develop -c typos shellcheck: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.shell == 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -962,12 +1242,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -985,7 +1265,8 @@ jobs: $(find . \( -name "*.sh" -o -name "*.bash" \) -type f ! -path "./zig-out/*" ! -path "./macos/build/*" ! -path "./.git/*" | sort) translations: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -994,12 +1275,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -1012,7 +1293,8 @@ jobs: run: nix develop -c .github/scripts/check-translations.sh blueprint-compiler: - if: github.repository == 'ghostty-org/ghostty' + if: github.repository == 'ghostty-org/ghostty' && needs.skip.outputs.skip != 'true' && needs.skip.outputs.blueprints == 'true' + needs: skip runs-on: namespace-profile-ghostty-xsm timeout-minutes: 60 env: @@ -1021,12 +1303,12 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -1056,14 +1338,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -1082,13 +1364,13 @@ jobs: needs: [test, build-dist] steps: - name: Install and configure Namespace CLI - uses: namespacelabs/nscloud-setup@d1c625762f7c926a54bd39252efff0705fd11c64 # v0.0.10 + uses: namespacelabs/nscloud-setup@f378676225212387f1283f4da878712af2c4cd60 # v0.0.11 - name: Configure Namespace powered Buildx uses: namespacelabs/nscloud-setup-buildx-action@f5814dcf37a16cce0624d5bec2ab879654294aa0 # v0.0.22 - name: Download Source Tarball Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: source-tarball @@ -1098,7 +1380,7 @@ jobs: tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz - name: Build and push - uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2 + uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0 with: context: dist file: dist/src/build/docker/debian/Dockerfile @@ -1118,14 +1400,14 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig # Install Nix and use that to run our tests so our environment matches exactly. - - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + - uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 diff --git a/.github/workflows/update-colorschemes.yml b/.github/workflows/update-colorschemes.yml index 026b1e9df2a..762b3d007c2 100644 --- a/.github/workflows/update-colorschemes.yml +++ b/.github/workflows/update-colorschemes.yml @@ -22,14 +22,14 @@ jobs: fetch-depth: 0 - name: Setup Cache - uses: namespacelabs/nscloud-cache-action@4d61c33d0b4333a518e975a0c4de7633d28713bb # v1.4.1 + uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9 # v1.4.2 with: path: | /nix /zig - name: Setup Nix - uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1 + uses: cachix/install-nix-action@19effe9fe722874e6d46dd7182e4b8b7a43c4a99 # v31.10.0 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 diff --git a/.github/workflows/vouch-check-issue.yml b/.github/workflows/vouch-check-issue.yml index e0933aaf101..3fa3bb542f7 100644 --- a/.github/workflows/vouch-check-issue.yml +++ b/.github/workflows/vouch-check-issue.yml @@ -14,7 +14,7 @@ jobs: app-id: ${{ secrets.VOUCH_APP_ID }} private-key: ${{ secrets.VOUCH_APP_PRIVATE_KEY }} - - uses: mitchellh/vouch/action/check-issue@6803dde571265e13489c3f118200f60b6ab59e4d # v1.3.1 + - uses: mitchellh/vouch/action/check-issue@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2 with: issue-number: ${{ github.event.issue.number }} auto-close: true diff --git a/.github/workflows/vouch-check-pr.yml b/.github/workflows/vouch-check-pr.yml index eb5a7e6fb6b..0efb6208c4f 100644 --- a/.github/workflows/vouch-check-pr.yml +++ b/.github/workflows/vouch-check-pr.yml @@ -14,7 +14,7 @@ jobs: app-id: ${{ secrets.VOUCH_APP_ID }} private-key: ${{ secrets.VOUCH_APP_PRIVATE_KEY }} - - uses: mitchellh/vouch/action/check-pr@6803dde571265e13489c3f118200f60b6ab59e4d # v1.3.1 + - uses: mitchellh/vouch/action/check-pr@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2 with: pr-number: ${{ github.event.pull_request.number }} auto-close: true diff --git a/.github/workflows/vouch-manage-by-discussion.yml b/.github/workflows/vouch-manage-by-discussion.yml index 50e2a23f3c1..cf7c092e23a 100644 --- a/.github/workflows/vouch-manage-by-discussion.yml +++ b/.github/workflows/vouch-manage-by-discussion.yml @@ -22,7 +22,7 @@ jobs: with: token: ${{ steps.app-token.outputs.token }} - - uses: mitchellh/vouch/action/manage-by-discussion@6803dde571265e13489c3f118200f60b6ab59e4d # v1.3.1 + - uses: mitchellh/vouch/action/manage-by-discussion@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2 with: discussion-number: ${{ github.event.discussion.number }} comment-node-id: ${{ github.event.comment.node_id }} diff --git a/.github/workflows/vouch-manage-by-issue.yml b/.github/workflows/vouch-manage-by-issue.yml index f00270a0dda..6f85520bde1 100644 --- a/.github/workflows/vouch-manage-by-issue.yml +++ b/.github/workflows/vouch-manage-by-issue.yml @@ -22,7 +22,7 @@ jobs: with: token: ${{ steps.app-token.outputs.token }} - - uses: mitchellh/vouch/action/manage-by-issue@6803dde571265e13489c3f118200f60b6ab59e4d # v1.3.1 + - uses: mitchellh/vouch/action/manage-by-issue@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2 with: repo: ${{ github.repository }} issue-id: ${{ github.event.issue.number }} diff --git a/.github/workflows/vouch-sync-codeowners.yml b/.github/workflows/vouch-sync-codeowners.yml new file mode 100644 index 00000000000..fac06a37257 --- /dev/null +++ b/.github/workflows/vouch-sync-codeowners.yml @@ -0,0 +1,32 @@ +on: + schedule: + - cron: "0 0 * * 1" # Every Monday at midnight UTC + workflow_dispatch: + +name: "Vouch - Sync CODEOWNERS" + +concurrency: + group: vouch-manage + cancel-in-progress: false + +jobs: + sync: + runs-on: namespace-profile-ghostty-xsm + steps: + - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + id: app-token + with: + app-id: ${{ secrets.VOUCH_APP_ID }} + private-key: ${{ secrets.VOUCH_APP_PRIVATE_KEY }} + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + token: ${{ steps.app-token.outputs.token }} + + - uses: mitchellh/vouch/action/sync-codeowners@c6d80ead49839655b61b422700b7a3bc9d0804a9 # v1.4.2 + with: + repo: ${{ github.repository }} + pull-request: "true" + merge-immediately: "true" + env: + GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.gitignore b/.gitignore index e521f8851f0..74f3f85ebdc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ zig-cache/ .zig-cache/ zig-out/ +/build.zig.zon.bak /result* /.nixos-test-history example/*.wasm @@ -24,3 +25,4 @@ glad.zip /ghostty.qcow2 vgcore.* + diff --git a/.prettierignore b/.prettierignore index f131a5edc40..2699f7e1058 100644 --- a/.prettierignore +++ b/.prettierignore @@ -11,6 +11,9 @@ zig-out/ # macos is managed by XCode GUI macos/ +# Xcode asset catalogs +**/*.xcassets/ + # produced by Icon Composer on macOS images/Ghostty.icon/icon.json @@ -19,3 +22,7 @@ website/.next # shaders *.frag + +# fuzz corpus files +test/fuzz-libghostty/corpus/ +test/fuzz-libghostty/afl-out/ diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 00000000000..7f1b56883fe --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,2 @@ +included: macos +child_config: macos/.swiftlint.yml diff --git a/AGENTS.md b/AGENTS.md index 04d3570a786..ff8c289c847 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,25 +5,23 @@ A file for [guiding coding agents](https://agents.md/). ## Commands - **Build:** `zig build` + - If you're on macOS and don't need to build the macOS app, use + `-Demit-macos-app=false` to skip building the app bundle and speed up + compilation. - **Test (Zig):** `zig build test` + - Prefer to run targeted tests with `-Dtest-filter` because the full + test suite is slow to run. - **Test filter (Zig)**: `zig build test -Dtest-filter=` - **Formatting (Zig)**: `zig fmt .` +- **Formatting (Swift)**: `swiftlint lint --fix` - **Formatting (other)**: `prettier -w .` ## Directory Structure - Shared Zig core: `src/` -- C API: `include` - macOS app: `macos/` - GTK (Linux and FreeBSD) app: `src/apprt/gtk` -## macOS App - -- Do not use `xcodebuild` -- Use `zig build` to build the macOS app and any shared Zig code -- Use `zig build run` to build and run the macOS app -- Run Xcode tests using `zig build test` - ## Issue and PR Guidelines - Never create an issue. diff --git a/CODEOWNERS b/CODEOWNERS index f8efe9beb44..0e8aebe4e75 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -137,6 +137,7 @@ /dist/macos/ @ghostty-org/macos /pkg/apple-sdk/ @ghostty-org/macos /pkg/macos/ @ghostty-org/macos +/.swiftlint.yml @ghostty-org/macos # Renderer /src/renderer.zig @ghostty-org/renderer @@ -163,31 +164,35 @@ # Localization /po/README_TRANSLATORS.md @ghostty-org/localization /po/com.mitchellh.ghostty.pot @ghostty-org/localization -/po/ca_ES.UTF-8.po @ghostty-org/ca_ES -/po/de_DE.UTF-8.po @ghostty-org/de_DE -/po/es_BO.UTF-8.po @ghostty-org/es_BO -/po/es_AR.UTF-8.po @ghostty-org/es_AR -/po/fr_FR.UTF-8.po @ghostty-org/fr_FR -/po/hu_HU.UTF-8.po @ghostty-org/hu_HU -/po/id_ID.UTF-8.po @ghostty-org/id_ID -/po/ja_JP.UTF-8.po @ghostty-org/ja_JP -/po/mk_MK.UTF-8.po @ghostty-org/mk_MK -/po/nb_NO.UTF-8.po @ghostty-org/nb_NO -/po/nl_NL.UTF-8.po @ghostty-org/nl_NL -/po/pl_PL.UTF-8.po @ghostty-org/pl_PL -/po/pt_BR.UTF-8.po @ghostty-org/pt_BR -/po/ru_RU.UTF-8.po @ghostty-org/ru_RU -/po/tr_TR.UTF-8.po @ghostty-org/tr_TR -/po/uk_UA.UTF-8.po @ghostty-org/uk_UA -/po/zh_CN.UTF-8.po @ghostty-org/zh_CN -/po/ga_IE.UTF-8.po @ghostty-org/ga_IE -/po/ko_KR.UTF-8.po @ghostty-org/ko_KR -/po/he_IL.UTF-8.po @ghostty-org/he_IL -/po/it_IT.UTF-8.po @ghostty-org/it_IT -/po/lt_LT.UTF-8.po @ghostty-org/lt_LT -/po/lv_LV.UTF-8.po @ghostty-org/lv_LV -/po/zh_TW.UTF-8.po @ghostty-org/zh_TW -/po/hr_HR.UTF-8.po @ghostty-org/hr_HR +/po/bg.po @ghostty-org/bg_BG +/po/ca.po @ghostty-org/ca_ES +/po/de.po @ghostty-org/de_DE +/po/es_AR.po @ghostty-org/es_AR +/po/es_BO.po @ghostty-org/es_BO +/po/es_ES.po @ghostty-org/es_ES +/po/fr.po @ghostty-org/fr_FR +/po/ga.po @ghostty-org/ga_IE +/po/he.po @ghostty-org/he_IL +/po/hr.po @ghostty-org/hr_HR +/po/hu.po @ghostty-org/hu_HU +/po/id.po @ghostty-org/id_ID +/po/it.po @ghostty-org/it_IT +/po/ja.po @ghostty-org/ja_JP +/po/kk.po @ghostty-org/kk_KZ +/po/ko_KR.po @ghostty-org/ko_KR +/po/lt.po @ghostty-org/lt_LT +/po/lv.po @ghostty-org/lv_LV +/po/mk.po @ghostty-org/mk_MK +/po/nb.po @ghostty-org/nb_NO +/po/nl.po @ghostty-org/nl_NL +/po/pl.po @ghostty-org/pl_PL +/po/pt_BR.po @ghostty-org/pt_BR +/po/ru.po @ghostty-org/ru_RU +/po/tr.po @ghostty-org/tr_TR +/po/uk.po @ghostty-org/uk_UA +/po/vi.po @ghostty-org/vi_VN +/po/zh_CN.po @ghostty-org/zh_CN +/po/zh_TW.po @ghostty-org/zh_TW # Packaging - Snap /snap/ @ghostty-org/snap diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9633029c5cb..b6be800c078 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,6 +47,13 @@ on a system of trust, and AI has unfortunately made it so we can no longer trust-by-default because it makes it too trivial to generate plausible-looking but actually low-quality contributions. +## Contributors Prior to the Vouch System + +If you contributed to Ghostty prior to the introduction +of the vouch system and wish to continue contributing, you were not +automatically added to the [list of vouched users](.github/VOUCHED.td). You will need to follow the same +process as a first-time contributor to be vouched. + ## Denouncement System If you repeatedly break the rules of this document or repeatedly diff --git a/HACKING.md b/HACKING.md index 921ed71ff4d..7ba58488116 100644 --- a/HACKING.md +++ b/HACKING.md @@ -186,6 +186,31 @@ shellcheck \ $(find . \( -name "*.sh" -o -name "*.bash" \) -type f ! -path "./zig-out/*" ! -path "./macos/build/*" ! -path "./.git/*" | sort) ``` +### SwiftLint + +Swift code is linted using [SwiftLint](https://github.com/realm/SwiftLint). A +SwiftLint CI check will fail builds with improper formatting. Therefore, if you +are modifying Swift code, you may want to install it locally and run this from +the repo root before you commit: + +``` +swiftlint lint --fix +``` + +Make sure your SwiftLint version matches the version in [devShell.nix](https://github.com/ghostty-org/ghostty/blob/main/nix/devShell.nix). + +Nix users can use the following command to format with SwiftLint: + +``` +nix develop -c swiftlint lint --fix +``` + +To check for violations without auto-fixing: + +``` +nix develop -c swiftlint lint --strict +``` + ### Updating the Zig Cache Fixed-Output Derivation Hash The Nix package depends on a [fixed-output diff --git a/build.zig b/build.zig index fa68b91b484..f9d861b1946 100644 --- a/build.zig +++ b/build.zig @@ -291,6 +291,14 @@ pub fn build(b: *std.Build) !void { if (config.emit_test_exe) b.installArtifact(test_exe); _ = try deps.add(test_exe); + // Verify our internal libghostty header. + const ghostty_h = b.addTranslateC(.{ + .root_source_file = b.path("include/ghostty.h"), + .target = config.baselineTarget(), + .optimize = .Debug, + }); + test_exe.root_module.addImport("ghostty.h", ghostty_h.createModule()); + // Normal test running const test_run = b.addRunArtifact(test_exe); test_step.dependOn(&test_run.step); diff --git a/build.zig.zon b/build.zig.zon index 497cef406e8..615f13288cd 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = .ghostty, - .version = "1.3.0-dev", + .version = "1.3.0", .paths = .{""}, .fingerprint = 0x64407a2a0b4147e5, .minimum_zig_version = "0.15.2", @@ -21,7 +21,7 @@ }, .z2d = .{ // vancluever/z2d - .url = "https://github.com/vancluever/z2d/archive/refs/tags/v0.10.0.tar.gz", + .url = "https://deps.files.ghostty.org/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ.tar.gz", .hash = "z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ", .lazy = true, }, @@ -39,8 +39,8 @@ }, .uucode = .{ // jacobsandlund/uucode - .url = "https://deps.files.ghostty.org/uucode-31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz", - .hash = "uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E", + .url = "https://deps.files.ghostty.org/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9.tar.gz", + .hash = "uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9", }, .zig_wayland = .{ // codeberg ifreund/zig-wayland @@ -115,9 +115,10 @@ // Other .apple_sdk = .{ .path = "./pkg/apple-sdk" }, + .android_ndk = .{ .path = "./pkg/android-ndk" }, .iterm2_themes = .{ - .url = "https://deps.files.ghostty.org/ghostty-themes-release-20260202-151632-49169e9.tgz", - .hash = "N-V-__8AAKlTAwClvdUfsAoiLgM6sb2NPZNnS6wzCiIs252Z", + .url = "https://deps.files.ghostty.org/ghostty-themes-release-20260216-151611-fc73ce3.tgz", + .hash = "N-V-__8AABVbAwBwDRyZONfx553tvMW8_A2OKUoLzPUSRiLF", .lazy = true, }, }, diff --git a/build.zig.zon.bak b/build.zig.zon.bak deleted file mode 100644 index 191ae7fa9c0..00000000000 --- a/build.zig.zon.bak +++ /dev/null @@ -1,124 +0,0 @@ -.{ - .name = .ghostty, - .version = "1.3.0-dev", - .paths = .{""}, - .fingerprint = 0x64407a2a0b4147e5, - .minimum_zig_version = "0.15.2", - .dependencies = .{ - // Zig libs - - .libxev = .{ - // mitchellh/libxev - .url = "https://deps.files.ghostty.org/libxev-34fa50878aec6e5fa8f532867001ab3c36fae23e.tar.gz", - .hash = "libxev-0.0.0-86vtc4IcEwCqEYxEYoN_3KXmc6A9VLcm22aVImfvecYs", - .lazy = true, - }, - .vaxis = .{ - // rockorager/libvaxis - .url = "https://github.com/rockorager/libvaxis/archive/7dbb9fd3122e4ffad262dd7c151d80d863b68558.tar.gz", - .hash = "vaxis-0.5.1-BWNV_LosCQAGmCCNOLljCIw6j6-yt53tji6n6rwJ2BhS", - .lazy = true, - }, - .z2d = .{ - // vancluever/z2d - .url = "https://github.com/vancluever/z2d/archive/refs/tags/v0.9.0.tar.gz", - .hash = "z2d-0.9.0-j5P_Hu-WFgA_JEfRpiFss6gdvcvS47cgOc0Via2eKD_T", - .lazy = true, - }, - .zig_objc = .{ - // mitchellh/zig-objc - .url = "https://deps.files.ghostty.org/zig_objc-f356ed02833f0f1b8e84d50bed9e807bf7cdc0ae.tar.gz", - .hash = "zig_objc-0.0.0-Ir_Sp5gTAQCvxxR7oVIrPXxXwsfKgVP7_wqoOQrZjFeK", - .lazy = true, - }, - .zig_js = .{ - // mitchellh/zig-js - .url = "https://deps.files.ghostty.org/zig_js-04db83c617da1956ac5adc1cb9ba1e434c1cb6fd.tar.gz", - .hash = "zig_js-0.0.0-rjCAV-6GAADxFug7rDmPH-uM_XcnJ5NmuAMJCAscMjhi", - .lazy = true, - }, - .uucode = .{ - // jacobsandlund/uucode - .url = "https://github.com/jacobsandlund/uucode/archive/31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz", - .hash = "uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E", - }, - .zig_wayland = .{ - // codeberg ifreund/zig-wayland - .url = "https://deps.files.ghostty.org/zig_wayland-1b5c038ec10da20ed3a15b0b2a6db1c21383e8ea.tar.gz", - .hash = "wayland-0.5.0-dev-lQa1khrMAQDJDwYFKpdH3HizherB7sHo5dKMECfvxQHe", - .lazy = true, - }, - .zf = .{ - // natecraddock/zf - .url = "https://github.com/natecraddock/zf/archive/3c52637b7e937c5ae61fd679717da3e276765b23.tar.gz", - .hash = "zf-0.10.3-OIRy8RuJAACKA3Lohoumrt85nRbHwbpMcUaLES8vxDnh", - .lazy = true, - }, - .gobject = .{ - // https://github.com/ghostty-org/zig-gobject based on zig_gobject - // Temporary until we generate them at build time automatically. - .url = "https://github.com/ghostty-org/zig-gobject/releases/download/0.7.0-2025-11-08-23-1/ghostty-gobject-0.7.0-2025-11-08-23-1.tar.zst", - .hash = "gobject-0.3.0-Skun7ANLnwDvEfIpVmohcppXgOvg_I6YOJFmPIsKfXk-", - .lazy = true, - }, - - // C libs - .cimgui = .{ .path = "./pkg/cimgui", .lazy = true }, - .fontconfig = .{ .path = "./pkg/fontconfig", .lazy = true }, - .freetype = .{ .path = "./pkg/freetype", .lazy = true }, - .gtk4_layer_shell = .{ .path = "./pkg/gtk4-layer-shell", .lazy = true }, - .harfbuzz = .{ .path = "./pkg/harfbuzz", .lazy = true }, - .highway = .{ .path = "./pkg/highway", .lazy = true }, - .libintl = .{ .path = "./pkg/libintl", .lazy = true }, - .libpng = .{ .path = "./pkg/libpng", .lazy = true }, - .macos = .{ .path = "./pkg/macos", .lazy = true }, - .oniguruma = .{ .path = "./pkg/oniguruma", .lazy = true }, - .opengl = .{ .path = "./pkg/opengl", .lazy = true }, - .sentry = .{ .path = "./pkg/sentry", .lazy = true }, - .simdutf = .{ .path = "./pkg/simdutf", .lazy = true }, - .utfcpp = .{ .path = "./pkg/utfcpp", .lazy = true }, - .wuffs = .{ .path = "./pkg/wuffs", .lazy = true }, - .zlib = .{ .path = "./pkg/zlib", .lazy = true }, - - // Shader translation - .glslang = .{ .path = "./pkg/glslang", .lazy = true }, - .spirv_cross = .{ .path = "./pkg/spirv-cross", .lazy = true }, - - // Wayland - .wayland = .{ - .url = "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz", - .hash = "N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t", - .lazy = true, - }, - .wayland_protocols = .{ - .url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz", - .hash = "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S", - .lazy = true, - }, - .plasma_wayland_protocols = .{ - .url = "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz", - .hash = "N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs", - .lazy = true, - }, - - // Fonts - .jetbrains_mono = .{ - .url = "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz", - .hash = "N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x", - .lazy = true, - }, - .nerd_fonts_symbols_only = .{ - .url = "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz", - .hash = "N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s", - .lazy = true, - }, - - // Other - .apple_sdk = .{ .path = "./pkg/apple-sdk" }, - .iterm2_themes = .{ - .url = "https://github.com/mbadolato/iTerm2-Color-Schemes/releases/download/release-20251201-150531-bfb3ee1/ghostty-themes.tgz", - .hash = "N-V-__8AANFEAwCzzNzNs3Gaq8pzGNl2BbeyFBwTyO5iZJL-", - .lazy = true, - }, - }, -} diff --git a/build.zig.zon.json b/build.zig.zon.json index 5b557a49382..4a88e20174f 100644 --- a/build.zig.zon.json +++ b/build.zig.zon.json @@ -54,10 +54,10 @@ "url": "https://github.com/ocornut/imgui/archive/refs/tags/v1.92.5-docking.tar.gz", "hash": "sha256-yBbCDox18+Fa6Gc1DnmSVQLRpqhZOLsac7iSfl8x+cs=" }, - "N-V-__8AAKlTAwClvdUfsAoiLgM6sb2NPZNnS6wzCiIs252Z": { + "N-V-__8AABVbAwBwDRyZONfx553tvMW8_A2OKUoLzPUSRiLF": { "name": "iterm2_themes", - "url": "https://deps.files.ghostty.org/ghostty-themes-release-20260202-151632-49169e9.tgz", - "hash": "sha256-xN+3iQaN3uIJ/BzkgFxLojgHqeuz1htNcVjcjWR7Qjg=" + "url": "https://deps.files.ghostty.org/ghostty-themes-release-20260216-151611-fc73ce3.tgz", + "hash": "sha256-FCALuGoMgUq2lgnVALKAs5a20uuDXt8Gdt5KeJwKqP0=" }, "N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x": { "name": "jetbrains_mono", @@ -119,10 +119,10 @@ "url": "git+https://github.com/jacobsandlund/uucode#5f05f8f83a75caea201f12cc8ea32a2d82ea9732", "hash": "sha256-sHPh+TQSdUGus/QTbj7KSJJkTuNTrK4VNmQDjS30Lf8=" }, - "uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E": { + "uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9": { "name": "uucode", - "url": "https://deps.files.ghostty.org/uucode-31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz", - "hash": "sha256-SzpYGhgG4B6Luf8eT35sKLobCxjmwEuo1Twk0jeu9g4=" + "url": "https://deps.files.ghostty.org/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9.tar.gz", + "hash": "sha256-0KvuD0+L1urjwFF3fhbnxC2JZKqqAVWRxOVlcD9GX5U=" }, "vaxis-0.5.1-BWNV_LosCQAGmCCNOLljCIw6j6-yt53tji6n6rwJ2BhS": { "name": "vaxis", @@ -146,7 +146,7 @@ }, "z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ": { "name": "z2d", - "url": "https://github.com/vancluever/z2d/archive/refs/tags/v0.10.0.tar.gz", + "url": "https://deps.files.ghostty.org/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ.tar.gz", "hash": "sha256-afIdou/V7gk3/lXE0J5Ir8T7L5GgHvFnyMJ1rgRnl/c=" }, "zf-0.10.3-OIRy8RuJAACKA3Lohoumrt85nRbHwbpMcUaLES8vxDnh": { diff --git a/build.zig.zon.nix b/build.zig.zon.nix index 1cdecbb85b0..53e1b6c0267 100644 --- a/build.zig.zon.nix +++ b/build.zig.zon.nix @@ -171,11 +171,11 @@ in }; } { - name = "N-V-__8AAKlTAwClvdUfsAoiLgM6sb2NPZNnS6wzCiIs252Z"; + name = "N-V-__8AABVbAwBwDRyZONfx553tvMW8_A2OKUoLzPUSRiLF"; path = fetchZigArtifact { name = "iterm2_themes"; - url = "https://deps.files.ghostty.org/ghostty-themes-release-20260202-151632-49169e9.tgz"; - hash = "sha256-xN+3iQaN3uIJ/BzkgFxLojgHqeuz1htNcVjcjWR7Qjg="; + url = "https://deps.files.ghostty.org/ghostty-themes-release-20260216-151611-fc73ce3.tgz"; + hash = "sha256-FCALuGoMgUq2lgnVALKAs5a20uuDXt8Gdt5KeJwKqP0="; }; } { @@ -275,11 +275,11 @@ in }; } { - name = "uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E"; + name = "uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9"; path = fetchZigArtifact { name = "uucode"; - url = "https://deps.files.ghostty.org/uucode-31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz"; - hash = "sha256-SzpYGhgG4B6Luf8eT35sKLobCxjmwEuo1Twk0jeu9g4="; + url = "https://deps.files.ghostty.org/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9.tar.gz"; + hash = "sha256-0KvuD0+L1urjwFF3fhbnxC2JZKqqAVWRxOVlcD9GX5U="; }; } { @@ -318,7 +318,7 @@ in name = "z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ"; path = fetchZigArtifact { name = "z2d"; - url = "https://github.com/vancluever/z2d/archive/refs/tags/v0.10.0.tar.gz"; + url = "https://deps.files.ghostty.org/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ.tar.gz"; hash = "sha256-afIdou/V7gk3/lXE0J5Ir8T7L5GgHvFnyMJ1rgRnl/c="; }; } diff --git a/build.zig.zon.txt b/build.zig.zon.txt index 468208621b6..4ac9e659273 100644 --- a/build.zig.zon.txt +++ b/build.zig.zon.txt @@ -6,7 +6,7 @@ https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918 https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz https://deps.files.ghostty.org/gettext-0.24.tar.gz -https://deps.files.ghostty.org/ghostty-themes-release-20260202-151632-49169e9.tgz +https://deps.files.ghostty.org/ghostty-themes-release-20260216-151611-fc73ce3.tgz https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz https://deps.files.ghostty.org/gobject-2025-11-08-23-1.tar.zst https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz @@ -21,11 +21,12 @@ https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz -https://deps.files.ghostty.org/uucode-31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz +https://deps.files.ghostty.org/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9.tar.gz https://deps.files.ghostty.org/vaxis-7dbb9fd3122e4ffad262dd7c151d80d863b68558.tar.gz https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz +https://deps.files.ghostty.org/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ.tar.gz https://deps.files.ghostty.org/zf-3c52637b7e937c5ae61fd679717da3e276765b23.tar.gz https://deps.files.ghostty.org/zig_js-04db83c617da1956ac5adc1cb9ba1e434c1cb6fd.tar.gz https://deps.files.ghostty.org/zig_objc-f356ed02833f0f1b8e84d50bed9e807bf7cdc0ae.tar.gz @@ -33,4 +34,3 @@ https://deps.files.ghostty.org/zig_wayland-1b5c038ec10da20ed3a15b0b2a6db1c21383e https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz https://github.com/ivanstepanovftw/zigimg/archive/d7b7ab0ba0899643831ef042bd73289510b39906.tar.gz https://github.com/ocornut/imgui/archive/refs/tags/v1.92.5-docking.tar.gz -https://github.com/vancluever/z2d/archive/refs/tags/v0.10.0.tar.gz diff --git a/dist/linux/com.mitchellh.ghostty.metainfo.xml.in b/dist/linux/com.mitchellh.ghostty.metainfo.xml.in index 42ccc27540c..da1fa626e35 100644 --- a/dist/linux/com.mitchellh.ghostty.metainfo.xml.in +++ b/dist/linux/com.mitchellh.ghostty.metainfo.xml.in @@ -52,6 +52,9 @@ + + https://ghostty.org/docs/install/release-notes/1-3-0 + https://ghostty.org/docs/install/release-notes/1-0-1 diff --git a/flake.nix b/flake.nix index d892dbd2fbf..e063f2d70d7 100644 --- a/flake.nix +++ b/flake.nix @@ -80,6 +80,7 @@ packageOverrides = pyfinal: pyprev: { blessed = pyfinal.callPackage ./nix/pkgs/blessed.nix {}; ucs-detect = pyfinal.callPackage ./nix/pkgs/ucs-detect.nix {}; + wcwidth = pyfinal.callPackage ./nix/pkgs/wcwidth.nix {}; }; }; }; diff --git a/flatpak/zig-packages.json b/flatpak/zig-packages.json index d5c96064d2b..e58ecd4488b 100644 --- a/flatpak/zig-packages.json +++ b/flatpak/zig-packages.json @@ -67,9 +67,9 @@ }, { "type": "archive", - "url": "https://deps.files.ghostty.org/ghostty-themes-release-20260202-151632-49169e9.tgz", - "dest": "vendor/p/N-V-__8AAKlTAwClvdUfsAoiLgM6sb2NPZNnS6wzCiIs252Z", - "sha256": "c4dfb789068ddee209fc1ce4805c4ba23807a9ebb3d61b4d7158dc8d647b4238" + "url": "https://deps.files.ghostty.org/ghostty-themes-release-20260216-151611-fc73ce3.tgz", + "dest": "vendor/p/N-V-__8AABVbAwBwDRyZONfx553tvMW8_A2OKUoLzPUSRiLF", + "sha256": "14200bb86a0c814ab69609d500b280b396b6d2eb835edf0676de4a789c0aa8fd" }, { "type": "archive", @@ -145,9 +145,9 @@ }, { "type": "archive", - "url": "https://deps.files.ghostty.org/uucode-31655fba3c638229989cc524363ef5e3c7b580c1.tar.gz", - "dest": "vendor/p/uucode-0.1.0-ZZjBPicPTQDlG6OClzn2bPu7ICkkkyWrTB6aRsBr-A1E", - "sha256": "4b3a581a1806e01e8bb9ff1e4f7e6c28ba1b0b18e6c04ba8d53c24d237aef60e" + "url": "https://deps.files.ghostty.org/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9.tar.gz", + "dest": "vendor/p/uucode-0.2.0-ZZjBPqZVVABQepOqZHR7vV_NcaN-wats0IB6o-Exj6m9", + "sha256": "d0abee0f4f8bd6eae3c051777e16e7c42d8964aaaa015591c4e565703f465f95" }, { "type": "archive", @@ -175,7 +175,7 @@ }, { "type": "archive", - "url": "https://github.com/vancluever/z2d/archive/refs/tags/v0.10.0.tar.gz", + "url": "https://deps.files.ghostty.org/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ.tar.gz", "dest": "vendor/p/z2d-0.10.0-j5P_Hu-6FgBsZNgwphIqh17jDnj8_yPtD8yzjO6PpHRQ", "sha256": "69f21da2efd5ee0937fe55c4d09e48afc4fb2f91a01ef167c8c275ae046797f7" }, diff --git a/include/ghostty.h b/include/ghostty.h index b32cc9856d1..19a200f100e 100644 --- a/include/ghostty.h +++ b/include/ghostty.h @@ -463,6 +463,12 @@ typedef struct { // Config types +// config.Path +typedef struct { + const char* path; + bool optional; +} ghostty_config_path_s; + // config.Color typedef struct { uint8_t r; @@ -509,6 +515,15 @@ typedef struct { ghostty_quick_terminal_size_s secondary; } ghostty_config_quick_terminal_size_s; +// config.Fullscreen +typedef enum { + GHOSTTY_CONFIG_FULLSCREEN_FALSE, + GHOSTTY_CONFIG_FULLSCREEN_TRUE, + GHOSTTY_CONFIG_FULLSCREEN_NON_NATIVE, + GHOSTTY_CONFIG_FULLSCREEN_NON_NATIVE_VISIBLE_MENU, + GHOSTTY_CONFIG_FULLSCREEN_NON_NATIVE_PADDED_NOTCH, +} ghostty_config_fullscreen_e; + // apprt.Target.Key typedef enum { GHOSTTY_TARGET_APP, @@ -577,9 +592,9 @@ typedef enum { // apprt.action.Fullscreen typedef enum { GHOSTTY_FULLSCREEN_NATIVE, - GHOSTTY_FULLSCREEN_NON_NATIVE, - GHOSTTY_FULLSCREEN_NON_NATIVE_VISIBLE_MENU, - GHOSTTY_FULLSCREEN_NON_NATIVE_PADDED_NOTCH, + GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE, + GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE_VISIBLE_MENU, + GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE_PADDED_NOTCH, } ghostty_action_fullscreen_e; // apprt.action.FloatWindow @@ -709,7 +724,7 @@ typedef struct { // renderer.Health typedef enum { - GHOSTTY_RENDERER_HEALTH_OK, + GHOSTTY_RENDERER_HEALTH_HEALTHY, GHOSTTY_RENDERER_HEALTH_UNHEALTHY, } ghostty_action_renderer_health_e; diff --git a/include/ghostty/vt/sgr.h b/include/ghostty/vt/sgr.h index 0c1afc309bd..5aaa368d21b 100644 --- a/include/ghostty/vt/sgr.h +++ b/include/ghostty/vt/sgr.h @@ -109,30 +109,29 @@ typedef enum { GHOSTTY_SGR_ATTR_RESET_ITALIC = 5, GHOSTTY_SGR_ATTR_FAINT = 6, GHOSTTY_SGR_ATTR_UNDERLINE = 7, - GHOSTTY_SGR_ATTR_RESET_UNDERLINE = 8, - GHOSTTY_SGR_ATTR_UNDERLINE_COLOR = 9, - GHOSTTY_SGR_ATTR_UNDERLINE_COLOR_256 = 10, - GHOSTTY_SGR_ATTR_RESET_UNDERLINE_COLOR = 11, - GHOSTTY_SGR_ATTR_OVERLINE = 12, - GHOSTTY_SGR_ATTR_RESET_OVERLINE = 13, - GHOSTTY_SGR_ATTR_BLINK = 14, - GHOSTTY_SGR_ATTR_RESET_BLINK = 15, - GHOSTTY_SGR_ATTR_INVERSE = 16, - GHOSTTY_SGR_ATTR_RESET_INVERSE = 17, - GHOSTTY_SGR_ATTR_INVISIBLE = 18, - GHOSTTY_SGR_ATTR_RESET_INVISIBLE = 19, - GHOSTTY_SGR_ATTR_STRIKETHROUGH = 20, - GHOSTTY_SGR_ATTR_RESET_STRIKETHROUGH = 21, - GHOSTTY_SGR_ATTR_DIRECT_COLOR_FG = 22, - GHOSTTY_SGR_ATTR_DIRECT_COLOR_BG = 23, - GHOSTTY_SGR_ATTR_BG_8 = 24, - GHOSTTY_SGR_ATTR_FG_8 = 25, - GHOSTTY_SGR_ATTR_RESET_FG = 26, - GHOSTTY_SGR_ATTR_RESET_BG = 27, - GHOSTTY_SGR_ATTR_BRIGHT_BG_8 = 28, - GHOSTTY_SGR_ATTR_BRIGHT_FG_8 = 29, - GHOSTTY_SGR_ATTR_BG_256 = 30, - GHOSTTY_SGR_ATTR_FG_256 = 31, + GHOSTTY_SGR_ATTR_UNDERLINE_COLOR = 8, + GHOSTTY_SGR_ATTR_UNDERLINE_COLOR_256 = 9, + GHOSTTY_SGR_ATTR_RESET_UNDERLINE_COLOR = 10, + GHOSTTY_SGR_ATTR_OVERLINE = 11, + GHOSTTY_SGR_ATTR_RESET_OVERLINE = 12, + GHOSTTY_SGR_ATTR_BLINK = 13, + GHOSTTY_SGR_ATTR_RESET_BLINK = 14, + GHOSTTY_SGR_ATTR_INVERSE = 15, + GHOSTTY_SGR_ATTR_RESET_INVERSE = 16, + GHOSTTY_SGR_ATTR_INVISIBLE = 17, + GHOSTTY_SGR_ATTR_RESET_INVISIBLE = 18, + GHOSTTY_SGR_ATTR_STRIKETHROUGH = 19, + GHOSTTY_SGR_ATTR_RESET_STRIKETHROUGH = 20, + GHOSTTY_SGR_ATTR_DIRECT_COLOR_FG = 21, + GHOSTTY_SGR_ATTR_DIRECT_COLOR_BG = 22, + GHOSTTY_SGR_ATTR_BG_8 = 23, + GHOSTTY_SGR_ATTR_FG_8 = 24, + GHOSTTY_SGR_ATTR_RESET_FG = 25, + GHOSTTY_SGR_ATTR_RESET_BG = 26, + GHOSTTY_SGR_ATTR_BRIGHT_BG_8 = 27, + GHOSTTY_SGR_ATTR_BRIGHT_FG_8 = 28, + GHOSTTY_SGR_ATTR_BG_256 = 29, + GHOSTTY_SGR_ATTR_FG_256 = 30, } GhosttySgrAttributeTag; /** diff --git a/macos/.swiftlint.yml b/macos/.swiftlint.yml new file mode 100644 index 00000000000..d2b371cc1d1 --- /dev/null +++ b/macos/.swiftlint.yml @@ -0,0 +1,36 @@ +# SwiftLint +# +check_for_updates: false + +excluded: + - build + +disabled_rules: + - cyclomatic_complexity + - file_length + - function_body_length + - line_length + - nesting + - no_fallthrough_only + - todo + - trailing_comma + - trailing_newline + - type_body_length + +identifier_name: + min_length: 1 + allowed_symbols: ["_"] + excluded: + - Core.* + +type_name: + min_length: 2 + allowed_symbols: ["_"] + excluded: + - iOS_.* + +function_parameter_count: + warning: 6 + +large_tuple: + warning: 3 diff --git a/macos/AGENTS.md b/macos/AGENTS.md new file mode 100644 index 00000000000..1a0c84c3280 --- /dev/null +++ b/macos/AGENTS.md @@ -0,0 +1,34 @@ +# macOS Ghostty Application + +- Use `swiftlint` for formatting and linting Swift code. +- If code outside of `macos/` directory is modified, use + `zig build -Demit-macos-app=false` before building the macOS app to update + the underlying Ghostty library. +- Use `macos/build.nu` to build the macOS app, do not use `zig build` + (except to build the underlying library as mentioned above). + - Build: `macos/build.nu [--scheme Ghostty] [--configuration Debug] [--action build]` + - Output: `macos/build//Ghostty.app` (e.g. `macos/build/Debug/Ghostty.app`) +- Run unit tests directly with `macos/build.nu --action test` + +## AppleScript + +- The AppleScript scripting definition is in `macos/Ghostty.sdef`. +- Guard AppleScript entry points and object accessors with the + `macos-applescript` configuration (use `NSApp.isAppleScriptEnabled` + and `NSApp.validateScript(command:)` where applicable). +- In `macos/Ghostty.sdef`, keep top-level definitions in this order: + 1. Classes + 2. Records + 3. Enums + 4. Commands +- Test AppleScript support: + (1) Build with `macos/build.nu` + (2) Launch and activate the app via osascript using the absolute path + to the built app bundle: + `osascript -e 'tell application "" to activate'` + (3) Wait a few seconds for the app to fully launch and open a terminal. + (4) Run test scripts with `osascript`, always targeting the app by + its absolute path (not by name) to avoid calling the wrong + application. + (5) When done, quit via: + `osascript -e 'tell application "" to quit'` diff --git a/macos/Ghostty-Info.plist b/macos/Ghostty-Info.plist index 5960dc0e77e..01ccd7b1107 100644 --- a/macos/Ghostty-Info.plist +++ b/macos/Ghostty-Info.plist @@ -2,6 +2,8 @@ + NSDockTilePlugIn + DockTilePlugin.plugin CFBundleDocumentTypes @@ -53,8 +55,12 @@ MDItemKeywords Terminal + NSAppleScriptEnabled + NSHighResolutionCapable + OSAScriptingDefinition + Ghostty.sdef NSServices diff --git a/macos/Ghostty.sdef b/macos/Ghostty.sdef new file mode 100644 index 00000000000..bdfc501fb51 --- /dev/null +++ b/macos/Ghostty.sdef @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Ghostty.xcodeproj/project.pbxproj b/macos/Ghostty.xcodeproj/project.pbxproj index ab6dde118cb..3758c325d94 100644 --- a/macos/Ghostty.xcodeproj/project.pbxproj +++ b/macos/Ghostty.xcodeproj/project.pbxproj @@ -10,6 +10,9 @@ 29C15B1D2CDC3B2900520DD4 /* bat in Resources */ = {isa = PBXBuildFile; fileRef = 29C15B1C2CDC3B2000520DD4 /* bat */; }; 55154BE02B33911F001622DC /* ghostty in Resources */ = {isa = PBXBuildFile; fileRef = 55154BDF2B33911F001622DC /* ghostty */; }; 552964E62B34A9B400030505 /* vim in Resources */ = {isa = PBXBuildFile; fileRef = 552964E52B34A9B400030505 /* vim */; }; + 819324582F24E78800A9ED8F /* DockTilePlugin.plugin in Copy DockTilePlugin */ = {isa = PBXBuildFile; fileRef = 8193244D2F24E6C000A9ED8F /* DockTilePlugin.plugin */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 819324642F24FF2100A9ED8F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A5B30538299BEAAB0047F10C /* Assets.xcassets */; }; + 8F3A9B4C2FA6B88000A18D13 /* Ghostty.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 8F3A9B4B2FA6B88000A18D13 /* Ghostty.sdef */; }; 9351BE8E3D22937F003B3499 /* nvim in Resources */ = {isa = PBXBuildFile; fileRef = 9351BE8E2D22937F003B3499 /* nvim */; }; A51BFC272B30F1B800E92F16 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = A51BFC262B30F1B800E92F16 /* Sparkle */; }; A53D0C8E2B53B0EA00305CE6 /* GhosttyKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D495A1299BEC7E00DD1313 /* GhosttyKit.xcframework */; }; @@ -35,6 +38,13 @@ remoteGlobalIDString = A5B30530299BEAAA0047F10C; remoteInfo = Ghostty; }; + 819324672F2502FB00A9ED8F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A5B30529299BEAAA0047F10C /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8193244C2F24E6C000A9ED8F; + remoteInfo = DockTilePlugin; + }; A54F45F72E1F047A0046BD5C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = A5B30529299BEAAA0047F10C /* Project object */; @@ -44,12 +54,28 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 819324572F24E74E00A9ED8F /* Copy DockTilePlugin */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 819324582F24E78800A9ED8F /* DockTilePlugin.plugin in Copy DockTilePlugin */, + ); + name = "Copy DockTilePlugin"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 29C15B1C2CDC3B2000520DD4 /* bat */ = {isa = PBXFileReference; lastKnownFileType = folder; name = bat; path = "../zig-out/share/bat"; sourceTree = ""; }; 3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GhosttyReleaseLocal.entitlements; sourceTree = ""; }; 55154BDF2B33911F001622DC /* ghostty */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ghostty; path = "../zig-out/share/ghostty"; sourceTree = ""; }; 552964E52B34A9B400030505 /* vim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = vim; path = "../zig-out/share/vim"; sourceTree = ""; }; 810ACC9F2E9D3301004F8F92 /* GhosttyUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GhosttyUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 8193244D2F24E6C000A9ED8F /* DockTilePlugin.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DockTilePlugin.plugin; sourceTree = BUILT_PRODUCTS_DIR; }; + 8F3A9B4B2FA6B88000A18D13 /* Ghostty.sdef */ = {isa = PBXFileReference; lastKnownFileType = text.sdef; path = Ghostty.sdef; sourceTree = ""; }; 9351BE8E2D22937F003B3499 /* nvim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nvim; path = "../zig-out/share/nvim"; sourceTree = ""; }; A51BFC282B30F26D00E92F16 /* GhosttyDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GhosttyDebug.entitlements; sourceTree = ""; }; A546F1132D7B68D7003B11A0 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = "../zig-out/share/locale"; sourceTree = ""; }; @@ -70,6 +96,22 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 8193245D2F24E80800A9ED8F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + "Features/Custom App Icon/AppIcon.swift", + "Features/Custom App Icon/ColorizedGhosttyIcon.swift", + "Features/Custom App Icon/DockTilePlugin.swift", + "Features/Custom App Icon/Extensions/Notification+AppIcon.swift", + "Features/Custom App Icon/Extensions/UserDefaults+AppIcon.swift", + Ghostty/Ghostty.ConfigTypes.swift, + Ghostty/GhosttyPackageMeta.swift, + Helpers/CrossKit.swift, + "Helpers/Extensions/NSImage+Extension.swift", + "Helpers/Extensions/OSColor+Extension.swift", + ); + target = 8193244C2F24E6C000A9ED8F /* DockTilePlugin */; + }; 81F82CB02E8281F5001EDFA7 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( @@ -80,6 +122,7 @@ Features/About/About.xib, Features/About/AboutController.swift, Features/About/AboutView.swift, + Features/About/AboutViewModel.swift, Features/About/CyclingIconView.swift, "Features/App Intents/CloseTerminalIntent.swift", "Features/App Intents/CommandPaletteIntent.swift", @@ -93,14 +136,30 @@ "Features/App Intents/KeybindIntent.swift", "Features/App Intents/NewTerminalIntent.swift", "Features/App Intents/QuickTerminalIntent.swift", + "Features/AppleScript/AppDelegate+AppleScript.swift", + "Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift", + Features/AppleScript/ScriptInputTextCommand.swift, + Features/AppleScript/ScriptKeyEventCommand.swift, + Features/AppleScript/ScriptMouseButtonCommand.swift, + Features/AppleScript/ScriptMousePosCommand.swift, + Features/AppleScript/ScriptMouseScrollCommand.swift, + Features/AppleScript/ScriptRecord.swift, + Features/AppleScript/ScriptSurfaceConfiguration.swift, + Features/AppleScript/ScriptTab.swift, + Features/AppleScript/ScriptTerminal.swift, + Features/AppleScript/ScriptWindow.swift, Features/ClipboardConfirmation/ClipboardConfirmation.xib, Features/ClipboardConfirmation/ClipboardConfirmationController.swift, Features/ClipboardConfirmation/ClipboardConfirmationView.swift, - "Features/Colorized Ghostty Icon/ColorizedGhosttyIcon.swift", - "Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift", - "Features/Colorized Ghostty Icon/ColorizedGhosttyIconView.swift", "Features/Command Palette/CommandPalette.swift", "Features/Command Palette/TerminalCommandPalette.swift", + "Features/Custom App Icon/AppIcon.swift", + "Features/Custom App Icon/ColorizedGhosttyIcon.swift", + "Features/Custom App Icon/ColorizedGhosttyIconImage.swift", + "Features/Custom App Icon/ColorizedGhosttyIconView.swift", + "Features/Custom App Icon/DockTilePlugin.swift", + "Features/Custom App Icon/Extensions/Notification+AppIcon.swift", + "Features/Custom App Icon/Extensions/UserDefaults+AppIcon.swift", "Features/Global Keybinds/GlobalEventTap.swift", Features/QuickTerminal/QuickTerminal.xib, Features/QuickTerminal/QuickTerminalController.swift, @@ -186,12 +245,13 @@ Helpers/LastWindowPosition.swift, Helpers/MetalView.swift, Helpers/NonDraggableHostingView.swift, + Helpers/ObjCExceptionCatcher.m, Helpers/PermissionRequest.swift, Helpers/Private/CGS.swift, Helpers/Private/Dock.swift, Helpers/TabGroupCloseCoordinator.swift, + Helpers/TabTitleEditor.swift, Helpers/VibrantLayer.m, - Helpers/Weak.swift, ); target = A5D4499C2B53AE7B000F5B83 /* Ghostty-iOS */; }; @@ -199,6 +259,7 @@ isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( App/iOS/iOSApp.swift, + "Features/Custom App Icon/DockTilePlugin.swift", "Ghostty/Surface View/SurfaceView_UIKit.swift", ); target = A5B30530299BEAAA0047F10C /* Ghostty */; @@ -207,7 +268,7 @@ /* Begin PBXFileSystemSynchronizedRootGroup section */ 810ACCA02E9D3302004F8F92 /* GhosttyUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = GhosttyUITests; sourceTree = ""; }; - 81F82BC72E82815D001EDFA7 /* Sources */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (81F82CB12E8281F9001EDFA7 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 81F82CB02E8281F5001EDFA7 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Sources; sourceTree = ""; }; + 81F82BC72E82815D001EDFA7 /* Sources */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (81F82CB12E8281F9001EDFA7 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 81F82CB02E8281F5001EDFA7 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 8193245D2F24E80800A9ED8F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Sources; sourceTree = ""; }; A54F45F42E1F047A0046BD5C /* Tests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Tests; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ @@ -219,6 +280,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8193244A2F24E6C000A9ED8F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A54F45F02E1F047A0046BD5C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -268,6 +336,7 @@ isa = PBXGroup; children = ( A571AB1C2A206FC600248498 /* Ghostty-Info.plist */, + 8F3A9B4B2FA6B88000A18D13 /* Ghostty.sdef */, A5B30538299BEAAB0047F10C /* Assets.xcassets */, A553F4122E06EB1600257779 /* Ghostty.icon */, A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */, @@ -289,6 +358,7 @@ A5D4499D2B53AE7B000F5B83 /* Ghostty-iOS.app */, A54F45F32E1F047A0046BD5C /* GhosttyTests.xctest */, 810ACC9F2E9D3301004F8F92 /* GhosttyUITests.xctest */, + 8193244D2F24E6C000A9ED8F /* DockTilePlugin.plugin */, ); name = Products; sourceTree = ""; @@ -328,6 +398,25 @@ productReference = 810ACC9F2E9D3301004F8F92 /* GhosttyUITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; + 8193244C2F24E6C000A9ED8F /* DockTilePlugin */ = { + isa = PBXNativeTarget; + buildConfigurationList = 819324512F24E6C000A9ED8F /* Build configuration list for PBXNativeTarget "DockTilePlugin" */; + buildPhases = ( + 819324492F24E6C000A9ED8F /* Sources */, + 8193244A2F24E6C000A9ED8F /* Frameworks */, + 8193244B2F24E6C000A9ED8F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DockTilePlugin; + packageProductDependencies = ( + ); + productName = DockTilePlugin; + productReference = 8193244D2F24E6C000A9ED8F /* DockTilePlugin.plugin */; + productType = "com.apple.product-type.bundle"; + }; A54F45F22E1F047A0046BD5C /* GhosttyTests */ = { isa = PBXNativeTarget; buildConfigurationList = A54F45FC2E1F047A0046BD5C /* Build configuration list for PBXNativeTarget "GhosttyTests" */; @@ -355,13 +444,16 @@ isa = PBXNativeTarget; buildConfigurationList = A5B30540299BEAAB0047F10C /* Build configuration list for PBXNativeTarget "Ghostty" */; buildPhases = ( + FC501E0B2F46B410007AE49D /* Run SwiftLint */, A5B3052D299BEAAA0047F10C /* Sources */, A5B3052E299BEAAA0047F10C /* Frameworks */, A5B3052F299BEAAA0047F10C /* Resources */, + 819324572F24E74E00A9ED8F /* Copy DockTilePlugin */, ); buildRules = ( ); dependencies = ( + 819324682F2502FB00A9ED8F /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( 81F82BC72E82815D001EDFA7 /* Sources */, @@ -408,6 +500,9 @@ CreatedOnToolsVersion = 26.1; TestTargetID = A5B30530299BEAAA0047F10C; }; + 8193244C2F24E6C000A9ED8F = { + CreatedOnToolsVersion = 26.2; + }; A54F45F22E1F047A0046BD5C = { CreatedOnToolsVersion = 26.0; TestTargetID = A5B30530299BEAAA0047F10C; @@ -439,6 +534,7 @@ targets = ( A5B30530299BEAAA0047F10C /* Ghostty */, A5D4499C2B53AE7B000F5B83 /* Ghostty-iOS */, + 8193244C2F24E6C000A9ED8F /* DockTilePlugin */, A54F45F22E1F047A0046BD5C /* GhosttyTests */, 810ACC9E2E9D3301004F8F92 /* GhosttyUITests */, ); @@ -453,6 +549,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8193244B2F24E6C000A9ED8F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 819324642F24FF2100A9ED8F /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A54F45F12E1F047A0046BD5C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -468,6 +572,7 @@ A553F4142E06EB1600257779 /* Ghostty.icon in Resources */, 29C15B1D2CDC3B2900520DD4 /* bat in Resources */, A586167C2B7703CC009BDB1D /* fish in Resources */, + 8F3A9B4C2FA6B88000A18D13 /* Ghostty.sdef in Resources */, 55154BE02B33911F001622DC /* ghostty in Resources */, A546F1142D7B68D7003B11A0 /* locale in Resources */, A5985CE62C33060F00C57AD3 /* man in Resources */, @@ -490,6 +595,29 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + FC501E0B2F46B410007AE49D /* Run SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftLint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "[[ -z \"$GITHUB_ACTIONS\" ]] || exit 0;\n\nSWIFTLINT=\"\"\nif command -v swiftlint >/dev/null 2>&1; then\n SWIFTLINT=\"$(command -v swiftlint)\"\nelif [[ -f \"/opt/homebrew/bin/swiftlint\" ]]; then\n SWIFTLINT=\"/opt/homebrew/bin/swiftlint\"\nfi\n\nif [[ -n \"$SWIFTLINT\" ]]; then\n \"$SWIFTLINT\" lint --quiet\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 810ACC9B2E9D3301004F8F92 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -498,6 +626,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 819324492F24E6C000A9ED8F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A54F45EF2E1F047A0046BD5C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -527,6 +662,11 @@ target = A5B30530299BEAAA0047F10C /* Ghostty */; targetProxy = 810ACCA52E9D3302004F8F92 /* PBXContainerItemProxy */; }; + 819324682F2502FB00A9ED8F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8193244C2F24E6C000A9ED8F /* DockTilePlugin */; + targetProxy = 819324672F2502FB00A9ED8F /* PBXContainerItemProxy */; + }; A54F45F82E1F047A0046BD5C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = A5B30530299BEAAA0047F10C /* Ghostty */; @@ -659,7 +799,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyUITests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; @@ -682,6 +822,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyUITests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; @@ -704,6 +845,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyUITests; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; @@ -712,6 +854,93 @@ }; name = ReleaseLocal; }; + 8193244E2F24E6C000A9ED8F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Ghostty Dock Tile Plugin"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSPrincipalClass = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = "com.mitchellh.ghostty-dock-tile"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DOCK_TILE_PLUGIN DEBUG"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 6.0; + WRAPPER_EXTENSION = plugin; + }; + name = Debug; + }; + 8193244F2F24E6C000A9ED8F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Ghostty Dock Tile Plugin"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSPrincipalClass = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = "com.mitchellh.ghostty-dock-tile"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DOCK_TILE_PLUGIN; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 6.0; + WRAPPER_EXTENSION = plugin; + }; + name = Release; + }; + 819324502F24E6C000A9ED8F /* ReleaseLocal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Ghostty Dock Tile Plugin"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSPrincipalClass = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = "com.mitchellh.ghostty-dock-tile"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DOCK_TILE_PLUGIN; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 6.0; + WRAPPER_EXTENSION = plugin; + }; + name = ReleaseLocal; + }; A54F45F92E1F047A0046BD5C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1138,6 +1367,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = ReleaseLocal; }; + 819324512F24E6C000A9ED8F /* Build configuration list for PBXNativeTarget "DockTilePlugin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8193244E2F24E6C000A9ED8F /* Debug */, + 8193244F2F24E6C000A9ED8F /* Release */, + 819324502F24E6C000A9ED8F /* ReleaseLocal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseLocal; + }; A54F45FC2E1F047A0046BD5C /* Build configuration list for PBXNativeTarget "GhosttyTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/macos/Ghostty.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/macos/Ghostty.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 89573fb88e4..6e450d9bcef 100644 --- a/macos/Ghostty.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/macos/Ghostty.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,8 +6,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/sparkle-project/Sparkle", "state" : { - "revision" : "9a1d2a19d3595fcf8d9c447173f9a1687b3dcadb", - "version" : "2.8.0" + "revision" : "21d8df80440b1ca3b65fa82e40782f1e5a9e6ba2", + "version" : "2.9.0" } } ], diff --git a/macos/Sources/App/macOS/AppDelegate+Ghostty.swift b/macos/Sources/App/macOS/AppDelegate+Ghostty.swift index 4d798a1a5d9..fc9a4906746 100644 --- a/macos/Sources/App/macOS/AppDelegate+Ghostty.swift +++ b/macos/Sources/App/macOS/AppDelegate+Ghostty.swift @@ -10,14 +10,12 @@ extension AppDelegate: Ghostty.Delegate { guard let controller = window.windowController as? BaseTerminalController else { continue } - - for surface in controller.surfaceTree { - if surface.id == id { - return surface - } + + for surface in controller.surfaceTree where surface.id == id { + return surface } } - + return nil } } diff --git a/macos/Sources/App/macOS/AppDelegate.swift b/macos/Sources/App/macOS/AppDelegate.swift index 0db39a09e69..f9e2dc93f73 100644 --- a/macos/Sources/App/macOS/AppDelegate.swift +++ b/macos/Sources/App/macOS/AppDelegate.swift @@ -9,8 +9,7 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, UNUserNotificationCenterDelegate, - GhosttyAppDelegate -{ + GhosttyAppDelegate { // The application logger. We should probably move this at some point to a dedicated // class/struct but for now it lives here! 🤷â€â™‚ï¸ static let logger = Logger( @@ -65,6 +64,7 @@ class AppDelegate: NSObject, @IBOutlet private var menuReturnToDefaultSize: NSMenuItem? @IBOutlet private var menuFloatOnTop: NSMenuItem? @IBOutlet private var menuUseAsDefault: NSMenuItem? + @IBOutlet private var menuSetAsDefaultTerminal: NSMenuItem? @IBOutlet private var menuIncreaseFontSize: NSMenuItem? @IBOutlet private var menuDecreaseFontSize: NSMenuItem? @@ -109,7 +109,7 @@ class AppDelegate: NSObject, switch quickTerminalControllerState { case .initialized(let controller): return controller - + case .pendingRestore(let state): let controller = QuickTerminalController( ghostty, @@ -119,7 +119,7 @@ class AppDelegate: NSObject, ) quickTerminalControllerState = .initialized(controller) return controller - + case .uninitialized: let controller = QuickTerminalController( ghostty, @@ -143,16 +143,16 @@ class AppDelegate: NSObject, } /// Tracks the windows that we hid for toggleVisibility. - private(set) var hiddenState: ToggleVisibilityState? = nil + private(set) var hiddenState: ToggleVisibilityState? /// The observer for the app appearance. - private var appearanceObserver: NSKeyValueObservation? = nil + private var appearanceObserver: NSKeyValueObservation? /// Signals private var signals: [DispatchSourceSignal] = [] /// The custom app icon image that is currently in use. - @Published private(set) var appIcon: NSImage? = nil + @Published private(set) var appIcon: NSImage? override init() { #if DEBUG @@ -165,14 +165,14 @@ class AppDelegate: NSObject, ghostty.delegate = self } - //MARK: - NSApplicationDelegate + // MARK: - NSApplicationDelegate func applicationWillFinishLaunching(_ notification: Notification) { UserDefaults.standard.register(defaults: [ // Disable the automatic full screen menu item because we handle // it manually. "NSFullScreenMenuItemEverywhere": false, - + // On macOS 26 RC1, the autofill heuristic controller causes unusable levels // of slowdowns and CPU usage in the terminal window under certain [unknown] // conditions. We don't know exactly why/how. This disables the full heuristic @@ -196,7 +196,7 @@ class AppDelegate: NSObject, applicationLaunchTime = ProcessInfo.processInfo.systemUptime // Check if secure input was enabled when we last quit. - if (UserDefaults.standard.bool(forKey: "SecureInput") != SecureInput.shared.enabled) { + if UserDefaults.standard.bool(forKey: "SecureInput") != SecureInput.shared.enabled { toggleSecureInput(self) } @@ -243,6 +243,12 @@ class AppDelegate: NSObject, name: .ghosttyBellDidRing, object: nil ) + NotificationCenter.default.addObserver( + self, + selector: #selector(terminalWindowHasBell(_:)), + name: .terminalWindowBellDidChangeNotification, + object: nil + ) NotificationCenter.default.addObserver( self, selector: #selector(ghosttyNewWindow(_:)), @@ -279,7 +285,7 @@ class AppDelegate: NSObject, guard let appearance = change.newValue else { return } guard let app = self.ghostty.app else { return } let scheme: ghostty_color_scheme_e - if (appearance.isDark) { + if appearance.isDark { scheme = GHOSTTY_COLOR_SCHEME_DARK } else { scheme = GHOSTTY_COLOR_SCHEME_LIGHT @@ -298,12 +304,12 @@ class AppDelegate: NSObject, case .app: // Don't have to do anything. break - + case .zig_run, .cli: // Part of launch services (clicking an app, using `open`, etc.) activates // the application and brings it to the front. When using the CLI we don't // get this behavior, so we have to do it manually. - + // This never gets called until we click the dock icon. This forces it // activate immediately. applicationDidBecomeActive(.init(name: NSApplication.didBecomeActiveNotification)) @@ -327,11 +333,8 @@ class AppDelegate: NSObject, // If we're back manually then clear the hidden state because macOS handles it. self.hiddenState = nil - // Clear the dock badge when the app becomes active - self.setDockBadge(nil) - // First launch stuff - if (!applicationHasBecomeActive) { + if !applicationHasBecomeActive { applicationHasBecomeActive = true // Let's launch our first window. We only do this if we have no other windows. It @@ -352,8 +355,8 @@ class AppDelegate: NSObject, func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply { let windows = NSApplication.shared.windows - if (windows.isEmpty) { return .terminateNow } - + if windows.isEmpty { return .terminateNow } + // If we've already accepted to install an update, then we don't need to // confirm quit. The user is already expecting the update to happen. if updateController.isInstalling { @@ -379,14 +382,8 @@ class AppDelegate: NSObject, guard let keyword = AEKeyword("why?") else { break why } if let why = event.attributeDescriptor(forKeyword: keyword) { - switch (why.typeCodeValue) { - case kAEShutDown: - fallthrough - - case kAERestart: - fallthrough - - case kAEReallyLogOut: + switch why.typeCodeValue { + case kAEShutDown, kAERestart, kAEReallyLogOut: return .terminateNow default: @@ -396,7 +393,7 @@ class AppDelegate: NSObject, } // If our app says we don't need to confirm, we can exit now. - if (!ghostty.needsConfirmQuit) { return .terminateNow } + if !ghostty.needsConfirmQuit { return .terminateNow } // We have some visible window. Show an app-wide modal to confirm quitting. let alert = NSAlert() @@ -405,7 +402,7 @@ class AppDelegate: NSObject, alert.addButton(withTitle: "Close Ghostty") alert.addButton(withTitle: "Cancel") alert.alertStyle = .warning - switch (alert.runModal()) { + switch alert.runModal() { case .alertFirstButtonReturn: return .terminateNow @@ -448,18 +445,18 @@ class AppDelegate: NSObject, // Ghostty will validate as well but we can avoid creating an entirely new // surface by doing our own validation here. We can also show a useful error // this way. - + var isDirectory = ObjCBool(true) guard FileManager.default.fileExists(atPath: filename, isDirectory: &isDirectory) else { return false } - + // Set to true if confirmation is required before starting up the // new terminal. var requiresConfirm: Bool = false - + // Initialize the surface config which will be used to create the tab or window for the opened file. var config = Ghostty.SurfaceConfiguration() - - if (isDirectory.boolValue) { + + if isDirectory.boolValue { // When opening a directory, check the configuration to decide // whether to open in a new tab or new window. config.workingDirectory = filename @@ -470,24 +467,24 @@ class AppDelegate: NSObject, // because there is a sandbox escape possible if a sandboxed application // somehow is tricked into `open`-ing a non-sandboxed application. requiresConfirm = true - + // When opening a file, we want to execute the file. To do this, we // don't override the command directly, because it won't load the // profile/rc files for the shell, which is super important on macOS // due to things like Homebrew. Instead, we set the command to // `; exit` which is what Terminal and iTerm2 do. config.initialInput = "\(Ghostty.Shell.quote(filename)); exit\n" - + // For commands executed directly, we want to ensure we wait after exit // because in most cases scripts don't block on exit and we don't want // the window to just flash closed once complete. config.waitAfterCommand = true - + // Set the parent directory to our working directory so that relative // paths in scripts work. config.workingDirectory = (filename as NSString).deletingLastPathComponent } - + if requiresConfirm { // Confirmation required. We use an app-wide NSAlert for now. In the future we // may want to show this as a sheet on the focused window (especially if we're @@ -497,15 +494,15 @@ class AppDelegate: NSObject, alert.addButton(withTitle: "Allow") alert.addButton(withTitle: "Cancel") alert.alertStyle = .warning - switch (alert.runModal()) { + switch alert.runModal() { case .alertFirstButtonReturn: break - + default: return false } } - + switch ghostty.config.macosDockDropBehavior { case .new_tab: _ = TerminalController.newTab( @@ -515,7 +512,7 @@ class AppDelegate: NSObject, ) case .new_window: _ = TerminalController.newWindow(ghostty, withBaseConfig: config) } - + return true } @@ -577,6 +574,7 @@ class AppDelegate: NSObject, self.menuChangeTabTitle?.setImageIfDesired(systemSymbolName: "pencil.line") self.menuTerminalInspector?.setImageIfDesired(systemSymbolName: "scope") self.menuReadonly?.setImageIfDesired(systemSymbolName: "eye.fill") + self.menuSetAsDefaultTerminal?.setImageIfDesired(systemSymbolName: "star.fill") self.menuToggleFullScreen?.setImageIfDesired(systemSymbolName: "square.arrowtriangle.4.outward") self.menuToggleVisibility?.setImageIfDesired(systemSymbolName: "eye") self.menuZoomSplit?.setImageIfDesired(systemSymbolName: "arrow.up.left.and.arrow.down.right") @@ -744,7 +742,7 @@ class AppDelegate: NSObject, guard let ghostty = self.ghostty.app else { return event } // Build our event input and call ghostty - if (ghostty_app_key(ghostty, event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS))) { + if ghostty_app_key(ghostty, event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS)) { // The key was used so we want to stop it from going to our Mac app Ghostty.logger.debug("local key event handled event=\(event)") return nil @@ -759,7 +757,7 @@ class AppDelegate: NSObject, @objc private func quickTerminalDidChangeVisibility(_ notification: Notification) { guard let quickController = notification.object as? QuickTerminalController else { return } - self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off } + self.menuQuickTerminal?.state = if quickController.visible { .on } else { .off } } @objc private func ghosttyConfigDidChange(_ notification: Notification) { @@ -775,25 +773,35 @@ class AppDelegate: NSObject, } @objc private func ghosttyBellDidRing(_ notification: Notification) { - if (ghostty.config.bellFeatures.contains(.system)) { + if ghostty.config.bellFeatures.contains(.system) { NSSound.beep() } - if (ghostty.config.bellFeatures.contains(.attention)) { + if ghostty.config.bellFeatures.contains(.audio) { + if let configPath = ghostty.config.bellAudioPath, + let sound = NSSound(contentsOfFile: configPath.path, byReference: false) { + sound.volume = ghostty.config.bellAudioVolume + sound.play() + } + } + + if ghostty.config.bellFeatures.contains(.attention) { // Bounce the dock icon if we're not focused. NSApp.requestUserAttention(.informationalRequest) - - // Handle setting the dock badge based on permissions - ghosttyUpdateBadgeForBell() } } - private func ghosttyUpdateBadgeForBell() { + @objc private func terminalWindowHasBell(_ notification: Notification) { + guard notification.object is BaseTerminalController else { return } + syncDockBadge() + } + + private func syncDockBadge() { let center = UNUserNotificationCenter.current() center.getNotificationSettings { settings in switch settings.authorizationStatus { case .authorized: - // Already authorized, check badge setting and set if enabled + // If we're authorized and allow badges, then set the badge. if settings.badgeSetting == .enabled { DispatchQueue.main.async { self.setDockBadge() @@ -847,7 +855,12 @@ class AppDelegate: NSObject, _ = TerminalController.newTab(ghostty, from: window, withBaseConfig: config) } - private func setDockBadge(_ label: String? = "•") { + private func setDockBadge() { + let bellCount = NSApp.windows + .compactMap { $0.windowController as? BaseTerminalController } + .reduce(0) { $0 + ($1.bell ? 1 : 0) } + let wantsBadge = ghostty.config.bellFeatures.contains(.attention) && bellCount > 0 + let label = wantsBadge ? (bellCount > 99 ? "99+" : String(bellCount)) : nil NSApp.dockTile.badgeLabel = label NSApp.dockTile.display() } @@ -859,7 +872,7 @@ class AppDelegate: NSObject, // Depending on the "window-save-state" setting we have to set the NSQuitAlwaysKeepsWindows // configuration. This is the only way to carefully control whether macOS invokes the // state restoration system. - switch (config.windowSaveState) { + switch config.windowSaveState { case "never": UserDefaults.standard.setValue(false, forKey: "NSQuitAlwaysKeepsWindows") case "always": UserDefaults.standard.setValue(true, forKey: "NSQuitAlwaysKeepsWindows") case "default": fallthrough @@ -878,27 +891,30 @@ class AppDelegate: NSObject, autoUpdate == .check || autoUpdate == .download updateController.updater.automaticallyDownloadsUpdates = autoUpdate == .download - /** + /* To test `auto-update` easily, uncomment the line below and delete `SUEnableAutomaticChecks` in Ghostty-Info.plist. Note: When `auto-update = download`, you may need to `Clean Build Folder` if a background install has already begun. */ - //updateController.updater.checkForUpdatesInBackground() + // updateController.updater.checkForUpdatesInBackground() } // Config could change keybindings, so update everything that depends on that syncMenuShortcuts(config) TerminalController.all.forEach { $0.relabelTabs() } + // Update our badge since config can change what we show. + syncDockBadge() + // Config could change window appearance. We wrap this in an async queue because when // this is called as part of application launch it can deadlock with an internal // AppKit mutex on the appearance. DispatchQueue.main.async { self.syncAppearance(config: config) } // Decide whether to hide/unhide app from dock and app switcher - switch (config.macosHidden) { + switch config.macosHidden { case .never: NSApp.setActivationPolicy(.regular) @@ -909,16 +925,16 @@ class AppDelegate: NSObject, // If we have configuration errors, we need to show them. let c = ConfigurationErrorsController.sharedInstance c.errors = config.errors - if (c.errors.count > 0) { - if (c.window == nil || !c.window!.isVisible) { + if c.errors.count > 0 { + if c.window == nil || !c.window!.isVisible { c.showWindow(self) } } // We need to handle our global event tap depending on if there are global // events that we care about in Ghostty. - if (ghostty_app_has_global_keybinds(ghostty.app!)) { - if (timeSinceLaunch > 5) { + if ghostty_app_has_global_keybinds(ghostty.app!) { + if timeSinceLaunch > 5 { // If the process has been running for awhile we enable right away // because no windows are likely to pop up. GlobalEventTap.shared.enable() @@ -933,9 +949,8 @@ class AppDelegate: NSObject, } else { GlobalEventTap.shared.disable() } - Task { - await updateAppIcon(from: config) - } + + updateAppIcon(from: config) } /// Sync the appearance of our app with the theme specified in the config. @@ -943,84 +958,18 @@ class AppDelegate: NSObject, NSApplication.shared.appearance = .init(ghosttyConfig: config) } - // Using AppIconActor to ensure this work - // happens synchronously in the background - @AppIconActor - private func updateAppIcon(from config: Ghostty.Config) async { - var appIcon: NSImage? - var appIconName: String? = config.macosIcon.rawValue - - switch (config.macosIcon) { - case let icon where icon.assetName != nil: - appIcon = NSImage(named: icon.assetName!)! - - case .custom: - if let userIcon = NSImage(contentsOfFile: config.macosCustomIcon) { - appIcon = userIcon - appIconName = config.macosCustomIcon - } else { - appIcon = nil // Revert back to official icon if invalid location - appIconName = nil // Discard saved icon name - } - - case .customStyle: - // Discard saved icon name - // if no valid colours were found - appIconName = nil - guard let ghostColor = config.macosIconGhostColor else { break } - guard let screenColors = config.macosIconScreenColor else { break } - guard let icon = ColorizedGhosttyIcon( - screenColors: screenColors, - ghostColor: ghostColor, - frame: config.macosIconFrame - ).makeImage() else { break } - appIcon = icon - let colorStrings = ([ghostColor] + screenColors).compactMap(\.hexString) - appIconName = (colorStrings + [config.macosIconFrame.rawValue]) - .joined(separator: "_") - - default: - // Discard saved icon name - appIconName = nil - } - - // Only change the icon if it has actually changed from the current one, - // or if the app build has changed (e.g. after an update that reset the icon) - let cachedIconName = UserDefaults.standard.string(forKey: "CustomGhosttyIcon") - let cachedIconBuild = UserDefaults.standard.string(forKey: "CustomGhosttyIconBuild") - let currentBuild = Bundle.main.infoDictionary?["CFBundleVersion"] as? String - let buildChanged = cachedIconBuild != currentBuild - - guard cachedIconName != appIconName || buildChanged else { -#if DEBUG - if appIcon == nil { - await MainActor.run { - // Changing the app bundle's icon will corrupt code signing. - // We only use the default blueprint icon for the dock, - // so developers don't need to clean and re-build every time. - NSApplication.shared.applicationIconImage = NSImage(named: "BlueprintImage") - } - } -#endif - return + private func updateAppIcon(from config: Ghostty.Config) { + // Since this is called after `DockTilePlugin` has been running, + // clean it up here to trigger a correct update of the current config. + UserDefaults.standard.removeObject(forKey: "CustomGhosttyIcon") + DispatchQueue.global().async { + UserDefaults.standard.appIcon = AppIcon(config: config) + DistributedNotificationCenter.default() + .postNotificationName(.ghosttyIconDidChange, object: nil, userInfo: nil, deliverImmediately: true) } - // make it immutable, so Swift 6 won't complain - let newIcon = appIcon - - let appPath = Bundle.main.bundlePath - guard NSWorkspace.shared.setIcon(newIcon, forFile: appPath, options: []) else { return } - NSWorkspace.shared.noteFileSystemChanged(appPath) - - await MainActor.run { - self.appIcon = newIcon - NSApplication.shared.applicationIconImage = newIcon - } - - UserDefaults.standard.set(appIconName, forKey: "CustomGhosttyIcon") - UserDefaults.standard.set(currentBuild, forKey: "CustomGhosttyIconBuild") } - //MARK: - Restorable State + // MARK: - Restorable State /// We support NSSecureCoding for restorable state. Required as of macOS Sonoma (14) but a good idea anyways. func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { @@ -1029,18 +978,18 @@ class AppDelegate: NSObject, func application(_ app: NSApplication, willEncodeRestorableState coder: NSCoder) { Self.logger.debug("application will save window state") - + guard ghostty.config.windowSaveState != "never" else { return } - + // Encode our quick terminal state if we have it. switch quickTerminalControllerState { case .initialized(let controller) where controller.restorable: let data = QuickTerminalRestorableState(from: controller) data.encode(with: coder) - + case .pendingRestore(let state): state.encode(with: coder) - + default: break } @@ -1048,7 +997,7 @@ class AppDelegate: NSObject, func application(_ app: NSApplication, didDecodeRestorableState coder: NSCoder) { Self.logger.debug("application will restore window state") - + // Decode our quick terminal state. if ghostty.config.windowSaveState != "never", let state = QuickTerminalRestorableState(coder: coder) { @@ -1056,7 +1005,7 @@ class AppDelegate: NSObject, } } - //MARK: - UNUserNotificationCenterDelegate + // MARK: - UNUserNotificationCenterDelegate func userNotificationCenter( _ center: UNUserNotificationCenter, @@ -1077,21 +1026,19 @@ class AppDelegate: NSObject, withCompletionHandler(options) } - //MARK: - GhosttyAppDelegate + // MARK: - GhosttyAppDelegate func findSurface(forUUID uuid: UUID) -> Ghostty.SurfaceView? { for c in TerminalController.all { - for view in c.surfaceTree { - if view.id == uuid { - return view - } + for view in c.surfaceTree where view.id == uuid { + return view } } return nil } - //MARK: - Dock Menu + // MARK: - Dock Menu private func reloadDockMenu() { let newWindow = NSMenuItem(title: "New Window", action: #selector(newWindow), keyEquivalent: "") @@ -1102,11 +1049,11 @@ class AppDelegate: NSObject, dockMenu.addItem(newTab) } - //MARK: - Global State + // MARK: - Global State func setSecureInput(_ mode: Ghostty.SetSecureInput) { let input = SecureInput.shared - switch (mode) { + switch mode { case .on: input.global = true @@ -1116,11 +1063,11 @@ class AppDelegate: NSObject, case .toggle: input.global.toggle() } - self.menuSecureInput?.state = if (input.global) { .on } else { .off } + self.menuSecureInput?.state = if input.global { .on } else { .off } UserDefaults.standard.set(input.global, forKey: "SecureInput") } - //MARK: - IB Actions + // MARK: - IB Actions @IBAction func openConfig(_ sender: Any?) { Ghostty.App.openConfig() @@ -1132,7 +1079,7 @@ class AppDelegate: NSObject, @IBAction func checkForUpdates(_ sender: Any?) { updateController.checkForUpdates() - //UpdateSimulator.happyPath.simulate(with: updateViewModel) + // UpdateSimulator.happyPath.simulate(with: updateViewModel) } @IBAction func newWindow(_ sender: Any?) { @@ -1286,12 +1233,29 @@ extension AppDelegate { @IBAction func useAsDefault(_ sender: NSMenuItem) { let ud = UserDefaults.standard let key = TerminalWindow.defaultLevelKey - if (menuFloatOnTop?.state == .on) { + if menuFloatOnTop?.state == .on { ud.set(NSWindow.Level.floating, forKey: key) } else { ud.removeObject(forKey: key) } } + + @IBAction func setAsDefaultTerminal(_ sender: NSMenuItem) { + NSWorkspace.shared.setDefaultApplication(at: Bundle.main.bundleURL, toOpen: .unixExecutable) { error in + guard let error else { return } + Task { @MainActor in + let alert = NSAlert() + alert.messageText = "Failed to Set Default Terminal" + alert.informativeText = """ + Ghostty could not be set as the default terminal application. + + Error: \(error.localizedDescription) + """ + alert.alertStyle = .warning + alert.runModal() + } + } + } } // MARK: NSMenuItemValidation @@ -1299,6 +1263,9 @@ extension AppDelegate { extension AppDelegate: NSMenuItemValidation { func validateMenuItem(_ item: NSMenuItem) -> Bool { switch item.action { + case #selector(setAsDefaultTerminal(_:)): + return NSWorkspace.shared.defaultTerminal != Bundle.main.bundleURL + case #selector(floatOnTop(_:)), #selector(useAsDefault(_:)): // Float on top items only active if the key window is a primary @@ -1336,8 +1303,3 @@ private enum QuickTerminalState { /// Controller has been initialized. case initialized(QuickTerminalController) } - -@globalActor -fileprivate actor AppIconActor: GlobalActor { - static let shared = AppIconActor() -} diff --git a/macos/Sources/App/macOS/MainMenu.xib b/macos/Sources/App/macOS/MainMenu.xib index e2834409827..28c2a09c424 100644 --- a/macos/Sources/App/macOS/MainMenu.xib +++ b/macos/Sources/App/macOS/MainMenu.xib @@ -60,6 +60,7 @@ + @@ -109,6 +110,12 @@ + + + + + + diff --git a/macos/Sources/App/macOS/ghostty-bridging-header.h b/macos/Sources/App/macOS/ghostty-bridging-header.h index fc654ad3f7e..44781cbe978 100644 --- a/macos/Sources/App/macOS/ghostty-bridging-header.h +++ b/macos/Sources/App/macOS/ghostty-bridging-header.h @@ -1,3 +1,4 @@ // C imports here are exposed to Swift. +#import "ObjCExceptionCatcher.h" #import "VibrantLayer.h" diff --git a/macos/Sources/App/macOS/main.swift b/macos/Sources/App/macOS/main.swift index ad32f4e705e..ade9bf3f050 100644 --- a/macos/Sources/App/macOS/main.swift +++ b/macos/Sources/App/macOS/main.swift @@ -7,7 +7,7 @@ import GhosttyKit // rest of the app. if ghostty_init(UInt(CommandLine.argc), CommandLine.unsafeArgv) != GHOSTTY_SUCCESS { Ghostty.logger.critical("ghostty_init failed") - + // We also write to stderr if this is executed from the CLI or zig run switch Ghostty.launchSource { case .cli, .zig_run: @@ -18,7 +18,7 @@ if ghostty_init(UInt(CommandLine.argc), CommandLine.unsafeArgv) != GHOSTTY_SUCCE "Actions start with the `+` character.\n\n" + "View all available actions by running `ghostty +help`.\n") exit(1) - + case .app: // For the app we exit immediately. We should handle this case more // gracefully in the future. @@ -28,6 +28,6 @@ if ghostty_init(UInt(CommandLine.argc), CommandLine.unsafeArgv) != GHOSTTY_SUCCE // This will run the CLI action and exit if one was specified. A CLI // action is a command starting with a `+`, such as `ghostty +boo`. -ghostty_cli_try_action(); +ghostty_cli_try_action() _ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv) diff --git a/macos/Sources/Features/About/AboutController.swift b/macos/Sources/Features/About/AboutController.swift index efd7a515a1f..6f4cccf6d87 100644 --- a/macos/Sources/Features/About/AboutController.swift +++ b/macos/Sources/Features/About/AboutController.swift @@ -5,26 +5,28 @@ import SwiftUI class AboutController: NSWindowController, NSWindowDelegate { static let shared: AboutController = AboutController() + private let viewModel = AboutViewModel() override var windowNibName: NSNib.Name? { "About" } override func windowDidLoad() { guard let window = window else { return } window.center() window.isMovableByWindowBackground = true - window.contentView = NSHostingView(rootView: AboutView()) + window.contentView = NSHostingView(rootView: AboutView().environmentObject(viewModel)) } // MARK: - Functions func show() { window?.makeKeyAndOrderFront(nil) + viewModel.startCyclingIcons() } func hide() { window?.close() } - //MARK: - First Responder + // MARK: - First Responder @IBAction func close(_ sender: Any) { self.window?.performClose(sender) @@ -38,4 +40,8 @@ class AboutController: NSWindowController, NSWindowDelegate { @objc func cancel(_ sender: Any?) { close() } + + func windowWillClose(_ notification: Notification) { + viewModel.stopCyclingIcons() + } } diff --git a/macos/Sources/Features/About/AboutView.swift b/macos/Sources/Features/About/AboutView.swift index 967eb16b040..d9a12e4dc98 100644 --- a/macos/Sources/Features/About/AboutView.swift +++ b/macos/Sources/Features/About/AboutView.swift @@ -21,8 +21,7 @@ struct AboutView: View { init(material: NSVisualEffectView.Material, blendingMode: NSVisualEffectView.BlendingMode = .behindWindow, - isEmphasized: Bool = false) - { + isEmphasized: Bool = false) { self.material = material self.blendingMode = blendingMode self.isEmphasized = isEmphasized diff --git a/macos/Sources/Features/About/AboutViewModel.swift b/macos/Sources/Features/About/AboutViewModel.swift new file mode 100644 index 00000000000..dc0d38c2194 --- /dev/null +++ b/macos/Sources/Features/About/AboutViewModel.swift @@ -0,0 +1,40 @@ +import Combine + +class AboutViewModel: ObservableObject { + @Published var currentIcon: Ghostty.MacOSIcon? + @Published var isHovering: Bool = false + + private var timerCancellable: AnyCancellable? + + private let icons: [Ghostty.MacOSIcon] = [ + .official, + .blueprint, + .chalkboard, + .microchip, + .glass, + .holographic, + .paper, + .retro, + .xray, + ] + + func startCyclingIcons() { + timerCancellable = Timer.publish(every: 3, on: .main, in: .common) + .autoconnect() + .sink { [weak self] _ in + guard let self, !isHovering else { return } + advanceToNextIcon() + } + } + + func stopCyclingIcons() { + timerCancellable = nil + currentIcon = nil + } + + func advanceToNextIcon() { + let currentIndex = currentIcon.flatMap(icons.firstIndex(of:)) ?? 0 + let nextIndex = icons.indexWrapping(after: currentIndex) + currentIcon = icons[nextIndex] + } +} diff --git a/macos/Sources/Features/About/CyclingIconView.swift b/macos/Sources/Features/About/CyclingIconView.swift index 4274278e0b8..c2a860ff7b5 100644 --- a/macos/Sources/Features/About/CyclingIconView.swift +++ b/macos/Sources/Features/About/CyclingIconView.swift @@ -1,50 +1,38 @@ import SwiftUI import GhosttyKit +import Combine /// A view that cycles through Ghostty's official icon variants. struct CyclingIconView: View { - @State private var currentIcon: Ghostty.MacOSIcon = .official - @State private var isHovering: Bool = false - - private let icons: [Ghostty.MacOSIcon] = [ - .official, - .blueprint, - .chalkboard, - .microchip, - .glass, - .holographic, - .paper, - .retro, - .xray, - ] - private let timerPublisher = Timer.publish(every: 3, on: .main, in: .common) + @EnvironmentObject var viewModel: AboutViewModel var body: some View { ZStack { - iconView(for: currentIcon) - .id(currentIcon) + iconView(for: viewModel.currentIcon) + .id(viewModel.currentIcon) } - .animation(.easeInOut(duration: 0.5), value: currentIcon) + .animation(.easeInOut(duration: 0.5), value: viewModel.currentIcon) .frame(height: 128) - .onReceive(timerPublisher.autoconnect()) { _ in - if !isHovering { - advanceToNextIcon() - } - } .onHover { hovering in - isHovering = hovering + viewModel.isHovering = hovering } .onTapGesture { - advanceToNextIcon() + viewModel.advanceToNextIcon() + } + .contextMenu { + if let currentIcon = viewModel.currentIcon { + Button("Copy Icon Config") { + NSPasteboard.general.setString("macos-icon = \(currentIcon.rawValue)", forType: .string) + } + } } - .help("macos-icon = \(currentIcon.rawValue)") .accessibilityLabel("Ghostty Application Icon") .accessibilityHint("Click to cycle through icon variants") } @ViewBuilder - private func iconView(for icon: Ghostty.MacOSIcon) -> some View { - let iconImage: Image = switch icon.assetName { + private func iconView(for icon: Ghostty.MacOSIcon?) -> some View { + let iconImage: Image = switch icon?.assetName { case let assetName?: Image(assetName) case nil: ghosttyIconImage() } @@ -53,10 +41,4 @@ struct CyclingIconView: View { .resizable() .aspectRatio(contentMode: .fit) } - - private func advanceToNextIcon() { - let currentIndex = icons.firstIndex(of: currentIcon) ?? 0 - let nextIndex = icons.indexWrapping(after: currentIndex) - currentIcon = icons[nextIndex] - } } diff --git a/macos/Sources/Features/App Intents/CloseTerminalIntent.swift b/macos/Sources/Features/App Intents/CloseTerminalIntent.swift index 0155cf855c7..c3cca2514a6 100644 --- a/macos/Sources/Features/App Intents/CloseTerminalIntent.swift +++ b/macos/Sources/Features/App Intents/CloseTerminalIntent.swift @@ -22,7 +22,7 @@ struct CloseTerminalIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surfaceView = terminal.surfaceView else { throw GhosttyIntentError.surfaceNotFound } diff --git a/macos/Sources/Features/App Intents/CommandPaletteIntent.swift b/macos/Sources/Features/App Intents/CommandPaletteIntent.swift index 2f07d78613e..de6063564e1 100644 --- a/macos/Sources/Features/App Intents/CommandPaletteIntent.swift +++ b/macos/Sources/Features/App Intents/CommandPaletteIntent.swift @@ -29,7 +29,7 @@ struct CommandPaletteIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } diff --git a/macos/Sources/Features/App Intents/Entities/CommandEntity.swift b/macos/Sources/Features/App Intents/Entities/CommandEntity.swift index 3c7745e7c91..f05b5d9b9b5 100644 --- a/macos/Sources/Features/App Intents/Entities/CommandEntity.swift +++ b/macos/Sources/Features/App Intents/Entities/CommandEntity.swift @@ -25,11 +25,6 @@ struct CommandEntity: AppEntity { struct ID: Hashable { let terminalId: TerminalEntity.ID let actionKey: String - - init(terminalId: TerminalEntity.ID, actionKey: String) { - self.terminalId = terminalId - self.actionKey = actionKey - } } static var typeDisplayRepresentation: TypeDisplayRepresentation { @@ -79,7 +74,7 @@ extension CommandEntity.ID: EntityIdentifierConvertible { static func entityIdentifier(for entityIdentifierString: String) -> CommandEntity.ID? { .init(rawValue: entityIdentifierString) } - + var entityIdentifierString: String { rawValue } diff --git a/macos/Sources/Features/App Intents/Entities/TerminalEntity.swift b/macos/Sources/Features/App Intents/Entities/TerminalEntity.swift index e805466a225..a2c4abea05a 100644 --- a/macos/Sources/Features/App Intents/Entities/TerminalEntity.swift +++ b/macos/Sources/Features/App Intents/Entities/TerminalEntity.swift @@ -52,7 +52,7 @@ struct TerminalEntity: AppEntity { if let nsImage = ImageRenderer(content: view.screenshot()).nsImage { self.screenshot = nsImage } - + // Determine the kind based on the window controller type if view.window?.windowController is QuickTerminalController { self.kind = .quick @@ -66,9 +66,9 @@ extension TerminalEntity { enum Kind: String, AppEnum { case normal case quick - + static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Terminal Kind") - + static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [ .normal: .init(title: "Normal"), .quick: .init(title: "Quick") @@ -112,7 +112,7 @@ struct TerminalQuery: EntityStringQuery, EnumerableEntityQuery { let controllers = NSApp.windows.compactMap { $0.windowController as? BaseTerminalController } - + // Get all our surfaces return controllers.flatMap { $0.surfaceTree.root?.leaves() ?? [] diff --git a/macos/Sources/Features/App Intents/GetTerminalDetailsIntent.swift b/macos/Sources/Features/App Intents/GetTerminalDetailsIntent.swift index 563e3719b95..99d6e39ba4b 100644 --- a/macos/Sources/Features/App Intents/GetTerminalDetailsIntent.swift +++ b/macos/Sources/Features/App Intents/GetTerminalDetailsIntent.swift @@ -31,7 +31,7 @@ struct GetTerminalDetailsIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + switch detail { case .title: return .result(value: terminal.title) case .workingDirectory: return .result(value: terminal.workingDirectory) diff --git a/macos/Sources/Features/App Intents/InputIntent.swift b/macos/Sources/Features/App Intents/InputIntent.swift index d169b3a8c90..b77945cccbb 100644 --- a/macos/Sources/Features/App Intents/InputIntent.swift +++ b/macos/Sources/Features/App Intents/InputIntent.swift @@ -34,7 +34,7 @@ struct InputTextIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } @@ -86,7 +86,7 @@ struct KeyEventIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } @@ -95,7 +95,7 @@ struct KeyEventIntent: AppIntent { let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in result.union(mod.ghosttyMod) } - + let keyEvent = Ghostty.Input.KeyEvent( key: key, action: action, @@ -150,7 +150,7 @@ struct MouseButtonIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } @@ -159,7 +159,7 @@ struct MouseButtonIntent: AppIntent { let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in result.union(mod.ghosttyMod) } - + let mouseEvent = Ghostty.Input.MouseButtonEvent( action: action, button: button, @@ -184,7 +184,7 @@ struct MousePosIntent: AppIntent { var x: Double @Parameter( - title: "Y Position", + title: "Y Position", description: "The vertical position of the mouse cursor in pixels.", default: 0 ) @@ -213,7 +213,7 @@ struct MousePosIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } @@ -222,7 +222,7 @@ struct MousePosIntent: AppIntent { let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in result.union(mod.ghosttyMod) } - + let mousePosEvent = Ghostty.Input.MousePosEvent( x: x, y: y, @@ -283,7 +283,7 @@ struct MouseScrollIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } @@ -306,16 +306,16 @@ enum KeyEventMods: String, AppEnum, CaseIterable { case control case option case command - + static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Modifier Key") - - static var caseDisplayRepresentations: [KeyEventMods : DisplayRepresentation] = [ + + static var caseDisplayRepresentations: [KeyEventMods: DisplayRepresentation] = [ .shift: "Shift", .control: "Control", .option: "Option", .command: "Command" ] - + var ghosttyMod: Ghostty.Input.Mods { switch self { case .shift: .shift diff --git a/macos/Sources/Features/App Intents/IntentPermission.swift b/macos/Sources/Features/App Intents/IntentPermission.swift index 210d2cb2e21..26a21e70bf7 100644 --- a/macos/Sources/Features/App Intents/IntentPermission.swift +++ b/macos/Sources/Features/App Intents/IntentPermission.swift @@ -28,7 +28,7 @@ func requestIntentPermission() async -> Bool { await withCheckedContinuation { continuation in Task { @MainActor in if let delegate = NSApp.delegate as? AppDelegate { - switch (delegate.ghostty.config.macosShortcuts) { + switch delegate.ghostty.config.macosShortcuts { case .allow: continuation.resume(returning: true) return @@ -43,7 +43,6 @@ func requestIntentPermission() async -> Bool { } } - PermissionRequest.show( "com.mitchellh.ghostty.shortcutsPermission", message: "Allow Shortcuts to interact with Ghostty?", diff --git a/macos/Sources/Features/App Intents/KeybindIntent.swift b/macos/Sources/Features/App Intents/KeybindIntent.swift index a8cea8561bc..e4f41ebbd2f 100644 --- a/macos/Sources/Features/App Intents/KeybindIntent.swift +++ b/macos/Sources/Features/App Intents/KeybindIntent.swift @@ -26,7 +26,7 @@ struct KeybindIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let surface = terminal.surfaceModel else { throw GhosttyIntentError.surfaceNotFound } diff --git a/macos/Sources/Features/App Intents/NewTerminalIntent.swift b/macos/Sources/Features/App Intents/NewTerminalIntent.swift index 6de9e1e7e82..858d5ceb004 100644 --- a/macos/Sources/Features/App Intents/NewTerminalIntent.swift +++ b/macos/Sources/Features/App Intents/NewTerminalIntent.swift @@ -152,7 +152,7 @@ enum NewTerminalLocation: String { case splitRight = "split:right" case splitUp = "split:up" case splitDown = "split:down" - + var splitDirection: SplitTree.NewDirection? { switch self { case .splitLeft: return .left diff --git a/macos/Sources/Features/App Intents/QuickTerminalIntent.swift b/macos/Sources/Features/App Intents/QuickTerminalIntent.swift index 2048a3b8822..df0fe17a56e 100644 --- a/macos/Sources/Features/App Intents/QuickTerminalIntent.swift +++ b/macos/Sources/Features/App Intents/QuickTerminalIntent.swift @@ -15,7 +15,7 @@ struct QuickTerminalIntent: AppIntent { guard await requestIntentPermission() else { throw GhosttyIntentError.permissionDenied } - + guard let delegate = NSApp.delegate as? AppDelegate else { throw GhosttyIntentError.appUnavailable } diff --git a/macos/Sources/Features/AppleScript/AppDelegate+AppleScript.swift b/macos/Sources/Features/AppleScript/AppDelegate+AppleScript.swift new file mode 100644 index 00000000000..983217d606c --- /dev/null +++ b/macos/Sources/Features/AppleScript/AppDelegate+AppleScript.swift @@ -0,0 +1,351 @@ +import AppKit + +// Application-level Cocoa scripting hooks for the Ghostty AppleScript dictionary. +// +// Cocoa scripting is mostly convention-based: we do not register handlers in +// code, we expose Objective-C selectors with names Cocoa derives from +// `Ghostty.sdef`. +// +// In practical terms: +// - An `` in `sdef` maps to an ObjC collection accessor. +// - Unique-ID element lookup maps to `valueIn...WithUniqueID:`. +// - Some `` declarations map to `handle...ScriptCommand:`. +// +// This file implements the selectors Cocoa expects on `NSApplication`, which is +// the runtime object behind the `application` class in `Ghostty.sdef`. + +// MARK: - Windows + +@MainActor +extension NSApplication { + /// Backing collection for `application.windows`. + /// + /// We expose one scripting window per native tab group so scripts see the + /// expected window/tab hierarchy instead of one AppKit window per tab. + /// + /// Required selector name from the `sdef` element key: `scriptWindows`. + /// + /// Cocoa scripting calls this whenever AppleScript evaluates a window list, + /// such as `windows`, `window 1`, or `every window whose ...`. + @objc(scriptWindows) + var scriptWindows: [ScriptWindow] { + guard isAppleScriptEnabled else { return [] } + + // AppKit exposes one NSWindow per tab. AppleScript users expect one + // top-level window object containing multiple tabs, so we dedupe tab + // siblings into a single ScriptWindow. + var seen: Set = [] + var result: [ScriptWindow] = [] + + for controller in orderedTerminalControllers { + // Collapse each controller to one canonical representative for the + // whole tab group. Standalone windows map to themselves. + guard let primary = primaryTerminalController(for: controller) else { + continue + } + + let primaryControllerID = ObjectIdentifier(primary) + guard seen.insert(primaryControllerID).inserted else { + // Another tab from this group already created the scripting + // window object. + continue + } + + result.append(ScriptWindow(primaryController: primary)) + } + + return result + } + + /// Exposed as the AppleScript `front window` property. + /// + /// `scriptWindows` is already ordered front-to-back, so the first item is + /// the frontmost logical Ghostty window. + @objc(frontWindow) + var frontWindow: ScriptWindow? { + guard isAppleScriptEnabled else { return nil } + return scriptWindows.first + } + + /// Enables AppleScript unique-ID lookup for window references. + /// + /// Required selector name pattern for element key `scriptWindows`: + /// `valueInScriptWindowsWithUniqueID:`. + /// + /// Cocoa calls this when a script resolves `window id "..."`. + /// Returning `nil` makes the object specifier fail naturally. + @objc(valueInScriptWindowsWithUniqueID:) + func valueInScriptWindows(uniqueID: String) -> ScriptWindow? { + guard isAppleScriptEnabled else { return nil } + return scriptWindows.first(where: { $0.stableID == uniqueID }) + } +} + +// MARK: - Terminals + +@MainActor +extension NSApplication { + /// Backing collection for `application.terminals`. + /// + /// Required selector name: `terminals`. + @objc(terminals) + var terminals: [ScriptTerminal] { + guard isAppleScriptEnabled else { return [] } + return allSurfaceViews.map(ScriptTerminal.init) + } + + /// Enables AppleScript unique-ID lookup for terminal references. + /// + /// Required selector name pattern for element `terminals`: + /// `valueInTerminalsWithUniqueID:`. + /// + /// This is what lets scripts do stable references like + /// `terminal id "..."` even as windows/tabs change. + @objc(valueInTerminalsWithUniqueID:) + func valueInTerminals(uniqueID: String) -> ScriptTerminal? { + guard isAppleScriptEnabled else { return nil } + return allSurfaceViews + .first(where: { $0.id.uuidString == uniqueID }) + .map(ScriptTerminal.init) + } +} + +// MARK: - Commands + +@MainActor +extension NSApplication { + /// Handler for the `perform action` AppleScript command. + /// + /// Required selector name from the command in `sdef`: + /// `handlePerformActionScriptCommand:`. + /// + /// Cocoa scripting parses script syntax and provides: + /// - `directParameter`: the command string (`perform action "..."`). + /// - `evaluatedArguments["on"]`: the target terminal (`... on terminal ...`). + /// + /// We return a Bool to match the command's declared result type. + @objc(handlePerformActionScriptCommand:) + func handlePerformActionScriptCommand(_ command: NSScriptCommand) -> NSNumber? { + guard validateScript(command: command) else { return nil } + + guard let action = command.directParameter as? String else { + command.scriptErrorNumber = errAEParamMissed + command.scriptErrorString = "Missing action string." + return nil + } + + guard let terminal = command.evaluatedArguments?["on"] as? ScriptTerminal else { + command.scriptErrorNumber = errAEParamMissed + command.scriptErrorString = "Missing terminal target." + return nil + } + + return NSNumber(value: terminal.perform(action: action)) + } + + /// Handler for creating a reusable AppleScript surface configuration object. + @objc(handleNewSurfaceConfigurationScriptCommand:) + func handleNewSurfaceConfigurationScriptCommand(_ command: NSScriptCommand) -> NSDictionary? { + guard validateScript(command: command) else { return nil } + + do { + let configuration = try Ghostty.SurfaceConfiguration( + scriptRecord: command.evaluatedArguments?["configuration"] as? NSDictionary + ) + return configuration.dictionaryRepresentation + } catch { + command.scriptErrorNumber = errAECoercionFail + command.scriptErrorString = error.localizedDescription + return nil + } + } + + /// Handler for the `new window` AppleScript command. + /// + /// Required selector name from the command in `sdef`: + /// `handleNewWindowScriptCommand:`. + /// + /// Accepts an optional reusable surface configuration object. + /// + /// Returns the newly created scripting window object. + @objc(handleNewWindowScriptCommand:) + func handleNewWindowScriptCommand(_ command: NSScriptCommand) -> ScriptWindow? { + guard validateScript(command: command) else { return nil } + + guard let appDelegate = delegate as? AppDelegate else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Ghostty app delegate is unavailable." + return nil + } + + let baseConfig: Ghostty.SurfaceConfiguration? + if let scriptRecord = command.evaluatedArguments?["configuration"] as? NSDictionary { + do { + baseConfig = try Ghostty.SurfaceConfiguration(scriptRecord: scriptRecord) + } catch { + command.scriptErrorNumber = errAECoercionFail + command.scriptErrorString = error.localizedDescription + return nil + } + } else { + baseConfig = nil + } + + let controller = TerminalController.newWindow( + appDelegate.ghostty, + withBaseConfig: baseConfig + ) + let createdWindowID = ScriptWindow.stableID(primaryController: controller) + + if let scriptWindow = scriptWindows.first(where: { $0.stableID == createdWindowID }) { + return scriptWindow + } + + // Fall back to wrapping the created controller if AppKit window ordering + // has not refreshed yet in the current run loop. + return ScriptWindow(primaryController: controller) + } + + /// Handler for the `quit` AppleScript command. + /// + /// Required selector name from the command in `sdef`: + /// `handleQuitScriptCommand:`. + @objc(handleQuitScriptCommand:) + func handleQuitScriptCommand(_ command: NSScriptCommand) { + guard validateScript(command: command) else { return } + terminate(nil) + } + + /// Handler for the `new tab` AppleScript command. + /// + /// Required selector name from the command in `sdef`: + /// `handleNewTabScriptCommand:`. + /// + /// Accepts an optional target window and optional surface configuration. + /// If no window is provided, this mirrors App Intents and uses the + /// preferred parent window. + /// + /// Returns the newly created scripting tab object. + @objc(handleNewTabScriptCommand:) + func handleNewTabScriptCommand(_ command: NSScriptCommand) -> ScriptTab? { + guard validateScript(command: command) else { return nil } + + guard let appDelegate = delegate as? AppDelegate else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Ghostty app delegate is unavailable." + return nil + } + + let baseConfig: Ghostty.SurfaceConfiguration? + if let scriptRecord = command.evaluatedArguments?["configuration"] as? NSDictionary { + do { + baseConfig = try Ghostty.SurfaceConfiguration(scriptRecord: scriptRecord) + } catch { + command.scriptErrorNumber = errAECoercionFail + command.scriptErrorString = error.localizedDescription + return nil + } + } else { + baseConfig = nil + } + + let targetWindow = command.evaluatedArguments?["window"] as? ScriptWindow + let parentWindow: NSWindow? + if let targetWindow { + guard let resolvedWindow = targetWindow.preferredParentWindow else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Target window is no longer available." + return nil + } + + parentWindow = resolvedWindow + } else { + parentWindow = TerminalController.preferredParent?.window + } + + guard let createdController = TerminalController.newTab( + appDelegate.ghostty, + from: parentWindow, + withBaseConfig: baseConfig + ) else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Failed to create tab." + return nil + } + + let createdTabID = ScriptTab.stableID(controller: createdController) + + if let targetWindow, + let scriptTab = targetWindow.valueInTabs(uniqueID: createdTabID) { + return scriptTab + } + + for scriptWindow in scriptWindows { + if let scriptTab = scriptWindow.valueInTabs(uniqueID: createdTabID) { + return scriptTab + } + } + + // Fall back to wrapping the created controller if AppKit tab-group + // bookkeeping has not fully refreshed in the current run loop. + let fallbackWindow = ScriptWindow(primaryController: createdController) + return ScriptTab(window: fallbackWindow, controller: createdController) + } +} + +// MARK: - Private Helpers + +@MainActor +extension NSApplication { + /// Whether Ghostty should currently accept AppleScript interactions. + var isAppleScriptEnabled: Bool { + guard let appDelegate = delegate as? AppDelegate else { return true } + return appDelegate.ghostty.config.macosAppleScript + } + + /// Applies a consistent error when scripting is disabled by configuration. + @discardableResult + func validateScript(command: NSScriptCommand) -> Bool { + guard isAppleScriptEnabled else { + command.scriptErrorNumber = errAEEventNotPermitted + command.scriptErrorString = "AppleScript is disabled by the macos-applescript configuration." + return false + } + + return true + } + + /// Discovers all currently alive terminal surfaces across normal and quick + /// terminal windows. This powers both terminal enumeration and ID lookup. + fileprivate var allSurfaceViews: [Ghostty.SurfaceView] { + allTerminalControllers + .flatMap { $0.surfaceTree.root?.leaves() ?? [] } + } + + /// All terminal controllers in undefined order. + fileprivate var allTerminalControllers: [BaseTerminalController] { + NSApp.windows.compactMap { $0.windowController as? BaseTerminalController } + } + + /// All terminal controllers in front-to-back order. + fileprivate var orderedTerminalControllers: [BaseTerminalController] { + NSApp.orderedWindows.compactMap { $0.windowController as? BaseTerminalController } + } + + /// Identifies the primary tab controller for a window's tab group. + /// + /// This gives us one stable representative for all tabs in the same native + /// AppKit tab group. + /// + /// For standalone windows this returns the window's controller directly. + /// For tabbed windows, "primary" is currently the first controller in the + /// tab group's ordered windows list. + fileprivate func primaryTerminalController(for controller: BaseTerminalController) -> BaseTerminalController? { + guard let window = controller.window else { return nil } + guard let tabGroup = window.tabGroup else { return controller } + + return tabGroup.windows + .compactMap { $0.windowController as? BaseTerminalController } + .first + } +} diff --git a/macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift b/macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift new file mode 100644 index 00000000000..72a274c08fc --- /dev/null +++ b/macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift @@ -0,0 +1,18 @@ +extension Ghostty.Input.Mods { + /// Parses a comma-separated modifier string into `Ghostty.Input.Mods`. + /// + /// Recognized names: `shift`, `control`, `option`, `command`. + /// Returns `nil` if any unrecognized modifier name is encountered. + init?(scriptModifiers string: String) { + self = [] + for part in string.split(separator: ",") { + switch part.trimmingCharacters(in: .whitespaces).lowercased() { + case "shift": insert(.shift) + case "control": insert(.ctrl) + case "option": insert(.alt) + case "command": insert(.super) + default: return nil + } + } + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptInputTextCommand.swift b/macos/Sources/Features/AppleScript/ScriptInputTextCommand.swift new file mode 100644 index 00000000000..9662de343e2 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptInputTextCommand.swift @@ -0,0 +1,41 @@ +import AppKit + +/// Handler for the `input text` AppleScript command defined in `Ghostty.sdef`. +/// +/// Cocoa scripting instantiates this class because the command's `` element +/// specifies `class="GhosttyScriptInputTextCommand"`. The runtime calls +/// `performDefaultImplementation()` to execute the command. +@MainActor +@objc(GhosttyScriptInputTextCommand) +final class ScriptInputTextCommand: NSScriptCommand { + override func performDefaultImplementation() -> Any? { + guard NSApp.validateScript(command: self) else { return nil } + + guard let text = directParameter as? String else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing text to input." + return nil + } + + guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing terminal target." + return nil + } + + guard let surfaceView = terminal.surfaceView else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let surface = surfaceView.surfaceModel else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface model is not available." + return nil + } + + surface.sendText(text) + return nil + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptKeyEventCommand.swift b/macos/Sources/Features/AppleScript/ScriptKeyEventCommand.swift new file mode 100644 index 00000000000..0091098c553 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptKeyEventCommand.swift @@ -0,0 +1,76 @@ +import AppKit + +/// Handler for the `send key` AppleScript command defined in `Ghostty.sdef`. +/// +/// Cocoa scripting instantiates this class because the command's `` element +/// specifies `class="GhosttyScriptKeyEventCommand"`. The runtime calls +/// `performDefaultImplementation()` to execute the command. +@MainActor +@objc(GhosttyScriptKeyEventCommand) +final class ScriptKeyEventCommand: NSScriptCommand { + override func performDefaultImplementation() -> Any? { + guard NSApp.validateScript(command: self) else { return nil } + + guard let keyName = directParameter as? String else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing key name." + return nil + } + + guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing terminal target." + return nil + } + + guard let surfaceView = terminal.surfaceView else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let surface = surfaceView.surfaceModel else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface model is not available." + return nil + } + + guard let key = Ghostty.Input.Key(rawValue: keyName) else { + scriptErrorNumber = errAECoercionFail + scriptErrorString = "Unknown key name: \(keyName)" + return nil + } + + let action: Ghostty.Input.Action + if let actionCode = evaluatedArguments?["action"] as? UInt32 { + switch actionCode { + case "GIpr".fourCharCode: action = .press + case "GIrl".fourCharCode: action = .release + default: action = .press + } + } else { + action = .press + } + + let mods: Ghostty.Input.Mods + if let modsString = evaluatedArguments?["modifiers"] as? String { + guard let parsed = Ghostty.Input.Mods(scriptModifiers: modsString) else { + scriptErrorNumber = errAECoercionFail + scriptErrorString = "Unknown modifier in: \(modsString)" + return nil + } + mods = parsed + } else { + mods = [] + } + + let keyEvent = Ghostty.Input.KeyEvent( + key: key, + action: action, + mods: mods + ) + surface.sendKeyEvent(keyEvent) + + return nil + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptMouseButtonCommand.swift b/macos/Sources/Features/AppleScript/ScriptMouseButtonCommand.swift new file mode 100644 index 00000000000..15fe0fbce32 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptMouseButtonCommand.swift @@ -0,0 +1,95 @@ +import AppKit + +/// Handler for the `send mouse button` AppleScript command defined in `Ghostty.sdef`. +/// +/// Cocoa scripting instantiates this class because the command's `` element +/// specifies `class="GhosttyScriptMouseButtonCommand"`. The runtime calls +/// `performDefaultImplementation()` to execute the command. +@MainActor +@objc(GhosttyScriptMouseButtonCommand) +final class ScriptMouseButtonCommand: NSScriptCommand { + override func performDefaultImplementation() -> Any? { + guard NSApp.validateScript(command: self) else { return nil } + + guard let buttonCode = directParameter as? UInt32, + let button = ScriptMouseButtonValue(code: buttonCode) else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing or unknown mouse button." + return nil + } + + guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing terminal target." + return nil + } + + guard let surfaceView = terminal.surfaceView else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let surface = surfaceView.surfaceModel else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface model is not available." + return nil + } + + let action: Ghostty.Input.MouseState + if let actionCode = evaluatedArguments?["action"] as? UInt32 { + switch actionCode { + case "GIpr".fourCharCode: action = .press + case "GIrl".fourCharCode: action = .release + default: action = .press + } + } else { + action = .press + } + + let mods: Ghostty.Input.Mods + if let modsString = evaluatedArguments?["modifiers"] as? String { + guard let parsed = Ghostty.Input.Mods(scriptModifiers: modsString) else { + scriptErrorNumber = errAECoercionFail + scriptErrorString = "Unknown modifier in: \(modsString)" + return nil + } + mods = parsed + } else { + mods = [] + } + + let mouseEvent = Ghostty.Input.MouseButtonEvent( + action: action, + button: button.ghosttyButton, + mods: mods + ) + surface.sendMouseButton(mouseEvent) + + return nil + } +} + +/// Four-character codes matching the `mouse button` enumeration in `Ghostty.sdef`. +private enum ScriptMouseButtonValue { + case left + case right + case middle + + init?(code: UInt32) { + switch code { + case "GMlf".fourCharCode: self = .left + case "GMrt".fourCharCode: self = .right + case "GMmd".fourCharCode: self = .middle + default: return nil + } + } + + var ghosttyButton: Ghostty.Input.MouseButton { + switch self { + case .left: .left + case .right: .right + case .middle: .middle + } + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptMousePosCommand.swift b/macos/Sources/Features/AppleScript/ScriptMousePosCommand.swift new file mode 100644 index 00000000000..a044c3b2d6a --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptMousePosCommand.swift @@ -0,0 +1,65 @@ +import AppKit + +/// Handler for the `send mouse position` AppleScript command defined in `Ghostty.sdef`. +/// +/// Cocoa scripting instantiates this class because the command's `` element +/// specifies `class="GhosttyScriptMousePosCommand"`. The runtime calls +/// `performDefaultImplementation()` to execute the command. +@MainActor +@objc(GhosttyScriptMousePosCommand) +final class ScriptMousePosCommand: NSScriptCommand { + override func performDefaultImplementation() -> Any? { + guard NSApp.validateScript(command: self) else { return nil } + + guard let x = evaluatedArguments?["x"] as? Double else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing x position." + return nil + } + + guard let y = evaluatedArguments?["y"] as? Double else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing y position." + return nil + } + + guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing terminal target." + return nil + } + + guard let surfaceView = terminal.surfaceView else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let surface = surfaceView.surfaceModel else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface model is not available." + return nil + } + + let mods: Ghostty.Input.Mods + if let modsString = evaluatedArguments?["modifiers"] as? String { + guard let parsed = Ghostty.Input.Mods(scriptModifiers: modsString) else { + scriptErrorNumber = errAECoercionFail + scriptErrorString = "Unknown modifier in: \(modsString)" + return nil + } + mods = parsed + } else { + mods = [] + } + + let mousePosEvent = Ghostty.Input.MousePosEvent( + x: x, + y: y, + mods: mods + ) + surface.sendMousePos(mousePosEvent) + + return nil + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptMouseScrollCommand.swift b/macos/Sources/Features/AppleScript/ScriptMouseScrollCommand.swift new file mode 100644 index 00000000000..083937eaf9d --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptMouseScrollCommand.swift @@ -0,0 +1,71 @@ +import AppKit + +/// Handler for the `send mouse scroll` AppleScript command defined in `Ghostty.sdef`. +/// +/// Cocoa scripting instantiates this class because the command's `` element +/// specifies `class="GhosttyScriptMouseScrollCommand"`. The runtime calls +/// `performDefaultImplementation()` to execute the command. +@MainActor +@objc(GhosttyScriptMouseScrollCommand) +final class ScriptMouseScrollCommand: NSScriptCommand { + override func performDefaultImplementation() -> Any? { + guard NSApp.validateScript(command: self) else { return nil } + + guard let x = evaluatedArguments?["x"] as? Double else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing x scroll delta." + return nil + } + + guard let y = evaluatedArguments?["y"] as? Double else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing y scroll delta." + return nil + } + + guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else { + scriptErrorNumber = errAEParamMissed + scriptErrorString = "Missing terminal target." + return nil + } + + guard let surfaceView = terminal.surfaceView else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let surface = surfaceView.surfaceModel else { + scriptErrorNumber = errAEEventFailed + scriptErrorString = "Terminal surface model is not available." + return nil + } + + let precision = evaluatedArguments?["precision"] as? Bool ?? false + + let momentum: Ghostty.Input.Momentum + if let momentumCode = evaluatedArguments?["momentum"] as? UInt32 { + switch momentumCode { + case "SMno".fourCharCode: momentum = .none + case "SMbg".fourCharCode: momentum = .began + case "SMch".fourCharCode: momentum = .changed + case "SMen".fourCharCode: momentum = .ended + case "SMcn".fourCharCode: momentum = .cancelled + case "SMmb".fourCharCode: momentum = .mayBegin + case "SMst".fourCharCode: momentum = .stationary + default: momentum = .none + } + } else { + momentum = .none + } + + let scrollEvent = Ghostty.Input.MouseScrollEvent( + x: x, + y: y, + mods: .init(precision: precision, momentum: momentum) + ) + surface.sendMouseScroll(scrollEvent) + + return nil + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptRecord.swift b/macos/Sources/Features/AppleScript/ScriptRecord.swift new file mode 100644 index 00000000000..7c81b8e2981 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptRecord.swift @@ -0,0 +1,29 @@ +import Cocoa + +/// Protocol to more easily implement AppleScript records in Swift. +protocol ScriptRecord { + /// Initialize a default record. + init() + + /// Initialize a record from the raw value from AppleScript. + init(scriptRecord: NSDictionary?) throws + + /// Encode into the dictionary form for AppleScript. + var dictionaryRepresentation: NSDictionary { get } +} + +/// An error that can be thrown by `ScriptRecord.init(scriptRecord:)`. Any localized error +/// can be thrown but this is a common one. +enum RecordParseError: LocalizedError { + case invalidType(parameter: String, expected: String) + case invalidValue(parameter: String, message: String) + + var errorDescription: String? { + switch self { + case .invalidType(let parameter, let expected): + return "\(parameter) must be \(expected)." + case .invalidValue(let parameter, let message): + return "\(parameter) \(message)." + } + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptSurfaceConfiguration.swift b/macos/Sources/Features/AppleScript/ScriptSurfaceConfiguration.swift new file mode 100644 index 00000000000..dfa60da4169 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptSurfaceConfiguration.swift @@ -0,0 +1,140 @@ +import Foundation + +/// AppleScript record support for `Ghostty.SurfaceConfiguration`. +/// +/// This keeps scripting conversion at the data-structure boundary so AppleScript +/// can pass records by value (`new surface configuration`, assign, copy, mutate) +/// without introducing an additional wrapper type. +extension Ghostty.SurfaceConfiguration: ScriptRecord { + init(scriptRecord source: NSDictionary?) throws { + self.init() + + guard let source else { + return + } + + guard let raw = source as? [String: Any] else { + throw RecordParseError.invalidType(parameter: "configuration", expected: "a surface configuration record") + } + + if let rawFontSize = raw["fontSize"] { + guard let number = rawFontSize as? NSNumber else { + throw RecordParseError.invalidType(parameter: "font size", expected: "a number") + } + + let value = number.doubleValue + guard value.isFinite else { + throw RecordParseError.invalidValue(parameter: "font size", message: "must be a finite number") + } + + if value < 0 { + throw RecordParseError.invalidValue(parameter: "font size", message: "must be a positive number") + } + + if value > 0 { + fontSize = Float32(value) + } + } + + if let rawWorkingDirectory = raw["workingDirectory"] { + guard let workingDirectory = rawWorkingDirectory as? String else { + throw RecordParseError.invalidType(parameter: "initial working directory", expected: "text") + } + + if !workingDirectory.isEmpty { + self.workingDirectory = workingDirectory + } + } + + if let rawCommand = raw["command"] { + guard let command = rawCommand as? String else { + throw RecordParseError.invalidType(parameter: "command", expected: "text") + } + + if !command.isEmpty { + self.command = command + } + } + + if let rawInitialInput = raw["initialInput"] { + guard let initialInput = rawInitialInput as? String else { + throw RecordParseError.invalidType(parameter: "initial input", expected: "text") + } + + if !initialInput.isEmpty { + self.initialInput = initialInput + } + } + + if let rawWaitAfterCommand = raw["waitAfterCommand"] { + if let boolValue = rawWaitAfterCommand as? Bool { + waitAfterCommand = boolValue + } else if let numericValue = rawWaitAfterCommand as? NSNumber { + waitAfterCommand = numericValue.boolValue + } else { + throw RecordParseError.invalidType(parameter: "wait after command", expected: "boolean") + } + } + + if let assignments = raw["environmentVariables"] as? [String], !assignments.isEmpty { + environmentVariables = try Self.parseScriptEnvironmentAssignments(assignments) + } + } + + var dictionaryRepresentation: NSDictionary { + var record: [String: Any] = [ + "fontSize": 0, + "workingDirectory": "", + "command": "", + "initialInput": "", + "waitAfterCommand": false, + "environmentVariables": [String](), + ] + + if let fontSize { + record["fontSize"] = NSNumber(value: fontSize) + } + + if let workingDirectory { + record["workingDirectory"] = workingDirectory + } + + if let command { + record["command"] = command + } + + if let initialInput { + record["initialInput"] = initialInput + } + + if waitAfterCommand { + record["waitAfterCommand"] = true + } + + if !environmentVariables.isEmpty { + record["environmentVariables"] = environmentVariables.map { "\($0.key)=\($0.value)" } + } + + return record as NSDictionary + } + + private static func parseScriptEnvironmentAssignments(_ assignments: [String]) throws -> [String: String] { + var result: [String: String] = [:] + + for assignment in assignments { + guard let separator = assignment.firstIndex(of: "=") else { + throw RecordParseError.invalidValue( + parameter: "environment variables", + message: "expected KEY=VALUE, got \"\(assignment)\"" + ) + } + + let key = String(assignment[.. tab` without knowing anything about AppKit controllers. +@MainActor +@objc(GhosttyScriptTab) +final class ScriptTab: NSObject { + /// Stable identifier used by AppleScript `tab id "..."` references. + private let stableID: String + + /// Weak back-reference to the scripting window that owns this tab wrapper. + /// + /// We only need this for dynamic properties (`index`, `selected`) and for + /// building an object specifier path. + private weak var window: ScriptWindow? + + /// Live terminal controller for this tab. + /// + /// This can become `nil` if the tab closes while a script is running. + private weak var controller: BaseTerminalController? + + /// Called by `ScriptWindow.tabs` / `ScriptWindow.selectedTab`. + /// + /// The ID is computed once so object specifiers built from this instance keep + /// a consistent tab identity. + init(window: ScriptWindow, controller: BaseTerminalController) { + self.stableID = Self.stableID(controller: controller) + self.window = window + self.controller = controller + } + + /// Exposed as the AppleScript `id` property. + @objc(id) + var idValue: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return stableID + } + + /// Exposed as the AppleScript `title` property. + /// + /// Returns the title of the tab's window. + @objc(title) + var title: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return controller?.window?.title ?? "" + } + + /// Exposed as the AppleScript `index` property. + /// + /// Cocoa scripting expects this to be 1-based for user-facing collections. + @objc(index) + var index: Int { + guard NSApp.isAppleScriptEnabled else { return 0 } + guard let controller else { return 0 } + return window?.tabIndex(for: controller) ?? 0 + } + + /// Exposed as the AppleScript `selected` property. + /// + /// Powers script conditions such as `if selected of tab 1 then ...`. + @objc(selected) + var selected: Bool { + guard NSApp.isAppleScriptEnabled else { return false } + guard let controller else { return false } + return window?.tabIsSelected(controller) ?? false + } + + /// Exposed as the AppleScript `focused terminal` property. + /// + /// Uses the currently focused surface for this tab. + @objc(focusedTerminal) + var focusedTerminal: ScriptTerminal? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let controller else { return nil } + guard let surface = controller.focusedSurface, + controller.surfaceTree.contains(surface) + else { return nil } + + return ScriptTerminal(surfaceView: surface) + } + + /// Best-effort native window containing this tab. + var parentWindow: NSWindow? { + guard NSApp.isAppleScriptEnabled else { return nil } + return controller?.window + } + + /// Live controller backing this tab wrapper. + var parentController: BaseTerminalController? { + guard NSApp.isAppleScriptEnabled else { return nil } + return controller + } + + /// Exposed as the AppleScript `terminals` element on a tab. + /// + /// Returns all terminal surfaces (split panes) within this tab. + @objc(terminals) + var terminals: [ScriptTerminal] { + guard NSApp.isAppleScriptEnabled else { return [] } + guard let controller else { return [] } + return (controller.surfaceTree.root?.leaves() ?? []) + .map(ScriptTerminal.init) + } + + /// Enables unique-ID lookup for `terminals` references on a tab. + @objc(valueInTerminalsWithUniqueID:) + func valueInTerminals(uniqueID: String) -> ScriptTerminal? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let controller else { return nil } + return (controller.surfaceTree.root?.leaves() ?? []) + .first(where: { $0.id.uuidString == uniqueID }) + .map(ScriptTerminal.init) + } + + /// Handler for `select tab `. + @objc(handleSelectTabCommand:) + func handleSelectTab(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let tabContainerWindow = parentWindow else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Tab is no longer available." + return nil + } + + tabContainerWindow.makeKeyAndOrderFront(nil) + NSApp.activate(ignoringOtherApps: true) + return nil + } + + /// Handler for `close tab `. + @objc(handleCloseTabCommand:) + func handleCloseTab(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let tabController = parentController else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Tab is no longer available." + return nil + } + + if let managedTerminalController = tabController as? TerminalController { + managedTerminalController.closeTabImmediately(registerRedo: false) + return nil + } + + guard let tabContainerWindow = parentWindow else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Tab container window is no longer available." + return nil + } + + tabContainerWindow.close() + return nil + } + + /// Provides Cocoa scripting with a canonical "path" back to this object. + override var objectSpecifier: NSScriptObjectSpecifier? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let window else { return nil } + guard let windowClassDescription = window.classDescription as? NSScriptClassDescription else { + return nil + } + guard let windowSpecifier = window.objectSpecifier else { return nil } + + // This tells Cocoa how to re-find this tab later: + // application -> scriptWindows[id] -> tabs[id]. + return NSUniqueIDSpecifier( + containerClassDescription: windowClassDescription, + containerSpecifier: windowSpecifier, + key: "tabs", + uniqueID: stableID + ) + } +} + +extension ScriptTab { + /// Stable ID for one tab controller. + /// + /// Tab identity belongs to `ScriptTab`, so both tab creation and tab ID + /// lookups in `ScriptWindow` call this helper. + static func stableID(controller: BaseTerminalController) -> String { + "tab-\(ObjectIdentifier(controller).hexString)" + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptTerminal.swift b/macos/Sources/Features/AppleScript/ScriptTerminal.swift new file mode 100644 index 00000000000..2cdde382e85 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptTerminal.swift @@ -0,0 +1,206 @@ +import AppKit + +/// AppleScript-facing wrapper around a live Ghostty terminal surface. +/// +/// This class is intentionally ObjC-visible because Cocoa scripting resolves +/// AppleScript objects through Objective-C runtime names/selectors, not Swift +/// protocol conformance. +/// +/// Mapping from `Ghostty.sdef`: +/// - `class terminal` -> this class (`@objc(GhosttyAppleScriptTerminal)`). +/// - `property id` -> `@objc(id)` getter below. +/// - `property title` -> `@objc(title)` getter below. +/// - `property working directory` -> `@objc(workingDirectory)` getter below. +/// +/// We keep only a weak reference to the underlying `SurfaceView` so this +/// wrapper never extends the terminal's lifetime. +@MainActor +@objc(GhosttyScriptTerminal) +final class ScriptTerminal: NSObject { + /// Weak reference to the underlying surface. Package-visible so that + /// other AppleScript command handlers (e.g. `ScriptSplitCommand`) can + /// access the live surface without exposing it to ObjC/AppleScript. + weak var surfaceView: Ghostty.SurfaceView? + + init(surfaceView: Ghostty.SurfaceView) { + self.surfaceView = surfaceView + } + + /// Exposed as the AppleScript `id` property. + /// + /// This is a stable UUID string for the life of a surface and is also used + /// by `NSUniqueIDSpecifier` to re-identify a terminal object in scripts. + @objc(id) + var stableID: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return surfaceView?.id.uuidString ?? "" + } + + /// Exposed as the AppleScript `title` property. + @objc(title) + var title: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return surfaceView?.title ?? "" + } + + /// Exposed as the AppleScript `working directory` property. + /// + /// The `sdef` uses a spaced name, but Cocoa scripting maps that to the + /// camel-cased selector name `workingDirectory`. + @objc(workingDirectory) + var workingDirectory: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return surfaceView?.pwd ?? "" + } + + /// Used by command handling (`perform action ... on `). + func perform(action: String) -> Bool { + guard NSApp.isAppleScriptEnabled else { return false } + guard let surfaceModel = surfaceView?.surfaceModel else { return false } + return surfaceModel.perform(action: action) + } + + /// Handler for `split direction `. + @objc(handleSplitCommand:) + func handleSplit(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let surfaceView else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let directionCode = command.evaluatedArguments?["direction"] as? UInt32 else { + command.scriptErrorNumber = errAEParamMissed + command.scriptErrorString = "Missing or unknown split direction." + return nil + } + + guard let direction = ScriptSplitDirection(code: directionCode)?.splitDirection else { + command.scriptErrorNumber = errAEParamMissed + command.scriptErrorString = "Missing or unknown split direction." + return nil + } + + let baseConfig: Ghostty.SurfaceConfiguration? + if let scriptRecord = command.evaluatedArguments?["configuration"] as? NSDictionary { + do { + baseConfig = try Ghostty.SurfaceConfiguration(scriptRecord: scriptRecord) + } catch { + command.scriptErrorNumber = errAECoercionFail + command.scriptErrorString = error.localizedDescription + return nil + } + } else { + baseConfig = nil + } + + guard let controller = surfaceView.window?.windowController as? BaseTerminalController else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal is not in a splittable window." + return nil + } + + guard let newView = controller.newSplit( + at: surfaceView, + direction: direction, + baseConfig: baseConfig + ) else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Failed to create split." + return nil + } + + return ScriptTerminal(surfaceView: newView) + } + + /// Handler for `focus `. + @objc(handleFocusCommand:) + func handleFocus(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let surfaceView else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let controller = surfaceView.window?.windowController as? BaseTerminalController else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal is not in a window." + return nil + } + + controller.focusSurface(surfaceView) + return nil + } + + /// Handler for `close `. + @objc(handleCloseCommand:) + func handleClose(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let surfaceView else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal surface is no longer available." + return nil + } + + guard let controller = surfaceView.window?.windowController as? BaseTerminalController else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Terminal is not in a window." + return nil + } + + controller.closeSurface(surfaceView, withConfirmation: false) + return nil + } + + /// Provides Cocoa scripting with a canonical "path" back to this object. + /// + /// Without an object specifier, returned terminal objects can't be reliably + /// referenced in follow-up script statements because AppleScript cannot + /// express where the object came from (`application.terminals[id]`). + override var objectSpecifier: NSScriptObjectSpecifier? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let appClassDescription = NSApplication.shared.classDescription as? NSScriptClassDescription else { + return nil + } + + return NSUniqueIDSpecifier( + containerClassDescription: appClassDescription, + containerSpecifier: nil, + key: "terminals", + uniqueID: stableID + ) + } +} + +/// Converts four-character codes from the `split direction` enumeration in `Ghostty.sdef` +/// to `SplitTree.NewDirection` values. +enum ScriptSplitDirection { + case right + case left + case down + case up + + init?(code: UInt32) { + switch code { + case "GSrt".fourCharCode: self = .right + case "GSlf".fourCharCode: self = .left + case "GSdn".fourCharCode: self = .down + case "GSup".fourCharCode: self = .up + default: return nil + } + } + + var splitDirection: SplitTree.NewDirection { + switch self { + case .right: .right + case .left: .left + case .down: .down + case .up: .up + } + } +} diff --git a/macos/Sources/Features/AppleScript/ScriptWindow.swift b/macos/Sources/Features/AppleScript/ScriptWindow.swift new file mode 100644 index 00000000000..c8e4bc8e629 --- /dev/null +++ b/macos/Sources/Features/AppleScript/ScriptWindow.swift @@ -0,0 +1,260 @@ +import AppKit + +/// AppleScript-facing wrapper around a logical Ghostty window. +/// +/// In AppKit, each tab is often its own `NSWindow`. AppleScript users, however, +/// expect a single window object containing a list of tabs. +/// +/// `ScriptWindow` is that compatibility layer: +/// - It presents one object per tab group. +/// - It translates tab-group state into `tabs` and `selected tab`. +/// - It exposes stable IDs that Cocoa scripting can resolve later. +@MainActor +@objc(GhosttyScriptWindow) +final class ScriptWindow: NSObject { + /// Stable identifier used by AppleScript `window id "..."` references. + /// + /// We precompute this once so the object keeps a consistent ID for its whole + /// lifetime, even if AppKit window bookkeeping changes after creation. + let stableID: String + + /// Canonical representative for this scripting window's tab group. + /// + /// We intentionally keep only one controller reference; full tab membership + /// is derived lazily from current AppKit state whenever needed. + private weak var primaryController: BaseTerminalController? + + /// `scriptWindows` in `AppDelegate+AppleScript` constructs these objects. + /// + /// `stableID` must match the same identity scheme used by + /// `valueInScriptWindowsWithUniqueID:` so Cocoa can re-resolve object + /// specifiers produced earlier in a script. + init(primaryController: BaseTerminalController) { + self.stableID = Self.stableID(primaryController: primaryController) + self.primaryController = primaryController + } + + /// Exposed as the AppleScript `id` property. + /// + /// This is what scripts read with `id of window ...`. + @objc(id) + var idValue: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return stableID + } + + /// Exposed as the AppleScript `title` property. + /// + /// Returns the title of the window (from the selected/primary controller's NSWindow). + @objc(title) + var title: String { + guard NSApp.isAppleScriptEnabled else { return "" } + return selectedController?.window?.title ?? "" + } + + /// Exposed as the AppleScript `tabs` element. + /// + /// Cocoa asks for this collection when a script evaluates `tabs of window ...` + /// or any tab-filter expression. We build wrappers from live controller state + /// so tab additions/removals are reflected immediately. + @objc(tabs) + var tabs: [ScriptTab] { + guard NSApp.isAppleScriptEnabled else { return [] } + return controllers.map { ScriptTab(window: self, controller: $0) } + } + + /// Exposed as the AppleScript `selected tab` property. + /// + /// This powers expressions like `selected tab of window 1`. + @objc(selectedTab) + var selectedTab: ScriptTab? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let selectedController else { return nil } + return ScriptTab(window: self, controller: selectedController) + } + + /// Enables unique-ID lookup for `tabs` references. + /// + /// Required selector pattern for the `tabs` element key: + /// `valueInTabsWithUniqueID:`. + /// + /// Cocoa uses this when a script resolves `tab id "..." of window ...`. + @objc(valueInTabsWithUniqueID:) + func valueInTabs(uniqueID: String) -> ScriptTab? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let controller = controller(tabID: uniqueID) else { return nil } + return ScriptTab(window: self, controller: controller) + } + + /// Exposed as the AppleScript `terminals` element on a window. + /// + /// Returns all terminal surfaces across every tab in this window. + @objc(terminals) + var terminals: [ScriptTerminal] { + guard NSApp.isAppleScriptEnabled else { return [] } + return controllers + .flatMap { $0.surfaceTree.root?.leaves() ?? [] } + .map(ScriptTerminal.init) + } + + /// Enables unique-ID lookup for `terminals` references on a window. + @objc(valueInTerminalsWithUniqueID:) + func valueInTerminals(uniqueID: String) -> ScriptTerminal? { + guard NSApp.isAppleScriptEnabled else { return nil } + return controllers + .flatMap { $0.surfaceTree.root?.leaves() ?? [] } + .first(where: { $0.id.uuidString == uniqueID }) + .map(ScriptTerminal.init) + } + + /// AppleScript tab indexes are 1-based, so we add one to Swift's 0-based + /// array index. + func tabIndex(for controller: BaseTerminalController) -> Int? { + guard NSApp.isAppleScriptEnabled else { return nil } + return controllers.firstIndex(where: { $0 === controller }).map { $0 + 1 } + } + + /// Reports whether a given controller maps to this window's selected tab. + func tabIsSelected(_ controller: BaseTerminalController) -> Bool { + guard NSApp.isAppleScriptEnabled else { return false } + return selectedController === controller + } + + /// Best-effort native window to use as a tab parent for AppleScript commands. + var preferredParentWindow: NSWindow? { + guard NSApp.isAppleScriptEnabled else { return nil } + return selectedController?.window ?? controllers.first?.window + } + + /// Best-effort controller to use for window-scoped AppleScript commands. + var preferredController: BaseTerminalController? { + guard NSApp.isAppleScriptEnabled else { return nil } + return selectedController ?? controllers.first + } + + /// Resolves a previously generated tab ID back to a live controller. + private func controller(tabID: String) -> BaseTerminalController? { + controllers.first(where: { ScriptTab.stableID(controller: $0) == tabID }) + } + + /// Live controller list for this scripting window. + /// + /// We recalculate on every access so AppleScript immediately sees tab-group + /// changes (new tabs, closed tabs, tab moves) without rebuilding all objects. + private var controllers: [BaseTerminalController] { + guard NSApp.isAppleScriptEnabled else { return [] } + guard let primaryController else { return [] } + guard let window = primaryController.window else { return [primaryController] } + + if let tabGroup = window.tabGroup { + let groupControllers = tabGroup.windows.compactMap { + $0.windowController as? BaseTerminalController + } + if !groupControllers.isEmpty { + return groupControllers + } + } + + return [primaryController] + } + + /// Live selected controller for this scripting window. + /// + /// AppKit tracks selected tab on `NSWindowTabGroup.selectedWindow`; for + /// non-tabbed windows we fall back to the primary controller. + private var selectedController: BaseTerminalController? { + guard let primaryController else { return nil } + guard let window = primaryController.window else { return primaryController } + + if let tabGroup = window.tabGroup, + let selectedController = tabGroup.selectedWindow?.windowController as? BaseTerminalController { + return selectedController + } + + return controllers.first + } + + /// Handler for `activate window `. + @objc(handleActivateWindowCommand:) + func handleActivateWindow(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + guard let windowContainer = preferredParentWindow else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Window is no longer available." + return nil + } + + windowContainer.makeKeyAndOrderFront(nil) + NSApp.activate(ignoringOtherApps: true) + return nil + } + + /// Handler for `close window `. + @objc(handleCloseWindowCommand:) + func handleCloseWindow(_ command: NSScriptCommand) -> Any? { + guard NSApp.validateScript(command: command) else { return nil } + + if let managedTerminalController = preferredController as? TerminalController { + managedTerminalController.closeWindowImmediately() + return nil + } + + guard let windowContainer = preferredParentWindow else { + command.scriptErrorNumber = errAEEventFailed + command.scriptErrorString = "Window is no longer available." + return nil + } + + windowContainer.close() + return nil + } + + /// Provides Cocoa scripting with a canonical "path" back to this object. + /// + /// Without this, Cocoa can return data but cannot reliably build object + /// references for later script statements. This specifier encodes: + /// `application -> scriptWindows[id]`. + override var objectSpecifier: NSScriptObjectSpecifier? { + guard NSApp.isAppleScriptEnabled else { return nil } + guard let appClassDescription = NSApplication.shared.classDescription as? NSScriptClassDescription else { + return nil + } + + return NSUniqueIDSpecifier( + containerClassDescription: appClassDescription, + containerSpecifier: nil, + key: "scriptWindows", + uniqueID: stableID + ) + } +} + +extension ScriptWindow { + /// Produces the window-level stable ID from the primary controller. + /// + /// - Tabbed windows are keyed by tab-group identity. + /// - Standalone windows are keyed by window identity. + /// - Detached controllers fall back to controller identity. + static func stableID(primaryController: BaseTerminalController) -> String { + guard let window = primaryController.window else { + return "controller-\(ObjectIdentifier(primaryController).hexString)" + } + + if let tabGroup = window.tabGroup { + return stableID(tabGroup: tabGroup) + } + + return stableID(window: window) + } + + /// Stable ID for a standalone native window. + static func stableID(window: NSWindow) -> String { + "window-\(ObjectIdentifier(window).hexString)" + } + + /// Stable ID for a native AppKit tab group. + static func stableID(tabGroup: NSWindowTabGroup) -> String { + "tab-group-\(ObjectIdentifier(tabGroup).hexString)" + } +} diff --git a/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationController.swift b/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationController.swift index 2040dcfae57..37b20afb02d 100644 --- a/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationController.swift +++ b/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationController.swift @@ -13,7 +13,7 @@ class ClipboardConfirmationController: NSWindowController { let contents: String let request: Ghostty.ClipboardRequest let state: UnsafeMutableRawPointer? - weak private var delegate: ClipboardConfirmationViewDelegate? = nil + weak private var delegate: ClipboardConfirmationViewDelegate? init(surface: ghostty_surface_t, contents: String, request: Ghostty.ClipboardRequest, state: UnsafeMutableRawPointer?, delegate: ClipboardConfirmationViewDelegate) { self.surface = surface @@ -28,12 +28,12 @@ class ClipboardConfirmationController: NSWindowController { fatalError("init(coder:) is not supported for this view") } - //MARK: - NSWindowController + // MARK: - NSWindowController override func windowDidLoad() { guard let window = window else { return } - switch (request) { + switch request { case .paste: window.title = "Warning: Potentially Unsafe Paste" case .osc_52_read, .osc_52_write: diff --git a/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationView.swift b/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationView.swift index 6423e3cf6cc..17ab4aa24da 100644 --- a/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationView.swift +++ b/macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationView.swift @@ -7,7 +7,7 @@ protocol ClipboardConfirmationViewDelegate: AnyObject { /// The SwiftUI view for showing a clipboard confirmation dialog. struct ClipboardConfirmationView: View { - enum Action : String { + enum Action: String { case cancel case confirm @@ -32,7 +32,7 @@ struct ClipboardConfirmationView: View { let request: Ghostty.ClipboardRequest /// Optional delegate to get results. If this is nil, then this view will never close on its own. - weak var delegate: ClipboardConfirmationViewDelegate? = nil + weak var delegate: ClipboardConfirmationViewDelegate? /// Used to track if we should rehide on disappear @State private var cursorHiddenCount: UInt = 0 @@ -45,16 +45,16 @@ struct ClipboardConfirmationView: View { .font(.system(size: 42)) .padding() .frame(alignment: .center) - + Text(request.text()) .frame(maxWidth: .infinity, alignment: .leading) .padding() } - + TextEditor(text: .constant(contents)) .focusable(false) .font(.system(.body, design: .monospaced)) - + HStack { Spacer() Button(Action.text(.cancel, request)) { onCancel() } @@ -74,7 +74,7 @@ struct ClipboardConfirmationView: View { // If we didn't unhide anything, we just send an unhide to be safe. // I don't think the count can go negative on NSCursor so this handles // scenarios cursor is hidden outside of our own NSCursor usage. - if (cursorHiddenCount == 0) { + if cursorHiddenCount == 0 { _ = Cursor.unhide() } } diff --git a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIcon.swift b/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIcon.swift deleted file mode 100644 index 58de8f7710d..00000000000 --- a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIcon.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Cocoa - -struct ColorizedGhosttyIcon { - /// The colors that make up the gradient of the screen. - let screenColors: [NSColor] - - /// The color of the ghost. - let ghostColor: NSColor - - /// The frame type to use - let frame: Ghostty.MacOSIconFrame - - /// Make a custom colorized ghostty icon. - func makeImage() -> NSImage? { - // All of our layers (not in order) - guard let screen = NSImage(named: "CustomIconScreen") else { return nil } - guard let screenMask = NSImage(named: "CustomIconScreenMask") else { return nil } - guard let ghost = NSImage(named: "CustomIconGhost") else { return nil } - guard let crt = NSImage(named: "CustomIconCRT") else { return nil } - guard let gloss = NSImage(named: "CustomIconGloss") else { return nil } - - let baseName = switch (frame) { - case .aluminum: "CustomIconBaseAluminum" - case .beige: "CustomIconBaseBeige" - case .chrome: "CustomIconBaseChrome" - case .plastic: "CustomIconBasePlastic" - } - guard let base = NSImage(named: baseName) else { return nil } - - // Apply our color in various ways to our layers. - // NOTE: These functions are not built-in, they're implemented as an extension - // to NSImage in NSImage+Extension.swift. - guard let screenGradient = screenMask.gradient(colors: screenColors) else { return nil } - guard let tintedGhost = ghost.tint(color: ghostColor) else { return nil } - - // Combine our layers using the proper blending modes - return.combine(images: [ - base, - screen, - screenGradient, - ghost, - tintedGhost, - crt, - gloss, - ], blendingModes: [ - .normal, - .normal, - .color, - .normal, - .color, - .overlay, - .normal, - ]) - } -} diff --git a/macos/Sources/Features/Command Palette/CommandPalette.swift b/macos/Sources/Features/Command Palette/CommandPalette.swift index 235881ddeb0..10c56f8dd2d 100644 --- a/macos/Sources/Features/Command Palette/CommandPalette.swift +++ b/macos/Sources/Features/Command Palette/CommandPalette.swift @@ -23,7 +23,7 @@ struct CommandOption: Identifiable, Hashable { let sortKey: AnySortKey? /// The action to perform when this option is selected. let action: () -> Void - + init( title: String, subtitle: String? = nil, @@ -78,7 +78,7 @@ struct CommandPaletteView: View { ($0.subtitle?.localizedCaseInsensitiveContains(query) ?? false) || colorMatchScore(for: $0.leadingColor, query: query) > 0 } - + // Sort by color match score (higher scores first), then maintain original order return filtered.sorted { a, b in let scoreA = colorMatchScore(for: a.leadingColor, query: query) @@ -106,7 +106,7 @@ struct CommandPaletteView: View { VStack(alignment: .leading, spacing: 0) { CommandPaletteQuery(query: $query, isTextFieldFocused: _isTextFieldFocused) { event in - switch (event) { + switch event { case .exit: isPresented = false @@ -128,7 +128,7 @@ struct CommandPaletteView: View { ? 0 : current + 1 - case .move(_): + case .move: // Unknown, ignore break } @@ -200,20 +200,20 @@ struct CommandPaletteView: View { isTextFieldFocused = isPresented } } - + /// Returns a score (0.0 to 1.0) indicating how well a color matches a search query color name. /// Returns 0 if no color name in the query matches, or if the color is nil. private func colorMatchScore(for color: Color?, query: String) -> Double { guard let color = color else { return 0 } - + let queryLower = query.lowercased() let nsColor = NSColor(color) - + var bestScore: Double = 0 for name in NSColor.colorNames { guard queryLower.contains(name), let systemColor = NSColor(named: name) else { continue } - + let distance = nsColor.distance(to: systemColor) // Max distance in weighted RGB space is ~3.0, so normalize and invert // Use a threshold to determine "close enough" matches @@ -223,15 +223,15 @@ struct CommandPaletteView: View { bestScore = max(bestScore, score) } } - + return bestScore } } /// The text field for building the query for the command palette. -fileprivate struct CommandPaletteQuery: View { +private struct CommandPaletteQuery: View { @Binding var query: String - var onEvent: ((KeyboardEvent) -> Void)? = nil + var onEvent: ((KeyboardEvent) -> Void)? @FocusState private var isTextFieldFocused: Bool init(query: Binding, isTextFieldFocused: FocusState, onEvent: ((KeyboardEvent) -> Void)? = nil) { @@ -284,7 +284,7 @@ fileprivate struct CommandPaletteQuery: View { } } -fileprivate struct CommandTable: View { +private struct CommandTable: View { var options: [CommandOption] @Binding var selectedIndex: UInt? @Binding var hoveredOptionID: UUID? @@ -332,7 +332,7 @@ fileprivate struct CommandTable: View { } /// A single row in the command palette. -fileprivate struct CommandRow: View { +private struct CommandRow: View { let option: CommandOption var isSelected: Bool @Binding var hoveredID: UUID? @@ -346,26 +346,26 @@ fileprivate struct CommandRow: View { .fill(color) .frame(width: 8, height: 8) } - + if let icon = option.leadingIcon { Image(systemName: icon) .foregroundStyle(option.emphasis ? Color.accentColor : .secondary) .font(.system(size: 14, weight: .medium)) } - + VStack(alignment: .leading, spacing: 2) { Text(option.title) .fontWeight(option.emphasis ? .medium : .regular) - + if let subtitle = option.subtitle { Text(subtitle) .font(.caption) .foregroundStyle(.secondary) } } - + Spacer() - + if let badge = option.badge, !badge.isEmpty { Text(badge) .font(.caption2.weight(.medium)) @@ -376,7 +376,7 @@ fileprivate struct CommandRow: View { ) .foregroundStyle(Color.accentColor) } - + if let symbols = option.symbols { ShortcutSymbolsView(symbols: symbols) .foregroundStyle(.secondary) @@ -406,7 +406,7 @@ fileprivate struct CommandRow: View { } /// A row of Text representing a shortcut. -fileprivate struct ShortcutSymbolsView: View { +private struct ShortcutSymbolsView: View { let symbols: [String] var body: some View { diff --git a/macos/Sources/Features/Command Palette/TerminalCommandPalette.swift b/macos/Sources/Features/Command Palette/TerminalCommandPalette.swift index 9bdf4b4ffa6..09e369d4a97 100644 --- a/macos/Sources/Features/Command Palette/TerminalCommandPalette.swift +++ b/macos/Sources/Features/Command Palette/TerminalCommandPalette.swift @@ -11,7 +11,7 @@ struct TerminalCommandPaletteView: View { /// The configuration so we can lookup keyboard shortcuts. @ObservedObject var ghosttyConfig: Ghostty.Config - + /// The update view model for showing update commands. var updateViewModel: UpdateViewModel? @@ -54,13 +54,13 @@ struct TerminalCommandPaletteView: View { } } } - + /// All commands available in the command palette, combining update and terminal options. private var commandOptions: [CommandOption] { var options: [CommandOption] = [] // Updates always appear first options.append(contentsOf: updateOptions) - + // Sort the rest. We replace ":" with a character that sorts before space // so that "Foo:" sorts before "Foo Bar:". Use sortKey as a tie-breaker // for stable ordering when titles are equal. @@ -83,11 +83,11 @@ struct TerminalCommandPaletteView: View { /// Commands for installing or canceling available updates. private var updateOptions: [CommandOption] { var options: [CommandOption] = [] - + guard let updateViewModel, updateViewModel.state.isInstallable else { return options } - + // We override the update available one only because we want to properly // convey it'll go all the way through. let title: String @@ -96,7 +96,7 @@ struct TerminalCommandPaletteView: View { } else { title = updateViewModel.text } - + options.append(CommandOption( title: title, description: updateViewModel.description, @@ -106,14 +106,14 @@ struct TerminalCommandPaletteView: View { ) { (NSApp.delegate as? AppDelegate)?.updateController.installUpdate() }) - + options.append(CommandOption( title: "Cancel or Skip Update", description: "Dismiss the current update process" ) { updateViewModel.state.cancel() }) - + return options } @@ -143,8 +143,15 @@ struct TerminalCommandPaletteView: View { let displayColor = color != TerminalTabColor.none ? color : nil return controller.surfaceTree.map { surface in - let title = surface.title.isEmpty ? window.title : surface.title - let displayTitle = title.isEmpty ? "Untitled" : title + let terminalTitle = surface.title.isEmpty ? window.title : surface.title + let displayTitle: String + if let override = controller.titleOverride, !override.isEmpty { + displayTitle = override + } else if !terminalTitle.isEmpty { + displayTitle = terminalTitle + } else { + displayTitle = "Untitled" + } let pwd = surface.pwd?.abbreviatedPath let subtitle: String? = if let pwd, !displayTitle.contains(pwd) { pwd @@ -171,7 +178,7 @@ struct TerminalCommandPaletteView: View { } /// This is done to ensure that the given view is in the responder chain. -fileprivate struct ResponderChainInjector: NSViewRepresentable { +private struct ResponderChainInjector: NSViewRepresentable { let responder: NSResponder func makeNSView(context: Context) -> NSView { diff --git a/macos/Sources/Features/Custom App Icon/AppIcon.swift b/macos/Sources/Features/Custom App Icon/AppIcon.swift new file mode 100644 index 00000000000..13c6b83a1c7 --- /dev/null +++ b/macos/Sources/Features/Custom App Icon/AppIcon.swift @@ -0,0 +1,86 @@ +import AppKit +import System + +/// The icon style for the Ghostty App. +enum AppIcon: Equatable, Codable { + case official + case blueprint + case chalkboard + case glass + case holographic + case microchip + case paper + case retro + case xray + /// Save full image data to avoid sandboxing issues + case custom(_ iconFile: Data) + case customStyle(_ icon: ColorizedGhosttyIcon) + +#if !DOCK_TILE_PLUGIN + init?(config: Ghostty.Config) { + switch config.macosIcon { + case .official: + return nil + case .blueprint: + self = .blueprint + case .chalkboard: + self = .chalkboard + case .glass: + self = .glass + case .holographic: + self = .holographic + case .microchip: + self = .microchip + case .paper: + self = .paper + case .retro: + self = .retro + case .xray: + self = .xray + case .custom: + if let data = try? Data(contentsOf: URL(filePath: config.macosCustomIcon, relativeTo: nil)) { + self = .custom(data) + } else { + return nil + } + case .customStyle: + // Discard saved icon name + // if no valid colours were found + guard + let ghostColor = config.macosIconGhostColor, + let screenColors = config.macosIconScreenColor + else { + return nil + } + self = .customStyle(ColorizedGhosttyIcon(screenColors: screenColors, ghostColor: ghostColor, frame: config.macosIconFrame)) + } + } +#endif + + func image(in bundle: Bundle) -> NSImage? { + switch self { + case .official: + return nil + case .blueprint: + return bundle.image(forResource: "BlueprintImage")! + case .chalkboard: + return bundle.image(forResource: "ChalkboardImage")! + case .glass: + return bundle.image(forResource: "GlassImage")! + case .holographic: + return bundle.image(forResource: "HolographicImage")! + case .microchip: + return bundle.image(forResource: "MicrochipImage")! + case .paper: + return bundle.image(forResource: "PaperImage")! + case .retro: + return bundle.image(forResource: "RetroImage")! + case .xray: + return bundle.image(forResource: "XrayImage")! + case let .custom(file): + return NSImage(data: file) + case let .customStyle(customIcon): + return customIcon.makeImage(in: bundle) + } + } +} diff --git a/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIcon.swift b/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIcon.swift new file mode 100644 index 00000000000..99d6843693c --- /dev/null +++ b/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIcon.swift @@ -0,0 +1,115 @@ +import Cocoa + +struct ColorizedGhosttyIcon { + /// The colors that make up the gradient of the screen. + let screenColors: [NSColor] + + /// The color of the ghost. + let ghostColor: NSColor + + /// The frame type to use + let frame: Ghostty.MacOSIconFrame + + /// Make a custom colorized ghostty icon. + func makeImage(in bundle: Bundle) -> NSImage? { + // All of our layers (not in order) + guard let screen = bundle.image(forResource: "CustomIconScreen") else { return nil } + guard let screenMask = bundle.image(forResource: "CustomIconScreenMask") else { return nil } + guard let ghost = bundle.image(forResource: "CustomIconGhost") else { return nil } + guard let crt = bundle.image(forResource: "CustomIconCRT") else { return nil } + guard let gloss = bundle.image(forResource: "CustomIconGloss") else { return nil } + + let baseName = switch frame { + case .aluminum: "CustomIconBaseAluminum" + case .beige: "CustomIconBaseBeige" + case .chrome: "CustomIconBaseChrome" + case .plastic: "CustomIconBasePlastic" + } + guard let base = bundle.image(forResource: baseName) else { return nil } + + // Apply our color in various ways to our layers. + // NOTE: These functions are not built-in, they're implemented as an extension + // to NSImage in NSImage+Extension.swift. + guard let screenGradient = screenMask.gradient(colors: screenColors) else { return nil } + guard let tintedGhost = ghost.tint(color: ghostColor) else { return nil } + + // Combine our layers using the proper blending modes + return.combine(images: [ + base, + screen, + screenGradient, + ghost, + tintedGhost, + crt, + gloss, + ], blendingModes: [ + .normal, + .normal, + .color, + .normal, + .color, + .overlay, + .normal, + ]) + } +} + +// MARK: Codable + +extension ColorizedGhosttyIcon: Codable { + private enum CodingKeys: String, CodingKey { + case version + case screenColors + case ghostColor + case frame + + static let currentVersion: Int = 1 + } + + init(from decoder: any Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + // If no version exists then this is the legacy v0 format. + let version = try container.decodeIfPresent(Int.self, forKey: .version) ?? 0 + guard version == 0 || version == CodingKeys.currentVersion else { + throw DecodingError.dataCorrupted( + DecodingError.Context( + codingPath: decoder.codingPath, + debugDescription: "Unsupported ColorizedGhosttyIcon version: \(version)" + ) + ) + } + + let screenColorHexes = try container.decode([String].self, forKey: .screenColors) + let screenColors = screenColorHexes.compactMap(NSColor.init(hex:)) + let ghostColorHex = try container.decode(String.self, forKey: .ghostColor) + guard let ghostColor = NSColor(hex: ghostColorHex) else { + throw DecodingError.dataCorruptedError( + forKey: .ghostColor, + in: container, + debugDescription: "Failed to decode ghost color from \(ghostColorHex)" + ) + } + let frame = try container.decode(Ghostty.MacOSIconFrame.self, forKey: .frame) + self.init(screenColors: screenColors, ghostColor: ghostColor, frame: frame) + } + + func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(CodingKeys.currentVersion, forKey: .version) + try container.encode(screenColors.compactMap(\.hexString), forKey: .screenColors) + try container.encode(ghostColor.hexString, forKey: .ghostColor) + try container.encode(frame, forKey: .frame) + } + +} + +// MARK: Equatable + +extension ColorizedGhosttyIcon: Equatable { + static func == (lhs: Self, rhs: Self) -> Bool { + lhs.frame == rhs.frame && + lhs.screenColors.compactMap(\.hexString) == rhs.screenColors.compactMap(\.hexString) && + lhs.ghostColor.hexString == rhs.ghostColor.hexString + } +} diff --git a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift b/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconImage.swift similarity index 100% rename from macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconImage.swift rename to macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconImage.swift diff --git a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconView.swift b/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconView.swift similarity index 89% rename from macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconView.swift rename to macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconView.swift index 8fbebfdc80e..7271c595fec 100644 --- a/macos/Sources/Features/Colorized Ghostty Icon/ColorizedGhosttyIconView.swift +++ b/macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconView.swift @@ -8,6 +8,6 @@ struct ColorizedGhosttyIconView: View { screenColors: [.purple, .blue], ghostColor: .yellow, frame: .aluminum - ).makeImage()!) + ).makeImage(in: .main)!) } } diff --git a/macos/Sources/Features/Custom App Icon/DockTilePlugin.swift b/macos/Sources/Features/Custom App Icon/DockTilePlugin.swift new file mode 100644 index 00000000000..990cd8bb242 --- /dev/null +++ b/macos/Sources/Features/Custom App Icon/DockTilePlugin.swift @@ -0,0 +1,143 @@ +import AppKit + +class DockTilePlugin: NSObject, NSDockTilePlugIn { + // WARNING: An instance of this class is alive as long as Ghostty's icon is + // in the doc (running or not!), so keep any state and processing to a + // minimum to respect resource usage. + + private let pluginBundle = Bundle(for: DockTilePlugin.self) + + // Separate defaults based on debug vs release builds so we can test icons + // without messing up releases. + #if DEBUG + private let ghosttyUserDefaults = UserDefaults(suiteName: "com.mitchellh.ghostty.debug") + #else + private let ghosttyUserDefaults = UserDefaults(suiteName: "com.mitchellh.ghostty") + #endif + + private var iconChangeObserver: Any? + + /// The URL to the enclosing app bundle, determined from the plugin bundle path. + var ghosttyAppURL: URL? { + Self.appBundleURL(for: pluginBundle.bundleURL) + } + + /// Determine the enclosing app bundle for the dock tile plugin bundle. + /// + /// We intentionally avoid matching a specific bundle name (such as + /// "Ghostty.app") so renaming the app in Finder still works. + static func appBundleURL(for pluginBundleURL: URL) -> URL? { + var url = pluginBundleURL + while true { + if url.pathExtension.compare("app", options: .caseInsensitive) == .orderedSame { + return url + } + + let parent = url.deletingLastPathComponent() + if parent.path == url.path { + // Safety stop: this should only happen at filesystem root. + return nil + } + + url = parent + } + } + + /// The primary NSDockTilePlugin function. + func setDockTile(_ dockTile: NSDockTile?) { + // If no dock tile or no access to Ghostty defaults, we can't do anything. + guard let dockTile, let ghosttyUserDefaults else { + iconChangeObserver = nil + return + } + + // Try to restore the previous icon on launch. + iconDidChange(ghosttyUserDefaults.appIcon, dockTile: dockTile) + + // Setup a new observer for when the icon changes so we can update. This message + // is sent by the primary Ghostty app. + iconChangeObserver = DistributedNotificationCenter + .default() + .publisher(for: .ghosttyIconDidChange) + .map { [weak self] _ in self?.ghosttyUserDefaults?.appIcon } + .receive(on: DispatchQueue.global()) + .sink { [weak self] newIcon in self?.iconDidChange(newIcon, dockTile: dockTile) } + } + + private func iconDidChange(_ newIcon: AppIcon?, dockTile: NSDockTile) { + guard let appIcon = newIcon?.image(in: pluginBundle) else { + resetIcon(dockTile: dockTile) + return + } + + if let appBundleURL = self.ghosttyAppURL { + let appBundlePath = appBundleURL.path + NSWorkspace.shared.setIcon(appIcon, forFile: appBundlePath) + NSWorkspace.shared.noteFileSystemChanged(appBundlePath) + } + + dockTile.setIcon(appIcon) + } + + /// Reset the application icon and dock tile icon to the default. + private func resetIcon(dockTile: NSDockTile) { + let appBundlePath = self.ghosttyAppURL?.path + let appIcon: NSImage + if #available(macOS 26.0, *) { + // Reset to the default (glassy) icon. + if let appBundlePath { + NSWorkspace.shared.setIcon(nil, forFile: appBundlePath) + } + + #if DEBUG + // Use the `Blueprint` icon to distinguish Debug from Release builds. + appIcon = pluginBundle.image(forResource: "BlueprintImage")! + #else + // Get the composed icon from the app bundle. + if let appBundlePath, + let iconRep = NSWorkspace.shared.icon(forFile: appBundlePath) + .bestRepresentation( + for: CGRect(origin: .zero, size: dockTile.size), + context: nil, + hints: nil + ) { + appIcon = NSImage(size: dockTile.size) + appIcon.addRepresentation(iconRep) + } else { + // If something unexpected happens on macOS 26, + // fall back to a bundled icon. + appIcon = pluginBundle.image(forResource: "AppIconImage")! + } + #endif + } else { + // Use the bundled icon to keep the corner radius consistent with pre-Tahoe apps. + appIcon = pluginBundle.image(forResource: "AppIconImage")! + if let appBundlePath { + NSWorkspace.shared.setIcon(appIcon, forFile: appBundlePath) + } + } + + // Notify Finder/Dock so icon caches refresh immediately. + if let appBundlePath { + NSWorkspace.shared.noteFileSystemChanged(appBundlePath) + } + dockTile.setIcon(appIcon) + } +} + +private extension NSDockTile { + func setIcon(_ newIcon: NSImage) { + // Update the Dock tile on the main thread. + DispatchQueue.main.async { + let iconView = NSImageView(frame: CGRect(origin: .zero, size: self.size)) + iconView.wantsLayer = true + iconView.image = newIcon + self.contentView = iconView + self.display() + } + } +} + +// This is required because of the DispatchQueue call above. This doesn't +// feel right but I don't know a better way to solve this. +extension NSDockTile: @unchecked @retroactive Sendable {} diff --git a/macos/Sources/Features/Custom App Icon/Extensions/Notification+AppIcon.swift b/macos/Sources/Features/Custom App Icon/Extensions/Notification+AppIcon.swift new file mode 100644 index 00000000000..e492f1a7759 --- /dev/null +++ b/macos/Sources/Features/Custom App Icon/Extensions/Notification+AppIcon.swift @@ -0,0 +1,5 @@ +import AppKit + +extension Notification.Name { + static let ghosttyIconDidChange = Notification.Name("com.mitchellh.ghostty.iconDidChange") +} diff --git a/macos/Sources/Features/Custom App Icon/Extensions/UserDefaults+AppIcon.swift b/macos/Sources/Features/Custom App Icon/Extensions/UserDefaults+AppIcon.swift new file mode 100644 index 00000000000..d15644c9314 --- /dev/null +++ b/macos/Sources/Features/Custom App Icon/Extensions/UserDefaults+AppIcon.swift @@ -0,0 +1,29 @@ +import AppKit + +extension UserDefaults { + private static let customIconKeyOld = "CustomGhosttyIcon" + private static let customIconKeyNew = "CustomGhosttyIcon2" + + var appIcon: AppIcon? { + get { + // Always remove our old pre-docktileplugin values. + defer { + removeObject(forKey: Self.customIconKeyOld) + } + + // Check if we have the new key for our dock tile plugin format. + guard let data = data(forKey: Self.customIconKeyNew) else { + return nil + } + return try? JSONDecoder().decode(AppIcon.self, from: data) + } + + set { + guard let newData = try? JSONEncoder().encode(newValue) else { + return + } + + set(newData, forKey: Self.customIconKeyNew) + } + } +} diff --git a/macos/Sources/Features/Global Keybinds/GlobalEventTap.swift b/macos/Sources/Features/Global Keybinds/GlobalEventTap.swift index ae77535bea2..9d4023c2e38 100644 --- a/macos/Sources/Features/Global Keybinds/GlobalEventTap.swift +++ b/macos/Sources/Features/Global Keybinds/GlobalEventTap.swift @@ -16,11 +16,11 @@ class GlobalEventTap { // The event tap used for global event listening. This is non-nil if it is // created. - private var eventTap: CFMachPort? = nil + private var eventTap: CFMachPort? // This is the timer used to retry enabling the global event tap if we // don't have permissions. - private var enableTimer: Timer? = nil + private var enableTimer: Timer? // Private init so it can't be constructed outside of our singleton private init() {} @@ -33,7 +33,7 @@ class GlobalEventTap { // If enabling fails due to permissions, this will start a timer to retry since // accessibility permissions take affect immediately. func enable() { - if (eventTap != nil) { + if eventTap != nil { // Already enabled return } @@ -44,7 +44,7 @@ class GlobalEventTap { } // Try to enable the event tap immediately. If this succeeds then we're done! - if (tryEnable()) { + if tryEnable() { return } @@ -117,7 +117,7 @@ class GlobalEventTap { } } -fileprivate func cgEventFlagsChangedHandler( +private func cgEventFlagsChangedHandler( proxy: CGEventTapProxy, type: CGEventType, cgEvent: CGEvent, @@ -142,7 +142,7 @@ fileprivate func cgEventFlagsChangedHandler( // Build our event input and call ghostty let key_ev = event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS) - if (ghostty_app_key(ghostty, key_ev)) { + if ghostty_app_key(ghostty, key_ev) { GlobalEventTap.logger.info("global key event handled event=\(event)") return nil } diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift index 07c0c4c1987..214ff08d3d3 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalController.swift @@ -16,20 +16,20 @@ class QuickTerminalController: BaseTerminalController { /// The previously running application when the terminal is shown. This is NEVER Ghostty. /// If this is set then when the quick terminal is animated out then we will restore this /// application to the front. - private var previousApp: NSRunningApplication? = nil + private var previousApp: NSRunningApplication? // The active space when the quick terminal was last shown. - private var previousActiveSpace: CGSSpace? = nil + private var previousActiveSpace: CGSSpace? /// Cache for per-screen window state. let screenStateCache: QuickTerminalScreenStateCache /// Non-nil if we have hidden dock state. - private var hiddenDock: HiddenDock? = nil + private var hiddenDock: HiddenDock? /// The configuration derived from the Ghostty config so we don't need to rely on references. private var derivedConfig: DerivedConfig - + /// Tracks if we're currently handling a manual resize to prevent recursion private var isHandlingResize: Bool = false @@ -135,14 +135,12 @@ class QuickTerminalController: BaseTerminalController { if let qtWindow = window as? QuickTerminalWindow { qtWindow.initialFrame = window.frame } - + // Setup our content - window.contentView = TerminalViewContainer( - ghostty: self.ghostty, - viewModel: self, - delegate: self - ) - + window.contentView = TerminalViewContainer { + TerminalView(ghostty: ghostty, viewModel: self, delegate: self) + } + // Clear out our frame at this point, the fixup from above is complete. if let qtWindow = window as? QuickTerminalWindow { qtWindow.initialFrame = nil @@ -161,6 +159,8 @@ class QuickTerminalController: BaseTerminalController { // applies if we can be seen. guard visible else { return } + terminalViewContainer?.updateGlassTintOverlay(isKeyWindow: true) + // Re-hide the dock if we were hiding it before. hiddenDock?.hide() } @@ -174,6 +174,8 @@ class QuickTerminalController: BaseTerminalController { // ensures we don't run logic twice. guard visible else { return } + terminalViewContainer?.updateGlassTintOverlay(isKeyWindow: false) + // We don't animate out if there is a modal sheet being shown currently. // This lets us show alerts without causing the window to disappear. guard window?.attachedSheet == nil else { return } @@ -234,7 +236,7 @@ class QuickTerminalController: BaseTerminalController { // Prevent recursive loops isHandlingResize = true defer { isHandlingResize = false } - + switch position { case .top, .bottom, .center: // For centered positions (top, bottom, center), we need to recenter the window @@ -316,7 +318,7 @@ class QuickTerminalController: BaseTerminalController { // MARK: Methods func toggle() { - if (visible) { + if visible { animateOut() } else { animateIn() @@ -340,8 +342,7 @@ class QuickTerminalController: BaseTerminalController { // we want to store it so we can restore state later. if !NSApp.isActive { if let previousApp = NSWorkspace.shared.frontmostApplication, - previousApp.bundleIdentifier != Bundle.main.bundleIdentifier - { + previousApp.bundleIdentifier != Bundle.main.bundleIdentifier { self.previousApp = previousApp } } @@ -370,7 +371,7 @@ class QuickTerminalController: BaseTerminalController { } else { var config = Ghostty.SurfaceConfiguration() config.environmentVariables["GHOSTTY_QUICK_TERMINAL"] = "1" - + let view = Ghostty.SurfaceView(ghostty_app, baseConfig: config) surfaceTree = SplitTree(view: view) focusedSurface = view @@ -417,7 +418,7 @@ class QuickTerminalController: BaseTerminalController { private func animateWindowIn(window: NSWindow, from position: QuickTerminalPosition) { guard let screen = derivedConfig.quickTerminalScreen.screen else { return } - + // Grab our last closed frame to use from the cache. let closedFrame = screenStateCache.frame(for: screen) @@ -441,7 +442,7 @@ class QuickTerminalController: BaseTerminalController { // If our dock position would conflict with our target location then // we autohide the dock. if position.conflictsWithDock(on: screen) { - if (hiddenDock == nil) { + if hiddenDock == nil { hiddenDock = .init() } @@ -624,6 +625,8 @@ class QuickTerminalController: BaseTerminalController { window.isOpaque = true window.backgroundColor = .windowBackgroundColor } + + terminalViewContainer?.ghosttyConfigDidChange(ghostty.config, preferredBackgroundColor: nil) } private func showNoNewTabAlert() { @@ -675,10 +678,10 @@ class QuickTerminalController: BaseTerminalController { // We ignore the configured fullscreen style and always use non-native // because the way the quick terminal works doesn't support native. let mode: FullscreenMode - if (NSApp.isFrontmost) { + if NSApp.isFrontmost { // If we're frontmost and we have a notch then we keep padding // so all lines of the terminal are visible. - if (window?.screen?.hasNotch ?? false) { + if window?.screen?.hasNotch ?? false { mode = .nonNativePaddedNotch } else { mode = .nonNative @@ -707,6 +710,8 @@ class QuickTerminalController: BaseTerminalController { self.derivedConfig = DerivedConfig(config) syncAppearance() + + terminalViewContainer?.ghosttyConfigDidChange(config, preferredBackgroundColor: nil) } @objc private func onNewTab(notification: SwiftUI.Notification) { diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalPosition.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalPosition.swift index d7660f77ab2..8742a7836dd 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalPosition.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalPosition.swift @@ -1,6 +1,6 @@ import Cocoa -enum QuickTerminalPosition : String { +enum QuickTerminalPosition: String { case top case bottom case left @@ -64,7 +64,7 @@ enum QuickTerminalPosition : String { /// The initial point origin for this position. func initialOrigin(for window: NSWindow, on screen: NSScreen) -> CGPoint { - switch (self) { + switch self { case .top: return .init( x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), @@ -86,13 +86,13 @@ enum QuickTerminalPosition : String { y: round(screen.visibleFrame.origin.y + (screen.visibleFrame.height - window.frame.height) / 2)) case .center: - return .init(x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), y: screen.visibleFrame.height - window.frame.width) + return .init(x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), y: screen.visibleFrame.height - window.frame.width) } } /// The final point origin for this position. func finalOrigin(for window: NSWindow, on screen: NSScreen) -> CGPoint { - switch (self) { + switch self { case .top: return .init( x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), @@ -128,7 +128,7 @@ enum QuickTerminalPosition : String { // Depending on the orientation of the dock, we conflict if our quick terminal // would potentially "hit" the dock. In the future we should probably consider // the frame of the quick terminal. - return switch (orientation) { + return switch orientation { case .top: self == .top || self == .left || self == .right case .bottom: self == .bottom || self == .left || self == .right case .left: self == .top || self == .bottom @@ -144,25 +144,25 @@ enum QuickTerminalPosition : String { x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), y: window.frame.origin.y // Keep the same Y position ) - + case .bottom: return CGPoint( x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), y: window.frame.origin.y // Keep the same Y position ) - + case .center: return CGPoint( x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2), y: round(screen.visibleFrame.origin.y + (screen.visibleFrame.height - window.frame.height) / 2) ) - + case .left, .right: // For left/right positions, only adjust horizontal centering if needed return window.frame.origin } } - + /// Calculate the vertically centered origin for side-positioned windows func verticallyCenteredOrigin(for window: NSWindow, on screen: NSScreen) -> CGPoint { switch self { @@ -171,13 +171,13 @@ enum QuickTerminalPosition : String { x: window.frame.origin.x, // Keep the same X position y: round(screen.visibleFrame.origin.y + (screen.visibleFrame.height - window.frame.height) / 2) ) - + case .right: return CGPoint( x: window.frame.origin.x, // Keep the same X position y: round(screen.visibleFrame.origin.y + (screen.visibleFrame.height - window.frame.height) / 2) ) - + case .top, .bottom, .center: // These positions don't need vertical recentering during resize return window.frame.origin diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalScreen.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalScreen.swift index cd07a6f1205..70af0a5059a 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalScreen.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalScreen.swift @@ -6,23 +6,23 @@ enum QuickTerminalScreen { case menuBar init?(fromGhosttyConfig string: String) { - switch (string) { + switch string { case "main": self = .main case "mouse": self = .mouse - + case "macos-menu-bar": self = .menuBar - + default: return nil } } var screen: NSScreen? { - switch (self) { + switch self { case .main: return NSScreen.main diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalScreenStateCache.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalScreenStateCache.swift index a1c17abb922..301865561cc 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalScreenStateCache.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalScreenStateCache.swift @@ -8,15 +8,15 @@ import Cocoa /// to survive NSScreen garbage collection and automatically prunes stale entries. class QuickTerminalScreenStateCache { typealias Entries = [UUID: DisplayEntry] - + /// The maximum number of saved screen states we retain. This is to avoid some kind of /// pathological memory growth in case we get our screen state serializing wrong. I don't /// know anyone with more than 10 screens, so let's just arbitrarily go with that. private static let maxSavedScreens = 10 - + /// Time-to-live for screen entries that are no longer present (14 days). private static let screenStaleTTL: TimeInterval = 14 * 24 * 60 * 60 - + /// Keyed by display UUID to survive NSScreen garbage collection. private(set) var stateByDisplay: Entries = [:] @@ -28,11 +28,11 @@ class QuickTerminalScreenStateCache { name: NSApplication.didChangeScreenParametersNotification, object: nil) } - + deinit { NotificationCenter.default.removeObserver(self) } - + /// Save the window frame for a screen. func save(frame: NSRect, for screen: NSScreen) { guard let key = screen.displayUUID else { return } @@ -45,27 +45,27 @@ class QuickTerminalScreenStateCache { stateByDisplay[key] = entry pruneCapacity() } - + /// Retrieve the last closed frame for a screen, if valid. func frame(for screen: NSScreen) -> NSRect? { guard let key = screen.displayUUID, var entry = stateByDisplay[key] else { return nil } - + // Drop on dimension/scale change that makes the entry invalid if !entry.isValid(for: screen) { stateByDisplay.removeValue(forKey: key) return nil } - + entry.lastSeen = Date() stateByDisplay[key] = entry return entry.frame } - + @objc private func onScreensChanged(_ note: Notification) { let screens = NSScreen.screens let now = Date() let currentIDs = Set(screens.compactMap { $0.displayUUID }) - + for screen in screens { guard let key = screen.displayUUID else { continue } if var entry = stateByDisplay[key] { @@ -80,15 +80,15 @@ class QuickTerminalScreenStateCache { } } } - + // TTL prune for non-present screens stateByDisplay = stateByDisplay.filter { key, entry in currentIDs.contains(key) || now.timeIntervalSince(entry.lastSeen) < Self.screenStaleTTL } - + pruneCapacity() } - + private func pruneCapacity() { guard stateByDisplay.count > Self.maxSavedScreens else { return } let toRemove = stateByDisplay @@ -98,13 +98,13 @@ class QuickTerminalScreenStateCache { stateByDisplay.removeValue(forKey: key) } } - + struct DisplayEntry: Codable { var frame: NSRect var screenSize: CGSize var scale: CGFloat var lastSeen: Date - + /// Returns true if this entry is still valid for the given screen. /// Valid if the scale matches and the cached size is not larger than the current screen size. /// This allows entries to persist when screens grow, but invalidates them when screens shrink. diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalSize.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalSize.swift index 08bbcb8d9b2..2cd11e42e98 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalSize.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalSize.swift @@ -48,7 +48,6 @@ struct QuickTerminalSize { } } - /// This is an almost direct port of th Zig function QuickTerminalSize.calculate func calculate(position: QuickTerminalPosition, screenDimensions: CGSize) -> CGSize { let dims = CGSize(width: screenDimensions.width, height: screenDimensions.height) diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalSpaceBehavior.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalSpaceBehavior.swift index 0561aaa1888..176cbf1606f 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalSpaceBehavior.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalSpaceBehavior.swift @@ -6,15 +6,15 @@ enum QuickTerminalSpaceBehavior { case move init?(fromGhosttyConfig string: String) { - switch (string) { - case "move": - self = .move + switch string { + case "move": + self = .move - case "remain": - self = .remain + case "remain": + self = .remain - default: - return nil + default: + return nil } } @@ -24,13 +24,13 @@ enum QuickTerminalSpaceBehavior { .fullScreenAuxiliary ] - switch (self) { - case .move: - // We want this to move the window to the active space. - return NSWindow.CollectionBehavior([.canJoinAllSpaces] + commonBehavior) - case .remain: - // We want this to remain the window in the current space. - return NSWindow.CollectionBehavior([.moveToActiveSpace] + commonBehavior) + switch self { + case .move: + // We want this to move the window to the active space. + return NSWindow.CollectionBehavior([.canJoinAllSpaces] + commonBehavior) + case .remain: + // We want this to remain the window in the current space. + return NSWindow.CollectionBehavior([.moveToActiveSpace] + commonBehavior) } } } diff --git a/macos/Sources/Features/QuickTerminal/QuickTerminalWindow.swift b/macos/Sources/Features/QuickTerminal/QuickTerminalWindow.swift index 1a4170dbce4..507ec1baf0a 100644 --- a/macos/Sources/Features/QuickTerminal/QuickTerminalWindow.swift +++ b/macos/Sources/Features/QuickTerminal/QuickTerminalWindow.swift @@ -5,18 +5,18 @@ class QuickTerminalWindow: NSPanel { // still become key/main and receive events. override var canBecomeKey: Bool { return true } override var canBecomeMain: Bool { return true } - + override func awakeFromNib() { super.awakeFromNib() // Note: almost all of this stuff can be done in the nib/xib directly // but I prefer to do it programmatically because the properties we // care about are less hidden. - + // Add a custom identifier so third party apps can use the Accessibility // API to apply special rules to the quick terminal. self.identifier = .init(rawValue: "com.mitchellh.ghostty.quickTerminal") - + // Set the correct AXSubrole of kAXFloatingWindowSubrole (allows // AeroSpace to treat the Quick Terminal as a floating window) self.setAccessibilitySubrole(.floatingWindow) @@ -32,8 +32,8 @@ class QuickTerminalWindow: NSPanel { /// This is set to the frame prior to setting `contentView`. This is purely a hack to workaround /// bugs in older macOS versions (Ventura): https://github.com/ghostty-org/ghostty/pull/8026 - var initialFrame: NSRect? = nil - + var initialFrame: NSRect? + override func setFrame(_ frameRect: NSRect, display flag: Bool) { // Upon first adding this Window to its host view, older SwiftUI // seems to have a "hiccup" and corrupts the frameRect, diff --git a/macos/Sources/Features/Secure Input/SecureInput.swift b/macos/Sources/Features/Secure Input/SecureInput.swift index f999ce5caed..261a38e5c48 100644 --- a/macos/Sources/Features/Secure Input/SecureInput.swift +++ b/macos/Sources/Features/Secure Input/SecureInput.swift @@ -12,7 +12,7 @@ import OSLog // it. You have to yield secure input on application deactivation (because // it'll affect other apps) and reacquire on reactivation, and every enable // needs to be balanced with a disable. -class SecureInput : ObservableObject { +class SecureInput: ObservableObject { static let shared = SecureInput() private static let logger = Logger( @@ -90,12 +90,12 @@ class SecureInput : ObservableObject { guard enabled != desired else { return } let err: OSStatus - if (enabled) { + if enabled { err = DisableSecureEventInput() } else { err = EnableSecureEventInput() } - if (err == noErr) { + if err == noErr { enabled = desired Self.logger.debug("secure input state=\(self.enabled)") return @@ -111,7 +111,7 @@ class SecureInput : ObservableObject { // desire to be enabled. guard !enabled && desired else { return } let err = EnableSecureEventInput() - if (err == noErr) { + if err == noErr { enabled = true Self.logger.debug("secure input enabled on activation") return @@ -124,7 +124,7 @@ class SecureInput : ObservableObject { // We only want to disable if we're enabled. guard enabled else { return } let err = DisableSecureEventInput() - if (err == noErr) { + if err == noErr { enabled = false Self.logger.debug("secure input disabled on deactivation") return diff --git a/macos/Sources/Features/Secure Input/SecureInputOverlay.swift b/macos/Sources/Features/Secure Input/SecureInputOverlay.swift index 96f309de54a..ebf5b5138c1 100644 --- a/macos/Sources/Features/Secure Input/SecureInputOverlay.swift +++ b/macos/Sources/Features/Secure Input/SecureInputOverlay.swift @@ -2,8 +2,8 @@ import SwiftUI struct SecureInputOverlay: View { // Animations - @State private var shadowAngle: Angle = .degrees(0) - @State private var shadowWidth: CGFloat = 6 + @State private var gradientAngle: Angle = .degrees(0) + @State private var gradientOpacity: CGFloat = 0.5 // Popover explainer text @State private var isPopover = false @@ -20,18 +20,32 @@ struct SecureInputOverlay: View { .foregroundColor(.primary) .padding(5) .background( - RoundedRectangle(cornerRadius: 12) + Rectangle() .fill(.background) - .innerShadow( - using: RoundedRectangle(cornerRadius: 12), - stroke: AngularGradient( - gradient: Gradient(colors: [.cyan, .blue, .yellow, .blue, .cyan]), - center: .center, - angle: shadowAngle - ), - width: shadowWidth + .overlay( + Rectangle() + .fill( + AngularGradient( + gradient: Gradient( + colors: [.cyan, .blue, .yellow, .blue, .cyan] + ), + center: .center, + angle: gradientAngle + ) + ) + .blur(radius: 4, opaque: true) + .mask( + RadialGradient( + colors: [.clear, .black], + center: .center, + startRadius: 0, + endRadius: 25 + ) + ) + .opacity(gradientOpacity) ) ) + .mask(RoundedRectangle(cornerRadius: 12)) .overlay( RoundedRectangle(cornerRadius: 12) .stroke(Color.gray, lineWidth: 1) @@ -44,9 +58,9 @@ struct SecureInputOverlay: View { .padding(.trailing, 10) .popover(isPresented: $isPopover, arrowEdge: .bottom) { Text(""" - Secure Input is active. Secure Input is a macOS security feature that - prevents applications from reading keyboard events. This is enabled - automatically whenever Ghostty detects a password prompt in the terminal, + Secure Input is active. Secure Input is a macOS security feature that + prevents applications from reading keyboard events. This is enabled + automatically whenever Ghostty detects a password prompt in the terminal, or at all times if `Ghostty > Secure Keyboard Entry` is active. """) .padding(.all) @@ -57,11 +71,11 @@ struct SecureInputOverlay: View { } .onAppear { withAnimation(Animation.linear(duration: 2).repeatForever(autoreverses: false)) { - shadowAngle = .degrees(360) + gradientAngle = .degrees(360) } withAnimation(Animation.linear(duration: 2).repeatForever(autoreverses: true)) { - shadowWidth = 12 + gradientOpacity = 1 } } } diff --git a/macos/Sources/Features/Services/ServiceProvider.swift b/macos/Sources/Features/Services/ServiceProvider.swift index f165769a78d..9bf46fcf98a 100644 --- a/macos/Sources/Features/Services/ServiceProvider.swift +++ b/macos/Sources/Features/Services/ServiceProvider.swift @@ -50,7 +50,7 @@ class ServiceProvider: NSObject { var config = Ghostty.SurfaceConfiguration() config.workingDirectory = url.path(percentEncoded: false) - switch (target) { + switch target { case .window: _ = TerminalController.newWindow(delegate.ghostty, withBaseConfig: config) diff --git a/macos/Sources/Features/Settings/ConfigurationErrorsController.swift b/macos/Sources/Features/Settings/ConfigurationErrorsController.swift index b2550b94ed9..06fcebda397 100644 --- a/macos/Sources/Features/Settings/ConfigurationErrorsController.swift +++ b/macos/Sources/Features/Settings/ConfigurationErrorsController.swift @@ -12,13 +12,13 @@ class ConfigurationErrorsController: NSWindowController, NSWindowDelegate, Confi /// The data model for this view. Update this directly and the associated view will be updated, too. @Published var errors: [String] = [] { didSet { - if (errors.count == 0) { + if errors.count == 0 { self.window?.performClose(nil) } } } - //MARK: - NSWindowController + // MARK: - NSWindowController override func windowWillLoad() { shouldCascadeWindows = false diff --git a/macos/Sources/Features/Splits/SplitTree.swift b/macos/Sources/Features/Splits/SplitTree.swift index 2fb83e64c22..30caae0da62 100644 --- a/macos/Sources/Features/Splits/SplitTree.swift +++ b/macos/Sources/Features/Splits/SplitTree.swift @@ -1,4 +1,5 @@ import AppKit +import Combine /// SplitTree represents a tree of views that can be divided. struct SplitTree { @@ -222,7 +223,7 @@ extension SplitTree { case .split: // If the best candidate is a split node, use its the leaf/rightmost // depending on our spatial direction. - return switch (spatialDirection) { + return switch spatialDirection { case .up, .left: bestNode.node.leftmostLeaf() case .down, .right: bestNode.node.rightmostLeaf() } @@ -343,7 +344,7 @@ extension SplitTree { // MARK: SplitTree Codable -fileprivate enum CodingKeys: String, CodingKey { +private enum CodingKeys: String, CodingKey { case version case root case zoomed @@ -422,7 +423,7 @@ extension SplitTree.Node { /// Returns the node in the tree that contains the given view. func node(view: ViewType) -> Node? { - switch (self) { + switch self { case .leaf(view): return self @@ -728,7 +729,6 @@ extension SplitTree.Node { } } - /// Calculate the bounds of all views in this subtree based on split ratios func calculateViewBounds(in bounds: CGRect) -> [(view: ViewType, bounds: CGRect)] { switch self { @@ -1216,6 +1216,57 @@ extension SplitTree: Collection { } } +// MARK: SplitTree Combine + +extension SplitTree { + /// Builds a publisher that emits current values for all leaf views keyed by view ID. + /// + /// The returned publisher emits a full `[ViewType.ID: Value]` snapshot whenever any leaf view + /// publishes through the provided publisher key path. + func valuesPublisher( + valueKeyPath: KeyPath, + publisherKeyPath: KeyPath.Publisher> + ) -> AnyPublisher<[ViewType.ID: Value], Never> { + // Flatten the split tree into a list of current leaf views. + let views = map { $0 } + guard !views.isEmpty else { + // If there are no leaves, immediately publish an empty snapshot. + // `Just([:])` keeps the return type simple and makes downstream usage easy. + return Just([:]).eraseToAnyPublisher() + } + + // Capture each view's current value up front. + // We key by `ViewType.ID` so updates can replace the correct entry later. + // This avoids waiting for all views to emit before consumers see data. + let initial = Dictionary(uniqueKeysWithValues: views.map { view in + (view.id, view[keyPath: valueKeyPath]) + }) + + // Build one publisher per view from the requested key path. + // Each emission is mapped into `(id, value)` so we know which entry changed. + // `MergeMany` combines all per-view streams into a single update stream. + let updates = Publishers.MergeMany(views.map { view in + view[keyPath: publisherKeyPath] + .map { (view.id, $0) } + .eraseToAnyPublisher() + }) + + return updates + // Accumulate updates into a full "latest value per ID" dictionary. + // This turns incremental events into complete state snapshots. + .scan(initial) { state, update in + var state = state + state[update.0] = update.1 + return state + } + // Emit the initial snapshot first so subscribers always get a + // complete value dictionary immediately upon subscription. + .prepend(initial) + // Hide implementation details and expose a stable API type. + .eraseToAnyPublisher() + } +} + // MARK: Structural Identity extension SplitTree.Node { diff --git a/macos/Sources/Features/Splits/SplitView.Divider.swift b/macos/Sources/Features/Splits/SplitView.Divider.swift index a01175dce91..59a10ef60e2 100644 --- a/macos/Sources/Features/Splits/SplitView.Divider.swift +++ b/macos/Sources/Features/Splits/SplitView.Divider.swift @@ -10,7 +10,7 @@ extension SplitView { @Binding var split: CGFloat private var visibleWidth: CGFloat? { - switch (direction) { + switch direction { case .horizontal: return visibleSize case .vertical: @@ -19,7 +19,7 @@ extension SplitView { } private var visibleHeight: CGFloat? { - switch (direction) { + switch direction { case .horizontal: return nil case .vertical: @@ -28,7 +28,7 @@ extension SplitView { } private var invisibleWidth: CGFloat? { - switch (direction) { + switch direction { case .horizontal: return visibleSize + invisibleSize case .vertical: @@ -37,7 +37,7 @@ extension SplitView { } private var invisibleHeight: CGFloat? { - switch (direction) { + switch direction { case .horizontal: return nil case .vertical: @@ -46,7 +46,7 @@ extension SplitView { } private var pointerStyle: BackportPointerStyle { - return switch (direction) { + return switch direction { case .horizontal: .resizeLeftRight case .vertical: .resizeUpDown } @@ -69,8 +69,8 @@ extension SplitView { return } - if (isHovered) { - switch (direction) { + if isHovered { + switch direction { case .horizontal: NSCursor.resizeLeftRight.push() case .vertical: diff --git a/macos/Sources/Features/Splits/SplitView.swift b/macos/Sources/Features/Splits/SplitView.swift index 42de9759058..a19fdca6a85 100644 --- a/macos/Sources/Features/Splits/SplitView.swift +++ b/macos/Sources/Features/Splits/SplitView.swift @@ -90,7 +90,7 @@ struct SplitView: View { private func dragGesture(_ size: CGSize, splitterPoint: CGPoint) -> some Gesture { return DragGesture() .onChanged { gesture in - switch (direction) { + switch direction { case .horizontal: let new = min(max(minSize, gesture.location.x), size.width - minSize) split = new / size.width @@ -106,14 +106,14 @@ struct SplitView: View { private func leftRect(for size: CGSize) -> CGRect { // Initially the rect is the full size var result = CGRect(x: 0, y: 0, width: size.width, height: size.height) - switch (direction) { + switch direction { case .horizontal: - result.size.width = result.size.width * split + result.size.width *= split result.size.width -= splitterVisibleSize / 2 result.size.width -= result.size.width.truncatingRemainder(dividingBy: self.resizeIncrements.width) case .vertical: - result.size.height = result.size.height * split + result.size.height *= split result.size.height -= splitterVisibleSize / 2 result.size.height -= result.size.height.truncatingRemainder(dividingBy: self.resizeIncrements.height) } @@ -125,7 +125,7 @@ struct SplitView: View { private func rightRect(for size: CGSize, leftRect: CGRect) -> CGRect { // Initially the rect is the full size var result = CGRect(x: 0, y: 0, width: size.width, height: size.height) - switch (direction) { + switch direction { case .horizontal: // For horizontal layouts we offset the starting X by the left rect // and make the width fit the remaining space. @@ -144,7 +144,7 @@ struct SplitView: View { /// Calculates the point at which the splitter should be rendered. private func splitterPoint(for size: CGSize, leftRect: CGRect) -> CGPoint { - switch (direction) { + switch direction { case .horizontal: return CGPoint(x: leftRect.size.width, y: size.height / 2) @@ -152,9 +152,9 @@ struct SplitView: View { return CGPoint(x: size.width / 2, y: leftRect.size.height) } } - + // MARK: Accessibility - + private var splitViewLabel: String { switch direction { case .horizontal: @@ -163,7 +163,7 @@ struct SplitView: View { return "Vertical split view" } } - + private var leftPaneLabel: String { switch direction { case .horizontal: @@ -172,7 +172,7 @@ struct SplitView: View { return "Top pane" } } - + private var rightPaneLabel: String { switch direction { case .horizontal: diff --git a/macos/Sources/Features/Splits/TerminalSplitTreeView.swift b/macos/Sources/Features/Splits/TerminalSplitTreeView.swift index 2a42dc599fd..5fa12edebea 100644 --- a/macos/Sources/Features/Splits/TerminalSplitTreeView.swift +++ b/macos/Sources/Features/Splits/TerminalSplitTreeView.swift @@ -7,19 +7,19 @@ import SwiftUI enum TerminalSplitOperation { case resize(Resize) case drop(Drop) - + struct Resize { let node: SplitTree.Node let ratio: Double } - + struct Drop { /// The surface being dragged. let payload: Ghostty.SurfaceView - + /// The surface it was dragged onto let destination: Ghostty.SurfaceView - + /// The zone it was dropped to determine how to split the destination. let zone: TerminalSplitDropZone } @@ -44,7 +44,7 @@ struct TerminalSplitTreeView: View { } } -fileprivate struct TerminalSplitSubtreeView: View { +private struct TerminalSplitSubtreeView: View { @EnvironmentObject var ghostty: Ghostty.App let node: SplitTree.Node @@ -52,12 +52,12 @@ fileprivate struct TerminalSplitSubtreeView: View { let action: (TerminalSplitOperation) -> Void var body: some View { - switch (node) { + switch node { case .leaf(let leafView): TerminalSplitLeaf(surfaceView: leafView, isSplit: !isRoot, action: action) case .split(let split): - let splitViewDirection: SplitViewDirection = switch (split.direction) { + let splitViewDirection: SplitViewDirection = switch split.direction { case .horizontal: .horizontal case .vertical: .vertical } @@ -86,14 +86,14 @@ fileprivate struct TerminalSplitSubtreeView: View { } } -fileprivate struct TerminalSplitLeaf: View { +private struct TerminalSplitLeaf: View { let surfaceView: Ghostty.SurfaceView let isSplit: Bool let action: (TerminalSplitOperation) -> Void - + @State private var dropState: DropState = .idle @State private var isSelfDragging: Bool = false - + var body: some View { GeometryReader { geometry in Ghostty.InspectableSurface( @@ -129,26 +129,26 @@ fileprivate struct TerminalSplitLeaf: View { .accessibilityLabel("Terminal pane") } } - + private enum DropState: Equatable { case idle case dropping(TerminalSplitDropZone) } - + private struct SplitDropDelegate: DropDelegate { @Binding var dropState: DropState let viewSize: CGSize let destinationSurface: Ghostty.SurfaceView let action: (TerminalSplitOperation) -> Void - + func validateDrop(info: DropInfo) -> Bool { info.hasItemsConforming(to: [.ghosttySurfaceId]) } - + func dropEntered(info: DropInfo) { dropState = .dropping(.calculate(at: info.location, in: viewSize)) } - + func dropUpdated(info: DropInfo) -> DropProposal? { // For some reason dropUpdated is sent after performDrop is called // and we don't want to reset our drop zone to show it so we have @@ -157,11 +157,11 @@ fileprivate struct TerminalSplitLeaf: View { dropState = .dropping(.calculate(at: info.location, in: viewSize)) return DropProposal(operation: .move) } - + func dropExited(info: DropInfo) { dropState = .idle } - + func performDrop(info: DropInfo) -> Bool { let zone = TerminalSplitDropZone.calculate(at: info.location, in: viewSize) dropState = .idle @@ -169,7 +169,7 @@ fileprivate struct TerminalSplitLeaf: View { // Load the dropped surface asynchronously using Transferable let providers = info.itemProviders(for: [.ghosttySurfaceId]) guard let provider = providers.first else { return false } - + // Capture action before the async closure _ = provider.loadTransferable(type: Ghostty.SurfaceView.self) { [weak destinationSurface] result in switch result { @@ -180,12 +180,12 @@ fileprivate struct TerminalSplitLeaf: View { guard sourceSurface !== destinationSurface else { return } action(.drop(.init(payload: sourceSurface, destination: destinationSurface, zone: zone))) } - + case .failure: break } } - + return true } } diff --git a/macos/Sources/Features/Terminal/BaseTerminalController.swift b/macos/Sources/Features/Terminal/BaseTerminalController.swift index b739e9ed1c9..d4b0ac0800e 100644 --- a/macos/Sources/Features/Terminal/BaseTerminalController.swift +++ b/macos/Sources/Features/Terminal/BaseTerminalController.swift @@ -31,13 +31,12 @@ class BaseTerminalController: NSWindowController, TerminalViewDelegate, TerminalViewModel, ClipboardConfirmationViewDelegate, - FullscreenDelegate -{ + FullscreenDelegate { /// The app instance that this terminal view will represent. let ghostty: Ghostty.App /// The currently focused surface. - var focusedSurface: Ghostty.SurfaceView? = nil { + var focusedSurface: Ghostty.SurfaceView? { didSet { syncFocusToSurfaceTree() } } @@ -48,29 +47,32 @@ class BaseTerminalController: NSWindowController, /// This can be set to show/hide the command palette. @Published var commandPaletteIsShowing: Bool = false - + /// Set if the terminal view should show the update overlay. @Published var updateOverlayIsVisible: Bool = false + /// True when any surface in this controller currently has an active bell. + @Published private(set) var bell: Bool = false + /// Whether the terminal surface should focus when the mouse is over it. var focusFollowsMouse: Bool { self.derivedConfig.focusFollowsMouse } /// Non-nil when an alert is active so we don't overlap multiple. - private var alert: NSAlert? = nil + private var alert: NSAlert? /// The clipboard confirmation window, if shown. - private var clipboardConfirmation: ClipboardConfirmationController? = nil + private var clipboardConfirmation: ClipboardConfirmationController? /// Fullscreen state management. private(set) var fullscreenStyle: FullscreenStyle? /// Event monitor (see individual events for why) - private var eventMonitor: Any? = nil + private var eventMonitor: Any? /// The previous frame information from the window - private var savedFrame: SavedFrame? = nil + private var savedFrame: SavedFrame? /// Cache previously applied appearance to avoid unnecessary updates private var appliedColorScheme: ghostty_color_scheme_e? @@ -84,9 +86,12 @@ class BaseTerminalController: NSWindowController, /// The cancellables related to our focused surface. private var focusedSurfaceCancellables: Set = [] + /// Cancellable for aggregating bell state across all surfaces in this controller. + private var bellStateCancellable: AnyCancellable? + /// An override title for the tab/window set by the user via prompt_tab_title. /// When set, this takes precedence over the computed title from the terminal. - var titleOverride: String? = nil { + var titleOverride: String? { didSet { applyTitleToWindow() } } @@ -136,6 +141,9 @@ class BaseTerminalController: NSWindowController, guard let ghostty_app = ghostty.app else { preconditionFailure("app must be loaded") } self.surfaceTree = tree ?? .init(view: Ghostty.SurfaceView(ghostty_app, baseConfig: base)) + // Setup our bell state for the window + setupBellNotificationPublisher() + // Setup our notifications for behaviors let center = NotificationCenter.default center.addObserver( @@ -281,7 +289,7 @@ class BaseTerminalController: NSWindowController, /// Subclasses should call super first. func surfaceTreeDidChange(from: SplitTree, to: SplitTree) { // If our surface tree becomes empty then we have no focused surface. - if (to.isEmpty) { + if to.isEmpty { focusedSurface = nil } } @@ -424,7 +432,7 @@ class BaseTerminalController: NSWindowController, /// Goes to previous split unless we're the leftmost leaf, then goes to next. private func findNextFocusTargetAfterClosing(node: SplitTree.Node) -> Ghostty.SurfaceView? { guard let root = surfaceTree.root else { return nil } - + // If we're the leftmost, then we move to the next surface after closing. // Otherwise, we move to the previous. if root.leftmostLeaf() == node.leftmostLeaf() { @@ -433,7 +441,7 @@ class BaseTerminalController: NSWindowController, return surfaceTree.focusTarget(for: .previous, from: node) } } - + /// Remove a node from the surface tree and move focus appropriately. /// /// This also updates the undo manager to support restoring this node. @@ -471,13 +479,13 @@ class BaseTerminalController: NSWindowController, Ghostty.moveFocus(to: newView, from: oldView) } } - + // Setup our undo guard let undoManager else { return } if let undoAction { undoManager.setActionName(undoAction) } - + undoManager.registerUndo( withTarget: self, expiresAfter: undoExpiration @@ -488,7 +496,7 @@ class BaseTerminalController: NSWindowController, Ghostty.moveFocus(to: oldView, from: target.focusedSurface) } } - + undoManager.registerUndo( withTarget: target, expiresAfter: target.undoExpiration @@ -531,14 +539,14 @@ class BaseTerminalController: NSWindowController, // then we let it stay that way. x: if newFrame.origin.x < visibleFrame.origin.x { if let savedFrame, savedFrame.window.origin.x < savedFrame.screen.origin.x { - break x; + break x } newFrame.origin.x = visibleFrame.origin.x } y: if newFrame.origin.y < visibleFrame.origin.y { if let savedFrame, savedFrame.window.origin.y < savedFrame.screen.origin.y { - break y; + break y } newFrame.origin.y = visibleFrame.origin.y @@ -596,7 +604,7 @@ class BaseTerminalController: NSWindowController, guard let directionAny = notification.userInfo?["direction"] else { return } guard let direction = directionAny as? ghostty_action_split_direction_e else { return } let splitDirection: SplitTree.NewDirection - switch (direction) { + switch direction { case GHOSTTY_SPLIT_DIRECTION_RIGHT: splitDirection = .right case GHOSTTY_SPLIT_DIRECTION_LEFT: splitDirection = .left case GHOSTTY_SPLIT_DIRECTION_DOWN: splitDirection = .down @@ -609,14 +617,14 @@ class BaseTerminalController: NSWindowController, @objc private func ghosttyDidEqualizeSplits(_ notification: Notification) { guard let target = notification.object as? Ghostty.SurfaceView else { return } - + // Check if target surface is in current controller's tree guard surfaceTree.contains(target) else { return } - + // Equalize the splits surfaceTree = surfaceTree.equalized() } - + @objc private func ghosttyDidFocusSplit(_ notification: Notification) { // The target must be within our tree guard let target = notification.object as? Ghostty.SurfaceView else { return } @@ -628,7 +636,7 @@ class BaseTerminalController: NSWindowController, // Find the node for the target surface guard let targetNode = surfaceTree.root?.node(view: target) else { return } - + // Find the next surface to focus guard let nextSurface = surfaceTree.focusTarget(for: direction.toSplitTreeFocusDirection(), from: targetNode) else { return @@ -649,7 +657,7 @@ class BaseTerminalController: NSWindowController, Ghostty.moveFocus(to: nextSurface, from: target) } } - + @objc private func ghosttyDidToggleSplitZoom(_ notification: Notification) { // The target must be within our tree guard let target = notification.object as? Ghostty.SurfaceView else { return } @@ -677,19 +685,19 @@ class BaseTerminalController: NSWindowController, Ghostty.moveFocus(to: target) } } - + @objc private func ghosttyDidResizeSplit(_ notification: Notification) { // The target must be within our tree guard let target = notification.object as? Ghostty.SurfaceView else { return } guard let targetNode = surfaceTree.root?.node(view: target) else { return } - + // Extract direction and amount from notification guard let directionAny = notification.userInfo?[Ghostty.Notification.ResizeSplitDirectionKey] else { return } guard let direction = directionAny as? Ghostty.SplitResizeDirection else { return } - + guard let amountAny = notification.userInfo?[Ghostty.Notification.ResizeSplitAmountKey] else { return } guard let amount = amountAny as? UInt16 else { return } - + // Convert Ghostty.SplitResizeDirection to SplitTree.Spatial.Direction let spatialDirection: SplitTree.Spatial.Direction switch direction { @@ -698,10 +706,10 @@ class BaseTerminalController: NSWindowController, case .left: spatialDirection = .left case .right: spatialDirection = .right } - + // Use viewBounds for the spatial calculation bounds let bounds = CGRect(origin: .zero, size: surfaceTree.viewBounds()) - + // Perform the resize using the new SplitTree resize method do { surfaceTree = try surfaceTree.resizing(node: targetNode, by: amount, in: spatialDirection, with: bounds) @@ -716,7 +724,7 @@ class BaseTerminalController: NSWindowController, // Bring the window to front and focus the surface. window?.makeKeyAndOrderFront(nil) - + // We use a small delay to ensure this runs after any UI cleanup // (e.g., command palette restoring focus to its original surface). Ghostty.moveFocus(to: target) @@ -729,11 +737,11 @@ class BaseTerminalController: NSWindowController, @objc private func ghosttySurfaceDragEndedNoTarget(_ notification: Notification) { guard let target = notification.object as? Ghostty.SurfaceView else { return } guard let targetNode = surfaceTree.root?.node(view: target) else { return } - + // If our tree isn't split, then we never create a new window, because // it is already a single split. guard surfaceTree.isSplit else { return } - + // If we are removing our focused surface then we move it. We need to // keep track of our old one so undo sends focus back to the right place. let oldFocusedSurface = focusedSurface @@ -746,14 +754,14 @@ class BaseTerminalController: NSWindowController, // Create a new tree with the dragged surface and open a new window let newTree = SplitTree(view: target) - + // Treat our undo below as a full group. undoManager?.beginUndoGrouping() undoManager?.setActionName("Move Split") defer { undoManager?.endUndoGrouping() } - + replaceSurfaceTree(removedTree, moveFocusFrom: oldFocusedSurface) _ = TerminalController.newWindow( ghostty, @@ -783,7 +791,7 @@ class BaseTerminalController: NSWindowController, if NSApp.mainWindow == window { surfaces = surfaces.filter { $0 != focusedSurface } } - + for surface in surfaces { surface.flagsChanged(with: event) } @@ -817,10 +825,10 @@ class BaseTerminalController: NSWindowController, titleDidChange(to: "👻") } } - + private func computeTitle(title: String, bell: Bool) -> String { var result = title - if (bell && ghostty.config.bellFeatures.contains(.title)) { + if bell && ghostty.config.bellFeatures.contains(.title) { result = "🔔 \(result)" } @@ -834,17 +842,17 @@ class BaseTerminalController: NSWindowController, private func applyTitleToWindow() { guard let window else { return } - + if let titleOverride { window.title = computeTitle( title: titleOverride, bell: focusedSurface?.bell ?? false) return } - + window.title = lastComputedTitle } - + func pwdDidChange(to: URL?) { guard let window else { return } @@ -856,7 +864,6 @@ class BaseTerminalController: NSWindowController, } } - func cellSizeDidChange(to: NSSize) { guard derivedConfig.windowStepResize else { return } // Stage manager can sometimes present windows in such a way that the @@ -896,7 +903,7 @@ class BaseTerminalController: NSWindowController, case .left: .left case .right: .right } - + // Check if source is in our tree if let sourceNode = surfaceTree.root?.node(view: source) { // Source is in our tree - same window move @@ -908,7 +915,7 @@ class BaseTerminalController: NSWindowController, Ghostty.logger.warning("failed to insert surface during drop: \(error)") return } - + replaceSurfaceTree( newTree, moveFocusTo: source, @@ -916,7 +923,7 @@ class BaseTerminalController: NSWindowController, undoAction: "Move Split") return } - + // Source is not in our tree - search other windows var sourceController: BaseTerminalController? var sourceNode: SplitTree.Node? @@ -929,12 +936,12 @@ class BaseTerminalController: NSWindowController, break } } - + guard let sourceController, let sourceNode else { Ghostty.logger.warning("source surface not found in any window during drop") return } - + // Remove from source controller's tree and add it to our tree. // We do this first because if there is an error then we can // abort. @@ -945,17 +952,17 @@ class BaseTerminalController: NSWindowController, Ghostty.logger.warning("failed to insert surface during cross-window drop: \(error)") return } - + // Treat our undo below as a full group. undoManager?.beginUndoGrouping() undoManager?.setActionName("Move Split") defer { undoManager?.endUndoGrouping() } - + // Remove the node from the source. sourceController.removeSurfaceNode(sourceNode) - + // Add in the surface to our tree replaceSurfaceTree( newTree, @@ -966,7 +973,7 @@ class BaseTerminalController: NSWindowController, func performAction(_ action: String, on surfaceView: Ghostty.SurfaceView) { guard let surface = surfaceView.surface else { return } let len = action.utf8CString.count - if (len == 0) { return } + if len == 0 { return } _ = action.withCString { cString in ghostty_surface_binding_action(surface, cString, UInt(len - 1)) } @@ -980,17 +987,17 @@ class BaseTerminalController: NSWindowController, func toggleBackgroundOpacity() { // Do nothing if config is already fully opaque guard ghostty.config.backgroundOpacity < 1 else { return } - + // Do nothing if in fullscreen (transparency doesn't apply in fullscreen) guard let window, !window.styleMask.contains(.fullScreen) else { return } // Toggle between transparent and opaque isBackgroundOpaque.toggle() - + // Update our appearance syncAppearance() } - + /// Override this to resync any appearance related properties. This will be called automatically /// when certain window properties change that affect appearance. The list below should be updated /// as we add new things: @@ -1052,7 +1059,7 @@ class BaseTerminalController: NSWindowController, func fullscreenDidChange() { guard let fullscreenStyle else { return } - + // When we enter fullscreen, we want to show the update overlay so that it // is easily visible. For native fullscreen this is visible by showing the // menubar but we don't want to rely on that. @@ -1061,7 +1068,7 @@ class BaseTerminalController: NSWindowController, } else { updateOverlayIsVisible = defaultUpdateOverlayVisibility() } - + // Always resync our appearance syncAppearance() } @@ -1109,7 +1116,7 @@ class BaseTerminalController: NSWindowController, window?.endSheet(ccWindow) } - switch (request) { + switch request { case let .osc_52_write(pasteboard): guard case .confirm = action else { break } let pb = pasteboard ?? NSPasteboard.general @@ -1117,7 +1124,7 @@ class BaseTerminalController: NSWindowController, pb.setString(cc.contents, forType: .string) case .osc_52_read, .paste: let str: String - switch (action) { + switch action { case .cancel: str = "" @@ -1146,26 +1153,26 @@ class BaseTerminalController: NSWindowController, fullscreenStyle = NativeFullscreen(window) fullscreenStyle?.delegate = self } - + // Set our update overlay state updateOverlayIsVisible = defaultUpdateOverlayVisibility() } - + func defaultUpdateOverlayVisibility() -> Bool { guard let window else { return true } - + // No titlebar we always show the update overlay because it can't support // updates in the titlebar guard window.styleMask.contains(.titled) else { return true } - + // If it's a non terminal window we can't trust it has an update accessory, // so we always want to show the overlay. guard let window = window as? TerminalWindow else { return true } - + // Show the overlay if the window isn't. return !window.supportsUpdateAccessory } @@ -1202,6 +1209,17 @@ class BaseTerminalController: NSWindowController, func windowWillClose(_ notification: Notification) { guard let window else { return } + // Emit a final bell-state transition so any observers can clear state + // without separately tracking NSWindow lifecycle events. + if bell { + bell = false + NotificationCenter.default.post( + name: .terminalWindowBellDidChangeNotification, + object: self, + userInfo: [Notification.Name.terminalWindowHasBellKey: false] + ) + } + // I don't know if this is required anymore. We previously had a ref cycle between // the view and the window so we had to nil this out to break it but I think this // may now be resolved. We should verify that no memory leaks and we can remove this. @@ -1221,9 +1239,11 @@ class BaseTerminalController: NSWindowController, } } - // Becoming/losing key means we have to notify our surface(s) that we have focus - // so things like cursors blink, pty events are sent, etc. - self.syncFocusToSurfaceTree() + // Becoming key can race with responder updates when activating a window. + // Sync on the next runloop so split focus has settled first. + DispatchQueue.main.async { + self.syncFocusToSurfaceTree() + } } func windowDidResignKey(_ notification: Notification) { @@ -1267,6 +1287,17 @@ class BaseTerminalController: NSWindowController, } @IBAction func changeTabTitle(_ sender: Any) { + if let targetWindow = window { + let inlineHostWindow = + targetWindow.tabbedWindows? + .first(where: { $0.tabBarView != nil }) as? TerminalWindow + ?? (targetWindow as? TerminalWindow) + + if let inlineHostWindow, inlineHostWindow.beginInlineTabTitleEdit(for: targetWindow) { + return + } + } + promptTabTitle() } @@ -1295,7 +1326,6 @@ class BaseTerminalController: NSWindowController, ghostty.splitToggleZoom(surface: surface) } - @IBAction func splitMoveFocusPrevious(_ sender: Any) { splitMoveFocus(direction: .previous) } @@ -1368,7 +1398,7 @@ class BaseTerminalController: NSWindowController, @IBAction func toggleCommandPalette(_ sender: Any?) { commandPaletteIsShowing.toggle() } - + @IBAction func find(_ sender: Any) { focusedSurface?.find(sender) } @@ -1384,11 +1414,11 @@ class BaseTerminalController: NSWindowController, @IBAction func findNext(_ sender: Any) { focusedSurface?.findNext(sender) } - + @IBAction func findPrevious(_ sender: Any) { focusedSurface?.findNext(sender) } - + @IBAction func findHide(_ sender: Any) { focusedSurface?.findHide(sender) } @@ -1430,7 +1460,7 @@ extension BaseTerminalController: NSMenuItemValidation { return true } } - + // MARK: - Surface Color Scheme /// Update the surface tree's color scheme only when it actually changes. @@ -1462,3 +1492,57 @@ extension BaseTerminalController: NSMenuItemValidation { appliedColorScheme = scheme } } + +// MARK: Combine Methods + +extension BaseTerminalController { + /// Publishes an app-wide notification whenever this terminal window's aggregate + /// bell state changes. + private func setupBellNotificationPublisher() { + bellStateCancellable = surfaceValuesPublisher(valueKeyPath: \.bell, publisherKeyPath: \.$bell) + .map { $0.values.contains(true) } + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] hasBell in + guard let self else { return } + bell = hasBell + NotificationCenter.default.post( + name: .terminalWindowBellDidChangeNotification, + object: self, + userInfo: [Notification.Name.terminalWindowHasBellKey: hasBell] + ) + } + } + + /// Creates a publisher for values on all surfaces in this controller's tree. + /// + /// The publisher emits a dictionary of surface IDs to values whenever the tree changes + /// or any surface publishes a new value for the key path. + func surfaceValuesPublisher( + valueKeyPath: KeyPath, + publisherKeyPath: KeyPath.Publisher> + ) -> AnyPublisher<[Ghostty.SurfaceView.ID: Value], Never> { + // `surfaceTree` can be replaced entirely when splits are added/removed/closed. + // For each tree snapshot we build a fresh publisher that watches all surfaces + // in that snapshot. + $surfaceTree + .map { tree in + tree.valuesPublisher( + valueKeyPath: valueKeyPath, + publisherKeyPath: publisherKeyPath + ) + } + // Keep only the latest tree publisher active. This automatically cancels + // subscriptions for old/removed surfaces when the tree changes. + .switchToLatest() + .eraseToAnyPublisher() + } +} + +// MARK: Notifications + +extension Notification.Name { + /// Terminal window aggregate bell state changed. + static let terminalWindowBellDidChangeNotification = Notification.Name("com.mitchellh.ghostty.terminalWindowBellDidChange") + static let terminalWindowHasBellKey = terminalWindowBellDidChangeNotification.rawValue + ".hasBell" +} diff --git a/macos/Sources/Features/Terminal/TerminalController.swift b/macos/Sources/Features/Terminal/TerminalController.swift index c7f9fe08612..7a5bd1d4bbe 100644 --- a/macos/Sources/Features/Terminal/TerminalController.swift +++ b/macos/Sources/Features/Terminal/TerminalController.swift @@ -8,16 +8,16 @@ import GhosttyKit class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Controller { override var windowNibName: NSNib.Name? { let defaultValue = "Terminal" - + guard let appDelegate = NSApp.delegate as? AppDelegate else { return defaultValue } let config = appDelegate.ghostty.config - + // If we have no window decorations, there's no reason to do anything but // the default titlebar (because there will be no titlebar). if !config.windowDecorations { return defaultValue } - + let nib = switch config.macosTitlebarStyle { case "native": "Terminal" case "hidden": "TerminalHiddenTitlebar" @@ -34,33 +34,32 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr #endif default: defaultValue } - + return nib } - + /// This is set to true when we care about frame changes. This is a small optimization since /// this controller registers a listener for ALL frame change notifications and this lets us bail /// early if we don't care. private var tabListenForFrame: Bool = false - + /// This is the hash value of the last tabGroup.windows array. We use this to detect order /// changes in the list. private var tabWindowsHash: Int = 0 - + /// This is set to false by init if the window managed by this controller should not be restorable. /// For example, terminals executing custom scripts are not restorable. private var restorable: Bool = true - + /// The configuration derived from the Ghostty config so we don't need to rely on references. private(set) var derivedConfig: DerivedConfig - - + /// The notification cancellable for focused surface property changes. private var surfaceAppearanceCancellables: Set = [] - + /// This will be set to the initial frame of the window from the xib on load. - private var initialFrame: NSRect? = nil - + private var initialFrame: NSRect? + init(_ ghostty: Ghostty.App, withBaseConfig base: Ghostty.SurfaceConfiguration? = nil, withSurfaceTree tree: SplitTree? = nil, @@ -72,12 +71,12 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // as the script. We may want to revisit this behavior when we have scrollback // restoration. self.restorable = (base?.command ?? "") == "" - + // Setup our initial derived config based on the current app config self.derivedConfig = DerivedConfig(ghostty.config) - + super.init(ghostty, baseConfig: base, surfaceTree: tree) - + // Setup our notifications for behaviors let center = NotificationCenter.default center.addObserver( @@ -134,37 +133,37 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr object: nil ) } - + required init?(coder: NSCoder) { fatalError("init(coder:) is not supported for this view") } - + deinit { // Remove all of our notificationcenter subscriptions let center = NotificationCenter.default center.removeObserver(self) } - + // MARK: Base Controller Overrides - + override func surfaceTreeDidChange(from: SplitTree, to: SplitTree) { super.surfaceTreeDidChange(from: from, to: to) - + // Whenever our surface tree changes in any way (new split, close split, etc.) // we want to invalidate our state. invalidateRestorableState() - + // Update our zoom state if let window = window as? TerminalWindow { window.surfaceIsZoomed = to.zoomed != nil } - + // If our surface tree is now nil then we close our window. - if (to.isEmpty) { + if to.isEmpty { self.window?.close() } } - + override func replaceSurfaceTree( _ newTree: SplitTree, moveFocusTo newView: Ghostty.SurfaceView? = nil, @@ -177,7 +176,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr closeTabImmediately() return } - + super.replaceSurfaceTree( newTree, moveFocusTo: newView, @@ -199,6 +198,16 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // of each other. private static var lastCascadePoint = NSPoint(x: 0, y: 0) + private static func applyCascade(to window: NSWindow, hasFixedPos: Bool) { + if hasFixedPos { return } + + if all.count > 1 { + lastCascadePoint = window.cascadeTopLeft(from: lastCascadePoint) + } else { + lastCascadePoint = window.cascadeTopLeft(from: NSPoint(x: window.frame.minX, y: window.frame.maxY)) + } + } + // The preferred parent terminal controller. static var preferredParent: TerminalController? { all.first { @@ -210,7 +219,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // to find the preferred window to attach new tabs, perform actions, etc. We // always prefer the main window but if there isn't any (because we're triggered // by something like an App Intent) then we prefer the most previous main. - static private(set) weak var lastMain: TerminalController? = nil + static private(set) weak var lastMain: TerminalController? /// The "new window" action. static func newWindow( @@ -224,27 +233,25 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // otherwise the focused terminal, otherwise an arbitrary one. let parent: NSWindow? = explicitParent ?? preferredParent?.window - if let parent { - if parent.styleMask.contains(.fullScreen) { - // If our previous window was fullscreen then we want our new window to - // be fullscreen. This behavior actually doesn't match the native tabbing - // behavior of macOS apps where new windows create tabs when in native - // fullscreen but this is how we've always done it. This matches iTerm2 - // behavior. + if let parent, parent.styleMask.contains(.fullScreen) { + // If our previous window was fullscreen then we want our new window to + // be fullscreen. This behavior actually doesn't match the native tabbing + // behavior of macOS apps where new windows create tabs when in native + // fullscreen but this is how we've always done it. This matches iTerm2 + // behavior. + c.toggleFullscreen(mode: .native) + } else if let fullscreenMode = ghostty.config.windowFullscreen { + switch fullscreenMode { + case .native: + // Native has to be done immediately so that our stylemask contains + // fullscreen for the logic later in this method. c.toggleFullscreen(mode: .native) - } else if ghostty.config.windowFullscreen { - switch (ghostty.config.windowFullscreenMode) { - case .native: - // Native has to be done immediately so that our stylemask contains - // fullscreen for the logic later in this method. - c.toggleFullscreen(mode: .native) - - case .nonNative, .nonNativeVisibleMenu, .nonNativePaddedNotch: - // If we're non-native then we have to do it on a later loop - // so that the content view is setup. - DispatchQueue.main.async { - c.toggleFullscreen(mode: ghostty.config.windowFullscreenMode) - } + + case .nonNative, .nonNativeVisibleMenu, .nonNativePaddedNotch: + // If we're non-native then we have to do it on a later loop + // so that the content view is setup. + DispatchQueue.main.async { + c.toggleFullscreen(mode: fullscreenMode) } } } @@ -255,8 +262,9 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr DispatchQueue.main.async { // Only cascade if we aren't fullscreen. if let window = c.window { - if (!window.styleMask.contains(.fullScreen)) { - Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint) + if !window.styleMask.contains(.fullScreen) { + let hasFixedPos = c.derivedConfig.windowPositionX != nil && c.derivedConfig.windowPositionY != nil + Self.applyCascade(to: window, hasFixedPos: hasFixedPos) } } @@ -326,7 +334,8 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr window.setFrameTopLeftPoint(position) window.constrainToScreen() } else { - Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint) + let hasFixedPos = c.derivedConfig.windowPositionX != nil && c.derivedConfig.windowPositionY != nil + Self.applyCascade(to: window, hasFixedPos: hasFixedPos) } } } @@ -392,7 +401,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // If the parent is miniaturized, then macOS exhibits really strange behaviors // so we have to bring it back out. - if (parent.isMiniaturized) { parent.deminiaturize(self) } + if parent.isMiniaturized { parent.deminiaturize(self) } // If our parent tab group already has this window, macOS added it and // we need to remove it so we can set the correct order in the next line. @@ -407,21 +416,21 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr } // If we don't allow tabs then we create a new window instead. - if (window.tabbingMode != .disallowed) { + if window.tabbingMode != .disallowed { // Add the window to the tab group and show it. switch ghostty.config.windowNewTabPosition { case "end": // If we already have a tab group and we want the new tab to open at the end, // then we use the last window in the tab group as the parent. if let last = parent.tabGroup?.windows.last { - last.addTabbedWindow(window, ordered: .above) + last.addTabbedWindowSafely(window, ordered: .above) } else { fallthrough } case "current": fallthrough default: - parent.addTabbedWindow(window, ordered: .above) + parent.addTabbedWindowSafely(window, ordered: .above) } } @@ -432,7 +441,8 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // Only cascade if we aren't fullscreen and are alone in the tab group. if !window.styleMask.contains(.fullScreen) && window.tabGroup?.windows.count ?? 1 == 1 { - Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint) + let hasFixedPos = controller.derivedConfig.windowPositionX != nil && controller.derivedConfig.windowPositionY != nil + Self.applyCascade(to: window, hasFixedPos: hasFixedPos) } controller.showWindow(self) @@ -483,8 +493,8 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr return controller } - - //MARK: - Methods + + // MARK: - Methods @objc private func ghosttyConfigDidChange(_ notification: Notification) { // Get our managed configuration object out @@ -493,7 +503,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr ] as? Ghostty.Config else { return } // If this is an app-level config update then we update some things. - if (notification.object == nil) { + if notification.object == nil { // Update our derived config self.derivedConfig = DerivedConfig(config) @@ -564,7 +574,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr tabWindowsHash = v self.relabelTabs() } - + override func syncAppearance() { // When our focus changes, we update our window appearance based on the // currently focused surface. @@ -588,6 +598,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // Call this last in case it uses any of the properties above. window.syncAppearance(surfaceConfig) + terminalViewContainer?.ghosttyConfigDidChange(ghostty.config, preferredBackgroundColor: window.preferredBackgroundColor) } /// Adjusts the given frame for the configured window position. @@ -866,7 +877,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr controller.showWindow(nil) if let firstWindow = firstController.window, let newWindow = controller.window { - firstWindow.addTabbedWindow(newWindow, ordered: .above) + firstWindow.addTabbedWindowSafely(newWindow, ordered: .above) } } @@ -909,7 +920,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr alert.addButton(withTitle: "Cancel") alert.alertStyle = .warning alert.beginSheetModal(for: confirmWindow, completionHandler: { response in - if (response == .alertFirstButtonReturn) { + if response == .alertFirstButtonReturn { // This is important so that we avoid losing focus when Stage // Manager is used (#8336) alert.window.orderOut(nil) @@ -938,9 +949,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr let tabColor: TerminalTabColor } - convenience init(_ ghostty: Ghostty.App, - with undoState: UndoState - ) { + convenience init(_ ghostty: Ghostty.App, with undoState: UndoState) { self.init(ghostty, withSurfaceTree: undoState.surfaceTree) // Show the window and restore its frame @@ -957,15 +966,15 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr if tabIndex < tabGroup.windows.count { // Find the window that is currently at that index let currentWindow = tabGroup.windows[tabIndex] - currentWindow.addTabbedWindow(window, ordered: .below) + currentWindow.addTabbedWindowSafely(window, ordered: .below) } else { - tabGroup.windows.last?.addTabbedWindow(window, ordered: .above) + tabGroup.windows.last?.addTabbedWindowSafely(window, ordered: .above) } // Make it the key window window.makeKeyAndOrderFront(nil) } - + // Restore focus to the previously focused surface if let focusedUUID = undoState.focusedSurface, let focusTarget = surfaceTree.first(where: { $0.id == focusedUUID }) { @@ -996,7 +1005,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr tabColor: (window as? TerminalWindow)?.tabColor ?? .none) } - //MARK: - NSWindowController + // MARK: - NSWindowController override func windowWillLoad() { // We do NOT want to cascade because we handle this manually from the manager. @@ -1015,7 +1024,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // Setting all three of these is required for restoration to work. window.isRestorable = restorable - if (restorable) { + if restorable { window.restorationClass = TerminalWindowRestoration.self window.identifier = .init(String(describing: TerminalWindowRestoration.self)) } @@ -1029,15 +1038,13 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr } // Initialize our content view to the SwiftUI root - window.contentView = TerminalViewContainer( - ghostty: self.ghostty, - viewModel: self, - delegate: self, - ) + window.contentView = TerminalViewContainer { + TerminalView(ghostty: ghostty, viewModel: self, delegate: self) + } // If we have a default size, we want to apply it. if let defaultSize { - switch (defaultSize) { + switch defaultSize { case .frame: // Frames can be applied immediately defaultSize.apply(to: window) @@ -1045,7 +1052,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr case .contentIntrinsicSize: // Content intrinsic size requires a short delay so that AppKit // can layout our SwiftUI views. - DispatchQueue.main.asyncAfter(deadline: .now() + .microseconds(10_000)) { [weak self, weak window] in + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(40)) { [weak self, weak window] in guard let self, let window else { return } defaultSize.apply(to: window) if let screen = window.screen ?? NSScreen.main { @@ -1073,7 +1080,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // We don't run this logic in fullscreen because in fullscreen this will end up // removing the window and putting it into its own dedicated fullscreen, which is not // the expected or desired behavior of anyone I've found. - if (!window.styleMask.contains(.fullScreen)) { + if !window.styleMask.contains(.fullScreen) { // If we have more than 1 window in our tab group we know we're a new window. // Since Ghostty manages tabbing manually this will never be more than one // at this point in the AppKit lifecycle (we add to the group after this). @@ -1103,7 +1110,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr override func windowShouldClose(_ sender: NSWindow) -> Bool { tabGroupCloseCoordinator.windowShouldClose(sender) { [weak self] scope in guard let self else { return } - switch (scope) { + switch scope { case .tab: closeTab(nil) case .window: guard self.window?.isFirstWindowInTabGroup ?? false else { return } @@ -1133,7 +1140,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // https://github.com/ghostty-org/ghostty/issues/2565 let oldFrame = focusedWindow.frame - Self.lastCascadePoint = focusedWindow.cascadeTopLeft(from: NSZeroPoint) + Self.lastCascadePoint = focusedWindow.cascadeTopLeft(from: .zero) if focusedWindow.frame != oldFrame { focusedWindow.setFrame(oldFrame, display: true) @@ -1153,6 +1160,12 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr super.windowDidBecomeKey(notification) self.relabelTabs() self.fixTabBar() + terminalViewContainer?.updateGlassTintOverlay(isKeyWindow: true) + } + + override func windowDidResignKey(_ notification: Notification) { + super.windowDidResignKey(notification) + terminalViewContainer?.updateGlassTintOverlay(isKeyWindow: false) } override func windowDidMove(_ notification: Notification) { @@ -1165,6 +1178,15 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr } } + override func windowDidResize(_ notification: Notification) { + super.windowDidResize(notification) + + // Whenever we resize save our last position and size for the next start. + if let window { + LastWindowPosition.shared.save(window) + } + } + func windowDidBecomeMain(_ notification: Notification) { // Whenever we get focused, use that as our last window position for // restart. This differs from Terminal.app but matches iTerm2 behavior @@ -1317,7 +1339,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr ghostty.toggleTerminalInspector(surface: surface) } - //MARK: - TerminalViewDelegate + // MARK: - TerminalViewDelegate override func focusedSurfaceDidChange(to: Ghostty.SurfaceView?) { super.focusedSurfaceDidChange(to: to) @@ -1349,7 +1371,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr } } - //MARK: - Notifications + // MARK: - Notifications @objc private func onMoveTab(notification: SwiftUI.Notification) { guard let target = notification.object as? Ghostty.SurfaceView else { return } @@ -1391,7 +1413,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr if #available(macOS 26, *) { if window is TitlebarTabsTahoeTerminalWindow { tabGroup.removeWindow(selectedWindow) - targetWindow.addTabbedWindow(selectedWindow, ordered: action.amount < 0 ? .below : .above) + targetWindow.addTabbedWindowSafely(selectedWindow, ordered: action.amount < 0 ? .below : .above) DispatchQueue.main.async { selectedWindow.makeKey() } @@ -1406,7 +1428,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr // Remove and re-add the window in the correct position tabGroup.removeWindow(selectedWindow) - targetWindow.addTabbedWindow(selectedWindow, ordered: action.amount < 0 ? .below : .above) + targetWindow.addTabbedWindowSafely(selectedWindow, ordered: action.amount < 0 ? .below : .above) // Ensure our window remains selected selectedWindow.makeKey() @@ -1432,23 +1454,23 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr let finalIndex: Int // An index that is invalid is used to signal some special values. - if (tabIndex <= 0) { + if tabIndex <= 0 { guard let selectedWindow = tabGroup.selectedWindow else { return } guard let selectedIndex = tabbedWindows.firstIndex(where: { $0 == selectedWindow }) else { return } - if (tabIndex == GHOSTTY_GOTO_TAB_PREVIOUS.rawValue) { - if (selectedIndex == 0) { + if tabIndex == GHOSTTY_GOTO_TAB_PREVIOUS.rawValue { + if selectedIndex == 0 { finalIndex = tabbedWindows.count - 1 } else { finalIndex = selectedIndex - 1 } - } else if (tabIndex == GHOSTTY_GOTO_TAB_NEXT.rawValue) { - if (selectedIndex == tabbedWindows.count - 1) { + } else if tabIndex == GHOSTTY_GOTO_TAB_NEXT.rawValue { + if selectedIndex == tabbedWindows.count - 1 { finalIndex = 0 } else { finalIndex = selectedIndex + 1 } - } else if (tabIndex == GHOSTTY_GOTO_TAB_LAST.rawValue) { + } else if tabIndex == GHOSTTY_GOTO_TAB_LAST.rawValue { finalIndex = tabbedWindows.count - 1 } else { return @@ -1549,25 +1571,25 @@ extension TerminalController { case #selector(closeTabsOnTheRight): guard let window, let tabGroup = window.tabGroup else { return false } guard let currentIndex = tabGroup.windows.firstIndex(of: window) else { return false } - return tabGroup.windows.enumerated().contains { $0.offset > currentIndex } - + return tabGroup.windows.indices.contains { $0 > currentIndex } + case #selector(returnToDefaultSize): guard let window else { return false } - + // Native fullscreen windows can't revert to default size. if window.styleMask.contains(.fullScreen) { return false } - + // If we're fullscreen at all then we can't change size if fullscreenStyle?.isFullscreen ?? false { return false } - + // If our window is already the default size or we don't have a // default size, then disable. return defaultSize?.isChanged(for: window) ?? false - + default: return super.validateMenuItem(item) } diff --git a/macos/Sources/Features/Terminal/TerminalRestorable.swift b/macos/Sources/Features/Terminal/TerminalRestorable.swift index fd0f4eab58e..aab51f6bdb2 100644 --- a/macos/Sources/Features/Terminal/TerminalRestorable.swift +++ b/macos/Sources/Features/Terminal/TerminalRestorable.swift @@ -98,7 +98,7 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration { // no matter what. Note its safe to use "ghostty.config" directly here // because window restoration is only ever invoked on app start so we // don't have to deal with config reloads. - if (appDelegate.ghostty.config.windowSaveState == "never") { + if appDelegate.ghostty.config.windowSaveState == "never" { completionHandler(nil, nil) return } @@ -131,13 +131,11 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration { // Find the focused surface in surfaceTree if let focusedStr = state.focusedSurface { var foundView: Ghostty.SurfaceView? - for view in c.surfaceTree { - if view.id.uuidString == focusedStr { - foundView = view - break - } + for view in c.surfaceTree where view.id.uuidString == focusedStr { + foundView = view + break } - + if let view = foundView { c.focusedSurface = view restoreFocus(to: view, inWindow: window) @@ -161,9 +159,9 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration { // For the first attempt, we schedule it immediately. Subsequent events wait a bit // so we don't just spin the CPU at 100%. Give up after some period of time. let after: DispatchTime - if (attempts == 0) { + if attempts == 0 { after = .now() - } else if (attempts > 40) { + } else if attempts > 40 { // 2 seconds, give up return } else { @@ -185,11 +183,10 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration { // If the window is main, then we also make sure it comes forward. This // prevents a bug found in #1177 where sometimes on restore the windows // would be behind other applications. - if (viewWindow.isMainWindow) { + if viewWindow.isMainWindow { viewWindow.orderFront(nil) } } } } - diff --git a/macos/Sources/Features/Terminal/TerminalTabColor.swift b/macos/Sources/Features/Terminal/TerminalTabColor.swift index 08d89324c16..2879822b32f 100644 --- a/macos/Sources/Features/Terminal/TerminalTabColor.swift +++ b/macos/Sources/Features/Terminal/TerminalTabColor.swift @@ -122,7 +122,7 @@ struct TabColorMenuView: View { VStack(alignment: .leading, spacing: 3) { Text("Tab Color") .padding(.bottom, 2) - + ForEach(Self.paletteRows, id: \.self) { row in HStack(spacing: 2) { ForEach(row, id: \.self) { color in @@ -142,7 +142,7 @@ struct TabColorMenuView: View { .padding(.top, 4) .padding(.bottom, 4) } - + static let paletteRows: [[TerminalTabColor]] = [ [.none, .blue, .purple, .pink, .red], [.orange, .yellow, .green, .teal, .graphite], diff --git a/macos/Sources/Features/Terminal/TerminalView.swift b/macos/Sources/Features/Terminal/TerminalView.swift index e117e0647e8..6970095796d 100644 --- a/macos/Sources/Features/Terminal/TerminalView.swift +++ b/macos/Sources/Features/Terminal/TerminalView.swift @@ -17,7 +17,7 @@ protocol TerminalViewDelegate: AnyObject { /// Perform an action. At the time of writing this is only triggered by the command palette. func performAction(_ action: String, on: Ghostty.SurfaceView) - + /// A split tree operation func performSplitAction(_ action: TerminalSplitOperation) } @@ -32,7 +32,7 @@ protocol TerminalViewModel: ObservableObject { /// The command palette state. var commandPaletteIsShowing: Bool { get set } - + /// The update overlay should be visible. var updateOverlayIsVisible: Bool { get } } @@ -45,11 +45,10 @@ struct TerminalView: View { @ObservedObject var viewModel: ViewModel // An optional delegate to receive information about terminal changes. - weak var delegate: (any TerminalViewDelegate)? = nil - - // The most recently focused surface, equal to focusedSurface when - // it is non-nil. - @State private var lastFocusedSurface: Weak = .init() + weak var delegate: (any TerminalViewDelegate)? + + /// The most recently focused surface, equal to `focusedSurface` when it is non-nil. + @State private var lastFocusedSurface: Weak? // This seems like a crutch after switching from SwiftUI to AppKit lifecycle. @FocusState private var focused: Bool @@ -76,7 +75,7 @@ struct TerminalView: View { VStack(spacing: 0) { // If we're running in debug mode we show a warning so that users // know that performance will be degraded. - if (Ghostty.info.mode == GHOSTTY_BUILD_MODE_DEBUG || Ghostty.info.mode == GHOSTTY_BUILD_MODE_RELEASE_SAFE) { + if Ghostty.info.mode == GHOSTTY_BUILD_MODE_DEBUG || Ghostty.info.mode == GHOSTTY_BUILD_MODE_RELEASE_SAFE { DebugBuildWarningView() } @@ -84,6 +83,7 @@ struct TerminalView: View { tree: viewModel.surfaceTree, action: { delegate?.performSplitAction($0) }) .environmentObject(ghostty) + .ghosttyLastFocusedSurface(lastFocusedSurface) .focused($focused) .onAppear { self.focused = true } .onChange(of: focusedSurface) { newValue in @@ -101,13 +101,13 @@ struct TerminalView: View { guard let size = newValue else { return } self.delegate?.cellSizeDidChange(to: size) } - .frame(idealWidth: lastFocusedSurface.value?.initialSize?.width, - idealHeight: lastFocusedSurface.value?.initialSize?.height) + .frame(idealWidth: lastFocusedSurface?.value?.initialSize?.width, + idealHeight: lastFocusedSurface?.value?.initialSize?.height) } // Ignore safe area to extend up in to the titlebar region if we have the "hidden" titlebar style .ignoresSafeArea(.container, edges: ghostty.config.macosTitlebarStyle == "hidden" ? .top : []) - if let surfaceView = lastFocusedSurface.value { + if let surfaceView = lastFocusedSurface?.value { TerminalCommandPaletteView( surfaceView: surfaceView, isPresented: $viewModel.commandPaletteIsShowing, @@ -116,7 +116,7 @@ struct TerminalView: View { self.delegate?.performAction(action, on: surfaceView) } } - + // Show update information above all else. if viewModel.updateOverlayIsVisible { UpdateOverlay() @@ -127,12 +127,12 @@ struct TerminalView: View { } } -fileprivate struct UpdateOverlay: View { +private struct UpdateOverlay: View { var body: some View { if let appDelegate = NSApp.delegate as? AppDelegate { VStack { Spacer() - + HStack { Spacer() UpdatePill(model: appDelegate.updateViewModel) diff --git a/macos/Sources/Features/Terminal/TerminalViewContainer.swift b/macos/Sources/Features/Terminal/TerminalViewContainer.swift index c65dca1d225..bd696a2bf6e 100644 --- a/macos/Sources/Features/Terminal/TerminalViewContainer.swift +++ b/macos/Sources/Features/Terminal/TerminalViewContainer.swift @@ -3,21 +3,27 @@ import SwiftUI /// Use this container to achieve a glass effect at the window level. /// Modifying `NSThemeFrame` can sometimes be unpredictable. -class TerminalViewContainer: NSView { +class TerminalViewContainer: NSView { private let terminalView: NSView - /// Glass effect view for liquid glass background when transparency is enabled - private var glassEffectView: NSView? - private var glassTopConstraint: NSLayoutConstraint? - private var derivedConfig: DerivedConfig - - init(ghostty: Ghostty.App, viewModel: ViewModel, delegate: (any TerminalViewDelegate)? = nil) { - self.derivedConfig = DerivedConfig(config: ghostty.config) - self.terminalView = NSHostingView(rootView: TerminalView( - ghostty: ghostty, - viewModel: viewModel, - delegate: delegate - )) + /// Combined glass effect and inactive tint overlay view + private(set) var glassEffectView: NSView? + private var derivedConfig: DerivedConfig? + + var windowThemeFrameView: NSView? { + window?.contentView?.superview + } + + var windowCornerRadius: CGFloat? { + guard let window, window.responds(to: Selector(("_cornerRadius"))) else { + return nil + } + + return window.value(forKey: "_cornerRadius") as? CGFloat + } + + init(@ViewBuilder rootView: () -> Root) { + self.terminalView = NSHostingView(rootView: rootView()) super.init(frame: .zero) setup() } @@ -43,13 +49,6 @@ class TerminalViewContainer: NSView { terminalView.bottomAnchor.constraint(equalTo: bottomAnchor), terminalView.trailingAnchor.constraint(equalTo: trailingAnchor), ]) - - NotificationCenter.default.addObserver( - self, - selector: #selector(ghosttyConfigDidChange(_:)), - name: .ghosttyConfigDidChange, - object: nil - ) } override func viewDidMoveToWindow() { @@ -63,98 +62,200 @@ class TerminalViewContainer: NSView { updateGlassEffectTopInsetIfNeeded() } - @objc private func ghosttyConfigDidChange(_ notification: Notification) { - guard let config = notification.userInfo?[ - Notification.Name.GhosttyConfigChangeKey - ] as? Ghostty.Config else { return } - let newValue = DerivedConfig(config: config) + func ghosttyConfigDidChange(_ config: Ghostty.Config, preferredBackgroundColor: NSColor?) { + let newValue = DerivedConfig(config: config, preferredBackgroundColor: preferredBackgroundColor, cornerRadius: windowCornerRadius) guard newValue != derivedConfig else { return } derivedConfig = newValue DispatchQueue.main.async(execute: updateGlassEffectIfNeeded) } } +// MARK: - BaseTerminalController + terminalViewContainer + +extension BaseTerminalController { + var terminalViewContainer: TerminalViewContainer? { + window?.contentView as? TerminalViewContainer + } +} + // MARK: Glass -private extension TerminalViewContainer { +/// An `NSView` that contains a liquid glass background effect and +/// an inactive-window tint overlay. +#if compiler(>=6.2) +@available(macOS 26.0, *) +private class TerminalGlassView: NSView { + private let glassEffectView: NSGlassEffectView + private var topConstraint: NSLayoutConstraint! + private let tintOverlay: NSView + + init(topOffset: CGFloat) { + self.glassEffectView = NSGlassEffectView() + self.tintOverlay = NSView() + super.init(frame: .zero) + + translatesAutoresizingMaskIntoConstraints = false + + // Glass effect view fills this view. + glassEffectView.translatesAutoresizingMaskIntoConstraints = false + addSubview(glassEffectView) + topConstraint = glassEffectView.topAnchor.constraint( + equalTo: topAnchor, + constant: topOffset + ) + NSLayoutConstraint.activate([ + topConstraint, + glassEffectView.leadingAnchor.constraint(equalTo: leadingAnchor), + glassEffectView.bottomAnchor.constraint(equalTo: bottomAnchor), + glassEffectView.trailingAnchor.constraint(equalTo: trailingAnchor), + ]) + + // Tint overlay sits above the glass effect. + tintOverlay.translatesAutoresizingMaskIntoConstraints = false + tintOverlay.wantsLayer = true + tintOverlay.alphaValue = 0 + addSubview(tintOverlay, positioned: .above, relativeTo: glassEffectView) + + NSLayoutConstraint.activate([ + tintOverlay.topAnchor.constraint(equalTo: glassEffectView.topAnchor), + tintOverlay.leadingAnchor.constraint(equalTo: glassEffectView.leadingAnchor), + tintOverlay.bottomAnchor.constraint(equalTo: glassEffectView.bottomAnchor), + tintOverlay.trailingAnchor.constraint(equalTo: glassEffectView.trailingAnchor), + ]) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + /// Configures the glass effect style, tint color, corner radius, and + /// updates the inactive tint overlay based on window key status. + func configure( + style: NSGlassEffectView.Style, + backgroundColor: NSColor, + backgroundOpacity: Double, + cornerRadius: CGFloat?, + isKeyWindow: Bool + ) { + glassEffectView.style = style + glassEffectView.tintColor = backgroundColor.withAlphaComponent(backgroundOpacity) + glassEffectView.cornerRadius = cornerRadius ?? 0 + updateKeyStatus(isKeyWindow, backgroundColor: backgroundColor) + } + + /// Updates the top inset offset for both the glass effect and tint overlay. + /// Call this when the safe area insets change (e.g., during layout). + func updateTopInset(_ offset: CGFloat) { + topConstraint.constant = offset + } + + /// Updates the tint overlay visibility based on window key status. + func updateKeyStatus(_ isKeyWindow: Bool, backgroundColor: NSColor) { + let tint = tintProperties(for: backgroundColor) + tintOverlay.layer?.backgroundColor = tint.color.cgColor + tintOverlay.alphaValue = isKeyWindow ? 0 : tint.opacity + } + + /// Computes a saturation-boosted tint color and opacity for the inactive overlay. + private func tintProperties(for color: NSColor) -> (color: NSColor, opacity: CGFloat) { + let isLight = color.isLightColor + let vibrant = color.adjustingSaturation(by: 1.2) + let overlayOpacity: CGFloat = isLight ? 0.35 : 0.85 + return (vibrant, overlayOpacity) + } +} +#endif // compiler(>=6.2) + +extension TerminalViewContainer { #if compiler(>=6.2) @available(macOS 26.0, *) - func addGlassEffectViewIfNeeded() -> NSGlassEffectView? { - if let existed = glassEffectView as? NSGlassEffectView { + private func addGlassEffectViewIfNeeded() -> TerminalGlassView? { + if let existed = glassEffectView as? TerminalGlassView { updateGlassEffectTopInsetIfNeeded() return existed } - guard let themeFrameView = window?.contentView?.superview else { + guard let themeFrameView = windowThemeFrameView else { return nil } - let effectView = NSGlassEffectView() + let effectView = TerminalGlassView(topOffset: -themeFrameView.safeAreaInsets.top) addSubview(effectView, positioned: .below, relativeTo: terminalView) - effectView.translatesAutoresizingMaskIntoConstraints = false - glassTopConstraint = effectView.topAnchor.constraint( - equalTo: topAnchor, - constant: -themeFrameView.safeAreaInsets.top - ) - if let glassTopConstraint { - NSLayoutConstraint.activate([ - glassTopConstraint, - effectView.leadingAnchor.constraint(equalTo: leadingAnchor), - effectView.bottomAnchor.constraint(equalTo: bottomAnchor), - effectView.trailingAnchor.constraint(equalTo: trailingAnchor), - ]) - } + NSLayoutConstraint.activate([ + effectView.topAnchor.constraint(equalTo: topAnchor), + effectView.leadingAnchor.constraint(equalTo: leadingAnchor), + effectView.bottomAnchor.constraint(equalTo: bottomAnchor), + effectView.trailingAnchor.constraint(equalTo: trailingAnchor), + ]) glassEffectView = effectView return effectView } #endif // compiler(>=6.2) - func updateGlassEffectIfNeeded() { + private func updateGlassEffectIfNeeded() { #if compiler(>=6.2) - guard #available(macOS 26.0, *), derivedConfig.backgroundBlur.isGlassStyle else { + guard #available(macOS 26.0, *), let derivedConfig else { glassEffectView?.removeFromSuperview() glassEffectView = nil - glassTopConstraint = nil return } guard let effectView = addGlassEffectViewIfNeeded() else { return } - switch derivedConfig.backgroundBlur { - case .macosGlassRegular: - effectView.style = NSGlassEffectView.Style.regular - case .macosGlassClear: - effectView.style = NSGlassEffectView.Style.clear - default: - break - } - let backgroundColor = (window as? TerminalWindow)?.preferredBackgroundColor ?? NSColor(derivedConfig.backgroundColor) - effectView.tintColor = backgroundColor - .withAlphaComponent(derivedConfig.backgroundOpacity) - if let window, window.responds(to: Selector(("_cornerRadius"))), let cornerRadius = window.value(forKey: "_cornerRadius") as? CGFloat { - effectView.cornerRadius = cornerRadius + + effectView.configure( + style: derivedConfig.style.official, + backgroundColor: derivedConfig.backgroundColor, + backgroundOpacity: derivedConfig.backgroundOpacity, + cornerRadius: derivedConfig.cornerRadius, + isKeyWindow: window?.isKeyWindow ?? true + ) +#endif // compiler(>=6.2) + } + + private func updateGlassEffectTopInsetIfNeeded() { +#if compiler(>=6.2) + guard + #available(macOS 26.0, *), + let effectView = glassEffectView as? TerminalGlassView, + let themeFrameView = windowThemeFrameView + else { + return } + effectView.updateTopInset(-themeFrameView.safeAreaInsets.top) #endif // compiler(>=6.2) } - func updateGlassEffectTopInsetIfNeeded() { + func updateGlassTintOverlay(isKeyWindow: Bool) { #if compiler(>=6.2) - guard #available(macOS 26.0, *), derivedConfig.backgroundBlur.isGlassStyle else { + guard + #available(macOS 26.0, *), + let effectView = glassEffectView as? TerminalGlassView, + let derivedConfig + else { return } - guard glassEffectView != nil else { return } - guard let themeFrameView = window?.contentView?.superview else { return } - glassTopConstraint?.constant = -themeFrameView.safeAreaInsets.top + effectView.updateKeyStatus(isKeyWindow, backgroundColor: derivedConfig.backgroundColor) #endif // compiler(>=6.2) } struct DerivedConfig: Equatable { - var backgroundOpacity: Double = 0 - var backgroundBlur: Ghostty.Config.BackgroundBlur - var backgroundColor: Color = .clear + let style: BackportNSGlassStyle + let backgroundColor: NSColor + let backgroundOpacity: Double + let cornerRadius: CGFloat? - init(config: Ghostty.Config) { - self.backgroundBlur = config.backgroundBlur + init?(config: Ghostty.Config, preferredBackgroundColor: NSColor?, cornerRadius: CGFloat?) { + switch config.backgroundBlur { + case .macosGlassRegular: + style = .regular + case .macosGlassClear: + style = .clear + default: + return nil + } + self.backgroundColor = preferredBackgroundColor ?? NSColor(config.backgroundColor) self.backgroundOpacity = config.backgroundOpacity - self.backgroundColor = config.backgroundColor + self.cornerRadius = cornerRadius } } } diff --git a/macos/Sources/Features/Terminal/Window Styles/HiddenTitlebarTerminalWindow.swift b/macos/Sources/Features/Terminal/Window Styles/HiddenTitlebarTerminalWindow.swift index dd8b258f3e6..766ec5857ae 100644 --- a/macos/Sources/Features/Terminal/Window Styles/HiddenTitlebarTerminalWindow.swift +++ b/macos/Sources/Features/Terminal/Window Styles/HiddenTitlebarTerminalWindow.swift @@ -3,7 +3,7 @@ import AppKit class HiddenTitlebarTerminalWindow: TerminalWindow { // No titlebar, we don't support accessories. override var supportsUpdateAccessory: Bool { false } - + override func awakeFromNib() { super.awakeFromNib() @@ -34,7 +34,7 @@ class HiddenTitlebarTerminalWindow: TerminalWindow { .closable, .miniaturizable, ] - + /// Apply the hidden titlebar style. private func reapplyHiddenStyle() { // If our window is fullscreen then we don't reapply the hidden style because @@ -43,7 +43,7 @@ class HiddenTitlebarTerminalWindow: TerminalWindow { if terminalController?.fullscreenStyle?.isFullscreen ?? false { return } - + // Apply our style mask while preserving the .fullScreen option if styleMask.contains(.fullScreen) { styleMask = Self.hiddenStyleMask.union([.fullScreen]) diff --git a/macos/Sources/Features/Terminal/Window Styles/TerminalWindow.swift b/macos/Sources/Features/Terminal/Window Styles/TerminalWindow.swift index 501ac0e67a5..dc744180db4 100644 --- a/macos/Sources/Features/Terminal/Window Styles/TerminalWindow.swift +++ b/macos/Sources/Features/Terminal/Window Styles/TerminalWindow.swift @@ -33,9 +33,15 @@ class TerminalWindow: NSWindow { /// The configuration derived from the Ghostty config so we don't need to rely on references. private(set) var derivedConfig: DerivedConfig = .init() - + /// Sets up our tab context menu - private var tabMenuObserver: NSObjectProtocol? = nil + private var tabMenuObserver: NSObjectProtocol? + + /// Handles inline tab title editing for this host window. + private(set) lazy var tabTitleEditor = TabTitleEditor( + hostWindow: self, + delegate: self + ) /// Whether this window supports the update accessory. If this is false, then views within this /// window should determine how to show update notifications. @@ -112,7 +118,7 @@ class TerminalWindow: NSWindow { } // If window decorations are disabled, remove our title - if (!config.windowDecorations) { styleMask.remove(.titled) } + if !config.windowDecorations { styleMask.remove(.titled) } // Set our window positioning to coordinates if config value exists, otherwise // fallback to original centering behavior @@ -174,7 +180,16 @@ class TerminalWindow: NSWindow { override var canBecomeKey: Bool { return true } override var canBecomeMain: Bool { return true } + override func sendEvent(_ event: NSEvent) { + if tabTitleEditor.handleMouseDown(event) { + return + } + + super.sendEvent(event) + } + override func close() { + tabTitleEditor.finishEditing(commit: true) NotificationCenter.default.post(name: Self.terminalWillCloseNotification, object: self) super.close() } @@ -187,6 +202,7 @@ class TerminalWindow: NSWindow { override func resignKey() { super.resignKey() resetZoomTabButton.contentTintColor = .secondaryLabelColor + tabTitleEditor.finishEditing(commit: true) } override func becomeMain() { @@ -207,6 +223,21 @@ class TerminalWindow: NSWindow { viewModel.isMainWindow = false } + @discardableResult + func beginInlineTabTitleEdit(for targetWindow: NSWindow) -> Bool { + tabTitleEditor.beginEditing(for: targetWindow) + } + + @objc private func renameTabFromContextMenu(_ sender: NSMenuItem) { + let targetWindow = sender.representedObject as? NSWindow ?? self + if beginInlineTabTitleEdit(for: targetWindow) { + return + } + + guard let targetController = targetWindow.windowController as? BaseTerminalController else { return } + targetController.promptTabTitle() + } + override func mergeAllWindows(_ sender: Any?) { super.mergeAllWindows(sender) @@ -295,7 +326,7 @@ class TerminalWindow: NSWindow { // MARK: Tab Key Equivalents - var keyEquivalent: String? = nil { + var keyEquivalent: String? { didSet { // When our key equivalent is set, we must update the tab label. guard let keyEquivalent else { @@ -347,7 +378,7 @@ class TerminalWindow: NSWindow { button.toolTip = "Reset Zoom" button.contentTintColor = isMainWindow ? .controlAccentColor : .secondaryLabelColor button.state = .on - button.image = NSImage(named:"ResetZoom") + button.image = NSImage(named: "ResetZoom") button.frame = NSRect(x: 0, y: 0, width: 20, height: 20) button.translatesAutoresizingMaskIntoConstraints = false button.widthAnchor.constraint(equalToConstant: 20).isActive = true @@ -449,8 +480,7 @@ class TerminalWindow: NSWindow { let forceOpaque = terminalController?.isBackgroundOpaque ?? false if !styleMask.contains(.fullScreen) && !forceOpaque && - (surfaceConfig.backgroundOpacity < 1 || surfaceConfig.backgroundBlur.isGlassStyle) - { + (surfaceConfig.backgroundOpacity < 1 || surfaceConfig.backgroundBlur.isGlassStyle) { isOpaque = false // This is weird, but we don't use ".clear" because this creates a look that @@ -459,7 +489,7 @@ class TerminalWindow: NSWindow { backgroundColor = .white.withAlphaComponent(0.001) // We don't need to set blur when using glass - if !surfaceConfig.backgroundBlur.isGlassStyle, let appDelegate = NSApp.delegate as? AppDelegate { + if !surfaceConfig.backgroundBlur.isGlassStyle, let appDelegate = NSApp.delegate as? AppDelegate { ghostty_set_window_background_blur( appDelegate.ghostty.app, Unmanaged.passUnretained(self).toOpaque()) @@ -509,8 +539,8 @@ class TerminalWindow: NSWindow { private func setInitialWindowPosition(x: Int16?, y: Int16?) { // If we don't have an X/Y then we try to use the previously saved window pos. - guard x != nil, y != nil else { - if (!LastWindowPosition.shared.restore(self)) { + guard let x = x, let y = y else { + if !LastWindowPosition.shared.restore(self) { center() } @@ -523,14 +553,19 @@ class TerminalWindow: NSWindow { return } - // We have an X/Y, use our controller function to set it up. - guard let terminalController else { - center() - return - } + // Convert top-left coordinates to bottom-left origin using our utility extension + let origin = screen.origin( + fromTopLeftOffsetX: CGFloat(x), + offsetY: CGFloat(y), + windowSize: frame.size) + + // Clamp the origin to ensure the window stays fully visible on screen + var safeOrigin = origin + let vf = screen.visibleFrame + safeOrigin.x = min(max(safeOrigin.x, vf.minX), vf.maxX - frame.width) + safeOrigin.y = min(max(safeOrigin.y, vf.minY), vf.maxY - frame.height) - let frame = terminalController.adjustForWindowPosition(frame: frame, on: screen) - setFrameOrigin(frame.origin) + setFrameOrigin(safeOrigin) } private func hideWindowButtons() { @@ -544,7 +579,7 @@ class TerminalWindow: NSWindow { NotificationCenter.default.removeObserver(observer) } } - + // MARK: Config struct DerivedConfig { @@ -732,10 +767,11 @@ extension TerminalWindow { separator.identifier = Self.tabColorSeparatorIdentifier menu.addItem(separator) - // Change Title... - let changeTitleItem = NSMenuItem(title: "Change Title...", action: #selector(BaseTerminalController.changeTabTitle(_:)), keyEquivalent: "") + // Rename Tab... + let changeTitleItem = NSMenuItem(title: "Rename Tab...", action: #selector(TerminalWindow.renameTabFromContextMenu(_:)), keyEquivalent: "") changeTitleItem.identifier = Self.changeTitleMenuItemIdentifier - changeTitleItem.target = target + changeTitleItem.target = self + changeTitleItem.representedObject = target?.window changeTitleItem.setImageIfDesired(systemSymbolName: "pencil.line") menu.addItem(changeTitleItem) @@ -761,3 +797,42 @@ private func makeTabColorPaletteView( hostingView.frame.size = hostingView.intrinsicContentSize return hostingView } + +// MARK: - Inline Tab Title Editing + +extension TerminalWindow: TabTitleEditorDelegate { + func tabTitleEditor( + _ editor: TabTitleEditor, + canRenameTabFor targetWindow: NSWindow + ) -> Bool { + targetWindow.windowController is BaseTerminalController + } + + func tabTitleEditor( + _ editor: TabTitleEditor, + titleFor targetWindow: NSWindow + ) -> String { + guard let targetController = targetWindow.windowController as? BaseTerminalController else { + return targetWindow.title + } + + return targetController.titleOverride ?? targetWindow.title + } + + func tabTitleEditor( + _ editor: TabTitleEditor, + didCommitTitle editedTitle: String, + for targetWindow: NSWindow + ) { + guard let targetController = targetWindow.windowController as? BaseTerminalController else { return } + targetController.titleOverride = editedTitle.isEmpty ? nil : editedTitle + } + + func tabTitleEditor( + _ editor: TabTitleEditor, + performFallbackRenameFor targetWindow: NSWindow + ) { + guard let targetController = targetWindow.windowController as? BaseTerminalController else { return } + targetController.promptTabTitle() + } +} diff --git a/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsTahoeTerminalWindow.swift b/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsTahoeTerminalWindow.swift index 91819152240..6df1b14bce6 100644 --- a/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsTahoeTerminalWindow.swift +++ b/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsTahoeTerminalWindow.swift @@ -8,7 +8,7 @@ import SwiftUI class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSToolbarDelegate { /// The view model for SwiftUI views private var viewModel = ViewModel() - + /// Titlebar tabs can't support the update accessory because of the way we layout /// the native tabs back into the menu bar. override var supportsUpdateAccessory: Bool { false } @@ -58,13 +58,13 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool // Check if we have a tab bar and set it up if we have to. See the comment // on this function to learn why we need to check this here. setupTabBar() - + viewModel.isMainWindow = true } override func resignMain() { super.resignMain() - + viewModel.isMainWindow = false } @@ -84,18 +84,22 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool super.sendEvent(event) return } - + guard let tabBarView else { super.sendEvent(event) return } - + + guard !tabTitleEditor.handleRightMouseDown(event) else { + return + } + let locationInTabBar = tabBarView.convert(event.locationInWindow, from: nil) guard tabBarView.bounds.contains(locationInTabBar) else { super.sendEvent(event) return } - + tabBarView.rightMouseDown(with: event) } @@ -107,7 +111,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool // After dragging a tab into a new window, `hasTabBar` needs to be // updated to properly review window title viewModel.hasTabBar = false - + super.addTitlebarAccessoryViewController(childViewController) return } @@ -116,7 +120,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool // system will also try to add tab bar to this window, so we want to reset observer, // to put tab bar where we want again tabBarObserver = nil - + // Some setup needs to happen BEFORE it is added, such as layout. If // we don't do this before the call below, we'll trigger an AppKit // assertion. @@ -189,7 +193,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool guard let clipView = tabBarView.firstSuperview(withClassName: "NSTitlebarAccessoryClipView") else { return } guard let accessoryView = clipView.subviews[safe: 0] else { return } guard let toolbarView = titlebarView.firstDescendant(withClassName: "NSToolbarView") else { return } - + // Make sure tabBar's height won't be stretched guard let newTabButton = titlebarView.firstDescendant(withClassName: "NSTabBarNewTabButton") else { return } tabBarView.frame.size.height = newTabButton.frame.width @@ -199,7 +203,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool // The padding for the tab bar. If we're showing window buttons then // we need to offset the window buttons. - let leftPadding: CGFloat = switch(self.derivedConfig.macosWindowButtons) { + let leftPadding: CGFloat = switch self.derivedConfig.macosWindowButtons { case .hidden: 0 case .visible: 70 } @@ -282,7 +286,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool // This is the documented way to avoid the glass view on an item. // We don't want glass on our title. item.isBordered = false - + return item default: return NSToolbarItem(itemIdentifier: itemIdentifier) @@ -327,7 +331,7 @@ extension TitlebarTabsTahoeTerminalWindow { Color.clear.frame(width: 1, height: 1) } } - + @ViewBuilder var titleText: some View { Text(title) diff --git a/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsVenturaTerminalWindow.swift b/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsVenturaTerminalWindow.swift index 39db13c6dca..fe83fc5fdb7 100644 --- a/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsVenturaTerminalWindow.swift +++ b/macos/Sources/Features/Terminal/Window Styles/TitlebarTabsVenturaTerminalWindow.swift @@ -20,13 +20,11 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { // false if all three traffic lights are missing/hidden, otherwise true private var hasWindowButtons: Bool { - get { - // if standardWindowButton(.theButton) == nil, the button isn't there, so coalesce to true - let closeIsHidden = standardWindowButton(.closeButton)?.isHiddenOrHasHiddenAncestor ?? true - let miniaturizeIsHidden = standardWindowButton(.miniaturizeButton)?.isHiddenOrHasHiddenAncestor ?? true - let zoomIsHidden = standardWindowButton(.zoomButton)?.isHiddenOrHasHiddenAncestor ?? true - return !(closeIsHidden && miniaturizeIsHidden && zoomIsHidden) - } + // if standardWindowButton(.theButton) == nil, the button isn't there, so coalesce to true + let closeIsHidden = standardWindowButton(.closeButton)?.isHiddenOrHasHiddenAncestor ?? true + let miniaturizeIsHidden = standardWindowButton(.miniaturizeButton)?.isHiddenOrHasHiddenAncestor ?? true + let zoomIsHidden = standardWindowButton(.zoomButton)?.isHiddenOrHasHiddenAncestor ?? true + return !(closeIsHidden && miniaturizeIsHidden && zoomIsHidden) } // MARK: NSWindow @@ -159,7 +157,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { titlebarColor = derivedConfig.backgroundColor.withAlphaComponent(derivedConfig.backgroundOpacity) } - if (isOpaque || themeChanged) { + if isOpaque || themeChanged { // If there is transparency, calling this will make the titlebar opaque // so we only call this if we are opaque. updateTabBar() @@ -172,7 +170,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { backgroundColor.luminance < 0.05 } - private var newTabButtonImageLayer: VibrantLayer? = nil + private var newTabButtonImageLayer: VibrantLayer? func updateTabBar() { newTabButtonImageLayer = nil @@ -251,7 +249,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { button.toolTip = "Reset Zoom" button.contentTintColor = .controlAccentColor button.state = .on - button.image = NSImage(named:"ResetZoom") + button.image = NSImage(named: "ResetZoom") button.frame = NSRect(x: 0, y: 0, width: 20, height: 20) button.translatesAutoresizingMaskIntoConstraints = false button.widthAnchor.constraint(equalToConstant: 20).isActive = true @@ -286,9 +284,9 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { // MARK: - Titlebar Tabs - private var windowButtonsBackdrop: WindowButtonsBackdropView? = nil + private var windowButtonsBackdrop: WindowButtonsBackdropView? - private var windowDragHandle: WindowDragView? = nil + private var windowDragHandle: WindowDragView? // Used by the window controller to enable/disable titlebar tabs. var titlebarTabs = false { @@ -340,7 +338,6 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { } } - // HACK: hide the "collapsed items" marker from the toolbar if it's present. // idk why it appears in macOS 15.0+ but it does... so... make it go away. (sigh) private func hideToolbarOverflowButton() { @@ -359,7 +356,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { override func addTitlebarAccessoryViewController(_ childViewController: NSTitlebarAccessoryViewController) { let isTabBar = self.titlebarTabs && isTabBar(childViewController) - if (isTabBar) { + if isTabBar { // Ensure it has the right layoutAttribute to force it next to our titlebar childViewController.layoutAttribute = .right @@ -374,7 +371,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { super.addTitlebarAccessoryViewController(childViewController) - if (isTabBar) { + if isTabBar { pushTabsToTitlebar(childViewController) } } @@ -382,7 +379,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { override func removeTitlebarAccessoryViewController(at index: Int) { let isTabBar = titlebarAccessoryViewControllers[index].identifier == Self.tabBarIdentifier super.removeTitlebarAccessoryViewController(at: index) - if (isTabBar) { + if isTabBar { resetCustomTabBarViews() } } @@ -403,7 +400,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { private func pushTabsToTitlebar(_ tabBarController: NSTitlebarAccessoryViewController) { // We need a toolbar as a target for our titlebar tabs. - if (toolbar == nil) { + if toolbar == nil { generateToolbar() } @@ -506,10 +503,10 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow { } // Passes mouseDown events from this view to window.performDrag so that you can drag the window by it. -fileprivate class WindowDragView: NSView { +private class WindowDragView: NSView { override public func mouseDown(with event: NSEvent) { // Drag the window for single left clicks, double clicks should bypass the drag handle. - if (event.type == .leftMouseDown && event.clickCount == 1) { + if event.type == .leftMouseDown && event.clickCount == 1 { window?.performDrag(with: event) NSCursor.closedHand.set() } else { @@ -535,7 +532,7 @@ fileprivate class WindowDragView: NSView { } // A view that matches the color of selected and unselected tabs in the adjacent tab bar. -fileprivate class WindowButtonsBackdropView: NSView { +private class WindowButtonsBackdropView: NSView { // This must be weak because the window has this view. Otherwise // a retain cycle occurs. private weak var terminalWindow: TitlebarTabsVenturaTerminalWindow? @@ -588,7 +585,7 @@ fileprivate class WindowButtonsBackdropView: NSView { // Custom NSToolbar subclass that displays a centered window title, // in order to accommodate the titlebar tabs feature. -fileprivate class TerminalToolbar: NSToolbar, NSToolbarDelegate { +private class TerminalToolbar: NSToolbar, NSToolbarDelegate { private let titleTextField = CenteredDynamicLabel(labelWithString: "👻 Ghostty") var titleText: String { @@ -674,7 +671,7 @@ fileprivate class TerminalToolbar: NSToolbar, NSToolbarDelegate { } /// A label that expands to fit whatever text you put in it and horizontally centers itself in the current window. -fileprivate class CenteredDynamicLabel: NSTextField { +private class CenteredDynamicLabel: NSTextField { override func viewDidMoveToSuperview() { // Configure the text field isEditable = false diff --git a/macos/Sources/Features/Terminal/Window Styles/TransparentTitlebarTerminalWindow.swift b/macos/Sources/Features/Terminal/Window Styles/TransparentTitlebarTerminalWindow.swift index a72436d7fda..a547d528675 100644 --- a/macos/Sources/Features/Terminal/Window Styles/TransparentTitlebarTerminalWindow.swift +++ b/macos/Sources/Features/Terminal/Window Styles/TransparentTitlebarTerminalWindow.swift @@ -151,7 +151,7 @@ class TransparentTitlebarTerminalWindow: TerminalWindow { tabGroupWindowsObservation = tabGroup.observe( \.windows, options: [.new] - ) { [weak self] _, change in + ) { [weak self] _, _ in // NOTE: At one point, I guarded this on only if we went from 0 to N // or N to 0 under the assumption that the tab bar would only get // replaced on those cases. This turned out to be false (Tahoe). @@ -175,7 +175,7 @@ class TransparentTitlebarTerminalWindow: TerminalWindow { tabBarVisibleObservation = tabGroup?.observe( \.isTabBarVisible, options: [.new] - ) { [weak self] _, change in + ) { [weak self] _, _ in guard let self else { return } guard let lastSurfaceConfig else { return } self.syncAppearance(lastSurfaceConfig) diff --git a/macos/Sources/Features/Update/UpdateBadge.swift b/macos/Sources/Features/Update/UpdateBadge.swift index 054fdf97165..ce98bd277c6 100644 --- a/macos/Sources/Features/Update/UpdateBadge.swift +++ b/macos/Sources/Features/Update/UpdateBadge.swift @@ -9,15 +9,15 @@ import SwiftUI struct UpdateBadge: View { /// The update view model that provides the current state and progress @ObservedObject var model: UpdateViewModel - + /// Current rotation angle for animated icon states @State private var rotationAngle: Double = 0 - + var body: some View { badgeContent .accessibilityLabel(model.text) } - + @ViewBuilder private var badgeContent: some View { switch model.state { @@ -28,10 +28,10 @@ struct UpdateBadge: View { } else { Image(systemName: "arrow.down.circle") } - + case .extracting(let extracting): ProgressRingView(progress: min(1, max(0, extracting.progress))) - + case .checking: if let iconName = model.iconName { Image(systemName: iconName) @@ -47,7 +47,7 @@ struct UpdateBadge: View { } else { EmptyView() } - + default: if let iconName = model.iconName { Image(systemName: iconName) @@ -61,18 +61,18 @@ struct UpdateBadge: View { /// A circular progress indicator with a stroke-based ring design. /// /// Displays a partially filled circle that represents progress from 0.0 to 1.0. -fileprivate struct ProgressRingView: View { +private struct ProgressRingView: View { /// The current progress value, ranging from 0.0 (empty) to 1.0 (complete) let progress: Double - + /// The width of the progress ring stroke let lineWidth: CGFloat = 2 - + var body: some View { ZStack { Circle() .stroke(Color.primary.opacity(0.2), lineWidth: lineWidth) - + Circle() .trim(from: 0, to: progress) .stroke(Color.primary, style: StrokeStyle(lineWidth: lineWidth, lineCap: .round)) diff --git a/macos/Sources/Features/Update/UpdateController.swift b/macos/Sources/Features/Update/UpdateController.swift index 939eed42058..1ca218c8b3b 100644 --- a/macos/Sources/Features/Update/UpdateController.swift +++ b/macos/Sources/Features/Update/UpdateController.swift @@ -11,16 +11,16 @@ class UpdateController { private(set) var updater: SPUUpdater private let userDriver: UpdateDriver private var installCancellable: AnyCancellable? - + var viewModel: UpdateViewModel { userDriver.viewModel } - + /// True if we're installing an update. var isInstalling: Bool { installCancellable != nil } - + /// Initialize a new update controller. init() { let hostBundle = Bundle.main @@ -34,11 +34,11 @@ class UpdateController { delegate: userDriver ) } - + deinit { installCancellable?.cancel() } - + /// Start the updater. /// /// This must be called before the updater can check for updates. If starting fails, @@ -59,35 +59,35 @@ class UpdateController { )) } } - + /// Force install the current update. As long as we're in some "update available" state this will /// trigger all the steps necessary to complete the update. func installUpdate() { // Must be in an installable state guard viewModel.state.isInstallable else { return } - + // If we're already force installing then do nothing. guard installCancellable == nil else { return } - + // Setup a combine listener to listen for state changes and to always // confirm them. If we go to a non-installable state, cancel the listener. // The sink runs immediately with the current state, so we don't need to // manually confirm the first state. installCancellable = viewModel.$state.sink { [weak self] state in guard let self else { return } - + // If we move to a non-installable state (error, idle, etc.) then we // stop force installing. guard state.isInstallable else { self.installCancellable = nil return } - + // Continue the `yes` chain! state.confirm() } } - + /// Check for updates. /// /// This is typically connected to a menu item action. @@ -97,11 +97,11 @@ class UpdateController { updater.checkForUpdates() return } - + // If we're not idle then we need to cancel any prior state. installCancellable?.cancel() viewModel.state.cancel() - + // The above will take time to settle, so we delay the check for some time. // The 100ms is arbitrary and I'd rather not, but we have to wait more than // one loop tick it seems. @@ -109,7 +109,7 @@ class UpdateController { self?.updater.checkForUpdates() } } - + /// Validate the check for updates menu item. /// /// - Parameter item: The menu item to validate diff --git a/macos/Sources/Features/Update/UpdateDelegate.swift b/macos/Sources/Features/Update/UpdateDelegate.swift index 6195408513e..72d54bd222b 100644 --- a/macos/Sources/Features/Update/UpdateDelegate.swift +++ b/macos/Sources/Features/Update/UpdateDelegate.swift @@ -6,11 +6,11 @@ extension UpdateDriver: SPUUpdaterDelegate { guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else { return nil } - + // Sparkle supports a native concept of "channels" but it requires that // you share a single appcast file. We don't want to do that so we // do this instead. - switch (appDelegate.ghostty.config.autoUpdateChannel) { + switch appDelegate.ghostty.config.autoUpdateChannel { case .tip: return "https://tip.files.ghostty.org/appcast.xml" case .stable: return "https://release.files.ghostty.org/appcast.xml" } diff --git a/macos/Sources/Features/Update/UpdateDriver.swift b/macos/Sources/Features/Update/UpdateDriver.swift index 3beb4c9beaf..b5f580f1b11 100644 --- a/macos/Sources/Features/Update/UpdateDriver.swift +++ b/macos/Sources/Features/Update/UpdateDriver.swift @@ -5,23 +5,23 @@ import Sparkle class UpdateDriver: NSObject, SPUUserDriver { let viewModel: UpdateViewModel let standard: SPUStandardUserDriver - + init(viewModel: UpdateViewModel, hostBundle: Bundle) { self.viewModel = viewModel self.standard = SPUStandardUserDriver(hostBundle: hostBundle, delegate: nil) super.init() - + NotificationCenter.default.addObserver( self, selector: #selector(handleTerminalWindowWillClose), name: TerminalWindow.terminalWillCloseNotification, object: nil) } - + deinit { NotificationCenter.default.removeObserver(self) } - + @objc private func handleTerminalWindowWillClose() { // If we lost the ability to show unobtrusive states, cancel whatever // update state we're in. This will allow the manual `check for updates` @@ -36,7 +36,7 @@ class UpdateDriver: NSObject, SPUUserDriver { viewModel.state = .idle } } - + func show(_ request: SPUUpdatePermissionRequest, reply: @escaping @Sendable (SUUpdatePermissionResponse) -> Void) { viewModel.state = .permissionRequest(.init(request: request, reply: { [weak viewModel] response in @@ -47,7 +47,7 @@ class UpdateDriver: NSObject, SPUUserDriver { standard.show(request, reply: reply) } } - + func showUserInitiatedUpdateCheck(cancellation: @escaping () -> Void) { viewModel.state = .checking(.init(cancel: cancellation)) @@ -55,7 +55,7 @@ class UpdateDriver: NSObject, SPUUserDriver { standard.showUserInitiatedUpdateCheck(cancellation: cancellation) } } - + func showUpdateFound(with appcastItem: SUAppcastItem, state: SPUUserUpdateState, reply: @escaping @Sendable (SPUUserUpdateChoice) -> Void) { @@ -64,25 +64,25 @@ class UpdateDriver: NSObject, SPUUserDriver { standard.showUpdateFound(with: appcastItem, state: state, reply: reply) } } - + func showUpdateReleaseNotes(with downloadData: SPUDownloadData) { // We don't do anything with the release notes here because Ghostty // doesn't use the release notes feature of Sparkle currently. } - + func showUpdateReleaseNotesFailedToDownloadWithError(_ error: any Error) { // We don't do anything with release notes. See `showUpdateReleaseNotes` } - + func showUpdateNotFoundWithError(_ error: any Error, acknowledgement: @escaping () -> Void) { viewModel.state = .notFound(.init(acknowledgement: acknowledgement)) - + if !hasUnobtrusiveTarget { standard.showUpdateNotFoundWithError(error, acknowledgement: acknowledgement) } } - + func showUpdaterError(_ error: any Error, acknowledgement: @escaping () -> Void) { viewModel.state = .error(.init( @@ -98,71 +98,71 @@ class UpdateDriver: NSObject, SPUUserDriver { dismiss: { [weak viewModel] in viewModel?.state = .idle })) - + if !hasUnobtrusiveTarget { standard.showUpdaterError(error, acknowledgement: acknowledgement) } else { acknowledgement() } } - + func showDownloadInitiated(cancellation: @escaping () -> Void) { viewModel.state = .downloading(.init( cancel: cancellation, expectedLength: nil, progress: 0)) - + if !hasUnobtrusiveTarget { standard.showDownloadInitiated(cancellation: cancellation) } } - + func showDownloadDidReceiveExpectedContentLength(_ expectedContentLength: UInt64) { guard case let .downloading(downloading) = viewModel.state else { return } - + viewModel.state = .downloading(.init( cancel: downloading.cancel, expectedLength: expectedContentLength, progress: 0)) - + if !hasUnobtrusiveTarget { standard.showDownloadDidReceiveExpectedContentLength(expectedContentLength) } } - + func showDownloadDidReceiveData(ofLength length: UInt64) { guard case let .downloading(downloading) = viewModel.state else { return } - + viewModel.state = .downloading(.init( cancel: downloading.cancel, expectedLength: downloading.expectedLength, progress: downloading.progress + length)) - + if !hasUnobtrusiveTarget { standard.showDownloadDidReceiveData(ofLength: length) } } - + func showDownloadDidStartExtractingUpdate() { viewModel.state = .extracting(.init(progress: 0)) - + if !hasUnobtrusiveTarget { standard.showDownloadDidStartExtractingUpdate() } } - + func showExtractionReceivedProgress(_ progress: Double) { viewModel.state = .extracting(.init(progress: progress)) - + if !hasUnobtrusiveTarget { standard.showExtractionReceivedProgress(progress) } } - + func showReady(toInstallAndRelaunch reply: @escaping @Sendable (SPUUserUpdateChoice) -> Void) { if !hasUnobtrusiveTarget { standard.showReady(toInstallAndRelaunch: reply) @@ -170,7 +170,7 @@ class UpdateDriver: NSObject, SPUUserDriver { reply(.install) } } - + func showInstallingUpdate(withApplicationTerminated applicationTerminated: Bool, retryTerminatingApplication: @escaping () -> Void) { viewModel.state = .installing(.init( retryTerminatingApplication: retryTerminatingApplication, @@ -178,30 +178,30 @@ class UpdateDriver: NSObject, SPUUserDriver { viewModel?.state = .idle } )) - + if !hasUnobtrusiveTarget { standard.showInstallingUpdate(withApplicationTerminated: applicationTerminated, retryTerminatingApplication: retryTerminatingApplication) } } - + func showUpdateInstalledAndRelaunched(_ relaunched: Bool, acknowledgement: @escaping () -> Void) { standard.showUpdateInstalledAndRelaunched(relaunched, acknowledgement: acknowledgement) viewModel.state = .idle } - + func showUpdateInFocus() { if !hasUnobtrusiveTarget { standard.showUpdateInFocus() } } - + func dismissUpdateInstallation() { viewModel.state = .idle standard.dismissUpdateInstallation() } - + // MARK: No-Window Fallback - + /// True if there is a target that can render our unobtrusive update checker. var hasUnobtrusiveTarget: Bool { NSApp.windows.contains { window in diff --git a/macos/Sources/Features/Update/UpdatePill.swift b/macos/Sources/Features/Update/UpdatePill.swift index 29d1669e13d..b14cde1ac44 100644 --- a/macos/Sources/Features/Update/UpdatePill.swift +++ b/macos/Sources/Features/Update/UpdatePill.swift @@ -4,16 +4,16 @@ import SwiftUI struct UpdatePill: View { /// The update view model that provides the current state and information @ObservedObject var model: UpdateViewModel - + /// Whether the update popover is currently visible @State private var showPopover = false - + /// Task for auto-dismissing the "No Updates" state @State private var resetTask: Task? - + /// The font used for the pill text private let textFont = NSFont.systemFont(ofSize: 11, weight: .medium) - + var body: some View { if !model.state.isIdle { pillButton @@ -36,7 +36,7 @@ struct UpdatePill: View { } } } - + /// The pill-shaped button view that displays the update badge and text @ViewBuilder private var pillButton: some View { @@ -47,11 +47,11 @@ struct UpdatePill: View { } else { showPopover.toggle() } - }) { + }, label: { HStack(spacing: 6) { UpdateBadge(model: model) .frame(width: 14, height: 14) - + Text(model.text) .font(Font(textFont)) .lineLimit(1) @@ -66,12 +66,12 @@ struct UpdatePill: View { ) .foregroundColor(model.foregroundColor) .contentShape(Capsule()) - } + }) .buttonStyle(.plain) .help(model.text) .accessibilityLabel(model.text) } - + /// Calculated width for the text to prevent resizing during progress updates private var textWidth: CGFloat? { let attributes: [NSAttributedString.Key: Any] = [.font: textFont] diff --git a/macos/Sources/Features/Update/UpdatePopoverView.swift b/macos/Sources/Features/Update/UpdatePopoverView.swift index 87d76f8015c..aa4e822f313 100644 --- a/macos/Sources/Features/Update/UpdatePopoverView.swift +++ b/macos/Sources/Features/Update/UpdatePopoverView.swift @@ -8,10 +8,10 @@ import Sparkle struct UpdatePopoverView: View { /// The update view model that provides the current state and information @ObservedObject var model: UpdateViewModel - + /// Environment value for dismissing the popover @Environment(\.dismiss) private var dismiss - + var body: some View { VStack(alignment: .leading, spacing: 0) { switch model.state { @@ -19,31 +19,31 @@ struct UpdatePopoverView: View { // Shouldn't happen in a well-formed view stack. Higher levels // should not call the popover for idles. EmptyView() - + case .permissionRequest(let request): PermissionRequestView(request: request, dismiss: dismiss) - + case .checking(let checking): CheckingView(checking: checking, dismiss: dismiss) - + case .updateAvailable(let update): UpdateAvailableView(update: update, dismiss: dismiss) - + case .downloading(let download): DownloadingView(download: download, dismiss: dismiss) - + case .extracting(let extracting): ExtractingView(extracting: extracting) - + case .installing(let installing): // This is only required when `installing.isAutoUpdate == true`, // but we keep it anyway, just in case something unexpected // happens during installing InstallingView(installing: installing, dismiss: dismiss) - + case .notFound(let notFound): NotFoundView(notFound: notFound, dismiss: dismiss) - + case .error(let error): UpdateErrorView(error: error, dismiss: dismiss) } @@ -52,22 +52,22 @@ struct UpdatePopoverView: View { } } -fileprivate struct PermissionRequestView: View { +private struct PermissionRequestView: View { let request: UpdateState.PermissionRequest let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { Text("Enable automatic updates?") .font(.system(size: 13, weight: .semibold)) - + Text("Ghostty can automatically check for updates in the background.") .font(.system(size: 11)) .foregroundColor(.secondary) .fixedSize(horizontal: false, vertical: true) } - + HStack(spacing: 8) { Button("Not Now") { request.reply(SUUpdatePermissionResponse( @@ -76,9 +76,9 @@ fileprivate struct PermissionRequestView: View { dismiss() } .keyboardShortcut(.cancelAction) - + Spacer() - + Button("Allow") { request.reply(SUUpdatePermissionResponse( automaticUpdateChecks: true, @@ -93,10 +93,10 @@ fileprivate struct PermissionRequestView: View { } } -fileprivate struct CheckingView: View { +private struct CheckingView: View { let checking: UpdateState.Checking let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { HStack(spacing: 10) { @@ -105,7 +105,7 @@ fileprivate struct CheckingView: View { Text("Checking for updates…") .font(.system(size: 13)) } - + HStack { Spacer() Button("Cancel") { @@ -120,19 +120,19 @@ fileprivate struct CheckingView: View { } } -fileprivate struct UpdateAvailableView: View { +private struct UpdateAvailableView: View { let update: UpdateState.UpdateAvailable let dismiss: DismissAction - + private let labelWidth: CGFloat = 60 - + var body: some View { VStack(alignment: .leading, spacing: 0) { VStack(alignment: .leading, spacing: 12) { VStack(alignment: .leading, spacing: 8) { Text("Update Available") .font(.system(size: 13, weight: .semibold)) - + VStack(alignment: .leading, spacing: 4) { HStack(spacing: 6) { Text("Version:") @@ -141,7 +141,7 @@ fileprivate struct UpdateAvailableView: View { Text(update.appcastItem.displayVersionString) } .font(.system(size: 11)) - + if update.appcastItem.contentLength > 0 { HStack(spacing: 6) { Text("Size:") @@ -151,7 +151,7 @@ fileprivate struct UpdateAvailableView: View { } .font(.system(size: 11)) } - + if let date = update.appcastItem.date { HStack(spacing: 6) { Text("Released:") @@ -164,23 +164,23 @@ fileprivate struct UpdateAvailableView: View { } .textSelection(.enabled) } - + HStack(spacing: 8) { Button("Skip") { update.reply(.skip) dismiss() } .controlSize(.small) - + Button("Later") { update.reply(.dismiss) dismiss() } .controlSize(.small) .keyboardShortcut(.cancelAction) - + Spacer() - + Button("Install and Relaunch") { update.reply(.install) dismiss() @@ -191,10 +191,10 @@ fileprivate struct UpdateAvailableView: View { } } .padding(16) - + if let notes = update.releaseNotes { Divider() - + Link(destination: notes.url) { HStack { Image(systemName: "doc.text") @@ -217,16 +217,16 @@ fileprivate struct UpdateAvailableView: View { } } -fileprivate struct DownloadingView: View { +private struct DownloadingView: View { let download: UpdateState.Downloading let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { Text("Downloading Update") .font(.system(size: 13, weight: .semibold)) - + if let expectedLength = download.expectedLength, expectedLength > 0 { let progress = min(1, max(0, Double(download.progress) / Double(expectedLength))) VStack(alignment: .leading, spacing: 6) { @@ -240,7 +240,7 @@ fileprivate struct DownloadingView: View { .controlSize(.small) } } - + HStack { Spacer() Button("Cancel") { @@ -255,14 +255,14 @@ fileprivate struct DownloadingView: View { } } -fileprivate struct ExtractingView: View { +private struct ExtractingView: View { let extracting: UpdateState.Extracting - + var body: some View { VStack(alignment: .leading, spacing: 8) { Text("Preparing Update") .font(.system(size: 13, weight: .semibold)) - + VStack(alignment: .leading, spacing: 6) { ProgressView(value: min(1, max(0, extracting.progress)), total: 1.0) Text(String(format: "%.0f%%", min(1, max(0, extracting.progress)) * 100)) @@ -274,22 +274,22 @@ fileprivate struct ExtractingView: View { } } -fileprivate struct InstallingView: View { +private struct InstallingView: View { let installing: UpdateState.Installing let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { Text("Restart Required") .font(.system(size: 13, weight: .semibold)) - + Text("The update is ready. Please restart the application to complete the installation.") .font(.system(size: 11)) .foregroundColor(.secondary) .fixedSize(horizontal: false, vertical: true) } - + HStack { Button("Restart Later") { installing.dismiss() @@ -297,9 +297,9 @@ fileprivate struct InstallingView: View { } .keyboardShortcut(.cancelAction) .controlSize(.small) - + Spacer() - + Button("Restart Now") { installing.retryTerminatingApplication() dismiss() @@ -313,22 +313,22 @@ fileprivate struct InstallingView: View { } } -fileprivate struct NotFoundView: View { +private struct NotFoundView: View { let notFound: UpdateState.NotFound let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { Text("No Updates Found") .font(.system(size: 13, weight: .semibold)) - + Text("You're already running the latest version.") .font(.system(size: 11)) .foregroundColor(.secondary) .fixedSize(horizontal: false, vertical: true) } - + HStack { Spacer() Button("OK") { @@ -343,10 +343,10 @@ fileprivate struct NotFoundView: View { } } -fileprivate struct UpdateErrorView: View { +private struct UpdateErrorView: View { let error: UpdateState.Error let dismiss: DismissAction - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { @@ -357,13 +357,13 @@ fileprivate struct UpdateErrorView: View { Text("Update Failed") .font(.system(size: 13, weight: .semibold)) } - + Text(error.error.localizedDescription) .font(.system(size: 11)) .foregroundColor(.secondary) .fixedSize(horizontal: false, vertical: true) } - + HStack(spacing: 8) { Button("OK") { error.dismiss() @@ -371,9 +371,9 @@ fileprivate struct UpdateErrorView: View { } .keyboardShortcut(.cancelAction) .controlSize(.small) - + Spacer() - + Button("Retry") { error.retry() dismiss() diff --git a/macos/Sources/Features/Update/UpdateSimulator.swift b/macos/Sources/Features/Update/UpdateSimulator.swift index bf168d9fc74..c893993e0e1 100644 --- a/macos/Sources/Features/Update/UpdateSimulator.swift +++ b/macos/Sources/Features/Update/UpdateSimulator.swift @@ -9,31 +9,31 @@ import Sparkle enum UpdateSimulator { /// Complete successful update flow: checking → available → download → extract → ready → install → idle case happyPath - + /// No updates available: checking (2s) → "No Updates Available" (3s) → idle case notFound - + /// Error during check: checking (2s) → error with retry callback case error - + /// Slower download for testing progress UI: checking → available → download (20 steps, ~10s) → extract → install case slowDownload - + /// Initial permission request flow: shows permission dialog → proceeds with happy path if accepted case permissionRequest - + /// User cancels during download: checking → available → download (5 steps) → cancels → idle case cancelDuringDownload - + /// User cancels while checking: checking (1s) → cancels → idle case cancelDuringChecking - + /// Shows the installing state with restart button: installing (stays until dismissed) case installing - + /// Simulates auto-update flow: goes directly to installing state without showing intermediate UI case autoUpdate - + func simulate(with viewModel: UpdateViewModel) { switch self { case .happyPath: @@ -56,12 +56,12 @@ enum UpdateSimulator { simulateAutoUpdate(viewModel) } } - + private func simulateHappyPath(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { viewModel.state = .updateAvailable(.init( appcastItem: SUAppcastItem.empty(), @@ -75,28 +75,28 @@ enum UpdateSimulator { )) } } - + private func simulateNotFound(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { viewModel.state = .notFound(.init(acknowledgement: { // Acknowledgement called when dismissed })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { viewModel.state = .idle } } } - + private func simulateError(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { viewModel.state = .error(.init( error: NSError(domain: "UpdateError", code: 1, userInfo: [ @@ -111,12 +111,12 @@ enum UpdateSimulator { )) } } - + private func simulateSlowDownload(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { viewModel.state = .updateAvailable(.init( appcastItem: SUAppcastItem.empty(), @@ -130,7 +130,7 @@ enum UpdateSimulator { )) } } - + private func simulateSlowDownloadProgress(_ viewModel: UpdateViewModel) { let download = UpdateState.Downloading( cancel: { @@ -140,7 +140,7 @@ enum UpdateSimulator { progress: 0 ) viewModel.state = .downloading(download) - + for i in 1...20 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * 0.5) { let updatedDownload = UpdateState.Downloading( @@ -149,7 +149,7 @@ enum UpdateSimulator { progress: UInt64(i * 100) ) viewModel.state = .downloading(updatedDownload) - + if i == 20 { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { simulateExtract(viewModel) @@ -158,7 +158,7 @@ enum UpdateSimulator { } } } - + private func simulatePermissionRequest(_ viewModel: UpdateViewModel) { let request = SPUUpdatePermissionRequest(systemProfile: []) viewModel.state = .permissionRequest(.init( @@ -172,12 +172,12 @@ enum UpdateSimulator { } )) } - + private func simulateCancelDuringDownload(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { viewModel.state = .updateAvailable(.init( appcastItem: SUAppcastItem.empty(), @@ -191,7 +191,7 @@ enum UpdateSimulator { )) } } - + private func simulateDownloadThenCancel(_ viewModel: UpdateViewModel) { let download = UpdateState.Downloading( cancel: { @@ -201,7 +201,7 @@ enum UpdateSimulator { progress: 0 ) viewModel.state = .downloading(download) - + for i in 1...5 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * 0.3) { let updatedDownload = UpdateState.Downloading( @@ -210,7 +210,7 @@ enum UpdateSimulator { progress: UInt64(i * 100) ) viewModel.state = .downloading(updatedDownload) - + if i == 5 { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { viewModel.state = .idle @@ -219,17 +219,17 @@ enum UpdateSimulator { } } } - + private func simulateCancelDuringChecking(_ viewModel: UpdateViewModel) { viewModel.state = .checking(.init(cancel: { viewModel.state = .idle })) - + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { viewModel.state = .idle } } - + private func simulateDownload(_ viewModel: UpdateViewModel) { let download = UpdateState.Downloading( cancel: { @@ -239,7 +239,7 @@ enum UpdateSimulator { progress: 0 ) viewModel.state = .downloading(download) - + for i in 1...10 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * 0.3) { let updatedDownload = UpdateState.Downloading( @@ -248,7 +248,7 @@ enum UpdateSimulator { progress: UInt64(i * 100) ) viewModel.state = .downloading(updatedDownload) - + if i == 10 { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { simulateExtract(viewModel) @@ -257,14 +257,14 @@ enum UpdateSimulator { } } } - + private func simulateExtract(_ viewModel: UpdateViewModel) { viewModel.state = .extracting(.init(progress: 0.0)) - + for j in 1...5 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(j) * 0.3) { viewModel.state = .extracting(.init(progress: Double(j) / 5.0)) - + if j == 5 { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { simulateInstalling(viewModel) @@ -273,7 +273,7 @@ enum UpdateSimulator { } } } - + private func simulateInstalling(_ viewModel: UpdateViewModel) { viewModel.state = .installing(.init( retryTerminatingApplication: { @@ -285,7 +285,7 @@ enum UpdateSimulator { } )) } - + private func simulateAutoUpdate(_ viewModel: UpdateViewModel) { viewModel.state = .installing(.init( isAutoUpdate: true, diff --git a/macos/Sources/Features/Update/UpdateViewModel.swift b/macos/Sources/Features/Update/UpdateViewModel.swift index 1f93046162a..8e66f4a1627 100644 --- a/macos/Sources/Features/Update/UpdateViewModel.swift +++ b/macos/Sources/Features/Update/UpdateViewModel.swift @@ -4,7 +4,7 @@ import Sparkle class UpdateViewModel: ObservableObject { @Published var state: UpdateState = .idle - + /// The text to display for the current update state. /// Returns an empty string for idle state, progress percentages for downloading/extracting, /// or descriptive text for other states. @@ -38,7 +38,7 @@ class UpdateViewModel: ObservableObject { return err.error.localizedDescription } } - + /// The maximum width text for states that show progress. /// Used to prevent the pill from resizing as percentages change. var maxWidthText: String { @@ -51,7 +51,7 @@ class UpdateViewModel: ObservableObject { return text } } - + /// The SF Symbol icon name for the current update state. var iconName: String? { switch state { @@ -75,7 +75,7 @@ class UpdateViewModel: ObservableObject { return "exclamationmark.triangle.fill" } } - + /// A longer description for the current update state. /// Used in contexts like the command palette where more detail is helpful. var description: String { @@ -100,7 +100,7 @@ class UpdateViewModel: ObservableObject { return "An error occurred during the update process" } } - + /// A badge to display for the current update state. /// Returns version numbers, progress percentages, or nil. var badge: String? { @@ -120,7 +120,7 @@ class UpdateViewModel: ObservableObject { return nil } } - + /// The color to apply to the icon for the current update state. var iconColor: Color { switch state { @@ -140,7 +140,7 @@ class UpdateViewModel: ObservableObject { return .orange } } - + /// The background color for the update pill. var backgroundColor: Color { switch state { @@ -156,7 +156,7 @@ class UpdateViewModel: ObservableObject { return Color(nsColor: .controlBackgroundColor) } } - + /// The foreground (text) color for the update pill. var foregroundColor: Color { switch state { @@ -184,27 +184,27 @@ enum UpdateState: Equatable { case downloading(Downloading) case extracting(Extracting) case installing(Installing) - + var isIdle: Bool { if case .idle = self { return true } return false } - + /// This is true if we're in a state that can be force installed. var isInstallable: Bool { - switch (self) { + switch self { case .checking, .updateAvailable, .downloading, .extracting, .installing: return true - + default: return false } } - + func cancel() { switch self { case .checking(let checking): @@ -221,7 +221,7 @@ enum UpdateState: Equatable { break } } - + /// Confirms or accepts the current update state. /// - For available updates: begins installation /// - For ready-to-install: proceeds with installation @@ -233,7 +233,7 @@ enum UpdateState: Equatable { break } } - + static func == (lhs: UpdateState, rhs: UpdateState) -> Bool { switch (lhs, rhs) { case (.idle, .idle): @@ -258,38 +258,38 @@ enum UpdateState: Equatable { return false } } - + struct NotFound { let acknowledgement: () -> Void } - + struct PermissionRequest { let request: SPUUpdatePermissionRequest let reply: @Sendable (SUUpdatePermissionResponse) -> Void } - + struct Checking { let cancel: () -> Void } - + struct UpdateAvailable { let appcastItem: SUAppcastItem let reply: @Sendable (SPUUserUpdateChoice) -> Void - + var releaseNotes: ReleaseNotes? { let currentCommit = Bundle.main.infoDictionary?["GhosttyCommit"] as? String return ReleaseNotes(displayVersionString: appcastItem.displayVersionString, currentCommit: currentCommit) } } - + enum ReleaseNotes { case commit(URL) case compareTip(URL) case tagged(URL) - + init?(displayVersionString: String, currentCommit: String?) { let version = displayVersionString - + // Check for semantic version (x.y.z) if let semver = Self.extractSemanticVersion(from: version) { let slug = semver.replacingOccurrences(of: ".", with: "-") @@ -298,12 +298,12 @@ enum UpdateState: Equatable { return } } - + // Fall back to git hash detection guard let newHash = Self.extractGitHash(from: version) else { return nil } - + if let currentHash = currentCommit, !currentHash.isEmpty, let url = URL(string: "https://github.com/ghostty-org/ghostty/compare/\(currentHash)...\(newHash)") { self = .compareTip(url) @@ -313,7 +313,7 @@ enum UpdateState: Equatable { return nil } } - + private static func extractSemanticVersion(from version: String) -> String? { let pattern = #"^\d+\.\d+\.\d+$"# if version.range(of: pattern, options: .regularExpression) != nil { @@ -321,7 +321,7 @@ enum UpdateState: Equatable { } return nil } - + private static func extractGitHash(from version: String) -> String? { let pattern = #"[0-9a-f]{7,40}"# if let range = version.range(of: pattern, options: .regularExpression) { @@ -329,7 +329,7 @@ enum UpdateState: Equatable { } return nil } - + var url: URL { switch self { case .commit(let url): return url @@ -337,32 +337,32 @@ enum UpdateState: Equatable { case .tagged(let url): return url } } - + var label: String { - switch (self) { + switch self { case .commit: return "View GitHub Commit" case .compareTip: return "Changes Since This Tip Release" case .tagged: return "View Release Notes" } } } - + struct Error { let error: any Swift.Error let retry: () -> Void let dismiss: () -> Void } - + struct Downloading { let cancel: () -> Void let expectedLength: UInt64? let progress: UInt64 } - + struct Extracting { let progress: Double } - + struct Installing { /// True if this state is triggered by ``Ghostty/UpdateDriver/updater(_:willInstallUpdateOnQuit:immediateInstallationBlock:)`` var isAutoUpdate = false diff --git a/macos/Sources/Ghostty/FullscreenMode+Extension.swift b/macos/Sources/Ghostty/FullscreenMode+Extension.swift index 0c0bba908ea..1970209cfe0 100644 --- a/macos/Sources/Ghostty/FullscreenMode+Extension.swift +++ b/macos/Sources/Ghostty/FullscreenMode+Extension.swift @@ -7,13 +7,13 @@ extension FullscreenMode { case GHOSTTY_FULLSCREEN_NATIVE: .native - case GHOSTTY_FULLSCREEN_NON_NATIVE: + case GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE: .nonNative - case GHOSTTY_FULLSCREEN_NON_NATIVE_VISIBLE_MENU: + case GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE_VISIBLE_MENU: .nonNativeVisibleMenu - case GHOSTTY_FULLSCREEN_NON_NATIVE_PADDED_NOTCH: + case GHOSTTY_FULLSCREEN_MACOS_NON_NATIVE_PADDED_NOTCH: .nonNativePaddedNotch default: diff --git a/macos/Sources/Ghostty/Ghostty.Action.swift b/macos/Sources/Ghostty/Ghostty.Action.swift index 91f1491dd16..f3842fc5628 100644 --- a/macos/Sources/Ghostty/Ghostty.Action.swift +++ b/macos/Sources/Ghostty/Ghostty.Action.swift @@ -18,7 +18,7 @@ extension Ghostty.Action { } init(c: ghostty_action_color_change_s) { - switch (c.kind) { + switch c.kind { case GHOSTTY_ACTION_COLOR_KIND_FOREGROUND: self.kind = .foreground case GHOSTTY_ACTION_COLOR_KIND_BACKGROUND: @@ -40,13 +40,13 @@ extension Ghostty.Action { self.amount = c.amount } } - + struct OpenURL { enum Kind { case unknown case text case html - + init(_ c: ghostty_action_open_url_kind_e) { switch c { case GHOSTTY_ACTION_OPEN_URL_KIND_TEXT: @@ -58,13 +58,13 @@ extension Ghostty.Action { } } } - + let kind: Kind let url: String - + init(c: ghostty_action_open_url_s) { self.kind = Kind(c.kind) - + if let urlCString = c.url { let data = Data(bytes: urlCString, count: Int(c.len)) self.url = String(data: data, encoding: .utf8) ?? "" @@ -81,7 +81,7 @@ extension Ghostty.Action { case error case indeterminate case pause - + init(_ c: ghostty_action_progress_report_state_e) { switch c { case GHOSTTY_PROGRESS_STATE_REMOVE: @@ -99,26 +99,26 @@ extension Ghostty.Action { } } } - + let state: State let progress: UInt8? } - + struct Scrollbar { let total: UInt64 let offset: UInt64 let len: UInt64 - + init(c: ghostty_action_scrollbar_s) { total = c.total - offset = c.offset + offset = c.offset len = c.len } } struct StartSearch { let needle: String? - + init(c: ghostty_action_start_search_s) { if let needleCString = c.needle { self.needle = String(cString: needleCString) diff --git a/macos/Sources/Ghostty/Ghostty.App.swift b/macos/Sources/Ghostty/Ghostty.App.swift index e3441257fdd..82b3ad35c27 100644 --- a/macos/Sources/Ghostty/Ghostty.App.swift +++ b/macos/Sources/Ghostty/Ghostty.App.swift @@ -33,7 +33,7 @@ extension Ghostty { private var configPath: String? /// The ghostty app instance. We only have one of these for the entire app, although I guess /// in theory you can have multiple... I don't know why you would... - @Published var app: ghostty_app_t? = nil { + @Published var app: ghostty_app_t? { didSet { guard let old = oldValue else { return } ghostty_app_free(old) @@ -140,7 +140,7 @@ extension Ghostty { guard let app = self.app else { return } // Soft updates just call with our existing config - if (soft) { + if soft { ghostty_app_update_config(app, config.config!) return } @@ -158,7 +158,7 @@ extension Ghostty { func reloadConfig(surface: ghostty_surface_t, soft: Bool = false) { // Soft updates just call with our existing config - if (soft) { + if soft { ghostty_surface_update_config(surface, config.config!) return } @@ -183,14 +183,14 @@ extension Ghostty { func newTab(surface: ghostty_surface_t) { let action = "new_tab" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } func newWindow(surface: ghostty_surface_t) { let action = "new_window" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } @@ -213,14 +213,14 @@ extension Ghostty { func splitToggleZoom(surface: ghostty_surface_t) { let action = "toggle_split_zoom" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } func toggleFullscreen(surface: ghostty_surface_t) { let action = "toggle_fullscreen" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } @@ -241,21 +241,21 @@ extension Ghostty { case .reset: action = "reset_font_size" } - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } func toggleTerminalInspector(surface: ghostty_surface_t) { let action = "inspector:toggle" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } func resetTerminal(surface: ghostty_surface_t) { let action = "reset" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { logger.warning("action failed action=\(action)") } } @@ -312,7 +312,6 @@ extension Ghostty { ghostty_app_set_focus(app, false) } - // MARK: Ghostty Callbacks (macOS) static func closeSurface(_ userdata: UnsafeMutableRawPointer?, processAlive: Bool) { @@ -379,25 +378,25 @@ extension Ghostty { let surface = self.surfaceUserdata(from: userdata) guard let pasteboard = NSPasteboard.ghostty(location) else { return } guard let content = content, len > 0 else { return } - + // Convert the C array to Swift array let contentArray = (0.. Bool { let userInfo = notification.request.content.userInfo + + // We always require the notification to be attached to a surface. guard let uuidString = userInfo["surface"] as? String, let uuid = UUID(uuidString: uuidString), let surface = delegate?.findSurface(forUUID: uuid), let window = surface.window else { return false } + + // If we don't require focus then we're good! + let requireFocus = userInfo["requireFocus"] as? Bool ?? true + if !requireFocus { return true } + return !window.isKeyWindow || !surface.focused } @@ -463,7 +469,7 @@ extension Ghostty { static func action(_ app: ghostty_app_t, target: ghostty_target_s, action: ghostty_action_s) -> Bool { // Make sure it a target we understand so all our action handlers can assert - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP, GHOSTTY_TARGET_SURFACE: break @@ -473,7 +479,7 @@ extension Ghostty { } // Action dispatch - switch (action.tag) { + switch action.tag { case GHOSTTY_ACTION_QUIT: quit(app) @@ -605,7 +611,7 @@ extension Ghostty { case GHOSTTY_ACTION_CHECK_FOR_UPDATES: checkForUpdates(app) - + case GHOSTTY_ACTION_OPEN_URL: return openURL(action.action.open_url) @@ -633,6 +639,9 @@ extension Ghostty { case GHOSTTY_ACTION_SEARCH_SELECTED: searchSelected(app, target: target, v: action.action.search_selected) + case GHOSTTY_ACTION_COMMAND_FINISHED: + commandFinished(app, target: target, v: action.action.command_finished) + case GHOSTTY_ACTION_PRESENT_TERMINAL: return presentTerminal(app, target: target) @@ -681,12 +690,12 @@ extension Ghostty { appDelegate.checkForUpdates(nil) } } - + private static func openURL( _ v: ghostty_action_open_url_s ) -> Bool { let action = Ghostty.Action.OpenURL(c: v) - + // If the URL doesn't have a valid scheme we assume its a file path. The URL // initializer will gladly take invalid URLs (e.g. plain file paths) and turn // them into schema-less URLs, but these won't open properly in text editors. @@ -695,9 +704,12 @@ extension Ghostty { if let candidate = URL(string: action.url), candidate.scheme != nil { url = candidate } else { - url = URL(filePath: action.url) + // Expand ~ to the user's home directory so that file paths + // like ~/Documents/file.txt resolve correctly. + let expandedPath = NSString(string: action.url).standardizingPath + url = URL(filePath: expandedPath) } - + switch action.kind { case .text: // Open with the default editor for `*.ghostty` file or just system text editor @@ -706,15 +718,15 @@ extension Ghostty { NSWorkspace.shared.open([url], withApplicationAt: textEditor, configuration: NSWorkspace.OpenConfiguration()) return true } - + case .html: // The extension will be HTML and we do the right thing automatically. break - + case .unknown: break } - + // Open with the default application for the URL NSWorkspace.shared.open(url) return true @@ -722,7 +734,7 @@ extension Ghostty { private static func undo(_ app: ghostty_app_t, target: ghostty_target_s) -> Bool { let undoManager: UndoManager? - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: undoManager = (NSApp.delegate as? AppDelegate)?.undoManager @@ -743,7 +755,7 @@ extension Ghostty { private static func redo(_ app: ghostty_app_t, target: ghostty_target_s) -> Bool { let undoManager: UndoManager? - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: undoManager = (NSApp.delegate as? AppDelegate)?.undoManager @@ -763,7 +775,7 @@ extension Ghostty { } private static func newWindow(_ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: NotificationCenter.default.post( name: Notification.ghosttyNewWindow, @@ -782,14 +794,13 @@ extension Ghostty { ] ) - default: assertionFailure() } } private static func newTab(_ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: NotificationCenter.default.post( name: Notification.ghosttyNewTab, @@ -819,7 +830,6 @@ extension Ghostty { ] ) - default: assertionFailure() } @@ -829,7 +839,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, direction: ghostty_action_split_direction_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: // New split does nothing with an app target Ghostty.logger.warning("new split does nothing with an app target") @@ -848,7 +858,6 @@ extension Ghostty { ] ) - default: assertionFailure() } @@ -858,7 +867,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s ) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: return false @@ -879,7 +888,7 @@ extension Ghostty { } private static func closeTab(_ app: ghostty_app_t, target: ghostty_target_s, mode: ghostty_action_close_tab_mode_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("close tabs does nothing with an app target") return @@ -888,7 +897,7 @@ extension Ghostty { guard let surface = target.target.surface else { return } guard let surfaceView = self.surfaceView(from: surface) else { return } - switch (mode) { + switch mode { case GHOSTTY_ACTION_CLOSE_TAB_MODE_THIS: NotificationCenter.default.post( name: .ghosttyCloseTab, @@ -914,14 +923,13 @@ extension Ghostty { assertionFailure() } - default: assertionFailure() } } private static func closeWindow(_ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("close window does nothing with an app target") return @@ -949,7 +957,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, mode raw: ghostty_action_fullscreen_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle fullscreen does nothing with an app target") return @@ -969,7 +977,6 @@ extension Ghostty { ] ) - default: assertionFailure() } @@ -978,7 +985,7 @@ extension Ghostty { private static func toggleCommandPalette( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle command palette does nothing with an app target") return @@ -991,7 +998,6 @@ extension Ghostty { object: surfaceView ) - default: assertionFailure() } @@ -1001,7 +1007,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s ) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle maximize does nothing with an app target") return @@ -1014,7 +1020,6 @@ extension Ghostty { object: surfaceView ) - default: assertionFailure() } @@ -1031,7 +1036,7 @@ extension Ghostty { private static func ringBell( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: // Technically we could still request app attention here but there // are no known cases where the bell is rang with an app target so @@ -1056,7 +1061,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_readonly_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("set readonly does nothing with an app target") return @@ -1081,7 +1086,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, move: ghostty_action_move_tab_s) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("move tab does nothing with an app target") return false @@ -1112,7 +1117,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, tab: ghostty_action_goto_tab_e) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("goto tab does nothing with an app target") return false @@ -1144,7 +1149,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, direction: ghostty_action_goto_split_e) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("goto split does nothing with an app target") return false @@ -1250,7 +1255,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, resize: ghostty_action_resize_split_s) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("resize split does nothing with an app target") return false @@ -1283,7 +1288,7 @@ extension Ghostty { private static func equalizeSplits( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("equalize splits does nothing with an app target") return @@ -1296,7 +1301,6 @@ extension Ghostty { object: surfaceView ) - default: assertionFailure() } @@ -1305,7 +1309,7 @@ extension Ghostty { private static func toggleSplitZoom( _ app: ghostty_app_t, target: ghostty_target_s) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle split zoom does nothing with an app target") return false @@ -1324,7 +1328,6 @@ extension Ghostty { ) return true - default: assertionFailure() return false @@ -1335,7 +1338,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, mode: ghostty_action_inspector_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle inspector does nothing with an app target") return @@ -1349,7 +1352,6 @@ extension Ghostty { userInfo: ["mode": mode] ) - default: assertionFailure() } @@ -1359,9 +1361,9 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, n: ghostty_action_desktop_notification_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: - Ghostty.logger.warning("toggle split zoom does nothing with an app target") + Ghostty.logger.warning("desktop notification does nothing with an app target") return case GHOSTTY_TARGET_SURFACE: @@ -1369,19 +1371,106 @@ extension Ghostty { guard let surfaceView = self.surfaceView(from: surface) else { return } guard let title = String(cString: n.title!, encoding: .utf8) else { return } guard let body = String(cString: n.body!, encoding: .utf8) else { return } + showDesktopNotification(surfaceView, title: title, body: body) - let center = UNUserNotificationCenter.current() - center.requestAuthorization(options: [.alert, .sound]) { _, error in - if let error = error { - Ghostty.logger.error("Error while requesting notification authorization: \(error)") - } + default: + assertionFailure() + } + } + + private static func showDesktopNotification( + _ surfaceView: SurfaceView, + title: String, + body: String, + requireFocus: Bool = true) { + let center = UNUserNotificationCenter.current() + center.requestAuthorization(options: [.alert, .sound]) { _, error in + if let error = error { + Ghostty.logger.error("Error while requesting notification authorization: \(error)") + } + } + + center.getNotificationSettings { settings in + guard settings.authorizationStatus == .authorized else { return } + surfaceView.showUserNotification( + title: title, + body: body, + requireFocus: requireFocus + ) + } + } + + private static func commandFinished( + _ app: ghostty_app_t, + target: ghostty_target_s, + v: ghostty_action_command_finished_s + ) { + switch target.tag { + case GHOSTTY_TARGET_APP: + Ghostty.logger.warning("command finished does nothing with an app target") + return + + case GHOSTTY_TARGET_SURFACE: + guard let surface = target.target.surface else { return } + guard let surfaceView = self.surfaceView(from: surface) else { return } + + // Determine if we even care about command finish notifications + guard let config = (NSApplication.shared.delegate as? AppDelegate)?.ghostty.config else { return } + switch config.notifyOnCommandFinish { + case .never: + return + + case .unfocused: + if surfaceView.focused { return } + + case .always: + break } - center.getNotificationSettings() { settings in - guard settings.authorizationStatus == .authorized else { return } - surfaceView.showUserNotification(title: title, body: body) + // Determine if the command was slow enough + let duration = Duration.nanoseconds(v.duration) + guard Duration.nanoseconds(v.duration) >= config.notifyOnCommandFinishAfter else { return } + + let actions = config.notifyOnCommandFinishAction + + if actions.contains(.bell) { + NotificationCenter.default.post( + name: .ghosttyBellDidRing, + object: surfaceView + ) } + if actions.contains(.notify) { + let title: String + if v.exit_code < 0 { + title = "Command Finished" + } else if v.exit_code == 0 { + title = "Command Succeeded" + } else { + title = "Command Failed" + } + + let body: String + let formattedDuration = duration.formatted( + .units( + allowed: [.hours, .minutes, .seconds, .milliseconds], + width: .abbreviated, + fractionalPart: .hide + ) + ) + if v.exit_code < 0 { + body = "Command took \(formattedDuration)." + } else { + body = "Command took \(formattedDuration) and exited with code \(v.exit_code)." + } + + showDesktopNotification( + surfaceView, + title: title, + body: body, + requireFocus: false + ) + } default: assertionFailure() @@ -1395,7 +1484,7 @@ extension Ghostty { ) { guard let mode = SetFloatWIndow.from(mode_raw) else { return } - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle float window does nothing with an app target") return @@ -1405,7 +1494,7 @@ extension Ghostty { guard let surfaceView = self.surfaceView(from: surface) else { return } guard let window = surfaceView.window as? TerminalWindow else { return } - switch (mode) { + switch mode { case .on: window.level = .floating @@ -1429,7 +1518,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s ) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("toggle background opacity does nothing with an app target") return @@ -1453,7 +1542,7 @@ extension Ghostty { ) { guard let mode = SetSecureInput.from(mode_raw) else { return } - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else { return } appDelegate.setSecureInput(mode) @@ -1464,7 +1553,7 @@ extension Ghostty { guard let appState = self.appState(fromView: surfaceView) else { return } guard appState.config.autoSecureInput else { return } - switch (mode) { + switch mode { case .on: surfaceView.passwordInput = true @@ -1492,7 +1581,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_set_title_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("set title does nothing with an app target") return @@ -1511,7 +1600,7 @@ extension Ghostty { private static func copyTitleToClipboard( _ app: ghostty_app_t, target: ghostty_target_s) -> Bool { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_SURFACE: guard let surface = target.target.surface else { return false } guard let surfaceView = self.surfaceView(from: surface) else { return false } @@ -1534,7 +1623,7 @@ extension Ghostty { let promptTitle = Action.PromptTitle(v) switch promptTitle { case .surface: - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("set title prompt does nothing with an app target") return false @@ -1551,7 +1640,7 @@ extension Ghostty { } case .tab: - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: guard let window = NSApp.mainWindow ?? NSApp.keyWindow, let controller = window.windowController as? BaseTerminalController @@ -1579,7 +1668,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_pwd_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("pwd change does nothing with an app target") return @@ -1599,7 +1688,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, shape: ghostty_action_mouse_shape_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("set mouse shapes nothing with an app target") return @@ -1609,7 +1698,6 @@ extension Ghostty { guard let surfaceView = self.surfaceView(from: surface) else { return } surfaceView.setCursorShape(shape) - default: assertionFailure() } @@ -1619,7 +1707,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_mouse_visibility_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("set mouse shapes nothing with an app target") return @@ -1627,7 +1715,7 @@ extension Ghostty { case GHOSTTY_TARGET_SURFACE: guard let surface = target.target.surface else { return } guard let surfaceView = self.surfaceView(from: surface) else { return } - switch (v) { + switch v { case GHOSTTY_MOUSE_VISIBLE: surfaceView.setCursorVisibility(true) @@ -1638,7 +1726,6 @@ extension Ghostty { return } - default: assertionFailure() } @@ -1648,7 +1735,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_mouse_over_link_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("mouse over link does nothing with an app target") return @@ -1664,7 +1751,6 @@ extension Ghostty { let buffer = Data(bytes: v.url!, count: v.len) surfaceView.hoverUrl = String(data: buffer, encoding: .utf8) - default: assertionFailure() } @@ -1674,7 +1760,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_initial_size_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("initial size does nothing with an app target") return @@ -1682,8 +1768,7 @@ extension Ghostty { case GHOSTTY_TARGET_SURFACE: guard let surface = target.target.surface else { return } guard let surfaceView = self.surfaceView(from: surface) else { return } - surfaceView.initialSize = NSMakeSize(Double(v.width), Double(v.height)) - + surfaceView.initialSize = NSSize(width: Double(v.width), height: Double(v.height)) default: assertionFailure() @@ -1693,7 +1778,7 @@ extension Ghostty { private static func resetWindowSize( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("reset window size does nothing with an app target") return @@ -1706,7 +1791,6 @@ extension Ghostty { object: surfaceView ) - default: assertionFailure() } @@ -1716,7 +1800,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_cell_size_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("mouse over link does nothing with an app target") return @@ -1738,7 +1822,7 @@ extension Ghostty { private static func renderInspector( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("mouse over link does nothing with an app target") return @@ -1760,7 +1844,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_renderer_health_e) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("mouse over link does nothing with an app target") return @@ -1785,7 +1869,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_key_sequence_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("key sequence does nothing with an app target") return @@ -1817,7 +1901,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_key_table_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("key table does nothing with an app target") return @@ -1842,7 +1926,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_progress_report_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("progress report does nothing with an app target") return @@ -1850,7 +1934,7 @@ extension Ghostty { case GHOSTTY_TARGET_SURFACE: guard let surface = target.target.surface else { return } guard let surfaceView = self.surfaceView(from: surface) else { return } - + let progressReport = Ghostty.Action.ProgressReport(c: v) DispatchQueue.main.async { if progressReport.state == .remove { @@ -1869,7 +1953,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_scrollbar_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("scrollbar does nothing with an app target") return @@ -1877,7 +1961,7 @@ extension Ghostty { case GHOSTTY_TARGET_SURFACE: guard let surface = target.target.surface else { return } guard let surfaceView = self.surfaceView(from: surface) else { return } - + let scrollbar = Ghostty.Action.Scrollbar(c: v) NotificationCenter.default.post( name: .ghosttyDidUpdateScrollbar, @@ -1896,7 +1980,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_start_search_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("start_search does nothing with an app target") return @@ -1914,7 +1998,7 @@ extension Ghostty { } else { surfaceView.searchState = Ghostty.SurfaceView.SearchState(from: startSearch) } - + NotificationCenter.default.post(name: .ghosttySearchFocus, object: surfaceView) } @@ -1926,7 +2010,7 @@ extension Ghostty { private static func endSearch( _ app: ghostty_app_t, target: ghostty_target_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("end_search does nothing with an app target") return @@ -1948,7 +2032,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_search_total_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("search_total does nothing with an app target") return @@ -1971,7 +2055,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, v: ghostty_action_search_selected_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("search_selected does nothing with an app target") return @@ -1993,14 +2077,13 @@ extension Ghostty { private static func configReload( _ app: ghostty_app_t, target: ghostty_target_s, - v: ghostty_action_reload_config_s) - { + v: ghostty_action_reload_config_s) { logger.info("config reload notification") guard let app_ud = ghostty_app_userdata(app) else { return } let ghostty = Unmanaged.fromOpaque(app_ud).takeUnretainedValue() - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: ghostty.reloadConfig(soft: v.soft) return @@ -2026,7 +2109,7 @@ extension Ghostty { // something so apprt's do not have to do this. let config = Config(clone: v.config) - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: // Notify the world that the app config changed NotificationCenter.default.post( @@ -2066,7 +2149,7 @@ extension Ghostty { _ app: ghostty_app_t, target: ghostty_target_s, change: ghostty_action_color_change_s) { - switch (target.tag) { + switch target.tag { case GHOSTTY_TARGET_APP: Ghostty.logger.warning("color change does nothing with an app target") return @@ -2087,7 +2170,6 @@ extension Ghostty { } } - // MARK: User Notifications /// Handle a received user notification. This is called when a user notification is clicked or dismissed by the user @@ -2097,7 +2179,7 @@ extension Ghostty { let uuid = UUID(uuidString: uuidString), let surface = delegate?.findSurface(forUUID: uuid) else { return } - switch (response.actionIdentifier) { + switch response.actionIdentifier { case UNNotificationDefaultActionIdentifier, Ghostty.userNotificationActionShow: // The user clicked on a notification surface.handleUserNotification(notification: response.notification, focus: true) diff --git a/macos/Sources/Ghostty/Ghostty.Config.swift b/macos/Sources/Ghostty/Ghostty.Config.swift index c64646e25df..239f458e330 100644 --- a/macos/Sources/Ghostty/Ghostty.Config.swift +++ b/macos/Sources/Ghostty/Ghostty.Config.swift @@ -7,7 +7,7 @@ extension Ghostty { // The underlying C pointer to the Ghostty config structure. This // should never be accessed directly. Any operations on this should // be called from the functions on this or another class. - private(set) var config: ghostty_config_t? = nil { + private(set) var config: ghostty_config_t? { didSet { // Free the old value whenever we change guard let old = oldValue else { return } @@ -22,7 +22,7 @@ extension Ghostty { var errors: [String] { guard let cfg = self.config else { return [] } - var diags: [String] = []; + var diags: [String] = [] let diagsCount = ghostty_config_diagnostics_count(cfg) for i in 0.. 0 { logger.warning("config error: \(diagsCount) configuration errors on reload") - var diags: [String] = []; + var diags: [String] = [] for i in 0..? + let key = "notify-on-command-finish" + guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .never } + guard let ptr = v else { return .never } + return NotifyOnCommandFinish(rawValue: String(cString: ptr)) ?? .never + } + + var notifyOnCommandFinishAction: NotifyOnCommandFinishAction { + let defaultValue = NotifyOnCommandFinishAction.bell + guard let config = self.config else { return defaultValue } + var v: CUnsignedInt = 0 + let key = "notify-on-command-finish-action" + guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } + return .init(rawValue: v) + } + + var notifyOnCommandFinishAfter: Duration { + guard let config = self.config else { return .seconds(5) } + var v: UInt = 0 + let key = "notify-on-command-finish-after" + _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) + return .milliseconds(v) + } + var splitPreserveZoom: SplitPreserveZoom { guard let config = self.config else { return .init() } var v: CUnsignedInt = 0 @@ -144,7 +187,7 @@ extension Ghostty { var initialWindow: Bool { guard let config = self.config else { return true } - var v = true; + var v = true let key = "initial-window" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v @@ -152,7 +195,7 @@ extension Ghostty { var shouldQuitAfterLastWindowClosed: Bool { guard let config = self.config else { return true } - var v = false; + var v = false let key = "quit-after-last-window-closed" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v @@ -160,7 +203,7 @@ extension Ghostty { var title: String? { guard let config = self.config else { return nil } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "title" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return nil } guard let ptr = v else { return nil } @@ -169,7 +212,7 @@ extension Ghostty { var windowSaveState: String { guard let config = self.config else { return "" } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "window-save-state" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return "" } guard let ptr = v else { return "" } @@ -192,7 +235,7 @@ extension Ghostty { var windowNewTabPosition: String { guard let config = self.config else { return "" } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "window-new-tab-position" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return "" } guard let ptr = v else { return "" } @@ -202,7 +245,7 @@ extension Ghostty { var windowDecorations: Bool { let defaultValue = true guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "window-decoration" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -212,7 +255,7 @@ extension Ghostty { var windowTheme: String? { guard let config = self.config else { return nil } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "window-theme" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return nil } guard let ptr = v else { return nil } @@ -227,19 +270,51 @@ extension Ghostty { return v } + /// Returns the fullscreen mode if fullscreen is enabled, or nil if disabled. + /// This parses the `fullscreen` enum config which supports both + /// native and non-native fullscreen modes. + #if canImport(AppKit) + var windowFullscreen: FullscreenMode? { + guard let config = self.config else { return nil } + var v: UnsafePointer? + let key = "fullscreen" + guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return nil } + guard let ptr = v else { return nil } + let str = String(cString: ptr) + return switch str { + case "false": + nil + case "true": + .native + case "non-native": + .nonNative + case "non-native-visible-menu": + .nonNativeVisibleMenu + case "non-native-padded-notch": + .nonNativePaddedNotch + default: + nil + } + } + #else var windowFullscreen: Bool { - guard let config = self.config else { return true } - var v = false + guard let config = self.config else { return false } + var v: UnsafePointer? let key = "fullscreen" - _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) - return v + guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return false } + guard let ptr = v else { return false } + let str = String(cString: ptr) + return str != "false" } + #endif + /// Returns the fullscreen mode for toggle actions (keybindings). + /// This is controlled by `macos-non-native-fullscreen` config. #if canImport(AppKit) var windowFullscreenMode: FullscreenMode { let defaultValue: FullscreenMode = .native guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-non-native-fullscreen" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -261,7 +336,7 @@ extension Ghostty { var windowTitleFontFamily: String? { guard let config = self.config else { return nil } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "window-title-font-family" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return nil } guard let ptr = v else { return nil } @@ -271,7 +346,7 @@ extension Ghostty { var macosWindowButtons: MacOSWindowButtons { let defaultValue = MacOSWindowButtons.visible guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-window-buttons" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -282,7 +357,7 @@ extension Ghostty { var macosTitlebarStyle: String { let defaultValue = "transparent" guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-titlebar-style" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -292,7 +367,7 @@ extension Ghostty { var macosTitlebarProxyIcon: MacOSTitlebarProxyIcon { let defaultValue = MacOSTitlebarProxyIcon.visible guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-titlebar-proxy-icon" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -303,7 +378,7 @@ extension Ghostty { var macosDockDropBehavior: MacDockDropBehavior { let defaultValue = MacDockDropBehavior.new_tab guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-dock-drop-behavior" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -313,7 +388,7 @@ extension Ghostty { var macosWindowShadow: Bool { guard let config = self.config else { return false } - var v = false; + var v = false let key = "macos-window-shadow" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v @@ -322,7 +397,7 @@ extension Ghostty { var macosIcon: MacOSIcon { let defaultValue = MacOSIcon.official guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-icon" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -334,7 +409,7 @@ extension Ghostty { #if os(macOS) let defaultValue = NSString("~/.config/ghostty/Ghostty.icns").expandingTildeInPath guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-custom-icon" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -348,7 +423,7 @@ extension Ghostty { var macosIconFrame: MacOSIconFrame { let defaultValue = MacOSIconFrame.aluminum guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-icon-frame" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -376,7 +451,7 @@ extension Ghostty { var macosHidden: MacHidden { guard let config = self.config else { return .never } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-hidden" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .never } guard let ptr = v else { return .never } @@ -384,18 +459,18 @@ extension Ghostty { return MacHidden(rawValue: str) ?? .never } - var focusFollowsMouse : Bool { + var focusFollowsMouse: Bool { guard let config = self.config else { return false } - var v = false; + var v = false let key = "focus-follows-mouse" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v } var backgroundColor: Color { - var color: ghostty_config_color_s = .init(); + var color: ghostty_config_color_s = .init() let bg_key = "background" - if (!ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8)))) { + if !ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8))) { #if os(macOS) return Color(NSColor.windowBackgroundColor) #elseif os(iOS) @@ -417,7 +492,7 @@ extension Ghostty { var v: Double = 1 let key = "background-opacity" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) - return v; + return v } var backgroundBlur: BackgroundBlur { @@ -439,11 +514,11 @@ extension Ghostty { var unfocusedSplitFill: Color { guard let config = self.config else { return .white } - var color: ghostty_config_color_s = .init(); + var color: ghostty_config_color_s = .init() let key = "unfocused-split-fill" - if (!ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8)))) { + if !ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8))) { let bg_key = "background" - _ = ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8))); + _ = ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8))) } return .init( @@ -460,9 +535,9 @@ extension Ghostty { guard let config = self.config else { return Color(newColor) } - var color: ghostty_config_color_s = .init(); + var color: ghostty_config_color_s = .init() let key = "split-divider-color" - if (!ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8)))) { + if !ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8))) { return Color(newColor) } @@ -476,7 +551,7 @@ extension Ghostty { #if canImport(AppKit) var quickTerminalPosition: QuickTerminalPosition { guard let config = self.config else { return .top } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "quick-terminal-position" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .top } guard let ptr = v else { return .top } @@ -486,7 +561,7 @@ extension Ghostty { var quickTerminalScreen: QuickTerminalScreen { guard let config = self.config else { return .main } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "quick-terminal-screen" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .main } guard let ptr = v else { return .main } @@ -512,7 +587,7 @@ extension Ghostty { var quickTerminalSpaceBehavior: QuickTerminalSpaceBehavior { guard let config = self.config else { return .move } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "quick-terminal-space-behavior" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .move } guard let ptr = v else { return .move } @@ -531,7 +606,7 @@ extension Ghostty { var resizeOverlay: ResizeOverlay { guard let config = self.config else { return .after_first } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "resize-overlay" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return .after_first } guard let ptr = v else { return .after_first } @@ -542,7 +617,7 @@ extension Ghostty { var resizeOverlayPosition: ResizeOverlayPosition { let defaultValue = ResizeOverlayPosition.center guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "resize-overlay-position" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -555,7 +630,7 @@ extension Ghostty { var v: UInt = 0 let key = "resize-overlay-duration" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) - return v; + return v } var undoTimeout: Duration { @@ -568,7 +643,7 @@ extension Ghostty { var autoUpdate: AutoUpdate? { guard let config = self.config else { return nil } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "auto-update" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return nil } guard let ptr = v else { return nil } @@ -579,7 +654,7 @@ extension Ghostty { var autoUpdateChannel: AutoUpdateChannel { let defaultValue = AutoUpdateChannel.stable guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "auto-update-channel" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -589,7 +664,7 @@ extension Ghostty { var autoSecureInput: Bool { guard let config = self.config else { return true } - var v = false; + var v = false let key = "macos-auto-secure-input" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v @@ -597,15 +672,23 @@ extension Ghostty { var secureInputIndication: Bool { guard let config = self.config else { return true } - var v = false; + var v = false let key = "macos-secure-input-indication" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v } + var macosAppleScript: Bool { + guard let config = self.config else { return true } + var v = false + let key = "macos-applescript" + _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) + return v + } + var maximize: Bool { guard let config = self.config else { return true } - var v = false; + var v = false let key = "maximize" _ = ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) return v @@ -614,7 +697,7 @@ extension Ghostty { var macosShortcuts: MacShortcuts { let defaultValue = MacShortcuts.ask guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "macos-shortcuts" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -625,7 +708,7 @@ extension Ghostty { var scrollbar: Scrollbar { let defaultValue = Scrollbar.system guard let config = self.config else { return defaultValue } - var v: UnsafePointer? = nil + var v: UnsafePointer? let key = "scrollbar" guard ghostty_config_get(config, &v, key, UInt(key.lengthOfBytes(using: .utf8))) else { return defaultValue } guard let ptr = v else { return defaultValue } @@ -648,7 +731,7 @@ extension Ghostty { // MARK: Configuration Enums extension Ghostty.Config { - enum AutoUpdate : String { + enum AutoUpdate: String { case off case check case download @@ -731,13 +814,13 @@ extension Ghostty.Config { static let navigation = SplitPreserveZoom(rawValue: 1 << 0) } - + enum MacDockDropBehavior: String { case new_tab = "new-tab" case new_window = "new-window" } - enum MacHidden : String { + enum MacHidden: String { case never case always } @@ -753,13 +836,13 @@ extension Ghostty.Config { case never } - enum ResizeOverlay : String { + enum ResizeOverlay: String { case always case never case after_first = "after-first" } - enum ResizeOverlayPosition : String { + enum ResizeOverlayPosition: String { case center case top_left = "top-left" case top_center = "top-center" @@ -769,30 +852,30 @@ extension Ghostty.Config { case bottom_right = "bottom-right" func top() -> Bool { - switch (self) { - case .top_left, .top_center, .top_right: return true; - default: return false; + switch self { + case .top_left, .top_center, .top_right: return true + default: return false } } func bottom() -> Bool { - switch (self) { - case .bottom_left, .bottom_center, .bottom_right: return true; - default: return false; + switch self { + case .bottom_left, .bottom_center, .bottom_right: return true + default: return false } } func left() -> Bool { - switch (self) { - case .top_left, .bottom_left: return true; - default: return false; + switch self { + case .top_left, .bottom_left: return true + default: return false } } func right() -> Bool { - switch (self) { - case .top_right, .bottom_right: return true; - default: return false; + switch self { + case .top_right, .bottom_right: return true + default: return false } } } @@ -810,4 +893,17 @@ extension Ghostty.Config { } } } + + enum NotifyOnCommandFinish: String { + case never + case unfocused + case always + } + + struct NotifyOnCommandFinishAction: OptionSet { + let rawValue: CUnsignedInt + + static let bell = NotifyOnCommandFinishAction(rawValue: 1 << 0) + static let notify = NotifyOnCommandFinishAction(rawValue: 1 << 1) + } } diff --git a/macos/Sources/Ghostty/Ghostty.ConfigTypes.swift b/macos/Sources/Ghostty/Ghostty.ConfigTypes.swift new file mode 100644 index 00000000000..90470f38a87 --- /dev/null +++ b/macos/Sources/Ghostty/Ghostty.ConfigTypes.swift @@ -0,0 +1,49 @@ +// This file contains the configuration types for Ghostty so that alternate targets +// can get typed information without depending on all the dependencies of GhosttyKit. + +extension Ghostty { + /// A configuration path value that may be optional or required. + struct ConfigPath: Sendable { + let path: String + let optional: Bool + } + + /// macos-icon + enum MacOSIcon: String, Sendable { + case official + case blueprint + case chalkboard + case glass + case holographic + case microchip + case paper + case retro + case xray + case custom + case customStyle = "custom-style" + + /// Bundled asset name for built-in icons + var assetName: String? { + switch self { + case .official: return nil + case .blueprint: return "BlueprintImage" + case .chalkboard: return "ChalkboardImage" + case .microchip: return "MicrochipImage" + case .glass: return "GlassImage" + case .holographic: return "HolographicImage" + case .paper: return "PaperImage" + case .retro: return "RetroImage" + case .xray: return "XrayImage" + case .custom, .customStyle: return nil + } + } + } + + /// macos-icon-frame + enum MacOSIconFrame: String, Codable { + case aluminum + case beige + case plastic + case chrome + } +} diff --git a/macos/Sources/Ghostty/Ghostty.Input.swift b/macos/Sources/Ghostty/Ghostty.Input.swift index 7b2905abb36..27f4d05ddb1 100644 --- a/macos/Sources/Ghostty/Ghostty.Input.swift +++ b/macos/Sources/Ghostty/Ghostty.Input.swift @@ -18,7 +18,7 @@ extension Ghostty { /// be used for things like NSMenu that only support keyboard shortcuts anyways. static func keyboardShortcut(for trigger: ghostty_input_trigger_s) -> KeyboardShortcut? { let key: KeyEquivalent - switch (trigger.tag) { + switch trigger.tag { case GHOSTTY_TRIGGER_PHYSICAL: // Only functional keys can be converted to a KeyboardShortcut. Other physical // mappings cannot because KeyboardShortcut in Swift is inherently layout-dependent. @@ -49,11 +49,11 @@ extension Ghostty { /// Returns the event modifier flags set for the Ghostty mods enum. static func eventModifierFlags(mods: ghostty_input_mods_e) -> NSEvent.ModifierFlags { - var flags = NSEvent.ModifierFlags(rawValue: 0); - if (mods.rawValue & GHOSTTY_MODS_SHIFT.rawValue != 0) { flags.insert(.shift) } - if (mods.rawValue & GHOSTTY_MODS_CTRL.rawValue != 0) { flags.insert(.control) } - if (mods.rawValue & GHOSTTY_MODS_ALT.rawValue != 0) { flags.insert(.option) } - if (mods.rawValue & GHOSTTY_MODS_SUPER.rawValue != 0) { flags.insert(.command) } + var flags = NSEvent.ModifierFlags(rawValue: 0) + if mods.rawValue & GHOSTTY_MODS_SHIFT.rawValue != 0 { flags.insert(.shift) } + if mods.rawValue & GHOSTTY_MODS_CTRL.rawValue != 0 { flags.insert(.control) } + if mods.rawValue & GHOSTTY_MODS_ALT.rawValue != 0 { flags.insert(.option) } + if mods.rawValue & GHOSTTY_MODS_SUPER.rawValue != 0 { flags.insert(.command) } return flags } @@ -61,19 +61,19 @@ extension Ghostty { static func ghosttyMods(_ flags: NSEvent.ModifierFlags) -> ghostty_input_mods_e { var mods: UInt32 = GHOSTTY_MODS_NONE.rawValue - if (flags.contains(.shift)) { mods |= GHOSTTY_MODS_SHIFT.rawValue } - if (flags.contains(.control)) { mods |= GHOSTTY_MODS_CTRL.rawValue } - if (flags.contains(.option)) { mods |= GHOSTTY_MODS_ALT.rawValue } - if (flags.contains(.command)) { mods |= GHOSTTY_MODS_SUPER.rawValue } - if (flags.contains(.capsLock)) { mods |= GHOSTTY_MODS_CAPS.rawValue } + if flags.contains(.shift) { mods |= GHOSTTY_MODS_SHIFT.rawValue } + if flags.contains(.control) { mods |= GHOSTTY_MODS_CTRL.rawValue } + if flags.contains(.option) { mods |= GHOSTTY_MODS_ALT.rawValue } + if flags.contains(.command) { mods |= GHOSTTY_MODS_SUPER.rawValue } + if flags.contains(.capsLock) { mods |= GHOSTTY_MODS_CAPS.rawValue } // Handle sided input. We can't tell that both are pressed in the // Ghostty structure but that's okay -- we don't use that information. let rawFlags = flags.rawValue - if (rawFlags & UInt(NX_DEVICERSHIFTKEYMASK) != 0) { mods |= GHOSTTY_MODS_SHIFT_RIGHT.rawValue } - if (rawFlags & UInt(NX_DEVICERCTLKEYMASK) != 0) { mods |= GHOSTTY_MODS_CTRL_RIGHT.rawValue } - if (rawFlags & UInt(NX_DEVICERALTKEYMASK) != 0) { mods |= GHOSTTY_MODS_ALT_RIGHT.rawValue } - if (rawFlags & UInt(NX_DEVICERCMDKEYMASK) != 0) { mods |= GHOSTTY_MODS_SUPER_RIGHT.rawValue } + if rawFlags & UInt(NX_DEVICERSHIFTKEYMASK) != 0 { mods |= GHOSTTY_MODS_SHIFT_RIGHT.rawValue } + if rawFlags & UInt(NX_DEVICERCTLKEYMASK) != 0 { mods |= GHOSTTY_MODS_CTRL_RIGHT.rawValue } + if rawFlags & UInt(NX_DEVICERALTKEYMASK) != 0 { mods |= GHOSTTY_MODS_ALT_RIGHT.rawValue } + if rawFlags & UInt(NX_DEVICERCMDKEYMASK) != 0 { mods |= GHOSTTY_MODS_SUPER_RIGHT.rawValue } return ghostty_input_mods_e(mods) } @@ -81,7 +81,7 @@ extension Ghostty { /// A map from the Ghostty key enum to the keyEquivalent string for shortcuts. Note that /// not all ghostty key enum values are represented here because not all of them can be /// mapped to a KeyEquivalent. - static let keyToEquivalent: [ghostty_input_key_e : KeyEquivalent] = [ + static let keyToEquivalent: [ghostty_input_key_e: KeyEquivalent] = [ // Function keys GHOSTTY_KEY_ARROW_UP: .upArrow, GHOSTTY_KEY_ARROW_DOWN: .downArrow, @@ -243,7 +243,7 @@ extension Ghostty.Input { extension Ghostty.Input.Action: AppEnum { static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Key Action") - static var caseDisplayRepresentations: [Ghostty.Input.Action : DisplayRepresentation] = [ + static var caseDisplayRepresentations: [Ghostty.Input.Action: DisplayRepresentation] = [ .release: "Release", .press: "Press", .repeat: "Repeat" @@ -355,7 +355,7 @@ extension Ghostty.Input { extension Ghostty.Input.MouseState: AppEnum { static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Mouse State") - static var caseDisplayRepresentations: [Ghostty.Input.MouseState : DisplayRepresentation] = [ + static var caseDisplayRepresentations: [Ghostty.Input.MouseState: DisplayRepresentation] = [ .release: "Release", .press: "Press" ] @@ -420,7 +420,7 @@ extension Ghostty.Input { extension Ghostty.Input.MouseButton: AppEnum { static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Mouse Button") - static var caseDisplayRepresentations: [Ghostty.Input.MouseButton : DisplayRepresentation] = [ + static var caseDisplayRepresentations: [Ghostty.Input.MouseButton: DisplayRepresentation] = [ .unknown: "Unknown", .left: "Left", .right: "Right", @@ -504,7 +504,7 @@ extension Ghostty.Input { extension Ghostty.Input.Momentum: AppEnum { static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Scroll Momentum") - static var caseDisplayRepresentations: [Ghostty.Input.Momentum : DisplayRepresentation] = [ + static var caseDisplayRepresentations: [Ghostty.Input.Momentum: DisplayRepresentation] = [ .none: "None", .began: "Began", .stationary: "Stationary", @@ -1223,7 +1223,7 @@ extension Ghostty.Input.Key: AppEnum { ] } - static var caseDisplayRepresentations: [Ghostty.Input.Key : DisplayRepresentation] = [ + static var caseDisplayRepresentations: [Ghostty.Input.Key: DisplayRepresentation] = [ // Letters (A-Z) .a: "A", .b: "B", .c: "C", .d: "D", .e: "E", .f: "F", .g: "G", .h: "H", .i: "I", .j: "J", .k: "K", .l: "L", .m: "M", .n: "N", .o: "O", .p: "P", .q: "Q", .r: "R", .s: "S", .t: "T", diff --git a/macos/Sources/Ghostty/Ghostty.Surface.swift b/macos/Sources/Ghostty/Ghostty.Surface.swift index 7cb32ed71ae..b072db15e36 100644 --- a/macos/Sources/Ghostty/Ghostty.Surface.swift +++ b/macos/Sources/Ghostty/Ghostty.Surface.swift @@ -40,7 +40,7 @@ extension Ghostty { @MainActor func sendText(_ text: String) { let len = text.utf8CString.count - if (len == 0) { return } + if len == 0 { return } text.withCString { ptr in // len includes the null terminator so we do len - 1 @@ -149,7 +149,7 @@ extension Ghostty { @MainActor func perform(action: String) -> Bool { let len = action.utf8CString.count - if (len == 0) { return false } + if len == 0 { return false } return action.withCString { cString in ghostty_surface_binding_action(surface, cString, UInt(len - 1)) } diff --git a/macos/Sources/Ghostty/GhosttyPackage.swift b/macos/Sources/Ghostty/GhosttyPackage.swift new file mode 100644 index 00000000000..03211862fba --- /dev/null +++ b/macos/Sources/Ghostty/GhosttyPackage.swift @@ -0,0 +1,453 @@ +import os +import SwiftUI +import GhosttyKit + +// MARK: C Extensions + +/// A command is fully self-contained so it is Sendable. +extension ghostty_command_s: @unchecked @retroactive Sendable {} + +/// A surface is sendable because it is just a reference type. Using the surface in parameters +/// may be unsafe but the value itself is safe to send across threads. +extension ghostty_surface_t: @unchecked @retroactive Sendable {} + +extension Ghostty { + // The user notification category identifier + static let userNotificationCategory = "com.mitchellh.ghostty.userNotification" + + // The user notification "Show" action + static let userNotificationActionShow = "com.mitchellh.ghostty.userNotification.Show" +} + +// MARK: Build Info + +extension Ghostty { + struct Info { + var mode: ghostty_build_mode_e + var version: String + } + + static var info: Info { + let raw = ghostty_info() + let version = NSString( + bytes: raw.version, + length: Int(raw.version_len), + encoding: NSUTF8StringEncoding + ) ?? "unknown" + + return Info(mode: raw.build_mode, version: String(version)) + } +} + +// MARK: General Helpers + +extension Ghostty { + enum LaunchSource: String { + case cli + case app + case zig_run + } + + /// Returns the mechanism that launched the app. This is based on an env var so + /// its up to the env var being set in the correct circumstance. + static var launchSource: LaunchSource { + guard let envValue = ProcessInfo.processInfo.environment["GHOSTTY_MAC_LAUNCH_SOURCE"] else { + // We default to the CLI because the app bundle always sets the + // source. If its unset we assume we're in a CLI environment. + return .cli + } + + // If the env var is set but its unknown then we default back to the app. + return LaunchSource(rawValue: envValue) ?? .app + } +} + +// MARK: Swift Types for C Types + +extension Ghostty { + class AllocatedString { + private let cString: ghostty_string_s + + init(_ c: ghostty_string_s) { + self.cString = c + } + + var string: String { + guard let ptr = cString.ptr else { return "" } + let data = Data(bytes: ptr, count: Int(cString.len)) + return String(data: data, encoding: .utf8) ?? "" + } + + deinit { + ghostty_string_free(cString) + } + } +} + +extension Ghostty { + enum SetFloatWIndow { + case on + case off + case toggle + + static func from(_ c: ghostty_action_float_window_e) -> Self? { + switch c { + case GHOSTTY_FLOAT_WINDOW_ON: + return .on + + case GHOSTTY_FLOAT_WINDOW_OFF: + return .off + + case GHOSTTY_FLOAT_WINDOW_TOGGLE: + return .toggle + + default: + return nil + } + } + } + + enum SetSecureInput { + case on + case off + case toggle + + static func from(_ c: ghostty_action_secure_input_e) -> Self? { + switch c { + case GHOSTTY_SECURE_INPUT_ON: + return .on + + case GHOSTTY_SECURE_INPUT_OFF: + return .off + + case GHOSTTY_SECURE_INPUT_TOGGLE: + return .toggle + + default: + return nil + } + } + } + + /// An enum that is used for the directions that a split focus event can change. + enum SplitFocusDirection { + case previous, next, up, down, left, right + + /// Initialize from a Ghostty API enum. + static func from(direction: ghostty_action_goto_split_e) -> Self? { + switch direction { + case GHOSTTY_GOTO_SPLIT_PREVIOUS: + return .previous + + case GHOSTTY_GOTO_SPLIT_NEXT: + return .next + + case GHOSTTY_GOTO_SPLIT_UP: + return .up + + case GHOSTTY_GOTO_SPLIT_DOWN: + return .down + + case GHOSTTY_GOTO_SPLIT_LEFT: + return .left + + case GHOSTTY_GOTO_SPLIT_RIGHT: + return .right + + default: + return nil + } + } + + func toNative() -> ghostty_action_goto_split_e { + switch self { + case .previous: + return GHOSTTY_GOTO_SPLIT_PREVIOUS + + case .next: + return GHOSTTY_GOTO_SPLIT_NEXT + + case .up: + return GHOSTTY_GOTO_SPLIT_UP + + case .down: + return GHOSTTY_GOTO_SPLIT_DOWN + + case .left: + return GHOSTTY_GOTO_SPLIT_LEFT + + case .right: + return GHOSTTY_GOTO_SPLIT_RIGHT + } + } + } + + /// Enum used for resizing splits. This is the direction the split divider will move. + enum SplitResizeDirection { + case up, down, left, right + + static func from(direction: ghostty_action_resize_split_direction_e) -> Self? { + switch direction { + case GHOSTTY_RESIZE_SPLIT_UP: + return .up + case GHOSTTY_RESIZE_SPLIT_DOWN: + return .down + case GHOSTTY_RESIZE_SPLIT_LEFT: + return .left + case GHOSTTY_RESIZE_SPLIT_RIGHT: + return .right + default: + return nil + } + } + + func toNative() -> ghostty_action_resize_split_direction_e { + switch self { + case .up: + return GHOSTTY_RESIZE_SPLIT_UP + case .down: + return GHOSTTY_RESIZE_SPLIT_DOWN + case .left: + return GHOSTTY_RESIZE_SPLIT_LEFT + case .right: + return GHOSTTY_RESIZE_SPLIT_RIGHT + } + } + } +} + +#if canImport(AppKit) +// MARK: SplitFocusDirection Extensions + +extension Ghostty.SplitFocusDirection { + /// Convert to a SplitTree.FocusDirection for the given ViewType. + func toSplitTreeFocusDirection() -> SplitTree.FocusDirection { + switch self { + case .previous: + return .previous + + case .next: + return .next + + case .up: + return .spatial(.up) + + case .down: + return .spatial(.down) + + case .left: + return .spatial(.left) + + case .right: + return .spatial(.right) + } + } +} +#endif + +extension Ghostty { + /// The type of a clipboard request + enum ClipboardRequest { + /// A direct paste of clipboard contents + case paste + + /// An application is attempting to read from the clipboard using OSC 52 + case osc_52_read + + /// An application is attempting to write to the clipboard using OSC 52 + case osc_52_write(OSPasteboard?) + + /// The text to show in the clipboard confirmation prompt for a given request type + func text() -> String { + switch self { + case .paste: + return """ + Pasting this text to the terminal may be dangerous as it looks like some commands may be executed. + """ + case .osc_52_read: + return """ + An application is attempting to read from the clipboard. + The current clipboard contents are shown below. + """ + case .osc_52_write: + return """ + An application is attempting to write to the clipboard. + The content to write is shown below. + """ + } + } + + static func from(request: ghostty_clipboard_request_e) -> ClipboardRequest? { + switch request { + case GHOSTTY_CLIPBOARD_REQUEST_PASTE: + return .paste + case GHOSTTY_CLIPBOARD_REQUEST_OSC_52_READ: + return .osc_52_read + case GHOSTTY_CLIPBOARD_REQUEST_OSC_52_WRITE: + return .osc_52_write(nil) + default: + return nil + } + } + } + + struct ClipboardContent { + let mime: String + let data: String + + static func from(content: ghostty_clipboard_content_s) -> ClipboardContent? { + guard let mimePtr = content.mime, + let dataPtr = content.data else { + return nil + } + + return ClipboardContent( + mime: String(cString: mimePtr), + data: String(cString: dataPtr) + ) + } + } + + /// Enum for the macos-window-buttons config option + enum MacOSWindowButtons: String { + case visible + case hidden + } + + /// Enum for the macos-titlebar-proxy-icon config option + enum MacOSTitlebarProxyIcon: String { + case visible + case hidden + } + + /// Enum for auto-update-channel config option + enum AutoUpdateChannel: String { + case tip + case stable + } +} + +// MARK: Surface Notification + +extension Notification.Name { + /// Configuration change. If the object is nil then it is app-wide. Otherwise its surface-specific. + static let ghosttyConfigDidChange = Notification.Name("com.mitchellh.ghostty.configDidChange") + static let GhosttyConfigChangeKey = ghosttyConfigDidChange.rawValue + + /// Color change. Object is the surface changing. + static let ghosttyColorDidChange = Notification.Name("com.mitchellh.ghostty.ghosttyColorDidChange") + static let GhosttyColorChangeKey = ghosttyColorDidChange.rawValue + + /// Goto tab. Has tab index in the userinfo. + static let ghosttyMoveTab = Notification.Name("com.mitchellh.ghostty.moveTab") + static let GhosttyMoveTabKey = ghosttyMoveTab.rawValue + + /// Close tab + static let ghosttyCloseTab = Notification.Name("com.mitchellh.ghostty.closeTab") + + /// Close other tabs + static let ghosttyCloseOtherTabs = Notification.Name("com.mitchellh.ghostty.closeOtherTabs") + + /// Close tabs to the right of the focused tab + static let ghosttyCloseTabsOnTheRight = Notification.Name("com.mitchellh.ghostty.closeTabsOnTheRight") + + /// Close window + static let ghosttyCloseWindow = Notification.Name("com.mitchellh.ghostty.closeWindow") + + /// Resize the window to a default size. + static let ghosttyResetWindowSize = Notification.Name("com.mitchellh.ghostty.resetWindowSize") + + /// Ring the bell + static let ghosttyBellDidRing = Notification.Name("com.mitchellh.ghostty.ghosttyBellDidRing") + + /// Readonly mode changed + static let ghosttyDidChangeReadonly = Notification.Name("com.mitchellh.ghostty.didChangeReadonly") + static let ReadonlyKey = ghosttyDidChangeReadonly.rawValue + ".readonly" + static let ghosttyCommandPaletteDidToggle = Notification.Name("com.mitchellh.ghostty.commandPaletteDidToggle") + + /// Toggle maximize of current window + static let ghosttyMaximizeDidToggle = Notification.Name("com.mitchellh.ghostty.maximizeDidToggle") + + /// Notification sent when scrollbar updates + static let ghosttyDidUpdateScrollbar = Notification.Name("com.mitchellh.ghostty.didUpdateScrollbar") + static let ScrollbarKey = ghosttyDidUpdateScrollbar.rawValue + ".scrollbar" + + /// Focus the search field + static let ghosttySearchFocus = Notification.Name("com.mitchellh.ghostty.searchFocus") +} + +// NOTE: I am moving all of these to Notification.Name extensions over time. This +// namespace was the old namespace. +extension Ghostty.Notification { + /// Used to pass a configuration along when creating a new tab/window/split. + static let NewSurfaceConfigKey = "com.mitchellh.ghostty.newSurfaceConfig" + + /// Posted when a new split is requested. The sending object will be the surface that had focus. The + /// userdata has one key "direction" with the direction to split to. + static let ghosttyNewSplit = Notification.Name("com.mitchellh.ghostty.newSplit") + + /// Close the calling surface. + static let ghosttyCloseSurface = Notification.Name("com.mitchellh.ghostty.closeSurface") + + /// Focus previous/next split. Has a SplitFocusDirection in the userinfo. + static let ghosttyFocusSplit = Notification.Name("com.mitchellh.ghostty.focusSplit") + static let SplitDirectionKey = ghosttyFocusSplit.rawValue + + /// Goto tab. Has tab index in the userinfo. + static let ghosttyGotoTab = Notification.Name("com.mitchellh.ghostty.gotoTab") + static let GotoTabKey = ghosttyGotoTab.rawValue + + /// New tab. Has base surface config requested in userinfo. + static let ghosttyNewTab = Notification.Name("com.mitchellh.ghostty.newTab") + + /// New window. Has base surface config requested in userinfo. + static let ghosttyNewWindow = Notification.Name("com.mitchellh.ghostty.newWindow") + + /// Present terminal. Bring the surface's window to focus without activating the app. + static let ghosttyPresentTerminal = Notification.Name("com.mitchellh.ghostty.presentTerminal") + + /// Toggle fullscreen of current window + static let ghosttyToggleFullscreen = Notification.Name("com.mitchellh.ghostty.toggleFullscreen") + static let FullscreenModeKey = ghosttyToggleFullscreen.rawValue + + /// Notification sent to toggle split maximize/unmaximize. + static let didToggleSplitZoom = Notification.Name("com.mitchellh.ghostty.didToggleSplitZoom") + + /// Notification + static let didReceiveInitialWindowFrame = Notification.Name("com.mitchellh.ghostty.didReceiveInitialWindowFrame") + static let FrameKey = "com.mitchellh.ghostty.frame" + + /// Notification to render the inspector for a surface + static let inspectorNeedsDisplay = Notification.Name("com.mitchellh.ghostty.inspectorNeedsDisplay") + + /// Notification to show/hide the inspector + static let didControlInspector = Notification.Name("com.mitchellh.ghostty.didControlInspector") + + static let confirmClipboard = Notification.Name("com.mitchellh.ghostty.confirmClipboard") + static let ConfirmClipboardStrKey = confirmClipboard.rawValue + ".str" + static let ConfirmClipboardStateKey = confirmClipboard.rawValue + ".state" + static let ConfirmClipboardRequestKey = confirmClipboard.rawValue + ".request" + + /// Notification sent to the active split view to resize the split. + static let didResizeSplit = Notification.Name("com.mitchellh.ghostty.didResizeSplit") + static let ResizeSplitDirectionKey = didResizeSplit.rawValue + ".direction" + static let ResizeSplitAmountKey = didResizeSplit.rawValue + ".amount" + + /// Notification sent to the split root to equalize split sizes + static let didEqualizeSplits = Notification.Name("com.mitchellh.ghostty.didEqualizeSplits") + + /// Notification that renderer health changed + static let didUpdateRendererHealth = Notification.Name("com.mitchellh.ghostty.didUpdateRendererHealth") + + /// Notifications related to key sequences + static let didContinueKeySequence = Notification.Name("com.mitchellh.ghostty.didContinueKeySequence") + static let didEndKeySequence = Notification.Name("com.mitchellh.ghostty.didEndKeySequence") + static let KeySequenceKey = didContinueKeySequence.rawValue + ".key" + + /// Notifications related to key tables + static let didChangeKeyTable = Notification.Name("com.mitchellh.ghostty.didChangeKeyTable") + static let KeyTableKey = didChangeKeyTable.rawValue + ".action" +} + +// Make the input enum hashable. +extension ghostty_input_key_e: @retroactive Hashable {} diff --git a/macos/Sources/Ghostty/GhosttyPackageMeta.swift b/macos/Sources/Ghostty/GhosttyPackageMeta.swift new file mode 100644 index 00000000000..8e035c3234c --- /dev/null +++ b/macos/Sources/Ghostty/GhosttyPackageMeta.swift @@ -0,0 +1,16 @@ +import Foundation +import os + +// This defines the minimal information required so all other files can do +// `extension Ghostty` to add more to it. This purposely has minimal +// dependencies so things like our dock tile plugin can use it. +enum Ghostty { + // The primary logger used by the GhosttyKit libraries. + static let logger = Logger( + subsystem: Bundle.main.bundleIdentifier!, + category: "ghostty" + ) + + // All the notifications that will be emitted will be put here. + struct Notification {} +} diff --git a/macos/Sources/Ghostty/NSEvent+Extension.swift b/macos/Sources/Ghostty/NSEvent+Extension.swift index b67c1932e4c..55888944ecb 100644 --- a/macos/Sources/Ghostty/NSEvent+Extension.swift +++ b/macos/Sources/Ghostty/NSEvent+Extension.swift @@ -39,8 +39,7 @@ extension NSEvent { key_ev.unshifted_codepoint = 0 if type == .keyDown || type == .keyUp { if let chars = characters(byApplyingModifiers: []), - let codepoint = chars.unicodeScalars.first - { + let codepoint = chars.unicodeScalars.first { key_ev.unshifted_codepoint = codepoint.value } } diff --git a/macos/Sources/Ghostty/Package.swift b/macos/Sources/Ghostty/Package.swift deleted file mode 100644 index 15cb3a51e0c..00000000000 --- a/macos/Sources/Ghostty/Package.swift +++ /dev/null @@ -1,501 +0,0 @@ -import os -import SwiftUI -import GhosttyKit - -struct Ghostty { - // The primary logger used by the GhosttyKit libraries. - static let logger = Logger( - subsystem: Bundle.main.bundleIdentifier!, - category: "ghostty" - ) - - // All the notifications that will be emitted will be put here. - struct Notification {} - - // The user notification category identifier - static let userNotificationCategory = "com.mitchellh.ghostty.userNotification" - - // The user notification "Show" action - static let userNotificationActionShow = "com.mitchellh.ghostty.userNotification.Show" -} - -// MARK: C Extensions - -/// A command is fully self-contained so it is Sendable. -extension ghostty_command_s: @unchecked @retroactive Sendable {} - -/// A surface is sendable because it is just a reference type. Using the surface in parameters -/// may be unsafe but the value itself is safe to send across threads. -extension ghostty_surface_t: @unchecked @retroactive Sendable {} - -// MARK: Build Info - -extension Ghostty { - struct Info { - var mode: ghostty_build_mode_e - var version: String - } - - static var info: Info { - let raw = ghostty_info() - let version = NSString( - bytes: raw.version, - length: Int(raw.version_len), - encoding: NSUTF8StringEncoding - ) ?? "unknown" - - return Info(mode: raw.build_mode, version: String(version)) - } -} - -// MARK: General Helpers - -extension Ghostty { - enum LaunchSource: String { - case cli - case app - case zig_run - } - - /// Returns the mechanism that launched the app. This is based on an env var so - /// its up to the env var being set in the correct circumstance. - static var launchSource: LaunchSource { - guard let envValue = ProcessInfo.processInfo.environment["GHOSTTY_MAC_LAUNCH_SOURCE"] else { - // We default to the CLI because the app bundle always sets the - // source. If its unset we assume we're in a CLI environment. - return .cli - } - - // If the env var is set but its unknown then we default back to the app. - return LaunchSource(rawValue: envValue) ?? .app - } -} - -// MARK: Swift Types for C Types - -extension Ghostty { - class AllocatedString { - private let cString: ghostty_string_s - - init(_ c: ghostty_string_s) { - self.cString = c - } - - var string: String { - guard let ptr = cString.ptr else { return "" } - let data = Data(bytes: ptr, count: Int(cString.len)) - return String(data: data, encoding: .utf8) ?? "" - } - - deinit { - ghostty_string_free(cString) - } - } -} - -extension Ghostty { - enum SetFloatWIndow { - case on - case off - case toggle - - static func from(_ c: ghostty_action_float_window_e) -> Self? { - switch (c) { - case GHOSTTY_FLOAT_WINDOW_ON: - return .on - - case GHOSTTY_FLOAT_WINDOW_OFF: - return .off - - case GHOSTTY_FLOAT_WINDOW_TOGGLE: - return .toggle - - default: - return nil - } - } - } - - enum SetSecureInput { - case on - case off - case toggle - - static func from(_ c: ghostty_action_secure_input_e) -> Self? { - switch (c) { - case GHOSTTY_SECURE_INPUT_ON: - return .on - - case GHOSTTY_SECURE_INPUT_OFF: - return .off - - case GHOSTTY_SECURE_INPUT_TOGGLE: - return .toggle - - default: - return nil - } - } - } - - /// An enum that is used for the directions that a split focus event can change. - enum SplitFocusDirection { - case previous, next, up, down, left, right - - /// Initialize from a Ghostty API enum. - static func from(direction: ghostty_action_goto_split_e) -> Self? { - switch (direction) { - case GHOSTTY_GOTO_SPLIT_PREVIOUS: - return .previous - - case GHOSTTY_GOTO_SPLIT_NEXT: - return .next - - case GHOSTTY_GOTO_SPLIT_UP: - return .up - - case GHOSTTY_GOTO_SPLIT_DOWN: - return .down - - case GHOSTTY_GOTO_SPLIT_LEFT: - return .left - - case GHOSTTY_GOTO_SPLIT_RIGHT: - return .right - - default: - return nil - } - } - - func toNative() -> ghostty_action_goto_split_e { - switch (self) { - case .previous: - return GHOSTTY_GOTO_SPLIT_PREVIOUS - - case .next: - return GHOSTTY_GOTO_SPLIT_NEXT - - case .up: - return GHOSTTY_GOTO_SPLIT_UP - - case .down: - return GHOSTTY_GOTO_SPLIT_DOWN - - case .left: - return GHOSTTY_GOTO_SPLIT_LEFT - - case .right: - return GHOSTTY_GOTO_SPLIT_RIGHT - } - } - } - - /// Enum used for resizing splits. This is the direction the split divider will move. - enum SplitResizeDirection { - case up, down, left, right - - static func from(direction: ghostty_action_resize_split_direction_e) -> Self? { - switch (direction) { - case GHOSTTY_RESIZE_SPLIT_UP: - return .up; - case GHOSTTY_RESIZE_SPLIT_DOWN: - return .down; - case GHOSTTY_RESIZE_SPLIT_LEFT: - return .left; - case GHOSTTY_RESIZE_SPLIT_RIGHT: - return .right; - default: - return nil - } - } - - func toNative() -> ghostty_action_resize_split_direction_e { - switch (self) { - case .up: - return GHOSTTY_RESIZE_SPLIT_UP; - case .down: - return GHOSTTY_RESIZE_SPLIT_DOWN; - case .left: - return GHOSTTY_RESIZE_SPLIT_LEFT; - case .right: - return GHOSTTY_RESIZE_SPLIT_RIGHT; - } - } - } -} - -#if canImport(AppKit) -// MARK: SplitFocusDirection Extensions - -extension Ghostty.SplitFocusDirection { - /// Convert to a SplitTree.FocusDirection for the given ViewType. - func toSplitTreeFocusDirection() -> SplitTree.FocusDirection { - switch self { - case .previous: - return .previous - - case .next: - return .next - - case .up: - return .spatial(.up) - - case .down: - return .spatial(.down) - - case .left: - return .spatial(.left) - - case .right: - return .spatial(.right) - } - } -} -#endif - -extension Ghostty { - /// The type of a clipboard request - enum ClipboardRequest { - /// A direct paste of clipboard contents - case paste - - /// An application is attempting to read from the clipboard using OSC 52 - case osc_52_read - - /// An application is attempting to write to the clipboard using OSC 52 - case osc_52_write(OSPasteboard?) - - /// The text to show in the clipboard confirmation prompt for a given request type - func text() -> String { - switch (self) { - case .paste: - return """ - Pasting this text to the terminal may be dangerous as it looks like some commands may be executed. - """ - case .osc_52_read: - return """ - An application is attempting to read from the clipboard. - The current clipboard contents are shown below. - """ - case .osc_52_write: - return """ - An application is attempting to write to the clipboard. - The content to write is shown below. - """ - } - } - - static func from(request: ghostty_clipboard_request_e) -> ClipboardRequest? { - switch (request) { - case GHOSTTY_CLIPBOARD_REQUEST_PASTE: - return .paste - case GHOSTTY_CLIPBOARD_REQUEST_OSC_52_READ: - return .osc_52_read - case GHOSTTY_CLIPBOARD_REQUEST_OSC_52_WRITE: - return .osc_52_write(nil) - default: - return nil - } - } - } - - struct ClipboardContent { - let mime: String - let data: String - - static func from(content: ghostty_clipboard_content_s) -> ClipboardContent? { - guard let mimePtr = content.mime, - let dataPtr = content.data else { - return nil - } - - return ClipboardContent( - mime: String(cString: mimePtr), - data: String(cString: dataPtr) - ) - } - } - - /// macos-icon - enum MacOSIcon: String, Sendable { - case official - case blueprint - case chalkboard - case glass - case holographic - case microchip - case paper - case retro - case xray - case custom - case customStyle = "custom-style" - - /// Bundled asset name for built-in icons - var assetName: String? { - switch self { - case .official: return nil - case .blueprint: return "BlueprintImage" - case .chalkboard: return "ChalkboardImage" - case .microchip: return "MicrochipImage" - case .glass: return "GlassImage" - case .holographic: return "HolographicImage" - case .paper: return "PaperImage" - case .retro: return "RetroImage" - case .xray: return "XrayImage" - case .custom, .customStyle: return nil - } - } - } - - /// macos-icon-frame - enum MacOSIconFrame: String { - case aluminum - case beige - case plastic - case chrome - } - - /// Enum for the macos-window-buttons config option - enum MacOSWindowButtons: String { - case visible - case hidden - } - - /// Enum for the macos-titlebar-proxy-icon config option - enum MacOSTitlebarProxyIcon: String { - case visible - case hidden - } - - /// Enum for auto-update-channel config option - enum AutoUpdateChannel: String { - case tip - case stable - } -} - -// MARK: Surface Notification - -extension Notification.Name { - /// Configuration change. If the object is nil then it is app-wide. Otherwise its surface-specific. - static let ghosttyConfigDidChange = Notification.Name("com.mitchellh.ghostty.configDidChange") - static let GhosttyConfigChangeKey = ghosttyConfigDidChange.rawValue - - /// Color change. Object is the surface changing. - static let ghosttyColorDidChange = Notification.Name("com.mitchellh.ghostty.ghosttyColorDidChange") - static let GhosttyColorChangeKey = ghosttyColorDidChange.rawValue - - /// Goto tab. Has tab index in the userinfo. - static let ghosttyMoveTab = Notification.Name("com.mitchellh.ghostty.moveTab") - static let GhosttyMoveTabKey = ghosttyMoveTab.rawValue - - /// Close tab - static let ghosttyCloseTab = Notification.Name("com.mitchellh.ghostty.closeTab") - - /// Close other tabs - static let ghosttyCloseOtherTabs = Notification.Name("com.mitchellh.ghostty.closeOtherTabs") - - /// Close tabs to the right of the focused tab - static let ghosttyCloseTabsOnTheRight = Notification.Name("com.mitchellh.ghostty.closeTabsOnTheRight") - - /// Close window - static let ghosttyCloseWindow = Notification.Name("com.mitchellh.ghostty.closeWindow") - - /// Resize the window to a default size. - static let ghosttyResetWindowSize = Notification.Name("com.mitchellh.ghostty.resetWindowSize") - - /// Ring the bell - static let ghosttyBellDidRing = Notification.Name("com.mitchellh.ghostty.ghosttyBellDidRing") - - /// Readonly mode changed - static let ghosttyDidChangeReadonly = Notification.Name("com.mitchellh.ghostty.didChangeReadonly") - static let ReadonlyKey = ghosttyDidChangeReadonly.rawValue + ".readonly" - static let ghosttyCommandPaletteDidToggle = Notification.Name("com.mitchellh.ghostty.commandPaletteDidToggle") - - /// Toggle maximize of current window - static let ghosttyMaximizeDidToggle = Notification.Name("com.mitchellh.ghostty.maximizeDidToggle") - - /// Notification sent when scrollbar updates - static let ghosttyDidUpdateScrollbar = Notification.Name("com.mitchellh.ghostty.didUpdateScrollbar") - static let ScrollbarKey = ghosttyDidUpdateScrollbar.rawValue + ".scrollbar" - - /// Focus the search field - static let ghosttySearchFocus = Notification.Name("com.mitchellh.ghostty.searchFocus") -} - -// NOTE: I am moving all of these to Notification.Name extensions over time. This -// namespace was the old namespace. -extension Ghostty.Notification { - /// Used to pass a configuration along when creating a new tab/window/split. - static let NewSurfaceConfigKey = "com.mitchellh.ghostty.newSurfaceConfig" - - /// Posted when a new split is requested. The sending object will be the surface that had focus. The - /// userdata has one key "direction" with the direction to split to. - static let ghosttyNewSplit = Notification.Name("com.mitchellh.ghostty.newSplit") - - /// Close the calling surface. - static let ghosttyCloseSurface = Notification.Name("com.mitchellh.ghostty.closeSurface") - - /// Focus previous/next split. Has a SplitFocusDirection in the userinfo. - static let ghosttyFocusSplit = Notification.Name("com.mitchellh.ghostty.focusSplit") - static let SplitDirectionKey = ghosttyFocusSplit.rawValue - - /// Goto tab. Has tab index in the userinfo. - static let ghosttyGotoTab = Notification.Name("com.mitchellh.ghostty.gotoTab") - static let GotoTabKey = ghosttyGotoTab.rawValue - - /// New tab. Has base surface config requested in userinfo. - static let ghosttyNewTab = Notification.Name("com.mitchellh.ghostty.newTab") - - /// New window. Has base surface config requested in userinfo. - static let ghosttyNewWindow = Notification.Name("com.mitchellh.ghostty.newWindow") - - /// Present terminal. Bring the surface's window to focus without activating the app. - static let ghosttyPresentTerminal = Notification.Name("com.mitchellh.ghostty.presentTerminal") - - /// Toggle fullscreen of current window - static let ghosttyToggleFullscreen = Notification.Name("com.mitchellh.ghostty.toggleFullscreen") - static let FullscreenModeKey = ghosttyToggleFullscreen.rawValue - - /// Notification sent to toggle split maximize/unmaximize. - static let didToggleSplitZoom = Notification.Name("com.mitchellh.ghostty.didToggleSplitZoom") - - /// Notification - static let didReceiveInitialWindowFrame = Notification.Name("com.mitchellh.ghostty.didReceiveInitialWindowFrame") - static let FrameKey = "com.mitchellh.ghostty.frame" - - /// Notification to render the inspector for a surface - static let inspectorNeedsDisplay = Notification.Name("com.mitchellh.ghostty.inspectorNeedsDisplay") - - /// Notification to show/hide the inspector - static let didControlInspector = Notification.Name("com.mitchellh.ghostty.didControlInspector") - - static let confirmClipboard = Notification.Name("com.mitchellh.ghostty.confirmClipboard") - static let ConfirmClipboardStrKey = confirmClipboard.rawValue + ".str" - static let ConfirmClipboardStateKey = confirmClipboard.rawValue + ".state" - static let ConfirmClipboardRequestKey = confirmClipboard.rawValue + ".request" - - /// Notification sent to the active split view to resize the split. - static let didResizeSplit = Notification.Name("com.mitchellh.ghostty.didResizeSplit") - static let ResizeSplitDirectionKey = didResizeSplit.rawValue + ".direction" - static let ResizeSplitAmountKey = didResizeSplit.rawValue + ".amount" - - /// Notification sent to the split root to equalize split sizes - static let didEqualizeSplits = Notification.Name("com.mitchellh.ghostty.didEqualizeSplits") - - /// Notification that renderer health changed - static let didUpdateRendererHealth = Notification.Name("com.mitchellh.ghostty.didUpdateRendererHealth") - - /// Notifications related to key sequences - static let didContinueKeySequence = Notification.Name("com.mitchellh.ghostty.didContinueKeySequence") - static let didEndKeySequence = Notification.Name("com.mitchellh.ghostty.didEndKeySequence") - static let KeySequenceKey = didContinueKeySequence.rawValue + ".key" - - /// Notifications related to key tables - static let didChangeKeyTable = Notification.Name("com.mitchellh.ghostty.didChangeKeyTable") - static let KeyTableKey = didChangeKeyTable.rawValue + ".action" -} - -// Make the input enum hashable. -extension ghostty_input_key_e : @retroactive Hashable {} diff --git a/macos/Sources/Ghostty/Surface View/InspectorView.swift b/macos/Sources/Ghostty/Surface View/InspectorView.swift index 03be794e94f..e7320c782c3 100644 --- a/macos/Sources/Ghostty/Surface View/InspectorView.swift +++ b/macos/Sources/Ghostty/Surface View/InspectorView.swift @@ -23,7 +23,7 @@ extension Ghostty { let pubInspector = center.publisher(for: Notification.didControlInspector, object: surfaceView) ZStack { - if (!surfaceView.inspectorVisible) { + if !surfaceView.inspectorVisible { SurfaceWrapper(surfaceView: surfaceView, isSplit: isSplit) } else { SplitView(.vertical, $split, dividerColor: ghostty.config.splitDividerColor, left: { @@ -42,7 +42,7 @@ extension Ghostty { .onChange(of: surfaceView.inspectorVisible) { inspectorVisible in // When we show the inspector, we want to focus on the inspector. // When we hide the inspector, we want to move focus back to the surface. - if (inspectorVisible) { + if inspectorVisible { // We need to delay this until SwiftUI shows the inspector. DispatchQueue.main.async { _ = surfaceView.resignFirstResponder() @@ -59,7 +59,7 @@ extension Ghostty { guard let modeAny = notification.userInfo?["mode"] else { return } guard let mode = modeAny as? ghostty_action_inspector_e else { return } - switch (mode) { + switch mode { case GHOSTTY_INSPECTOR_TOGGLE: surfaceView.inspectorVisible = !surfaceView.inspectorVisible @@ -94,7 +94,7 @@ extension Ghostty { class InspectorView: MTKView, NSTextInputClient { let commandQueue: MTLCommandQueue - var surfaceView: SurfaceView? = nil { + var surfaceView: SurfaceView? { didSet { surfaceViewDidChange() } } @@ -180,7 +180,7 @@ extension Ghostty { override func becomeFirstResponder() -> Bool { let result = super.becomeFirstResponder() - if (result) { + if result { if let inspector = self.inspector { inspector.setFocus(true) } @@ -190,7 +190,7 @@ extension Ghostty { override func resignFirstResponder() -> Bool { let result = super.resignFirstResponder() - if (result) { + if result { if let inspector = self.inspector { inspector.setFocus(false) } @@ -275,7 +275,7 @@ extension Ghostty { // Determine our momentum value var momentum: ghostty_input_mouse_momentum_e = GHOSTTY_MOUSE_MOMENTUM_NONE - switch (event.momentumPhase) { + switch event.momentumPhase { case .began: momentum = GHOSTTY_MOUSE_MOMENTUM_BEGAN case .stationary: @@ -309,8 +309,8 @@ extension Ghostty { } override func flagsChanged(with event: NSEvent) { - let mod: UInt32; - switch (event.keyCode) { + let mod: UInt32 + switch event.keyCode { case 0x39: mod = GHOSTTY_MODS_CAPS.rawValue case 0x38, 0x3C: mod = GHOSTTY_MODS_SHIFT.rawValue case 0x3B, 0x3E: mod = GHOSTTY_MODS_CTRL.rawValue @@ -325,7 +325,7 @@ extension Ghostty { // If the key that pressed this is active, its a press, else release var action = GHOSTTY_ACTION_RELEASE - if (mods.rawValue & mod != 0) { action = GHOSTTY_ACTION_PRESS } + if mods.rawValue & mod != 0 { action = GHOSTTY_ACTION_PRESS } keyAction(action, event: event) } @@ -382,7 +382,7 @@ extension Ghostty { } func firstRect(forCharacterRange range: NSRange, actualRange: NSRangePointer?) -> NSRect { - return NSMakeRect(frame.origin.x, frame.origin.y, 0, 0) + return NSRect(x: frame.origin.x, y: frame.origin.y, width: 0, height: 0) } func insertText(_ string: Any, replacementRange: NSRange) { @@ -392,7 +392,7 @@ extension Ghostty { // We want the string view of the any value var chars = "" - switch (string) { + switch string { case let v as NSAttributedString: chars = v.string case let v as String: @@ -402,7 +402,7 @@ extension Ghostty { } let len = chars.utf8CString.count - if (len == 0) { return } + if len == 0 { return } inspector.text(chars) } diff --git a/macos/Sources/Ghostty/Surface View/SurfaceDragSource.swift b/macos/Sources/Ghostty/Surface View/SurfaceDragSource.swift index 37a69852ee4..dd2f3ef5e7a 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceDragSource.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceDragSource.swift @@ -5,13 +5,13 @@ extension Ghostty { /// A preference key that propagates the ID of the SurfaceView currently being dragged, /// or nil if no surface is being dragged. struct DraggingSurfaceKey: PreferenceKey { - static var defaultValue: SurfaceView.ID? = nil - + static var defaultValue: SurfaceView.ID? + static func reduce(value: inout SurfaceView.ID?, nextValue: () -> SurfaceView.ID?) { value = nextValue() ?? value } } - + /// A SwiftUI view that provides drag source functionality for terminal surfaces. /// /// This view wraps an AppKit-based drag source to enable drag-and-drop reordering @@ -24,13 +24,13 @@ extension Ghostty { struct SurfaceDragSource: View { /// The surface view that will be dragged. let surfaceView: SurfaceView - + /// Binding that reflects whether a drag session is currently active. @Binding var isDragging: Bool - + /// Binding that reflects whether the mouse is hovering over this view. @Binding var isHovering: Bool - + var body: some View { SurfaceDragSourceViewRepresentable( surfaceView: surfaceView, @@ -46,7 +46,7 @@ extension Ghostty { let surfaceView: SurfaceView @Binding var isDragging: Bool @Binding var isHovering: Bool - + func makeNSView(context: Context) -> SurfaceDragSourceView { let view = SurfaceDragSourceView() view.surfaceView = surfaceView @@ -60,7 +60,7 @@ extension Ghostty { } return view } - + func updateNSView(_ nsView: SurfaceDragSourceView, context: Context) { nsView.surfaceView = surfaceView nsView.onDragStateChanged = { dragging in @@ -73,7 +73,7 @@ extension Ghostty { } } } - + /// The underlying NSView that handles drag operations. /// /// This view manages mouse tracking and drag initiation for surface reordering. @@ -82,26 +82,26 @@ extension Ghostty { fileprivate class SurfaceDragSourceView: NSView, NSDraggingSource { /// Scale factor applied to the surface snapshot for the drag preview image. private static let previewScale: CGFloat = 0.2 - + /// The surface view that will be dragged. Its UUID is encoded into the /// pasteboard for drop targets to identify which surface is being moved. var surfaceView: SurfaceView? - + /// Callback invoked when the drag state changes. Called with `true` when /// a drag session begins, and `false` when it ends (completed or cancelled). var onDragStateChanged: ((Bool) -> Void)? - + /// Callback invoked when the mouse enters or exits this view's bounds. /// Used to update the hover state for visual feedback in the parent view. var onHoverChanged: ((Bool) -> Void)? - + /// Whether we are currently in a mouse tracking loop (between mouseDown /// and either mouseUp or drag initiation). Used to determine cursor state. private var isTracking: Bool = false - + /// Local event monitor to detect escape key presses during drag. private var escapeMonitor: Any? - + /// Whether the current drag was cancelled by pressing escape. private var dragCancelledByEscape: Bool = false @@ -137,26 +137,26 @@ extension Ghostty { userInfo: nil )) } - + override func resetCursorRects() { addCursorRect(bounds, cursor: isTracking ? .closedHand : .openHand) } - + override func mouseEntered(with event: NSEvent) { onHoverChanged?(true) } - + override func mouseExited(with event: NSEvent) { onHoverChanged?(false) } - + override func mouseDragged(with event: NSEvent) { guard !isTracking, let surfaceView = surfaceView else { return } - + // Create our dragging item from our transferable guard let pasteboardItem = surfaceView.pasteboardItem() else { return } let item = NSDraggingItem(pasteboardWriter: pasteboardItem) - + // Create a scaled preview image from the surface snapshot if let snapshot = surfaceView.asImage { let imageSize = NSSize( @@ -172,7 +172,7 @@ extension Ghostty { fraction: 1.0 ) scaledImage.unlockFocus() - + // Position the drag image so the mouse is at the center of the image. // I personally like the top middle or top left corner best but // this matches macOS native tab dragging behavior (at least, as of @@ -187,30 +187,30 @@ extension Ghostty { contents: scaledImage ) } - + onDragStateChanged?(true) let session = beginDraggingSession(with: [item], event: event, source: self) - + // We need to disable this so that endedAt happens immediately for our // drags outside of any targets. session.animatesToStartingPositionsOnCancelOrFail = false } - + // MARK: NSDraggingSource - + func draggingSession( _ session: NSDraggingSession, sourceOperationMaskFor context: NSDraggingContext ) -> NSDragOperation { return context == .withinApplication ? .move : [] } - + func draggingSession( _ session: NSDraggingSession, willBeginAt screenPoint: NSPoint ) { isTracking = true - + // Reset our escape tracking dragCancelledByEscape = false escapeMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in @@ -220,14 +220,14 @@ extension Ghostty { return event } } - + func draggingSession( _ session: NSDraggingSession, movedTo screenPoint: NSPoint ) { NSCursor.closedHand.set() } - + func draggingSession( _ session: NSDraggingSession, endedAt screenPoint: NSPoint, @@ -262,7 +262,7 @@ extension Notification.Name { /// released outside a valid drop target) and was not cancelled by the user /// pressing escape. The notification's object is the SurfaceView that was dragged. static let ghosttySurfaceDragEndedNoTarget = Notification.Name("ghosttySurfaceDragEndedNoTarget") - + /// Key for the screen point where the drag ended in the userInfo dictionary. static let ghosttySurfaceDragEndedNoTargetPointKey = "endedAtPoint" } diff --git a/macos/Sources/Ghostty/Surface View/SurfaceGrabHandle.swift b/macos/Sources/Ghostty/Surface View/SurfaceGrabHandle.swift index f3ee80874fd..a8555e938a3 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceGrabHandle.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceGrabHandle.swift @@ -1,41 +1,37 @@ -import AppKit import SwiftUI -extension Ghostty { +extension Ghostty { /// A grab handle overlay at the top of the surface for dragging the window. - /// Only appears when hovering in the top region of the surface. struct SurfaceGrabHandle: View { - private let handleHeight: CGFloat = 10 - - let surfaceView: SurfaceView - + @ObservedObject var surfaceView: SurfaceView + @State private var isHovering: Bool = false @State private var isDragging: Bool = false - + + private var ellipsisVisible: Bool { + surfaceView.mouseOverSurface && surfaceView.cursorVisible + } + var body: some View { - VStack(spacing: 0) { - Rectangle() - .fill(Color.primary.opacity(isHovering || isDragging ? 0.15 : 0)) - .frame(height: handleHeight) - .overlay(alignment: .center) { - if isHovering || isDragging { - Image(systemName: "ellipsis") - .font(.system(size: 14, weight: .semibold)) - .foregroundColor(.primary.opacity(0.5)) - } - } - .contentShape(Rectangle()) - .overlay { - SurfaceDragSource( - surfaceView: surfaceView, - isDragging: $isDragging, - isHovering: $isHovering - ) - } - - Spacer() + ZStack { + SurfaceDragSource( + surfaceView: surfaceView, + isDragging: $isDragging, + isHovering: $isHovering + ) + .frame(width: 80, height: 12) + .contentShape(Rectangle()) + + if ellipsisVisible { + Image(systemName: "ellipsis") + .font(.system(size: 10, weight: .semibold)) + .foregroundColor(.primary.opacity(isHovering ? 0.8 : 0.3)) + .offset(y: -3) + .allowsHitTesting(false) + .transition(.opacity) + } } - .frame(maxWidth: .infinity, maxHeight: .infinity) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } } } diff --git a/macos/Sources/Ghostty/Surface View/SurfaceProgressBar.swift b/macos/Sources/Ghostty/Surface View/SurfaceProgressBar.swift index 82d26e68149..0478bf2bf4a 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceProgressBar.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceProgressBar.swift @@ -5,7 +5,7 @@ import SwiftUI /// control. struct SurfaceProgressBar: View { let report: Ghostty.Action.ProgressReport - + private var color: Color { switch report.state { case .error: return .red @@ -13,17 +13,17 @@ struct SurfaceProgressBar: View { default: return .accentColor } } - + private var progress: UInt8? { // If we have an explicit progress use that. if let v = report.progress { return v } - + // Otherwise, if we're in the pause state, we act as if we're at 100%. if report.state == .pause { return 100 } - + return nil } - + private var accessibilityLabel: String { switch report.state { case .error: return "Terminal progress - Error" @@ -32,7 +32,7 @@ struct SurfaceProgressBar: View { default: return "Terminal progress" } } - + private var accessibilityValue: String { if let progress { return "\(progress) percent complete" @@ -45,7 +45,7 @@ struct SurfaceProgressBar: View { } } } - + var body: some View { GeometryReader { geometry in ZStack(alignment: .leading) { @@ -78,15 +78,15 @@ struct SurfaceProgressBar: View { private struct BouncingProgressBar: View { let color: Color @State private var position: CGFloat = 0 - + private let barWidthRatio: CGFloat = 0.25 - + var body: some View { GeometryReader { geometry in ZStack(alignment: .leading) { Rectangle() .fill(color.opacity(0.3)) - + Rectangle() .fill(color) .frame( @@ -110,4 +110,3 @@ private struct BouncingProgressBar: View { } } - diff --git a/macos/Sources/Ghostty/Surface View/SurfaceScrollView.swift b/macos/Sources/Ghostty/Surface View/SurfaceScrollView.swift index b55f2e2312e..aab99c088ec 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceScrollView.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceScrollView.swift @@ -19,12 +19,12 @@ class SurfaceScrollView: NSView { private var observers: [NSObjectProtocol] = [] private var cancellables: Set = [] private var isLiveScrolling = false - + /// The last row position sent via scroll_to_row action. Used to avoid /// sending redundant actions when the user drags the scrollbar but stays /// on the same row. private var lastSentRow: Int? - + init(contentSize: CGSize, surfaceView: Ghostty.SurfaceView) { self.surfaceView = surfaceView // The scroll view is our outermost view that controls all our scrollbar @@ -44,26 +44,26 @@ class SurfaceScrollView: NSView { // (we currently only use overlay scrollers, but might as well // configure the views correctly in case we change our mind) scrollView.contentView.clipsToBounds = false - + // The document view is what the scrollview is actually going // to be directly scrolling. We set it up to a "blank" NSView // with the desired content size. documentView = NSView(frame: NSRect(origin: .zero, size: contentSize)) scrollView.documentView = documentView - + // The document view contains our actual surface as a child. // We synchronize the scrolling of the document with this surface // so that our primary Ghostty renderer only needs to render the viewport. documentView.addSubview(surfaceView) - + super.init(frame: .zero) - + // Our scroll view is our only view addSubview(scrollView) - + // Apply initial scrollbar settings synchronizeAppearance() - + // We listen for scroll events through bounds notifications on our NSClipView. // This is based on: https://christiantietze.de/posts/2018/07/synchronize-nsscrollview/ scrollView.contentView.postsBoundsChangedNotifications = true @@ -74,7 +74,7 @@ class SurfaceScrollView: NSView { ) { [weak self] notification in self?.handleScrollChange(notification) }) - + // Listen for scrollbar updates from Ghostty observers.append(NotificationCenter.default.addObserver( forName: .ghosttyDidUpdateScrollbar, @@ -83,7 +83,7 @@ class SurfaceScrollView: NSView { ) { [weak self] notification in self?.handleScrollbarUpdate(notification) }) - + // Listen for live scroll events observers.append(NotificationCenter.default.addObserver( forName: NSScrollView.willStartLiveScrollNotification, @@ -92,7 +92,7 @@ class SurfaceScrollView: NSView { ) { [weak self] _ in self?.isLiveScrolling = true }) - + observers.append(NotificationCenter.default.addObserver( forName: NSScrollView.didEndLiveScrollNotification, object: scrollView, @@ -100,7 +100,7 @@ class SurfaceScrollView: NSView { ) { [weak self] _ in self?.isLiveScrolling = false }) - + observers.append(NotificationCenter.default.addObserver( forName: NSScrollView.didLiveScrollNotification, object: scrollView, @@ -108,7 +108,7 @@ class SurfaceScrollView: NSView { ) { [weak self] _ in self?.handleLiveScroll() }) - + observers.append(NotificationCenter.default.addObserver( forName: NSScroller.preferredScrollerStyleDidChangeNotification, object: nil, @@ -150,11 +150,11 @@ class SurfaceScrollView: NSView { } .store(in: &cancellables) } - + required init?(coder: NSCoder) { fatalError("init(coder:) not implemented") } - + deinit { observers.forEach { NotificationCenter.default.removeObserver($0) } } @@ -163,10 +163,10 @@ class SurfaceScrollView: NSView { // insets. This is necessary for the content view to match the // surface view if we have the "hidden" titlebar style. override var safeAreaInsets: NSEdgeInsets { return NSEdgeInsetsZero } - + override func layout() { super.layout() - + // Fill entire bounds with scroll view scrollView.frame = bounds surfaceView.frame.size = scrollView.bounds.size @@ -174,13 +174,13 @@ class SurfaceScrollView: NSView { // We only set the width of the documentView here, as the height depends // on the scrollbar state and is updated in synchronizeScrollView documentView.frame.size.width = scrollView.bounds.width - + // When our scrollview changes make sure our scroller and surface views are synchronized synchronizeScrollView() synchronizeSurfaceView() synchronizeCoreSurface() } - + // MARK: Scrolling private func synchronizeAppearance() { @@ -220,7 +220,7 @@ class SurfaceScrollView: NSView { private func synchronizeScrollView() { // Update the document height to give our scroller the correct proportions documentView.frame.size.height = documentHeight() - + // Only update our actual scroll position if we're not actively scrolling. if !isLiveScrolling { // Convert row units to pixels using cell height, ignore zero height. @@ -236,13 +236,13 @@ class SurfaceScrollView: NSView { lastSentRow = Int(scrollbar.offset) } } - + // Always update our scrolled view with the latest dimensions scrollView.reflectScrolledClipView(scrollView.contentView) } - + // MARK: Notifications - + /// Handles bounds changes in the scroll view's clip view, keeping the surface view synchronized. private func handleScrollChange(_ notification: Notification) { synchronizeSurfaceView() @@ -259,7 +259,7 @@ class SurfaceScrollView: NSView { synchronizeAppearance() synchronizeCoreSurface() } - + /// Handles live scroll events (user actively dragging the scrollbar). /// /// Converts the current scroll position to a row number and sends a `scroll_to_row` action @@ -270,21 +270,21 @@ class SurfaceScrollView: NSView { // happen with a tiny terminal. let cellHeight = surfaceView.cellSize.height guard cellHeight > 0 else { return } - + // AppKit views are +Y going up, so we calculate from the bottom let visibleRect = scrollView.contentView.documentVisibleRect let documentHeight = documentView.frame.height let scrollOffset = documentHeight - visibleRect.origin.y - visibleRect.height let row = Int(scrollOffset / cellHeight) - + // Only send action if the row changed to avoid action spam guard row != lastSentRow else { return } lastSentRow = row - + // Use the keybinding action to scroll. _ = surfaceView.surfaceModel?.perform(action: "scroll_to_row:\(row)") } - + /// Handles scrollbar state updates from the terminal core. /// /// Updates the document view size to reflect total scrollback and adjusts scroll position diff --git a/macos/Sources/Ghostty/Surface View/SurfaceView+Transferable.swift b/macos/Sources/Ghostty/Surface View/SurfaceView+Transferable.swift index 509713309e4..10687581324 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceView+Transferable.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceView+Transferable.swift @@ -17,11 +17,11 @@ extension Ghostty.SurfaceView: Transferable { let uuid = data.withUnsafeBytes { $0.load(as: UUID.self) } - + guard let imported = await Self.find(uuid: uuid) else { throw TransferError.invalidData } - + return imported } } @@ -29,7 +29,7 @@ extension Ghostty.SurfaceView: Transferable { enum TransferError: Error { case invalidData } - + @MainActor static func find(uuid: UUID) -> Self? { #if canImport(AppKit) diff --git a/macos/Sources/Ghostty/Surface View/SurfaceView.swift b/macos/Sources/Ghostty/Surface View/SurfaceView.swift index c5c2ee97c6c..47503dc0e80 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceView.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceView.swift @@ -49,13 +49,18 @@ extension Ghostty { // True if we're hovering over the left URL view, so we can show it on the right. @State private var isHoveringURLLeft: Bool = false - + #if canImport(AppKit) // Observe SecureInput to detect when its enabled @ObservedObject private var secureInput = SecureInput.shared #endif @EnvironmentObject private var ghostty: Ghostty.App + @Environment(\.ghosttyLastFocusedSurface) private var lastFocusedSurface + + private var isFocusedSurface: Bool { + surfaceFocus || lastFocusedSurface?.value === surfaceView + } var body: some View { let center = NotificationCenter.default @@ -84,7 +89,7 @@ extension Ghostty { .onReceive(pubResign) { notification in guard let window = notification.object as? NSWindow else { return } guard let surfaceWindow = surfaceView.window else { return } - if (surfaceWindow == window) { + if surfaceWindow == window { windowFocus = false } } @@ -103,7 +108,7 @@ extension Ghostty { } } .ghosttySurfaceView(surfaceView) - + // Progress report if let progressReport = surfaceView.progressReport, progressReport.state != .remove { VStack(spacing: 0) { @@ -114,7 +119,7 @@ extension Ghostty { .allowsHitTesting(false) .transition(.opacity) } - + #if canImport(AppKit) // Readonly indicator badge if surfaceView.readonly { @@ -122,7 +127,7 @@ extension Ghostty { surfaceView.toggleReadonly(nil) } } - + // Show key state indicator for active key tables and/or pending key sequences KeyStateIndicator( keyTables: surfaceView.keyTables, @@ -177,10 +182,10 @@ extension Ghostty { #if canImport(AppKit) // If we have secure input enabled and we're the focused surface and window // then we want to show the secure input overlay. - if (ghostty.config.secureInputIndication && + if ghostty.config.secureInputIndication && secureInput.enabled && surfaceFocus && - windowFocus) { + windowFocus { SecureInputOverlay() } #endif @@ -200,7 +205,7 @@ extension Ghostty { } // Show bell border if enabled - if (ghostty.config.bellFeatures.contains(.border)) { + if ghostty.config.bellFeatures.contains(.border) { BellBorderOverlay(bell: surfaceView.bell) } @@ -208,21 +213,20 @@ extension Ghostty { HighlightOverlay(highlighted: surfaceView.highlighted) // If our surface is not healthy, then we render an error view over it. - if (!surfaceView.healthy) { + if !surfaceView.healthy { Rectangle().fill(ghostty.config.backgroundColor) SurfaceRendererUnhealthyView() - } else if (surfaceView.error != nil) { + } else if surfaceView.error != nil { Rectangle().fill(ghostty.config.backgroundColor) SurfaceErrorView() } // If we're part of a split view and don't have focus, we put a semi-transparent - // rectangle above our view to make it look unfocused. We use "surfaceFocus" - // because we want to keep our focused surface dark even if we don't have window - // focus. - if (isSplit && !surfaceFocus) { - let overlayOpacity = ghostty.config.unfocusedSplitOpacity; - if (overlayOpacity > 0) { + // rectangle above our view to make it look unfocused. We include the last + // focused surface so this still works while SwiftUI focus is temporarily nil. + if isSplit && !isFocusedSurface { + let overlayOpacity = ghostty.config.unfocusedSplitOpacity + if overlayOpacity > 0 { Rectangle() .fill(ghostty.config.unfocusedSplitFill) .allowsHitTesting(false) @@ -286,8 +290,6 @@ extension Ghostty { } } - - // This is the resize overlay that shows on top of a surface to show the current // size during a resize operation. struct SurfaceResizeOverlay: View { @@ -300,7 +302,7 @@ extension Ghostty { // This is the last size that we processed. This is how we handle our // timer state. - @State var lastSize: CGSize? = nil + @State var lastSize: CGSize? // Ready is set to true after a short delay. This avoids some of the // challenges of initial view sizing from SwiftUI. @@ -312,42 +314,42 @@ extension Ghostty { // This computed boolean is set to true when the overlay should be hidden. private var hidden: Bool { // If we aren't ready yet then we wait... - if (!ready) { return true; } + if !ready { return true; } // Hidden if we already processed this size. - if (lastSize == geoSize) { return true; } + if lastSize == geoSize { return true; } // If we were focused recently we hide it as well. This avoids showing // the resize overlay when SwiftUI is lazily resizing. if let instant = focusInstant { let d = instant.duration(to: ContinuousClock.now) - if (d < .milliseconds(500)) { + if d < .milliseconds(500) { // Avoid this size completely. We can't set values during // view updates so we have to defer this to another tick. DispatchQueue.main.async { lastSize = geoSize } - return true; + return true } } // Hidden depending on overlay config - switch (overlay) { - case .never: return true; - case .always: return false; - case .after_first: return lastSize == nil; + switch overlay { + case .never: return true + case .always: return false + case .after_first: return lastSize == nil } } var body: some View { VStack { - if (!position.top()) { + if !position.top() { Spacer() } HStack { - if (!position.left()) { + if !position.left() { Spacer() } @@ -361,12 +363,12 @@ extension Ghostty { .lineLimit(1) .truncationMode(.tail) - if (!position.right()) { + if !position.right() { Spacer() } } - if (!position.bottom()) { + if !position.bottom() { Spacer() } } @@ -386,7 +388,7 @@ extension Ghostty { // We only sleep if we're ready. If we're not ready then we want to set // our last size right away to avoid a flash. - if (ready) { + if ready { try? await Task.sleep(nanoseconds: UInt64(duration) * 1_000_000) } @@ -404,9 +406,9 @@ extension Ghostty { @State private var dragOffset: CGSize = .zero @State private var barSize: CGSize = .zero @FocusState private var isSearchFieldFocused: Bool - + private let padding: CGFloat = 8 - + var body: some View { GeometryReader { geo in HStack(spacing: 4) { @@ -456,20 +458,20 @@ extension Ghostty { guard let surface = surfaceView.surface else { return } let action = "navigate_search:next" ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) - }) { + }, label: { Image(systemName: "chevron.up") - } + }) .buttonStyle(SearchButtonStyle()) - + Button(action: { guard let surface = surfaceView.surface else { return } let action = "navigate_search:previous" ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) - }) { + }, label: { Image(systemName: "chevron.down") - } + }) .buttonStyle(SearchButtonStyle()) - + Button(action: onClose) { Image(systemName: "xmark") } @@ -529,7 +531,7 @@ extension Ghostty { enum Corner { case topLeft, topRight, bottomLeft, bottomRight - + var alignment: Alignment { switch self { case .topLeft: return .topLeading @@ -539,11 +541,11 @@ extension Ghostty { } } } - + private func centerPosition(for corner: Corner, in containerSize: CGSize, barSize: CGSize) -> CGPoint { let halfWidth = barSize.width / 2 + padding let halfHeight = barSize.height / 2 + padding - + switch corner { case .topLeft: return CGPoint(x: halfWidth, y: halfHeight) @@ -555,21 +557,21 @@ extension Ghostty { return CGPoint(x: containerSize.width - halfWidth, y: containerSize.height - halfHeight) } } - + private func closestCorner(to point: CGPoint, in containerSize: CGSize) -> Corner { let midX = containerSize.width / 2 let midY = containerSize.height / 2 - + if point.x < midX { return point.y < midY ? .topLeft : .bottomLeft } else { return point.y < midY ? .topRight : .bottomRight } } - + struct SearchButtonStyle: ButtonStyle { @State private var isHovered = false - + func makeBody(configuration: Configuration) -> some View { configuration.label .foregroundStyle(isHovered || configuration.isPressed ? .primary : .secondary) @@ -584,7 +586,7 @@ extension Ghostty { } .backport.pointerStyle(.link) } - + private func backgroundColor(isPressed: Bool) -> Color { if isPressed { return Color.primary.opacity(0.2) @@ -640,20 +642,20 @@ extension Ghostty { /// libghostty, usually from the Ghostty configuration. struct SurfaceConfiguration { /// Explicit font size to use in points - var fontSize: Float32? = nil + var fontSize: Float32? /// Explicit working directory to set - var workingDirectory: String? = nil + var workingDirectory: String? /// Explicit command to set - var command: String? = nil - + var command: String? + /// Environment variables to set for the terminal var environmentVariables: [String: String] = [:] /// Extra input to send as stdin - var initialInput: String? = nil - + var initialInput: String? + /// Wait after the command var waitAfterCommand: Bool = false @@ -711,7 +713,7 @@ extension Ghostty { // Zero is our default value that means to inherit the font size. config.font_size = fontSize ?? 0 - + // Set wait after command config.wait_after_command = waitAfterCommand @@ -736,7 +738,7 @@ extension Ghostty { return try keys.withCStrings { keyCStrings in return try values.withCStrings { valueCStrings in // Create array of ghostty_env_var_s - var envVars = Array() + var envVars = [ghostty_env_var_s]() envVars.reserveCapacity(environmentVariables.count) for i in 0.. Double { let phase = animationPhase let offset = Double(index) / 3.0 @@ -981,7 +983,7 @@ extension Ghostty { /// Visual overlay that shows a border around the edges when the bell rings with border feature enabled. struct BellBorderOverlay: View { let bell: Bool - + var body: some View { Rectangle() .strokeBorder( @@ -998,7 +1000,7 @@ extension Ghostty { /// Uses a soft, soothing highlight with a pulsing border effect. struct HighlightOverlay: View { let highlighted: Bool - + @State private var borderPulse: Bool = false var body: some View { @@ -1051,21 +1053,21 @@ extension Ghostty { } // MARK: Readonly Badge - + /// A badge overlay that indicates a surface is in readonly mode. /// Positioned in the top-right corner and styled to be noticeable but unobtrusive. struct ReadonlyBadge: View { let onDisable: () -> Void - + @State private var showingPopover = false - + private let badgeColor = Color(hue: 0.08, saturation: 0.5, brightness: 0.8) - + var body: some View { VStack { HStack { Spacer() - + HStack(spacing: 5) { Image(systemName: "eye.fill") .font(.system(size: 12)) @@ -1085,13 +1087,13 @@ extension Ghostty { } } .padding(8) - + Spacer() } .accessibilityElement(children: .ignore) .accessibilityLabel("Read-only terminal") } - + private var badgeBackground: some View { RoundedRectangle(cornerRadius: 6) .fill(.regularMaterial) @@ -1101,11 +1103,11 @@ extension Ghostty { ) } } - + struct ReadonlyPopoverView: View { let onDisable: () -> Void @Binding var isPresented: Bool - + var body: some View { VStack(alignment: .leading, spacing: 16) { VStack(alignment: .leading, spacing: 8) { @@ -1116,16 +1118,16 @@ extension Ghostty { Text("Read-Only Mode") .font(.system(size: 13, weight: .semibold)) } - + Text("This terminal is in read-only mode. You can still view, select, and scroll through the content, but no input events will be sent to the running application.") .font(.system(size: 11)) .foregroundColor(.secondary) .fixedSize(horizontal: false, vertical: true) } - + HStack { Spacer() - + Button("Disable") { onDisable() isPresented = false @@ -1203,17 +1205,33 @@ private struct GhosttySurfaceViewKey: EnvironmentKey { static let defaultValue: Ghostty.SurfaceView? = nil } +private struct GhosttyLastFocusedSurfaceKey: EnvironmentKey { + /// Optional read-only last-focused surface reference. If a surface view is currently focused this + /// is equal to the currently focused surface. + static let defaultValue: Weak? = nil +} + extension EnvironmentValues { var ghosttySurfaceView: Ghostty.SurfaceView? { get { self[GhosttySurfaceViewKey.self] } set { self[GhosttySurfaceViewKey.self] = newValue } } + + var ghosttyLastFocusedSurface: Weak? { + get { self[GhosttyLastFocusedSurfaceKey.self] } + set { self[GhosttyLastFocusedSurfaceKey.self] = newValue } + } } extension View { func ghosttySurfaceView(_ surfaceView: Ghostty.SurfaceView?) -> some View { environment(\.ghosttySurfaceView, surfaceView) } + + /// The most recently focused surface (can be currently focused if the surface is currently focused). + func ghosttyLastFocusedSurface(_ surfaceView: Weak?) -> some View { + environment(\.ghosttyLastFocusedSurface, surfaceView) + } } // MARK: Surface Focus Keys @@ -1252,8 +1270,8 @@ extension FocusedValues { extension Ghostty.SurfaceView { class SearchState: ObservableObject { @Published var needle: String = "" - @Published var selected: UInt? = nil - @Published var total: UInt? = nil + @Published var selected: UInt? + @Published var total: UInt? init(from startSearch: Ghostty.Action.StartSearch) { self.needle = startSearch.needle ?? "" diff --git a/macos/Sources/Ghostty/Surface View/SurfaceView_AppKit.swift b/macos/Sources/Ghostty/Surface View/SurfaceView_AppKit.swift index c856b0163c5..060b7990bd4 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceView_AppKit.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceView_AppKit.swift @@ -27,7 +27,7 @@ extension Ghostty { // The current pwd of the surface as defined by the pty. This can be // changed with escape codes. - @Published var pwd: String? = nil + @Published var pwd: String? // The cell size of this surface. This is set by the core when the // surface is first created and any time the cell size changes (i.e. @@ -40,13 +40,13 @@ extension Ghostty { @Published var healthy: Bool = true // Any error while initializing the surface. - @Published var error: Error? = nil + @Published var error: Error? // The hovered URL string - @Published var hoverUrl: String? = nil + @Published var hoverUrl: String? // The progress report (if any) - @Published var progressReport: Action.ProgressReport? = nil { + @Published var progressReport: Action.ProgressReport? { didSet { // Cancel any existing timer progressReportTimer?.invalidate() @@ -69,7 +69,7 @@ extension Ghostty { @Published var keyTables: [String] = [] // The current search state. When non-nil, the search overlay should be shown. - @Published var searchState: SearchState? = nil { + @Published var searchState: SearchState? { didSet { if let searchState { // I'm not a Combine expert so if there is a better way to do this I'm @@ -107,21 +107,27 @@ extension Ghostty { // The time this surface last became focused. This is a ContinuousClock.Instant // on supported platforms. - @Published var focusInstant: ContinuousClock.Instant? = nil + @Published var focusInstant: ContinuousClock.Instant? // Returns sizing information for the surface. This is the raw C // structure because I'm lazy. - @Published var surfaceSize: ghostty_surface_size_s? = nil + @Published var surfaceSize: ghostty_surface_size_s? // Whether the pointer should be visible or not @Published private(set) var pointerStyle: CursorStyle = .horizontalText + // Whether the mouse is currently over this surface + @Published private(set) var mouseOverSurface: Bool = false + + // Whether the cursor is currently visible (not hidden by typing, etc.) + @Published private(set) var cursorVisible: Bool = true + /// The configuration derived from the Ghostty config so we don't need to rely on references. @Published private(set) var derivedConfig: DerivedConfig /// The background color within the color palette of the surface. This is only set if it is /// dynamically updated. Otherwise, the background color is the default background color. - @Published private(set) var backgroundColor: Color? = nil + @Published private(set) var backgroundColor: Color? /// True when the bell is active. This is set inactive on focus or event. @Published private(set) var bell: Bool = false @@ -134,7 +140,7 @@ extension Ghostty { // An initial size to request for a window. This will only affect // then the view is moved to a new window. - var initialSize: NSSize? = nil + var initialSize: NSSize? // A content size received through sizeDidChange that may in some cases // be different from the frame size. @@ -151,7 +157,7 @@ extension Ghostty { // We need to update our state within the SecureInput manager. let input = SecureInput.shared let id = ObjectIdentifier(self) - if (passwordInput) { + if passwordInput { input.setScoped(id, focused: focused) } else { input.removeScoped(id) @@ -183,7 +189,7 @@ extension Ghostty { // True if the inspector should be visible @Published var inspectorVisible: Bool = false { didSet { - if (oldValue && !inspectorVisible) { + if oldValue && !inspectorVisible { guard let surface = self.surface else { return } ghostty_inspector_free(surface) } @@ -210,10 +216,14 @@ extension Ghostty { private var markedText: NSMutableAttributedString private(set) var focused: Bool = true private var prevPressureStage: Int = 0 - private var appearanceObserver: NSKeyValueObservation? = nil + private var appearanceObserver: NSKeyValueObservation? // This is set to non-null during keyDown to accumulate insertText contents - private var keyTextAccumulator: [String]? = nil + private var keyTextAccumulator: [String]? + + // True when we've consumed a left mouse-down only to move focus and + // should suppress the matching mouse-up from being reported. + private var suppressNextLeftMouseUp: Bool = false // A small delay that is introduced before a title change to avoid flickers private var titleChangeTimer: Timer? @@ -234,7 +244,7 @@ extension Ghostty { private(set) var cachedVisibleContents: CachedValue /// Event monitor (see individual events for why) - private var eventMonitor: Any? = nil + private var eventMonitor: Any? // We need to support being a first responder so that we can get input events override var acceptsFirstResponder: Bool { return true } @@ -259,7 +269,7 @@ extension Ghostty { // Initialize with some default frame size. The important thing is that this // is non-zero so that our layer bounds are non-zero so that our renderer // can do SOMETHING. - super.init(frame: NSMakeRect(0, 0, 800, 600)) + super.init(frame: NSRect(x: 0, y: 0, width: 800, height: 600)) // Our cache of screen data cachedScreenContents = .init(duration: .milliseconds(500)) { [weak self] in @@ -431,11 +441,11 @@ extension Ghostty { ghostty_surface_set_focus(surface, focused) // Update our secure input state if we are a password input - if (passwordInput) { + if passwordInput { SecureInput.shared.setScoped(ObjectIdentifier(self), focused: focused) } - if (focused) { + if focused { // On macOS 13+ we can store our continuous clock... focusInstant = ContinuousClock.now @@ -480,7 +490,7 @@ extension Ghostty { } func setCursorShape(_ shape: ghostty_action_mouse_shape_e) { - switch (shape) { + switch shape { case GHOSTTY_MOUSE_SHAPE_DEFAULT: pointerStyle = .default @@ -533,6 +543,7 @@ extension Ghostty { } func setCursorVisibility(_ visible: Bool) { + cursorVisible = visible // Technically this action could be called anytime we want to // change the mouse visibility but at the time of writing this // mouse-hide-while-typing is the only use case so this is the @@ -637,12 +648,18 @@ extension Ghostty { let location = convert(event.locationInWindow, from: nil) guard hitTest(location) == self else { return event } - // We only want to grab focus if either our app or window was - // not focused. - guard !NSApp.isActive || !window.isKeyWindow else { return event } + // If we're already the first responder then no focus transfer is + // happening, so the click should continue as normal. + guard window.firstResponder !== self else { return event } - // If we're already focused we do nothing - guard !focused else { return event } + // If our window/app is already focused, then this click is only + // being used to transfer split focus. Consume it so it does not + // get forwarded to the terminal as a mouse click. + if NSApp.isActive && window.isKeyWindow { + window.makeFirstResponder(self) + suppressNextLeftMouseUp = true + return nil + } // Make ourselves the first responder window.makeFirstResponder(self) @@ -656,7 +673,7 @@ extension Ghostty { private func localEventKeyUp(_ event: NSEvent) -> NSEvent? { // We only care about events with "command" because all others will // trigger the normal responder chain. - if (!event.modifierFlags.contains(.command)) { return event } + if !event.modifierFlags.contains(.command) { return event } // Command keyUp events are never sent to the normal responder chain // so we send them here. @@ -671,7 +688,7 @@ extension Ghostty { guard let healthAny = notification.userInfo?["health"] else { return } guard let health = healthAny as? ghostty_action_renderer_health_e else { return } DispatchQueue.main.async { [weak self] in - self?.healthy = health == GHOSTTY_RENDERER_HEALTH_OK + self?.healthy = health == GHOSTTY_RENDERER_HEALTH_HEALTHY } } @@ -722,7 +739,7 @@ extension Ghostty { SwiftUI.Notification.Name.GhosttyColorChangeKey ] as? Ghostty.Action.ColorChange else { return } - switch (change.kind) { + switch change.kind { case .background: DispatchQueue.main.async { [weak self] in self?.backgroundColor = change.color @@ -767,7 +784,7 @@ extension Ghostty { override func becomeFirstResponder() -> Bool { let result = super.becomeFirstResponder() - if (result) { focusDidChange(true) } + if result { focusDidChange(true) } return result } @@ -776,7 +793,7 @@ extension Ghostty { // We sometimes call this manually (see SplitView) as a way to force us to // yield our focus state. - if (result) { focusDidChange(false) } + if result { focusDidChange(false) } return result } @@ -847,6 +864,13 @@ extension Ghostty { } override func mouseUp(with event: NSEvent) { + // If this mouse-up corresponds to a focus-only click transfer, + // suppress it so we don't emit a release without a press. + if suppressNextLeftMouseUp { + suppressNextLeftMouseUp = false + return + } + // Always reset our pressure when the mouse goes up prevPressureStage = 0 @@ -873,17 +897,16 @@ extension Ghostty { ghostty_surface_mouse_button(surface, GHOSTTY_MOUSE_RELEASE, button.cMouseButton, mods) } - override func rightMouseDown(with event: NSEvent) { guard let surface = self.surface else { return super.rightMouseDown(with: event) } let mods = Ghostty.ghosttyMods(event.modifierFlags) - if (ghostty_surface_mouse_button( + if ghostty_surface_mouse_button( surface, GHOSTTY_MOUSE_PRESS, GHOSTTY_MOUSE_RIGHT, mods - )) { + ) { // Consumed return } @@ -896,12 +919,12 @@ extension Ghostty { guard let surface = self.surface else { return super.rightMouseUp(with: event) } let mods = Ghostty.ghosttyMods(event.modifierFlags) - if (ghostty_surface_mouse_button( + if ghostty_surface_mouse_button( surface, GHOSTTY_MOUSE_RELEASE, GHOSTTY_MOUSE_RIGHT, mods - )) { + ) { // Handled return } @@ -911,6 +934,7 @@ extension Ghostty { } override func mouseEntered(with event: NSEvent) { + mouseOverSurface = true super.mouseEntered(with: event) guard let surfaceModel else { return } @@ -929,6 +953,7 @@ extension Ghostty { } override func mouseExited(with event: NSEvent) { + mouseOverSurface = false guard let surfaceModel else { return } // If the mouse is being dragged then we don't have to emit @@ -963,10 +988,9 @@ extension Ghostty { if let window, let controller = window.windowController as? BaseTerminalController, !controller.commandPaletteIsShowing, - (window.isKeyWindow && + window.isKeyWindow && !self.focused && - controller.focusFollowsMouse) - { + controller.focusFollowsMouse { Ghostty.moveFocus(to: self) } } @@ -992,8 +1016,8 @@ extension Ghostty { if precision { // We do a 2x speed multiplier. This is subjective, it "feels" better to me. - x *= 2; - y *= 2; + x *= 2 + y *= 2 // TODO(mitchellh): do we have to scale the x/y here by window scale factor? } @@ -1048,7 +1072,7 @@ extension Ghostty { // for exact states and set them. var translationMods = event.modifierFlags for flag in [NSEvent.ModifierFlags.shift, .control, .option, .command] { - if (translationModsGhostty.contains(flag)) { + if translationModsGhostty.contains(flag) { translationMods.insert(flag) } else { translationMods.remove(flag) @@ -1061,7 +1085,7 @@ extension Ghostty { // this keeps things like Korean input working. There must be some object // equality happening in AppKit somewhere because this is required. let translationEvent: NSEvent - if (translationMods == event.modifierFlags) { + if translationMods == event.modifierFlags { translationEvent = event } else { translationEvent = NSEvent.keyEvent( @@ -1093,7 +1117,7 @@ extension Ghostty { // We need to know the keyboard layout before below because some keyboard // input events will change our keyboard layout and we don't want those // going to the terminal. - let keyboardIdBefore: String? = if (!markedTextBefore) { + let keyboardIdBefore: String? = if !markedTextBefore { KeyboardLayout.id } else { nil @@ -1108,7 +1132,7 @@ extension Ghostty { // If our keyboard changed from this we just assume an input method // grabbed it and do nothing. - if (!markedTextBefore && keyboardIdBefore != KeyboardLayout.id) { + if !markedTextBefore && keyboardIdBefore != KeyboardLayout.id { return } @@ -1185,17 +1209,17 @@ extension Ghostty { // We only care about key down events. It might not even be possible // to receive any other event type here. guard event.type == .keyDown else { return false } - + // Only process events if we're focused. Some key events like C-/ macOS // appears to send to the first view in the hierarchy rather than the // the first responder (I don't know why). This prevents us from handling it. // Besides C-/, its important we don't process key equivalents if unfocused // because there are other event listeners for that (i.e. AppDelegate's // local event handler). - if (!focused) { + if !focused { return false } - + // Get information about if this is a binding. let bindingFlags = surfaceModel.flatMap { surface in var ghosttyEvent = event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS) @@ -1204,7 +1228,7 @@ extension Ghostty { return surface.keyIsBinding(ghosttyEvent) } } - + // If this is a binding then we want to perform it. if let bindingFlags { // Attempt to trigger a menu item for this key binding. We only do this if: @@ -1221,17 +1245,17 @@ extension Ghostty { return true } } - + self.keyDown(with: event) return true } let equivalent: String - switch (event.charactersIgnoringModifiers) { + switch event.charactersIgnoringModifiers { case "\r": // Pass C- through verbatim // (prevent the default context menu equivalent) - if (!event.modifierFlags.contains(.control)) { + if !event.modifierFlags.contains(.control) { return false } @@ -1240,8 +1264,8 @@ extension Ghostty { case "/": // Treat C-/ as C-_. We do this because C-/ makes macOS make a beep // sound and we don't like the beep sound. - if (!event.modifierFlags.contains(.control) || - !event.modifierFlags.isDisjoint(with: [.shift, .command, .option])) { + if !event.modifierFlags.contains(.control) || + !event.modifierFlags.isDisjoint(with: [.shift, .command, .option]) { return false } @@ -1265,8 +1289,8 @@ extension Ghostty { // Ignore all other non-command events. This lets the event continue // through the AppKit event systems. - if (!event.modifierFlags.contains(.command) && - !event.modifierFlags.contains(.control)) { + if !event.modifierFlags.contains(.command) && + !event.modifierFlags.contains(.control) { // Reset since we got a non-command event. lastPerformKeyEvent = nil return false @@ -1304,8 +1328,8 @@ extension Ghostty { } override func flagsChanged(with event: NSEvent) { - let mod: UInt32; - switch (event.keyCode) { + let mod: UInt32 + switch event.keyCode { case 0x39: mod = GHOSTTY_MODS_CAPS.rawValue case 0x38, 0x3C: mod = GHOSTTY_MODS_SHIFT.rawValue case 0x3B, 0x3E: mod = GHOSTTY_MODS_CTRL.rawValue @@ -1323,26 +1347,26 @@ extension Ghostty { // If the key that pressed this is active, its a press, else release. var action = GHOSTTY_ACTION_RELEASE - if (mods.rawValue & mod != 0) { + if mods.rawValue & mod != 0 { // If the key is pressed, its slightly more complicated, because we // want to check if the pressed modifier is the correct side. If the // correct side is pressed then its a press event otherwise its a release // event with the opposite modifier still held. let sidePressed: Bool - switch (event.keyCode) { + switch event.keyCode { case 0x3C: - sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERSHIFTKEYMASK) != 0; + sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERSHIFTKEYMASK) != 0 case 0x3E: - sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERCTLKEYMASK) != 0; + sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERCTLKEYMASK) != 0 case 0x3D: - sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERALTKEYMASK) != 0; + sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERALTKEYMASK) != 0 case 0x36: - sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERCMDKEYMASK) != 0; + sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERCMDKEYMASK) != 0 default: sidePressed = true } - if (sidePressed) { + if sidePressed { action = GHOSTTY_ACTION_PRESS } } @@ -1389,7 +1413,7 @@ extension Ghostty { // since we always have a primary font. The only scenario this doesn't // work is if someone is using a non-CoreText build which would be // unofficial. - var attributes: [ NSAttributedString.Key : Any ] = [:]; + var attributes: [ NSAttributedString.Key: Any ] = [:] if let fontRaw = ghostty_surface_quicklook_font(surface) { // Memory management here is wonky: ghostty_surface_quicklook_font // will create a copy of a CTFont, Swift will auto-retain the @@ -1400,9 +1424,9 @@ extension Ghostty { } // Ghostty coordinate system is top-left, convert to bottom-left for AppKit - let pt = NSMakePoint(text.tl_px_x, frame.size.height - text.tl_px_y) + let pt = NSPoint(x: text.tl_px_x, y: frame.size.height - text.tl_px_y) let str = NSAttributedString.init(string: String(cString: text.text), attributes: attributes) - self.showDefinition(for: str, at: pt); + self.showDefinition(for: str, at: pt) } override func menu(for event: NSEvent) -> NSMenu? { @@ -1483,7 +1507,7 @@ extension Ghostty { @IBAction func copy(_ sender: Any?) { guard let surface = self.surface else { return } let action = "copy_to_clipboard" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1491,16 +1515,15 @@ extension Ghostty { @IBAction func paste(_ sender: Any?) { guard let surface = self.surface else { return } let action = "paste_from_clipboard" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } - @IBAction func pasteAsPlainText(_ sender: Any?) { guard let surface = self.surface else { return } let action = "paste_from_clipboard" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1508,7 +1531,7 @@ extension Ghostty { @IBAction func pasteSelection(_ sender: Any?) { guard let surface = self.surface else { return } let action = "paste_from_selection" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1516,7 +1539,7 @@ extension Ghostty { @IBAction override func selectAll(_ sender: Any?) { guard let surface = self.surface else { return } let action = "select_all" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1524,7 +1547,7 @@ extension Ghostty { @IBAction func find(_ sender: Any?) { guard let surface = self.surface else { return } let action = "start_search" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1532,7 +1555,7 @@ extension Ghostty { @IBAction func selectionForFind(_ sender: Any?) { guard let surface = self.surface else { return } let action = "search_selection" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1540,7 +1563,7 @@ extension Ghostty { @IBAction func scrollToSelection(_ sender: Any?) { guard let surface = self.surface else { return } let action = "scroll_to_selection" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1548,7 +1571,7 @@ extension Ghostty { @IBAction func findNext(_ sender: Any?) { guard let surface = self.surface else { return } let action = "search:next" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1556,7 +1579,7 @@ extension Ghostty { @IBAction func findPrevious(_ sender: Any?) { guard let surface = self.surface else { return } let action = "search:previous" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1564,7 +1587,7 @@ extension Ghostty { @IBAction func findHide(_ sender: Any?) { guard let surface = self.surface else { return } let action = "end_search" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1572,7 +1595,7 @@ extension Ghostty { @IBAction func toggleReadonly(_ sender: Any?) { guard let surface = self.surface else { return } let action = "toggle_readonly" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1608,7 +1631,7 @@ extension Ghostty { @objc func resetTerminal(_ sender: Any) { guard let surface = self.surface else { return } let action = "reset" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1616,7 +1639,7 @@ extension Ghostty { @objc func toggleTerminalInspector(_ sender: Any) { guard let surface = self.surface else { return } let action = "inspector:toggle" - if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) { + if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) { AppDelegate.logger.warning("action failed action=\(action)") } } @@ -1626,14 +1649,17 @@ extension Ghostty { } /// Show a user notification and associate it with this surface - func showUserNotification(title: String, body: String) { + func showUserNotification(title: String, body: String, requireFocus: Bool = true) { let content = UNMutableNotificationContent() content.title = title content.subtitle = self.title content.body = body content.sound = UNNotificationSound.default content.categoryIdentifier = Ghostty.userNotificationCategory - content.userInfo = ["surface": self.id.uuidString] + content.userInfo = [ + "surface": self.id.uuidString, + "requireFocus": requireFocus, + ] let uuid = UUID().uuidString let request = UNNotificationRequest( @@ -1657,7 +1683,7 @@ extension Ghostty { // If we're focused then we schedule to remove the notification // after a few seconds. If we gain focus we automatically remove it // in focusDidChange. - if (self.focused) { + if self.focused { Task { @MainActor [weak self] in try await Task.sleep(for: .seconds(3)) self?.notificationIdentifiers.remove(uuid) @@ -1831,7 +1857,7 @@ extension Ghostty.SurfaceView: NSTextInputClient { // since we always have a primary font. The only scenario this doesn't // work is if someone is using a non-CoreText build which would be // unofficial. - var attributes: [ NSAttributedString.Key : Any ] = [:]; + var attributes: [ NSAttributedString.Key: Any ] = [:] if let fontRaw = ghostty_surface_quicklook_font(surface) { // Memory management here is wonky: ghostty_surface_quicklook_font // will create a copy of a CTFont, Swift will auto-retain the @@ -1850,7 +1876,7 @@ extension Ghostty.SurfaceView: NSTextInputClient { func firstRect(forCharacterRange range: NSRange, actualRange: NSRangePointer?) -> NSRect { guard let surface = self.surface else { - return NSMakeRect(frame.origin.x, frame.origin.y, 0, 0) + return NSRect(x: frame.origin.x, y: frame.origin.y, width: 0, height: 0) } // Ghostty will tell us where it thinks an IME keyboard should render. @@ -1869,8 +1895,8 @@ extension Ghostty.SurfaceView: NSTextInputClient { if ghostty_surface_read_selection(surface, &text) { // The -2/+2 here is subjective. QuickLook seems to offset the rectangle // a bit and I think these small adjustments make it look more natural. - x = text.tl_px_x - 2; - y = text.tl_px_y + 2; + x = text.tl_px_x - 2 + y = text.tl_px_y + 2 // Free our text ghostty_surface_free_text(surface, &text) @@ -1892,11 +1918,11 @@ extension Ghostty.SurfaceView: NSTextInputClient { // when there's is no characters selected, // width should be 0 so that dictation indicator // can start in the right place - let viewRect = NSMakeRect( - x, - frame.size.height - y, - width, - max(height, cellSize.height)) + let viewRect = NSRect( + x: x, + y: frame.size.height - y, + width: width, + height: max(height, cellSize.height)) // Convert the point to the window coordinates let winRect = self.convert(viewRect, to: nil) @@ -1913,7 +1939,7 @@ extension Ghostty.SurfaceView: NSTextInputClient { // We want the string view of the any value var chars = "" - switch (string) { + switch string { case let v as NSAttributedString: chars = v.string case let v as String: @@ -1944,8 +1970,7 @@ extension Ghostty.SurfaceView: NSTextInputClient { // we send it back through the event system so it can be encoded. if let lastPerformKeyEvent, let current = NSApp.currentEvent, - lastPerformKeyEvent == current.timestamp - { + lastPerformKeyEvent == current.timestamp { NSApp.sendEvent(current) return } @@ -2052,7 +2077,7 @@ extension Ghostty.SurfaceView: NSServicesMenuRequestor { guard let str = pboard.getOpinionatedStringContents() else { return false } let len = str.utf8CString.count - if (len == 0) { return true } + if len == 0 { return true } str.withCString { ptr in // len includes the null terminator so we do len - 1 ghostty_surface_text(surface, ptr, UInt(len - 1)) @@ -2134,7 +2159,7 @@ extension Ghostty.SurfaceView { DispatchQueue.main.async { self.insertText( content, - replacementRange: NSMakeRange(0, 0) + replacementRange: NSRange(location: 0, length: 0) ) } return true diff --git a/macos/Sources/Ghostty/Surface View/SurfaceView_UIKit.swift b/macos/Sources/Ghostty/Surface View/SurfaceView_UIKit.swift index f9baf56c9b4..9a4cf4d9b88 100644 --- a/macos/Sources/Ghostty/Surface View/SurfaceView_UIKit.swift +++ b/macos/Sources/Ghostty/Surface View/SurfaceView_UIKit.swift @@ -15,7 +15,7 @@ extension Ghostty { @Published var title: String = "👻" // The current pwd of the surface. - @Published var pwd: String? = nil + @Published var pwd: String? // The cell size of this surface. This is set by the core when the // surface is first created and any time the cell size changes (i.e. @@ -28,30 +28,30 @@ extension Ghostty { @Published var healthy: Bool = true // Any error while initializing the surface. - @Published var error: Error? = nil + @Published var error: Error? // The hovered URL - @Published var hoverUrl: String? = nil - + @Published var hoverUrl: String? + // The progress report (if any) - @Published var progressReport: Action.ProgressReport? = nil + @Published var progressReport: Action.ProgressReport? // The time this surface last became focused. This is a ContinuousClock.Instant // on supported platforms. - @Published var focusInstant: ContinuousClock.Instant? = nil + @Published var focusInstant: ContinuousClock.Instant? /// True when the bell is active. This is set inactive on focus or event. @Published var bell: Bool = false - + // The current search state. When non-nil, the search overlay should be shown. - @Published var searchState: SearchState? = nil + @Published var searchState: SearchState? // The currently active key tables. Empty if no tables are active. @Published var keyTables: [String] = [] /// True when the surface is in readonly mode. @Published private(set) var readonly: Bool = false - + /// True when the surface should show a highlight effect (e.g., when presented via goto_split). @Published private(set) var highlighted: Bool = false @@ -81,7 +81,7 @@ extension Ghostty { // TODO return } - self.surface = surface; + self.surface = surface } required init?(coder: NSCoder) { @@ -98,7 +98,7 @@ extension Ghostty { ghostty_surface_set_focus(surface, focused) // On macOS 13+ we can store our continuous clock... - if (focused) { + if focused { focusInstant = ContinuousClock.now } } @@ -122,9 +122,7 @@ extension Ghostty { // MARK: UIView override class var layerClass: AnyClass { - get { - return CAMetalLayer.self - } + return CAMetalLayer.self } override func didMoveToWindow() { diff --git a/macos/Sources/Helpers/AnySortKey.swift b/macos/Sources/Helpers/AnySortKey.swift index 6813ccf45eb..ffafb6b90e2 100644 --- a/macos/Sources/Helpers/AnySortKey.swift +++ b/macos/Sources/Helpers/AnySortKey.swift @@ -4,7 +4,7 @@ import Foundation struct AnySortKey: Comparable { private let value: Any private let comparator: (Any, Any) -> ComparisonResult - + init(_ value: T) { self.value = value self.comparator = { lhs, rhs in @@ -14,11 +14,11 @@ struct AnySortKey: Comparable { return .orderedSame } } - + static func < (lhs: AnySortKey, rhs: AnySortKey) -> Bool { lhs.comparator(lhs.value, rhs.value) == .orderedAscending } - + static func == (lhs: AnySortKey, rhs: AnySortKey) -> Bool { lhs.comparator(lhs.value, rhs.value) == .orderedSame } diff --git a/macos/Sources/Helpers/AppInfo.swift b/macos/Sources/Helpers/AppInfo.swift index 281bad18b04..940d247d567 100644 --- a/macos/Sources/Helpers/AppInfo.swift +++ b/macos/Sources/Helpers/AppInfo.swift @@ -2,9 +2,5 @@ import Foundation /// True if we appear to be running in Xcode. func isRunningInXcode() -> Bool { - if let _ = ProcessInfo.processInfo.environment["__XCODE_BUILT_PRODUCTS_DIR_PATHS"] { - return true - } - - return false + ProcessInfo.processInfo.environment["__XCODE_BUILT_PRODUCTS_DIR_PATHS"] != nil } diff --git a/macos/Sources/Helpers/Backport.swift b/macos/Sources/Helpers/Backport.swift index 8c43652e4e3..e2afb5b0cab 100644 --- a/macos/Sources/Helpers/Backport.swift +++ b/macos/Sources/Helpers/Backport.swift @@ -48,7 +48,7 @@ extension Backport where Content: View { return content #endif } - + /// Backported onKeyPress that works on macOS 14+ and is a no-op on macOS 13. func onKeyPress(_ key: KeyEquivalent, action: @escaping (EventModifiers) -> BackportKeyPressResult) -> some View { #if canImport(AppKit) @@ -117,3 +117,17 @@ enum BackportPointerStyle { } #endif } + +enum BackportNSGlassStyle { + case regular, clear + + #if canImport(AppKit) + @available(macOS 26, *) + var official: NSGlassEffectView.Style { + switch self { + case .regular: return .regular + case .clear: return .clear + } + } + #endif +} diff --git a/macos/Sources/Helpers/ExpiringUndoManager.swift b/macos/Sources/Helpers/ExpiringUndoManager.swift index 5fde0e87041..3b1abd44a17 100644 --- a/macos/Sources/Helpers/ExpiringUndoManager.swift +++ b/macos/Sources/Helpers/ExpiringUndoManager.swift @@ -98,10 +98,10 @@ class ExpiringUndoManager: UndoManager { private class ExpiringTarget { /// The actual target object for the undo operation, held weakly to avoid retain cycles. private(set) weak var target: AnyObject? - + /// Timer that triggers expiration after the specified duration. private var timer: Timer? - + /// The undo manager from which to remove actions when this target expires. private weak var undoManager: UndoManager? @@ -141,7 +141,7 @@ extension ExpiringTarget: Hashable, Equatable { static func == (lhs: ExpiringTarget, rhs: ExpiringTarget) -> Bool { return lhs === rhs } - + func hash(into hasher: inout Hasher) { hasher.combine(ObjectIdentifier(self)) } diff --git a/macos/Sources/Helpers/Extensions/Array+Extension.swift b/macos/Sources/Helpers/Extensions/Array+Extension.swift index 4e8e399182d..92beb050599 100644 --- a/macos/Sources/Helpers/Extensions/Array+Extension.swift +++ b/macos/Sources/Helpers/Extensions/Array+Extension.swift @@ -2,7 +2,7 @@ extension Array { subscript(safe index: Int) -> Element? { return indices.contains(index) ? self[index] : nil } - + /// Returns the index before i, with wraparound. Assumes i is a valid index. func indexWrapping(before i: Int) -> Int { if i == 0 { @@ -35,7 +35,7 @@ extension Array where Element == String { if index == count { return try body(accumulated) } - + return try self[index].withCString { cStr in var newAccumulated = accumulated newAccumulated.append(cStr) diff --git a/macos/Sources/Helpers/Extensions/EventModifiers+Extension.swift b/macos/Sources/Helpers/Extensions/EventModifiers+Extension.swift index 8d379bd9966..cc8d49cf8ef 100644 --- a/macos/Sources/Helpers/Extensions/EventModifiers+Extension.swift +++ b/macos/Sources/Helpers/Extensions/EventModifiers+Extension.swift @@ -5,11 +5,13 @@ import SwiftUI extension EventModifiers { init(nsFlags: NSEvent.ModifierFlags) { var result: SwiftUI.EventModifiers = [] + // swiftlint:disable opening_brace if nsFlags.contains(.shift) { result.insert(.shift) } if nsFlags.contains(.control) { result.insert(.control) } if nsFlags.contains(.option) { result.insert(.option) } if nsFlags.contains(.command) { result.insert(.command) } if nsFlags.contains(.capsLock) { result.insert(.capsLock) } + // swiftlint:enable opening_brace self = result } } @@ -17,11 +19,13 @@ extension EventModifiers { extension NSEvent.ModifierFlags { init(swiftUIFlags: SwiftUI.EventModifiers) { var result: NSEvent.ModifierFlags = [] + // swiftlint:disable opening_brace if swiftUIFlags.contains(.shift) { result.insert(.shift) } if swiftUIFlags.contains(.control) { result.insert(.control) } if swiftUIFlags.contains(.option) { result.insert(.option) } if swiftUIFlags.contains(.command) { result.insert(.command) } if swiftUIFlags.contains(.capsLock) { result.insert(.capsLock) } + // swiftlint:enable opening_brace self = result } } diff --git a/macos/Sources/Helpers/Extensions/NSAppearance+Extension.swift b/macos/Sources/Helpers/Extensions/NSAppearance+Extension.swift index 28edb1a3515..c45f37a62ed 100644 --- a/macos/Sources/Helpers/Extensions/NSAppearance+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSAppearance+Extension.swift @@ -9,7 +9,7 @@ extension NSAppearance { /// Initialize a desired NSAppearance for the Ghostty configuration. convenience init?(ghosttyConfig config: Ghostty.Config) { guard let theme = config.windowTheme else { return nil } - switch (theme) { + switch theme { case "dark": self.init(named: .darkAqua) diff --git a/macos/Sources/Helpers/Extensions/NSApplication+Extension.swift b/macos/Sources/Helpers/Extensions/NSApplication+Extension.swift index 0bc79fb6af8..2d3bc2cba04 100644 --- a/macos/Sources/Helpers/Extensions/NSApplication+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSApplication+Extension.swift @@ -18,7 +18,7 @@ extension NSApplication { func releasePresentationOption(_ option: NSApplication.PresentationOptions.Element) { guard let value = Self.presentationOptionCounts[option] else { return } guard value > 0 else { return } - if (value == 1) { + if value == 1 { presentationOptions.remove(option) Self.presentationOptionCounts.removeValue(forKey: option) } else { diff --git a/macos/Sources/Helpers/Extensions/NSColor+Extension.swift b/macos/Sources/Helpers/Extensions/NSColor+Extension.swift index 63cf02ed4d6..ed2177325df 100644 --- a/macos/Sources/Helpers/Extensions/NSColor+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSColor+Extension.swift @@ -24,6 +24,14 @@ extension NSColor { appleColorList?.allKeys.map { $0.lowercased() } ?? [] } + /// Returns a new color with its saturation multiplied by the given factor, clamped to [0, 1]. + func adjustingSaturation(by factor: CGFloat) -> NSColor { + var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0 + let hsbColor = self.usingColorSpace(.sRGB) ?? self + hsbColor.getHue(&h, saturation: &s, brightness: &b, alpha: &a) + return NSColor(hue: h, saturation: min(max(s * factor, 0), 1), brightness: b, alpha: a) + } + /// Calculates the perceptual distance to another color in RGB space. func distance(to other: NSColor) -> Double { guard let a = self.usingColorSpace(.sRGB), diff --git a/macos/Sources/Helpers/Extensions/NSPasteboard+Extension.swift b/macos/Sources/Helpers/Extensions/NSPasteboard+Extension.swift index a036f02b4f1..a54735fde21 100644 --- a/macos/Sources/Helpers/Extensions/NSPasteboard+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSPasteboard+Extension.swift @@ -13,14 +13,14 @@ extension NSPasteboard.PasteboardType { default: break } - + // Try to get UTType from MIME type guard let utType = UTType(mimeType: mimeType) else { // Fallback: use the MIME type directly as identifier self.init(mimeType) return } - + // Use the UTType's identifier self.init(utType.identifier) } @@ -50,7 +50,7 @@ extension NSPasteboard { /// The pasteboard for the Ghostty enum type. static func ghostty(_ clipboard: ghostty_clipboard_e) -> NSPasteboard? { - switch (clipboard) { + switch clipboard { case GHOSTTY_CLIPBOARD_STANDARD: return Self.general diff --git a/macos/Sources/Helpers/Extensions/NSScreen+Extension.swift b/macos/Sources/Helpers/Extensions/NSScreen+Extension.swift index a8eb7b87651..ca338f10228 100644 --- a/macos/Sources/Helpers/Extensions/NSScreen+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSScreen+Extension.swift @@ -5,7 +5,7 @@ extension NSScreen { var displayID: UInt32? { deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? UInt32 } - + /// The stable UUID for this display, suitable for tracking across reconnects and NSScreen garbage collection. var displayUUID: UUID? { guard let displayID = displayID else { return nil } @@ -19,7 +19,7 @@ extension NSScreen { var hasDock: Bool { // If the dock autohides then we don't have a dock ever. if let dockAutohide = UserDefaults.standard.persistentDomain(forName: "com.apple.dock")?["autohide"] as? Bool { - if (dockAutohide) { return false } + if dockAutohide { return false } } // There is no public API to directly ask about dock visibility, so we have to figure it out @@ -29,7 +29,7 @@ extension NSScreen { // which triggers showing the dock. // If our visible width is less than the frame we assume its the dock. - if (visibleFrame.width < frame.width) { + if visibleFrame.width < frame.width { return true } @@ -48,7 +48,7 @@ extension NSScreen { // know any other situation this is true. return safeAreaInsets.top > 0 } - + /// Converts top-left offset coordinates to bottom-left origin coordinates for window positioning. /// - Parameters: /// - x: X offset from top-left corner @@ -57,11 +57,11 @@ extension NSScreen { /// - Returns: CGPoint suitable for setFrameOrigin that positions the window as requested func origin(fromTopLeftOffsetX x: CGFloat, offsetY y: CGFloat, windowSize: CGSize) -> CGPoint { let vf = visibleFrame - + // Convert top-left coordinates to bottom-left origin let originX = vf.minX + x let originY = vf.maxY - y - windowSize.height - + return CGPoint(x: originX, y: originY) } } diff --git a/macos/Sources/Helpers/Extensions/NSView+Extension.swift b/macos/Sources/Helpers/Extensions/NSView+Extension.swift index fb209e4ac43..2546caa3810 100644 --- a/macos/Sources/Helpers/Extensions/NSView+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSView+Extension.swift @@ -52,10 +52,8 @@ extension NSView { return true } - for subview in subviews { - if subview.contains(view) { - return true - } + for subview in subviews where subview.contains(view) { + return true } return false @@ -67,10 +65,8 @@ extension NSView { return true } - for subview in subviews { - if subview.contains(className: name) { - return true - } + for subview in subviews where subview.contains(className: name) { + return true } return false @@ -131,12 +127,12 @@ extension NSView { /// This includes private views like title bar views. func firstViewFromRoot(withClassName name: String) -> NSView? { let root = rootView - + // Check if the root view itself matches if String(describing: type(of: root)) == name { return root } - + // Otherwise search descendants return root.firstDescendant(withClassName: name) } @@ -155,67 +151,67 @@ extension NSView { print("View Hierarchy from Root:") print(root.viewHierarchyDescription()) } - + /// Returns a string representation of the view hierarchy in a tree-like format. func viewHierarchyDescription(indent: String = "", isLast: Bool = true) -> String { var result = "" - + // Add the tree branch characters result += indent if !indent.isEmpty { result += isLast ? "└── " : "├── " } - + // Add the class name and optional identifier let className = String(describing: type(of: self)) result += className - + // Add identifier if present if let identifier = self.identifier { result += " (id: \(identifier.rawValue))" } - + // Add frame info result += " [frame: \(frame)]" - + // Add visual properties var properties: [String] = [] - + // Hidden status if isHidden { properties.append("hidden") } - + // Opaque status properties.append(isOpaque ? "opaque" : "transparent") - + // Layer backing if wantsLayer { properties.append("layer-backed") if let bgColor = layer?.backgroundColor { let color = NSColor(cgColor: bgColor) if let rgb = color?.usingColorSpace(.deviceRGB) { - properties.append(String(format: "bg:rgba(%.0f,%.0f,%.0f,%.2f)", - rgb.redComponent * 255, - rgb.greenComponent * 255, - rgb.blueComponent * 255, + properties.append(String(format: "bg:rgba(%.0f,%.0f,%.0f,%.2f)", + rgb.redComponent * 255, + rgb.greenComponent * 255, + rgb.blueComponent * 255, rgb.alphaComponent)) } else { properties.append("bg:\(bgColor)") } } } - + result += " [\(properties.joined(separator: ", "))]" result += "\n" - + // Process subviews for (index, subview) in subviews.enumerated() { let isLastSubview = index == subviews.count - 1 let newIndent = indent + (isLast ? " " : "│ ") result += subview.viewHierarchyDescription(indent: newIndent, isLast: isLastSubview) } - + return result } } diff --git a/macos/Sources/Helpers/Extensions/NSWindow+Extension.swift b/macos/Sources/Helpers/Extensions/NSWindow+Extension.swift index 5d1831f261c..3c5cbd23aea 100644 --- a/macos/Sources/Helpers/Extensions/NSWindow+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSWindow+Extension.swift @@ -39,6 +39,23 @@ extension NSWindow { guard let firstWindow = tabGroup?.windows.first else { return true } return firstWindow === self } + + /// Wraps `addTabbedWindow` with an Objective-C exception catcher because AppKit can + /// throw NSExceptions in visual tab picker flows. Swift cannot safely recover from + /// those exceptions, so we route through Obj-C and log a recoverable failure. + @discardableResult + func addTabbedWindowSafely( + _ child: NSWindow, + ordered: NSWindow.OrderingMode + ) -> Bool { + var error: NSError? + let success = GhosttyAddTabbedWindowSafely(self, child, ordered.rawValue, &error) + if let error { + Ghostty.logger.error("addTabbedWindow failed: \(error.localizedDescription)") + } + + return success + } } /// Native tabbing private API usage. :( @@ -52,31 +69,39 @@ extension NSWindow { guard themeFrameView.responds(to: Selector(("titlebarView"))) else { return nil } return themeFrameView.value(forKey: "titlebarView") as? NSView } - + /// Returns the [private] NSTabBar view, if it exists. var tabBarView: NSView? { titlebarView?.firstDescendant(withClassName: "NSTabBar") } - - /// Returns the index of the tab button at the given screen point, if any. - func tabIndex(atScreenPoint screenPoint: NSPoint) -> Int? { + + /// Returns tab button views in visual order from left to right. + func tabButtonsInVisualOrder() -> [NSView] { + guard let tabBarView else { return [] } + return tabBarView + .descendants(withClassName: "NSTabButton") + .sorted { $0.frame.minX < $1.frame.minX } + } + + /// Returns the visual tab index and matching tab button at the given screen point. + func tabButtonHit(atScreenPoint screenPoint: NSPoint) -> (index: Int, tabButton: NSView)? { guard let tabBarView else { return nil } let locationInWindow = convertPoint(fromScreen: screenPoint) let locationInTabBar = tabBarView.convert(locationInWindow, from: nil) guard tabBarView.bounds.contains(locationInTabBar) else { return nil } - - // Find all tab buttons and sort by x position to get visual order. - // The view hierarchy order doesn't match the visual tab order. - let tabItemViews = tabBarView.descendants(withClassName: "NSTabButton") - .sorted { $0.frame.origin.x < $1.frame.origin.x } - - for (index, tabItemView) in tabItemViews.enumerated() { - let locationInTab = tabItemView.convert(locationInWindow, from: nil) - if tabItemView.bounds.contains(locationInTab) { - return index + + for (index, tabButton) in tabButtonsInVisualOrder().enumerated() { + let locationInTabButton = tabButton.convert(locationInWindow, from: nil) + if tabButton.bounds.contains(locationInTabButton) { + return (index, tabButton) } } - + return nil } + + /// Returns the index of the tab button at the given screen point, if any. + func tabIndex(atScreenPoint screenPoint: NSPoint) -> Int? { + tabButtonHit(atScreenPoint: screenPoint)?.index + } } diff --git a/macos/Sources/Helpers/Extensions/NSWorkspace+Extension.swift b/macos/Sources/Helpers/Extensions/NSWorkspace+Extension.swift index bc2d028b530..c4f7ca5c16a 100644 --- a/macos/Sources/Helpers/Extensions/NSWorkspace+Extension.swift +++ b/macos/Sources/Helpers/Extensions/NSWorkspace+Extension.swift @@ -7,7 +7,13 @@ extension NSWorkspace { var defaultTextEditor: URL? { defaultApplicationURL(forContentType: UTType.plainText.identifier) } - + + /// Returns the URL of the default terminal (Unix Executable) application. + /// - Returns: The URL of the default terminal, or nil if no default terminal is found. + var defaultTerminal: URL? { + defaultApplicationURL(forContentType: UTType.unixExecutable.identifier) + } + /// Returns the URL of the default application for opening files with the specified content type. /// - Parameter contentType: The content type identifier (UTI) to find the default application for. /// - Returns: The URL of the default application, or nil if no default application is found. @@ -18,7 +24,7 @@ extension NSWorkspace { nil )?.takeRetainedValue() as? URL } - + /// Returns the URL of the default application for opening files with the specified file extension. /// - Parameter ext: The file extension to find the default application for. /// - Returns: The URL of the default application, or nil if no default application is found. diff --git a/macos/Sources/Helpers/Extensions/OSColor+Extension.swift b/macos/Sources/Helpers/Extensions/OSColor+Extension.swift index 54b3e1fab42..67246bcf528 100644 --- a/macos/Sources/Helpers/Extensions/OSColor+Extension.swift +++ b/macos/Sources/Helpers/Extensions/OSColor+Extension.swift @@ -1,5 +1,7 @@ import Foundation +#if !DOCK_TILE_PLUGIN import GhosttyKit +#endif extension OSColor { var isLightColor: Bool { @@ -92,7 +94,7 @@ extension OSColor { } // MARK: Ghostty Types - +#if !DOCK_TILE_PLUGIN extension OSColor { /// Create a color from a Ghostty color. convenience init(ghostty: ghostty_config_color_s) { @@ -102,3 +104,4 @@ extension OSColor { self.init(red: red, green: green, blue: blue, alpha: 1) } } +#endif diff --git a/macos/Sources/Helpers/Extensions/ObjectIdentifier+Extension.swift b/macos/Sources/Helpers/Extensions/ObjectIdentifier+Extension.swift new file mode 100644 index 00000000000..d2440f1d49c --- /dev/null +++ b/macos/Sources/Helpers/Extensions/ObjectIdentifier+Extension.swift @@ -0,0 +1,7 @@ +import Foundation + +extension ObjectIdentifier { + var hexString: String { + String(UInt(bitPattern: self), radix: 16) + } +} diff --git a/macos/Sources/Helpers/Extensions/String+Extension.swift b/macos/Sources/Helpers/Extensions/String+Extension.swift index 03f715fd8d6..4fa61cd78b7 100644 --- a/macos/Sources/Helpers/Extensions/String+Extension.swift +++ b/macos/Sources/Helpers/Extensions/String+Extension.swift @@ -27,5 +27,13 @@ extension String { } #endif - + /// Converts a four-character ASCII string to its `FourCharCode` (`UInt32`) value. + var fourCharCode: UInt32 { + assert(count <= 4, "FourCharCode string must be at most 4 characters") + var result: UInt32 = 0 + for byte in utf8.prefix(4) { + result = (result << 8) | UInt32(byte) + } + return result + } } diff --git a/macos/Sources/Helpers/Extensions/Transferable+Extension.swift b/macos/Sources/Helpers/Extensions/Transferable+Extension.swift index 3bcc9057f31..a45cdc7a4ed 100644 --- a/macos/Sources/Helpers/Extensions/Transferable+Extension.swift +++ b/macos/Sources/Helpers/Extensions/Transferable+Extension.swift @@ -40,16 +40,16 @@ private final class TransferableDataProvider: NSObject, NSPasteboardItemDataProv // to block until the async load completes. This is safe because AppKit // calls this method on a background thread during drag operations. let semaphore = DispatchSemaphore(value: 0) - + var result: Data? itemProvider.loadDataRepresentation(forTypeIdentifier: type.rawValue) { data, _ in result = data semaphore.signal() } - + // Wait for the data to load semaphore.wait() - + // Set it. I honestly don't know what happens here if this fails. if let data = result { item.setData(data, forType: type) diff --git a/macos/Sources/Helpers/Fullscreen.swift b/macos/Sources/Helpers/Fullscreen.swift index 8ab47626723..139059190d5 100644 --- a/macos/Sources/Helpers/Fullscreen.swift +++ b/macos/Sources/Helpers/Fullscreen.swift @@ -204,12 +204,12 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { // We must hide the dock FIRST then hide the menu: // If you specify autoHideMenuBar, it must be accompanied by either hideDock or autoHideDock. // https://developer.apple.com/documentation/appkit/nsapplication/presentationoptions-swift.struct - if (savedState.dock) { + if savedState.dock { hideDock() } // Hide the menu if requested - if (properties.hideMenu && savedState.menu) { + if properties.hideMenu && savedState.menu { hideMenu() } @@ -261,7 +261,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { if savedState.dock { unhideDock() } - if (properties.hideMenu && savedState.menu) { + if properties.hideMenu && savedState.menu { unhideMenu() } @@ -296,13 +296,13 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { if tabIndex == 0 { // We were previously the first tab. Add it before ("below") // the first window in the tab group currently. - tabGroup.windows.first!.addTabbedWindow(window, ordered: .below) + tabGroup.windows.first!.addTabbedWindowSafely(window, ordered: .below) } else if tabIndex <= tabGroup.windows.count { // We were somewhere in the middle - tabGroup.windows[tabIndex - 1].addTabbedWindow(window, ordered: .above) + tabGroup.windows[tabIndex - 1].addTabbedWindowSafely(window, ordered: .above) } else { // We were at the end - tabGroup.windows.last!.addTabbedWindow(window, ordered: .below) + tabGroup.windows.last!.addTabbedWindowSafely(window, ordered: .below) } } @@ -328,8 +328,8 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { // calculate this ourselves. var frame = screen.frame - if (!NSApp.presentationOptions.contains(.autoHideMenuBar) && - !NSApp.presentationOptions.contains(.hideMenuBar)) { + if !NSApp.presentationOptions.contains(.autoHideMenuBar) && + !NSApp.presentationOptions.contains(.hideMenuBar) { // We need to subtract the menu height since we're still showing it. frame.size.height -= NSApp.mainMenu?.menuBarHeight ?? 0 @@ -339,7 +339,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { // put an #available check, but it was in a bug fix release so I think // if a bug is reported to Ghostty we can just advise the user to // update. - } else if (properties.paddedNotch) { + } else if properties.paddedNotch { // We are hiding the menu, we may need to avoid the notch. frame.size.height -= screen.safeAreaInsets.top } @@ -413,7 +413,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle { self.toolbarStyle = window.toolbarStyle self.dock = window.screen?.hasDock ?? false - self.titlebarAccessoryViewControllers = if (window.hasTitleBar) { + self.titlebarAccessoryViewControllers = if window.hasTitleBar { // Accessing titlebarAccessoryViewControllers without a titlebar triggers a crash. window.titlebarAccessoryViewControllers } else { diff --git a/macos/Sources/Helpers/LastWindowPosition.swift b/macos/Sources/Helpers/LastWindowPosition.swift index a0dfa90dda5..5a9ce1d2c89 100644 --- a/macos/Sources/Helpers/LastWindowPosition.swift +++ b/macos/Sources/Helpers/LastWindowPosition.swift @@ -7,22 +7,28 @@ class LastWindowPosition { private let positionKey = "NSWindowLastPosition" func save(_ window: NSWindow) { - let origin = window.frame.origin - let point = [origin.x, origin.y] - UserDefaults.standard.set(point, forKey: positionKey) + let frame = window.frame + let rect = [frame.origin.x, frame.origin.y, frame.size.width, frame.size.height] + UserDefaults.standard.set(rect, forKey: positionKey) } func restore(_ window: NSWindow) -> Bool { - guard let points = UserDefaults.standard.array(forKey: positionKey) as? [Double], - points.count == 2 else { return false } + guard let values = UserDefaults.standard.array(forKey: positionKey) as? [Double], + values.count >= 2 else { return false } - let lastPosition = CGPoint(x: points[0], y: points[1]) + let lastPosition = CGPoint(x: values[0], y: values[1]) guard let screen = window.screen ?? NSScreen.main else { return false } let visibleFrame = screen.visibleFrame var newFrame = window.frame newFrame.origin = lastPosition + + if values.count >= 4 { + newFrame.size.width = min(values[2], visibleFrame.width) + newFrame.size.height = min(values[3], visibleFrame.height) + } + if !visibleFrame.contains(newFrame.origin) { newFrame.origin.x = max(visibleFrame.minX, min(visibleFrame.maxX - newFrame.width, newFrame.origin.x)) newFrame.origin.y = max(visibleFrame.minY, min(visibleFrame.maxY - newFrame.height, newFrame.origin.y)) diff --git a/macos/Sources/Helpers/MetalView.swift b/macos/Sources/Helpers/MetalView.swift index 6579f886347..e8c27b52b8e 100644 --- a/macos/Sources/Helpers/MetalView.swift +++ b/macos/Sources/Helpers/MetalView.swift @@ -10,7 +10,7 @@ struct MetalView: View { } } -fileprivate struct MetalViewRepresentable: NSViewRepresentable { +private struct MetalViewRepresentable: NSViewRepresentable { @Binding var metalView: V func makeNSView(context: Context) -> some NSView { diff --git a/macos/Sources/Helpers/ObjCExceptionCatcher.h b/macos/Sources/Helpers/ObjCExceptionCatcher.h new file mode 100644 index 00000000000..7906b59457f --- /dev/null +++ b/macos/Sources/Helpers/ObjCExceptionCatcher.h @@ -0,0 +1,13 @@ +#import + +/// This file contains wrappers around various ObjC functions so we can catch +/// exceptions, since you can't natively catch ObjC exceptions from Swift +/// (at least at the time of writing this comment). + +/// NSWindow.addTabbedWindow wrapper +FOUNDATION_EXPORT BOOL GhosttyAddTabbedWindowSafely( + id _Nonnull parent, + id _Nonnull child, + NSInteger ordered, + NSError * _Nullable * _Nullable error +); diff --git a/macos/Sources/Helpers/ObjCExceptionCatcher.m b/macos/Sources/Helpers/ObjCExceptionCatcher.m new file mode 100644 index 00000000000..e91fb14a766 --- /dev/null +++ b/macos/Sources/Helpers/ObjCExceptionCatcher.m @@ -0,0 +1,32 @@ +#import "ObjCExceptionCatcher.h" + +#import + +BOOL GhosttyAddTabbedWindowSafely( + id parent, + id child, + NSInteger ordered, + NSError * _Nullable * _Nullable error +) { + // AppKit occasionally throws NSException while adding tabbed windows, + // in particular when creating tabs from the tab overview page since some + // macOS update recently in 2025/2026 (unclear). + // + // We must catch it in Objective-C; letting this cross into Swift is unsafe. + @try { + [((NSWindow *)parent) addTabbedWindow:(NSWindow *)child ordered:(NSWindowOrderingMode)ordered]; + return YES; + } @catch (NSException *exception) { + if (error != NULL) { + NSString *reason = exception.reason ?: @"Unknown Objective-C exception"; + *error = [NSError errorWithDomain:@"Ghostty.ObjCException" + code:1 + userInfo:@{ + NSLocalizedDescriptionKey: reason, + @"exception_name": exception.name, + }]; + } + + return NO; + } +} diff --git a/macos/Sources/Helpers/PermissionRequest.swift b/macos/Sources/Helpers/PermissionRequest.swift index 9c16c7163ee..29d1ab6d3f4 100644 --- a/macos/Sources/Helpers/PermissionRequest.swift +++ b/macos/Sources/Helpers/PermissionRequest.swift @@ -40,7 +40,7 @@ class PermissionRequest { completion(storedResult) return } - + let alert = NSAlert() alert.messageText = message alert.informativeText = informative @@ -59,7 +59,7 @@ class PermissionRequest { target: nil, action: nil) checkbox!.state = .off - + // Set checkbox as accessory view alert.accessoryView = checkbox } @@ -74,7 +74,7 @@ class PermissionRequest { handleResponse(response, rememberDecision: checkbox?.state == .on, key: key, allowDuration: allowDuration, rememberDuration: rememberDuration, completion: completion) } } - + /// Handles the alert response and processes caching logic /// - Parameters: /// - response: The alert response from the user @@ -90,7 +90,7 @@ class PermissionRequest { allowDuration: AllowDuration, rememberDuration: Duration?, completion: @escaping (Bool) -> Void) { - + let result: Bool switch response { case .alertFirstButtonReturn: // Allow @@ -100,7 +100,7 @@ class PermissionRequest { default: result = false } - + // Store the result if checkbox is checked or if "Allow" was selected and allowDuration is set if rememberDecision, let rememberDuration = rememberDuration { storeResult(result, for: key, duration: rememberDuration) @@ -118,10 +118,10 @@ class PermissionRequest { storeResult(result, for: key, duration: duration) } } - + completion(result) } - + /// Retrieves a cached permission decision if it hasn't expired /// - Parameter key: The UserDefaults key to check /// - Returns: The cached decision, or nil if no valid cached decision exists @@ -132,16 +132,16 @@ class PermissionRequest { ofClass: StoredPermission.self, from: data) else { return nil } - + if Date() > storedPermission.expiry { // Decision has expired, remove stored value userDefaults.removeObject(forKey: key) return nil } - + return storedPermission.result } - + /// Stores a permission decision in UserDefaults with an expiration date /// - Parameters: /// - result: The permission decision to store @@ -180,7 +180,7 @@ class PermissionRequest { return "Remember my decision for \(days) day\(days == 1 ? "" : "s")" } } - + /// Internal class for storing permission decisions with expiration dates in UserDefaults /// Conforms to NSSecureCoding for safe archiving/unarchiving @objc(StoredPermission) diff --git a/macos/Sources/Helpers/TabTitleEditor.swift b/macos/Sources/Helpers/TabTitleEditor.swift new file mode 100644 index 00000000000..0a1efae324e --- /dev/null +++ b/macos/Sources/Helpers/TabTitleEditor.swift @@ -0,0 +1,398 @@ +import AppKit + +/// Delegate used by ``TabTitleEditor`` to resolve tab-specific behavior. +protocol TabTitleEditorDelegate: AnyObject { + /// Returns whether inline rename should be allowed for the given tab window. + func tabTitleEditor( + _ editor: TabTitleEditor, + canRenameTabFor targetWindow: NSWindow + ) -> Bool + + /// Returns the current title value to seed into the inline editor. + func tabTitleEditor( + _ editor: TabTitleEditor, + titleFor targetWindow: NSWindow + ) -> String + + /// Called when inline editing commits a title for a target tab window. + func tabTitleEditor( + _ editor: TabTitleEditor, + didCommitTitle editedTitle: String, + for targetWindow: NSWindow + ) + + /// Called when inline editing could not start and the host should show a fallback flow. + func tabTitleEditor( + _ editor: TabTitleEditor, + performFallbackRenameFor targetWindow: NSWindow + ) +} + +/// Handles inline tab title editing for native AppKit window tabs. +final class TabTitleEditor: NSObject, NSTextFieldDelegate { + /// Host window containing the tab bar where editing occurs. + private weak var hostWindow: NSWindow? + /// Delegate that provides and commits title data for target tab windows. + private weak var delegate: TabTitleEditorDelegate? + + /// Active inline editor view, if editing is in progress. + private weak var inlineTitleEditor: NSTextField? + /// Tab window currently being edited. + private weak var inlineTitleTargetWindow: NSWindow? + /// Original state of the tab bar. + private var previousTabState: TabUIState? + /// Deferred begin-editing work used to avoid visual flicker on double-click. + private var pendingEditWorkItem: DispatchWorkItem? + + /// Creates a coordinator bound to a host window and rename delegate. + init(hostWindow: NSWindow, delegate: TabTitleEditorDelegate) { + self.hostWindow = hostWindow + self.delegate = delegate + } + + /// Handles leftMouseDown events from the host window and begins inline edit if possible. If this + /// returns true then the event was handled by the coordinator. + func handleMouseDown(_ event: NSEvent) -> Bool { + guard event.type == .leftMouseDown else { return false } + + // If we don't have a host window to look up the click, we do nothing. + guard let hostWindow else { return false } + + // Find the tab window that is being clicked. + let locationInScreen = hostWindow.convertPoint(toScreen: event.locationInWindow) + guard let tabIndex = hostWindow.tabIndex(atScreenPoint: locationInScreen), + let targetWindow = hostWindow.tabbedWindows?[safe: tabIndex], + delegate?.tabTitleEditor(self, canRenameTabFor: targetWindow) == true + else { return false } + + guard !isMouseEventWithinEditor(event) else { + // If the click lies within the editor, + // we should forward the event to the editor + inlineTitleEditor?.mouseDown(with: event) + return true + } + // We only want double-clicks to enable editing + guard event.clickCount == 2 else { return false } + // We need to start editing in a separate event loop tick, so set that up. + pendingEditWorkItem?.cancel() + let workItem = DispatchWorkItem { [weak self, weak targetWindow] in + guard let self, let targetWindow else { return } + if self.beginEditing(for: targetWindow) { + return + } + + // Inline editing failed, so trigger fallback rename whatever it is. + self.delegate?.tabTitleEditor(self, performFallbackRenameFor: targetWindow) + } + + pendingEditWorkItem = workItem + DispatchQueue.main.async(execute: workItem) + return true + } + + /// Handles rightMouseDown events from the host window. + /// + /// If this returns true then the event was handled by the coordinator. + func handleRightMouseDown(_ event: NSEvent) -> Bool { + if isMouseEventWithinEditor(event) { + inlineTitleEditor?.rightMouseDown(with: event) + return true + } else { + return false + } + } + + /// Begins editing the given target tab window title. Returns true if we're able to start the + /// inline edit. + @discardableResult + func beginEditing(for targetWindow: NSWindow) -> Bool { + // Resolve the visual tab button for the target tab window. We rely on visual order + // since native tab view hierarchy order does not necessarily match what is on screen. + guard let hostWindow, + let tabbedWindows = hostWindow.tabbedWindows, + let tabIndex = tabbedWindows.firstIndex(of: targetWindow), + let tabButton = hostWindow.tabButtonsInVisualOrder()[safe: tabIndex], + delegate?.tabTitleEditor(self, canRenameTabFor: targetWindow) == true + else { return false } + + // If we have a pending edit, we need to cancel it because we got + // called to start edit explicitly. + pendingEditWorkItem?.cancel() + pendingEditWorkItem = nil + finishEditing(commit: true) + + let tabState = TabUIState(tabButton: tabButton) + + // Build the editor using title text and style derived from the tab's existing label. + let editedTitle = delegate?.tabTitleEditor(self, titleFor: targetWindow) ?? targetWindow.title + let sourceLabel = sourceTabTitleLabel(from: tabState.labels.map(\.label), matching: editedTitle) + let editorFrame = tabTitleEditorFrame(for: tabButton, sourceLabel: sourceLabel) + guard editorFrame.width >= 20, editorFrame.height >= 14 else { return false } + + let editor = NSTextField(frame: editorFrame) + editor.delegate = self + editor.stringValue = editedTitle + editor.alignment = sourceLabel?.alignment ?? .center + editor.isBordered = false + editor.isBezeled = false + editor.drawsBackground = false + editor.focusRingType = .none + editor.lineBreakMode = .byClipping + if let editorCell = editor.cell as? NSTextFieldCell { + editorCell.wraps = false + editorCell.usesSingleLineMode = true + editorCell.isScrollable = true + } + if let sourceLabel { + applyTextStyle(to: editor, from: sourceLabel, title: editedTitle) + } + + // Hide it until the tab button has finished layout so we can avoid flicker. + editor.isHidden = true + + inlineTitleEditor = editor + inlineTitleTargetWindow = targetWindow + previousTabState = tabState + // Temporarily hide native title label views while editing so only the text field is visible. + CATransaction.begin() + CATransaction.setDisableActions(true) + tabState.hide() + + tabButton.layoutSubtreeIfNeeded() + tabButton.displayIfNeeded() + tabButton.addSubview(editor) + CATransaction.commit() + + // Focus after insertion so AppKit has created the field editor for this text field. + DispatchQueue.main.async { [weak hostWindow, weak editor] in + guard let hostWindow, let editor else { return } + editor.isHidden = false + hostWindow.makeFirstResponder(editor) + if let fieldEditor = editor.currentEditor() as? NSTextView, + let editorFont = editor.font { + fieldEditor.font = editorFont + var typingAttributes = fieldEditor.typingAttributes + typingAttributes[.font] = editorFont + fieldEditor.typingAttributes = typingAttributes + } + editor.currentEditor()?.selectAll(nil) + } + + return true + } + + /// Finishes any in-flight inline edit and optionally commits the edited title. + func finishEditing(commit: Bool) { + // If we're pending starting a new edit, cancel it. + pendingEditWorkItem?.cancel() + pendingEditWorkItem = nil + + // To finish editing we need a current editor. + guard let editor = inlineTitleEditor else { return } + let editedTitle = editor.stringValue + let targetWindow = inlineTitleTargetWindow + + // Clear coordinator references first so re-entrant paths don't see stale state. + editor.delegate = nil + inlineTitleEditor = nil + inlineTitleTargetWindow = nil + + // Make sure the window grabs focus again + if let hostWindow { + if let currentEditor = editor.currentEditor(), hostWindow.firstResponder === currentEditor { + hostWindow.makeFirstResponder(nil) + } else if hostWindow.firstResponder === editor { + hostWindow.makeFirstResponder(nil) + } + } + + editor.removeFromSuperview() + + previousTabState?.restore() + previousTabState = nil + + // Delegate owns title persistence semantics (including empty-title handling). + guard commit, let targetWindow else { return } + delegate?.tabTitleEditor(self, didCommitTitle: editedTitle, for: targetWindow) + } + + /// Chooses an editor frame that aligns with the tab title within the tab button. + private func tabTitleEditorFrame(for tabButton: NSView, sourceLabel: NSTextField?) -> NSRect { + let bounds = tabButton.bounds + let horizontalInset: CGFloat = 6 + var frame = bounds.insetBy(dx: horizontalInset, dy: 0) + + if let sourceLabel { + let labelFrame = tabButton.convert(sourceLabel.bounds, from: sourceLabel) + /// The `labelFrame.minY` value changes unexpectedly after double clicking selected text, + /// I don't know exactly why, but `tabButton.bounds` appears stable enough to calculate the correct position reliably. + frame.origin.y = bounds.midY - labelFrame.height * 0.5 + frame.size.height = labelFrame.height + } + + return frame.integral + } + + /// Selects the best title label candidate from private tab button subviews. + private func sourceTabTitleLabel(from labels: [NSTextField], matching title: String) -> NSTextField? { + let expected = title.trimmingCharacters(in: .whitespacesAndNewlines) + if !expected.isEmpty { + // Prefer a visible exact title match when we can find one. + if let exactVisible = labels.first(where: { + !$0.isHidden && + $0.alphaValue > 0.01 && + $0.stringValue.trimmingCharacters(in: .whitespacesAndNewlines) == expected + }) { + return exactVisible + } + + // Fall back to any exact match, including hidden labels. + if let exactAny = labels.first(where: { + $0.stringValue.trimmingCharacters(in: .whitespacesAndNewlines) == expected + }) { + return exactAny + } + } + + // Otherwise heuristically choose the largest visible, centered label first. + let visibleNonEmpty = labels.filter { + !$0.isHidden && + $0.alphaValue > 0.01 && + !$0.stringValue.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty + } + + if let centeredVisible = visibleNonEmpty + .filter({ $0.alignment == .center }) + .max(by: { $0.bounds.width < $1.bounds.width }) { + return centeredVisible + } + + if let visible = visibleNonEmpty.max(by: { $0.bounds.width < $1.bounds.width }) { + return visible + } + + return labels.max(by: { $0.bounds.width < $1.bounds.width }) + } + + /// Copies text styling from the source tab label onto the inline editor. + private func applyTextStyle(to editor: NSTextField, from label: NSTextField, title: String) { + var attributes: [NSAttributedString.Key: Any] = [:] + if label.attributedStringValue.length > 0 { + attributes = label.attributedStringValue.attributes(at: 0, effectiveRange: nil) + } + + if attributes[.font] == nil, let font = label.font { + attributes[.font] = font + } + + if attributes[.foregroundColor] == nil { + attributes[.foregroundColor] = label.textColor + } + + if let font = attributes[.font] as? NSFont { + editor.font = font + } + + if let textColor = attributes[.foregroundColor] as? NSColor { + editor.textColor = textColor + } + + if !attributes.isEmpty { + editor.attributedStringValue = NSAttributedString(string: title, attributes: attributes) + } else { + editor.stringValue = title + } + } + + // MARK: NSTextFieldDelegate + + func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool { + guard control === inlineTitleEditor else { return false } + + // Enter commits and exits inline edit. + if commandSelector == #selector(NSResponder.insertNewline(_:)) { + finishEditing(commit: true) + return true + } + + // Escape cancels and restores the previous tab title. + if commandSelector == #selector(NSResponder.cancelOperation(_:)) { + finishEditing(commit: false) + return true + } + + return false + } + + func controlTextDidEndEditing(_ obj: Notification) { + guard let inlineTitleEditor, + let finishedEditor = obj.object as? NSTextField, + finishedEditor === inlineTitleEditor + else { return } + + // Blur/end-edit commits, matching standard NSTextField behavior. + finishEditing(commit: true) + } +} + +private extension TabTitleEditor { + func isMouseEventWithinEditor(_ event: NSEvent) -> Bool { + guard let editor = inlineTitleEditor?.currentEditor() else { + return false + } + return editor.convert(editor.bounds, to: nil).contains(event.locationInWindow) + } +} + +private extension TabTitleEditor { + struct TabUIState { + /// Original hidden state for title labels that are temporarily hidden while editing. + let labels: [(label: NSTextField, wasHidden: Bool)] + /// Original hidden state for buttons that are temporarily hidden while editing. + let buttons: [(button: NSButton, wasHidden: Bool)] + /// Original button title state restored once editing finishes. + let titleButton: (button: NSButton, title: String, attributedTitle: NSAttributedString?)? + + init(tabButton: NSView) { + labels = tabButton + .descendants(withClassName: "NSTextField") + .compactMap { $0 as? NSTextField } + .map { ($0, $0.isHidden) } + buttons = tabButton + .descendants(withClassName: "NSButton") + .compactMap { $0 as? NSButton } + .map { ($0, $0.isHidden) } + if let button = tabButton as? NSButton { + titleButton = (button, button.title, button.attributedTitle) + } else { + titleButton = nil + } + } + + func hide() { + for (label, _) in labels { + label.isHidden = true + } + for (btn, _) in buttons { + btn.isHidden = true + } + titleButton?.button.title = "" + titleButton?.button.attributedTitle = NSAttributedString(string: "") + } + + func restore() { + for (label, wasHidden) in labels { + label.isHidden = wasHidden + } + for (btn, wasHidden) in buttons { + btn.isHidden = wasHidden + } + if let titleButton { + titleButton.button.title = titleButton.title + if let attributedTitle = titleButton.attributedTitle { + titleButton.button.attributedTitle = attributedTitle + } + } + } + } +} diff --git a/macos/Tests/ColorizedGhosttyIconTests.swift b/macos/Tests/ColorizedGhosttyIconTests.swift new file mode 100644 index 00000000000..bf2963f3385 --- /dev/null +++ b/macos/Tests/ColorizedGhosttyIconTests.swift @@ -0,0 +1,144 @@ +import AppKit +import Foundation +import Testing +@testable import Ghostty + +struct ColorizedGhosttyIconTests { + private func makeIcon( + screenColors: [NSColor] = [ + NSColor(hex: "#112233")!, + NSColor(hex: "#AABBCC")!, + ], + ghostColor: NSColor = NSColor(hex: "#445566")!, + frame: Ghostty.MacOSIconFrame = .aluminum + ) -> ColorizedGhosttyIcon { + .init(screenColors: screenColors, ghostColor: ghostColor, frame: frame) + } + + // MARK: - Codable + + @Test func codableRoundTripPreservesIcon() throws { + let icon = makeIcon(frame: .chrome) + let data = try JSONEncoder().encode(icon) + let decoded = try JSONDecoder().decode(ColorizedGhosttyIcon.self, from: data) + + #expect(decoded == icon) + #expect(decoded.screenColors.compactMap(\.hexString) == ["#112233", "#AABBCC"]) + #expect(decoded.ghostColor.hexString == "#445566") + #expect(decoded.frame == .chrome) + } + + @Test func encodingWritesVersionAndHexColors() throws { + let icon = makeIcon(frame: .plastic) + let data = try JSONEncoder().encode(icon) + + let payload = try #require(JSONSerialization.jsonObject(with: data) as? [String: Any]) + #expect(payload["version"] as? Int == 1) + #expect(payload["screenColors"] as? [String] == ["#112233", "#AABBCC"]) + #expect(payload["ghostColor"] as? String == "#445566") + #expect(payload["frame"] as? String == "plastic") + } + + @Test func decodesLegacyV0PayloadWithoutVersion() throws { + let data = Data(""" + { + "screenColors": ["#112233", "#AABBCC"], + "ghostColor": "#445566", + "frame": "beige" + } + """.utf8) + + let decoded = try JSONDecoder().decode(ColorizedGhosttyIcon.self, from: data) + #expect(decoded.screenColors.compactMap(\.hexString) == ["#112233", "#AABBCC"]) + #expect(decoded.ghostColor.hexString == "#445566") + #expect(decoded.frame == .beige) + } + + @Test func decodingUnsupportedVersionThrowsDataCorrupted() { + let data = Data(""" + { + "version": 99, + "screenColors": ["#112233", "#AABBCC"], + "ghostColor": "#445566", + "frame": "chrome" + } + """.utf8) + + do { + _ = try JSONDecoder().decode(ColorizedGhosttyIcon.self, from: data) + Issue.record("Expected decode to fail for unsupported version") + } catch let DecodingError.dataCorrupted(context) { + #expect(context.debugDescription.contains("Unsupported ColorizedGhosttyIcon version")) + } catch { + Issue.record("Expected DecodingError.dataCorrupted, got: \(error)") + } + } + + @Test func decodingInvalidGhostColorThrows() { + let data = Data(""" + { + "version": 1, + "screenColors": ["#112233", "#AABBCC"], + "ghostColor": "not-a-color", + "frame": "chrome" + } + """.utf8) + + do { + _ = try JSONDecoder().decode(ColorizedGhosttyIcon.self, from: data) + Issue.record("Expected decode to fail for invalid ghost color") + } catch let DecodingError.dataCorrupted(context) { + #expect(context.debugDescription.contains("Failed to decode ghost color")) + } catch { + Issue.record("Expected DecodingError.dataCorrupted, got: \(error)") + } + } + + @Test func decodingInvalidScreenColorsDropsInvalidEntries() throws { + let data = Data(""" + { + "version": 1, + "screenColors": ["#112233", "invalid", "#AABBCC"], + "ghostColor": "#445566", + "frame": "chrome" + } + """.utf8) + + let decoded = try JSONDecoder().decode(ColorizedGhosttyIcon.self, from: data) + #expect(decoded.screenColors.compactMap(\.hexString) == ["#112233", "#AABBCC"]) + } + + // MARK: - Equatable + + @Test func equatableUsesHexColorAndFrameValues() { + let lhs = makeIcon( + screenColors: [ + NSColor(red: 0x11 / 255.0, green: 0x22 / 255.0, blue: 0x33 / 255.0, alpha: 1.0), + NSColor(red: 0xAA / 255.0, green: 0xBB / 255.0, blue: 0xCC / 255.0, alpha: 1.0), + ], + ghostColor: NSColor(red: 0x44 / 255.0, green: 0x55 / 255.0, blue: 0x66 / 255.0, alpha: 1.0), + frame: .chrome + ) + let rhs = makeIcon(frame: .chrome) + + #expect(lhs == rhs) + } + + @Test func equatableReturnsFalseForDifferentFrame() { + let lhs = makeIcon(frame: .aluminum) + let rhs = makeIcon(frame: .chrome) + #expect(lhs != rhs) + } + + @Test func equatableReturnsFalseForDifferentScreenColors() { + let lhs = makeIcon(screenColors: [NSColor(hex: "#112233")!, NSColor(hex: "#AABBCC")!]) + let rhs = makeIcon(screenColors: [NSColor(hex: "#112233")!, NSColor(hex: "#CCBBAA")!]) + #expect(lhs != rhs) + } + + @Test func equatableReturnsFalseForDifferentGhostColor() { + let lhs = makeIcon(ghostColor: NSColor(hex: "#445566")!) + let rhs = makeIcon(ghostColor: NSColor(hex: "#665544")!) + #expect(lhs != rhs) + } +} diff --git a/macos/Tests/Ghostty/ShellTests.swift b/macos/Tests/Ghostty/ShellTests.swift index c7b34b3d9ca..5990bedc7ca 100644 --- a/macos/Tests/Ghostty/ShellTests.swift +++ b/macos/Tests/Ghostty/ShellTests.swift @@ -2,6 +2,34 @@ import Testing @testable import Ghostty struct ShellTests { + @Test(arguments: [ + ("hello", "hello"), + ("", ""), + ("file name", "file\\ name"), + ("a\\b", "a\\\\b"), + ("(foo)", "\\(foo\\)"), + ("[bar]", "\\[bar\\]"), + ("{baz}", "\\{baz\\}"), + ("", "\\"), + ("say\"hi\"", "say\\\"hi\\\""), + ("it's", "it\\'s"), + ("`cmd`", "\\`cmd\\`"), + ("wow!", "wow\\!"), + ("#comment", "\\#comment"), + ("$HOME", "\\$HOME"), + ("a&b", "a\\&b"), + ("a;b", "a\\;b"), + ("a|b", "a\\|b"), + ("*.txt", "\\*.txt"), + ("file?.log", "file\\?.log"), + ("col1\tcol2", "col1\\\tcol2"), + ("$(echo 'hi')", "\\$\\(echo\\ \\'hi\\'\\)"), + ("/tmp/my file (1).txt", "/tmp/my\\ file\\ \\(1\\).txt"), + ]) + func escape(input: String, expected: String) { + #expect(Ghostty.Shell.escape(input) == expected) + } + @Test(arguments: [ ("", "''"), ("filename", "filename"), diff --git a/macos/Tests/NSPasteboardTests.swift b/macos/Tests/NSPasteboardTests.swift index d956ce733ed..9db17ca330d 100644 --- a/macos/Tests/NSPasteboardTests.swift +++ b/macos/Tests/NSPasteboardTests.swift @@ -16,14 +16,14 @@ struct NSPasteboardTypeExtensionTests { #expect(pasteboardType != nil) #expect(pasteboardType == .string) } - + /// Test text/html MIME type converts to .html @Test func testTextHtmlMimeType() async throws { let pasteboardType = NSPasteboard.PasteboardType(mimeType: "text/html") #expect(pasteboardType != nil) #expect(pasteboardType == .html) } - + /// Test image/png MIME type @Test func testImagePngMimeType() async throws { let pasteboardType = NSPasteboard.PasteboardType(mimeType: "image/png") diff --git a/macos/Tests/NSScreenTests.swift b/macos/Tests/NSScreenTests.swift index f7431bf05fe..6e67bb7e401 100644 --- a/macos/Tests/NSScreenTests.swift +++ b/macos/Tests/NSScreenTests.swift @@ -15,65 +15,65 @@ struct NSScreenExtensionTests { // Mock screen with 1000x800 visible frame starting at (0, 100) let mockScreenFrame = NSRect(x: 0, y: 100, width: 1000, height: 800) let mockScreen = MockNSScreen(visibleFrame: mockScreenFrame) - + // Mock window size let windowSize = CGSize(width: 400, height: 300) - + // Test top-left positioning: x=15, y=15 let origin = mockScreen.origin( fromTopLeftOffsetX: 15, offsetY: 15, windowSize: windowSize) - + // Expected: x = 0 + 15 = 15, y = (100 + 800) - 15 - 300 = 585 #expect(origin.x == 15) #expect(origin.y == 585) } - + /// Test zero coordinates (exact top-left corner) @Test func testZeroCoordinates() async throws { let mockScreenFrame = NSRect(x: 0, y: 100, width: 1000, height: 800) let mockScreen = MockNSScreen(visibleFrame: mockScreenFrame) let windowSize = CGSize(width: 400, height: 300) - + let origin = mockScreen.origin( fromTopLeftOffsetX: 0, offsetY: 0, windowSize: windowSize) - + // Expected: x = 0, y = (100 + 800) - 0 - 300 = 600 #expect(origin.x == 0) #expect(origin.y == 600) } - + /// Test with offset screen (not starting at origin) @Test func testOffsetScreen() async throws { // Secondary monitor at position (1440, 0) with 1920x1080 resolution let mockScreenFrame = NSRect(x: 1440, y: 0, width: 1920, height: 1080) let mockScreen = MockNSScreen(visibleFrame: mockScreenFrame) let windowSize = CGSize(width: 600, height: 400) - + let origin = mockScreen.origin( fromTopLeftOffsetX: 100, offsetY: 50, windowSize: windowSize) - + // Expected: x = 1440 + 100 = 1540, y = (0 + 1080) - 50 - 400 = 630 #expect(origin.x == 1540) #expect(origin.y == 630) } - + /// Test large coordinates @Test func testLargeCoordinates() async throws { let mockScreenFrame = NSRect(x: 0, y: 0, width: 1920, height: 1080) let mockScreen = MockNSScreen(visibleFrame: mockScreenFrame) let windowSize = CGSize(width: 400, height: 300) - + let origin = mockScreen.origin( fromTopLeftOffsetX: 500, offsetY: 200, windowSize: windowSize) - + // Expected: x = 0 + 500 = 500, y = (0 + 1080) - 200 - 300 = 580 #expect(origin.x == 500) #expect(origin.y == 580) @@ -83,16 +83,16 @@ struct NSScreenExtensionTests { /// Mock NSScreen class for testing coordinate conversion private class MockNSScreen: NSScreen { private let mockVisibleFrame: NSRect - + init(visibleFrame: NSRect) { self.mockVisibleFrame = visibleFrame super.init() } - + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + override var visibleFrame: NSRect { return mockVisibleFrame } diff --git a/macos/Tests/Terminal/TerminalViewContainerTests.swift b/macos/Tests/Terminal/TerminalViewContainerTests.swift new file mode 100644 index 00000000000..e3df8483ec9 --- /dev/null +++ b/macos/Tests/Terminal/TerminalViewContainerTests.swift @@ -0,0 +1,103 @@ +// +// TerminalViewContainerTests.swift +// Ghostty +// +// Created by Lukas on 26.02.2026. +// + +import SwiftUI +import Testing +@testable import Ghostty + +class MockTerminalViewContainer: TerminalViewContainer { + var _windowCornerRadius: CGFloat? + override var windowThemeFrameView: NSView? { + NSView() + } + + override var windowCornerRadius: CGFloat? { + _windowCornerRadius + } +} + +class MockConfig: Ghostty.Config { + internal init(backgroundBlur: Ghostty.Config.BackgroundBlur, backgroundColor: Color, backgroundOpacity: Double) { + self._backgroundBlur = backgroundBlur + self._backgroundColor = backgroundColor + self._backgroundOpacity = backgroundOpacity + super.init(config: nil) + } + + var _backgroundBlur: Ghostty.Config.BackgroundBlur + var _backgroundColor: Color + var _backgroundOpacity: Double + + override var backgroundBlur: Ghostty.Config.BackgroundBlur { + _backgroundBlur + } + + override var backgroundColor: Color { + _backgroundColor + } + + override var backgroundOpacity: Double { + _backgroundOpacity + } +} + +struct TerminalViewContainerTests { + @Test func glassAvailability() async throws { + let view = await MockTerminalViewContainer { + EmptyView() + } + + let config = MockConfig(backgroundBlur: .macosGlassRegular, backgroundColor: .clear, backgroundOpacity: 1) + await view.ghosttyConfigDidChange(config, preferredBackgroundColor: nil) + try await Task.sleep(nanoseconds: UInt64(1e8)) // wait for the view to be setup if needed + if #available(macOS 26.0, *) { + #expect(view.glassEffectView != nil) + } else { + #expect(view.glassEffectView == nil) + } + } + +#if compiler(>=6.2) + @Test func configChangeUpdatesGlass() async throws { + guard #available(macOS 26.0, *) else { return } + let view = await MockTerminalViewContainer { + EmptyView() + } + let config1 = MockConfig(backgroundBlur: .macosGlassRegular, backgroundColor: .clear, backgroundOpacity: 1) + await view.ghosttyConfigDidChange(config1, preferredBackgroundColor: nil) + let glassEffectView = await view.descendants(withClassName: "NSGlassEffectView").first as? NSGlassEffectView + let effectView = try #require(glassEffectView) + try await Task.sleep(nanoseconds: UInt64(1e8)) // wait for the view to be setup if needed + #expect(effectView.tintColor?.hexString == NSColor.clear.hexString) + + // Test with same config but with different preferredBackgroundColor + await view.ghosttyConfigDidChange(config1, preferredBackgroundColor: .red) + #expect(effectView.tintColor?.hexString == NSColor.red.hexString) + + // MARK: - Corner Radius + + #expect(effectView.cornerRadius == 0) + await MainActor.run { view._windowCornerRadius = 10 } + + // This won't change, unless ghosttyConfigDidChange is called + #expect(effectView.cornerRadius == 0) + + await view.ghosttyConfigDidChange(config1, preferredBackgroundColor: .red) + #expect(effectView.cornerRadius == 10) + + // MARK: - Glass Style + + #expect(effectView.style == .regular) + + let config2 = MockConfig(backgroundBlur: .macosGlassClear, backgroundColor: .clear, backgroundOpacity: 1) + await view.ghosttyConfigDidChange(config2, preferredBackgroundColor: .red) + + #expect(effectView.style == .clear) + + } +#endif // compiler(>=6.2) +} diff --git a/macos/Tests/Update/ReleaseNotesTests.swift b/macos/Tests/Update/ReleaseNotesTests.swift index b029fa6bc9e..6c7d43ed554 100644 --- a/macos/Tests/Update/ReleaseNotesTests.swift +++ b/macos/Tests/Update/ReleaseNotesTests.swift @@ -9,7 +9,7 @@ struct ReleaseNotesTests { displayVersionString: "1.2.3", currentCommit: nil ) - + #expect(notes != nil) if case .tagged(let url) = notes { #expect(url.absoluteString == "https://ghostty.org/docs/install/release-notes/1-2-3") @@ -18,14 +18,14 @@ struct ReleaseNotesTests { Issue.record("Expected tagged case") } } - + /// Test tip release comparison with current commit @Test func testTipReleaseComparison() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "tip-abc1234", currentCommit: "def5678" ) - + #expect(notes != nil) if case .compareTip(let url) = notes { #expect(url.absoluteString == "https://github.com/ghostty-org/ghostty/compare/def5678...abc1234") @@ -34,14 +34,14 @@ struct ReleaseNotesTests { Issue.record("Expected compareTip case") } } - + /// Test tip release without current commit @Test func testTipReleaseWithoutCurrentCommit() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "tip-abc1234", currentCommit: nil ) - + #expect(notes != nil) if case .commit(let url) = notes { #expect(url.absoluteString == "https://github.com/ghostty-org/ghostty/commit/abc1234") @@ -50,14 +50,14 @@ struct ReleaseNotesTests { Issue.record("Expected commit case") } } - + /// Test tip release with empty current commit @Test func testTipReleaseWithEmptyCurrentCommit() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "tip-abc1234", currentCommit: "" ) - + #expect(notes != nil) if case .commit(let url) = notes { #expect(url.absoluteString == "https://github.com/ghostty-org/ghostty/commit/abc1234") @@ -65,14 +65,14 @@ struct ReleaseNotesTests { Issue.record("Expected commit case") } } - + /// Test version with full 40-character hash @Test func testFullGitHash() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "tip-1234567890abcdef1234567890abcdef12345678", currentCommit: nil ) - + #expect(notes != nil) if case .commit(let url) = notes { #expect(url.absoluteString == "https://github.com/ghostty-org/ghostty/commit/1234567890abcdef1234567890abcdef12345678") @@ -80,46 +80,46 @@ struct ReleaseNotesTests { Issue.record("Expected commit case") } } - + /// Test version with no recognizable pattern @Test func testInvalidVersion() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "unknown-version", currentCommit: nil ) - + #expect(notes == nil) } - + /// Test semantic version with prerelease suffix should not match @Test func testSemanticVersionWithSuffix() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "1.2.3-beta", currentCommit: nil ) - + // Should not match semantic version pattern, falls back to hash detection #expect(notes == nil) } - + /// Test semantic version with 4 components should not match @Test func testSemanticVersionFourComponents() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "1.2.3.4", currentCommit: nil ) - + // Should not match pattern #expect(notes == nil) } - + /// Test version string with git hash embedded @Test func testVersionWithEmbeddedHash() async throws { let notes = UpdateState.ReleaseNotes( displayVersionString: "v2024.01.15-abc1234", currentCommit: "def5678" ) - + #expect(notes != nil) if case .compareTip(let url) = notes { #expect(url.absoluteString == "https://github.com/ghostty-org/ghostty/compare/def5678...abc1234") diff --git a/macos/Tests/Update/UpdateStateTests.swift b/macos/Tests/Update/UpdateStateTests.swift index 354d371c51a..6aefa22a267 100644 --- a/macos/Tests/Update/UpdateStateTests.swift +++ b/macos/Tests/Update/UpdateStateTests.swift @@ -5,25 +5,25 @@ import Sparkle struct UpdateStateTests { // MARK: - Equatable Tests - + @Test func testIdleEquality() { let state1: UpdateState = .idle let state2: UpdateState = .idle #expect(state1 == state2) } - + @Test func testCheckingEquality() { let state1: UpdateState = .checking(.init(cancel: {})) let state2: UpdateState = .checking(.init(cancel: {})) #expect(state1 == state2) } - + @Test func testNotFoundEquality() { let state1: UpdateState = .notFound(.init(acknowledgement: {})) let state2: UpdateState = .notFound(.init(acknowledgement: {})) #expect(state1 == state2) } - + @Test func testInstallingEquality() { let state1: UpdateState = .installing(.init(isAutoUpdate: false, retryTerminatingApplication: {}, dismiss: {})) let state2: UpdateState = .installing(.init(isAutoUpdate: false, retryTerminatingApplication: {}, dismiss: {})) @@ -31,7 +31,7 @@ struct UpdateStateTests { let state3: UpdateState = .installing(.init(isAutoUpdate: true, retryTerminatingApplication: {}, dismiss: {})) #expect(state3 != state2) } - + @Test func testPermissionRequestEquality() { let request1 = SPUUpdatePermissionRequest(systemProfile: []) let request2 = SPUUpdatePermissionRequest(systemProfile: []) @@ -39,43 +39,43 @@ struct UpdateStateTests { let state2: UpdateState = .permissionRequest(.init(request: request2, reply: { _ in })) #expect(state1 == state2) } - + @Test func testDownloadingEqualityWithSameProgress() { let state1: UpdateState = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500)) let state2: UpdateState = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500)) #expect(state1 == state2) } - + @Test func testDownloadingInequalityWithDifferentProgress() { let state1: UpdateState = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500)) let state2: UpdateState = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 600)) #expect(state1 != state2) } - + @Test func testDownloadingInequalityWithDifferentExpectedLength() { let state1: UpdateState = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500)) let state2: UpdateState = .downloading(.init(cancel: {}, expectedLength: 2000, progress: 500)) #expect(state1 != state2) } - + @Test func testDownloadingEqualityWithNilExpectedLength() { let state1: UpdateState = .downloading(.init(cancel: {}, expectedLength: nil, progress: 500)) let state2: UpdateState = .downloading(.init(cancel: {}, expectedLength: nil, progress: 500)) #expect(state1 == state2) } - + @Test func testExtractingEqualityWithSameProgress() { let state1: UpdateState = .extracting(.init(progress: 0.5)) let state2: UpdateState = .extracting(.init(progress: 0.5)) #expect(state1 == state2) } - + @Test func testExtractingInequalityWithDifferentProgress() { let state1: UpdateState = .extracting(.init(progress: 0.5)) let state2: UpdateState = .extracting(.init(progress: 0.6)) #expect(state1 != state2) } - + @Test func testErrorEqualityWithSameDescription() { let error1 = NSError(domain: "Test", code: 1, userInfo: [NSLocalizedDescriptionKey: "Error message"]) let error2 = NSError(domain: "Test", code: 2, userInfo: [NSLocalizedDescriptionKey: "Error message"]) @@ -83,7 +83,7 @@ struct UpdateStateTests { let state2: UpdateState = .error(.init(error: error2, retry: {}, dismiss: {})) #expect(state1 == state2) } - + @Test func testErrorInequalityWithDifferentDescription() { let error1 = NSError(domain: "Test", code: 1, userInfo: [NSLocalizedDescriptionKey: "Error 1"]) let error2 = NSError(domain: "Test", code: 1, userInfo: [NSLocalizedDescriptionKey: "Error 2"]) @@ -91,20 +91,20 @@ struct UpdateStateTests { let state2: UpdateState = .error(.init(error: error2, retry: {}, dismiss: {})) #expect(state1 != state2) } - + @Test func testDifferentStatesAreNotEqual() { let state1: UpdateState = .idle let state2: UpdateState = .checking(.init(cancel: {})) #expect(state1 != state2) } - + // MARK: - isIdle Tests - + @Test func testIsIdleTrue() { let state: UpdateState = .idle #expect(state.isIdle == true) } - + @Test func testIsIdleFalse() { let state: UpdateState = .checking(.init(cancel: {})) #expect(state.isIdle == false) diff --git a/macos/Tests/Update/UpdateViewModelTests.swift b/macos/Tests/Update/UpdateViewModelTests.swift index 529c2bc52fe..9b747f9ec68 100644 --- a/macos/Tests/Update/UpdateViewModelTests.swift +++ b/macos/Tests/Update/UpdateViewModelTests.swift @@ -6,50 +6,50 @@ import Sparkle struct UpdateViewModelTests { // MARK: - Text Formatting Tests - + @Test func testIdleText() { let viewModel = UpdateViewModel() viewModel.state = .idle #expect(viewModel.text == "") } - + @Test func testPermissionRequestText() { let viewModel = UpdateViewModel() let request = SPUUpdatePermissionRequest(systemProfile: []) viewModel.state = .permissionRequest(.init(request: request, reply: { _ in })) #expect(viewModel.text == "Enable Automatic Updates?") } - + @Test func testCheckingText() { let viewModel = UpdateViewModel() viewModel.state = .checking(.init(cancel: {})) #expect(viewModel.text == "Checking for Updates…") } - + @Test func testDownloadingTextWithKnownLength() { let viewModel = UpdateViewModel() viewModel.state = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500)) #expect(viewModel.text == "Downloading: 50%") } - + @Test func testDownloadingTextWithUnknownLength() { let viewModel = UpdateViewModel() viewModel.state = .downloading(.init(cancel: {}, expectedLength: nil, progress: 500)) #expect(viewModel.text == "Downloading…") } - + @Test func testDownloadingTextWithZeroExpectedLength() { let viewModel = UpdateViewModel() viewModel.state = .downloading(.init(cancel: {}, expectedLength: 0, progress: 500)) #expect(viewModel.text == "Downloading…") } - + @Test func testExtractingText() { let viewModel = UpdateViewModel() viewModel.state = .extracting(.init(progress: 0.75)) #expect(viewModel.text == "Preparing: 75%") } - + @Test func testInstallingText() { let viewModel = UpdateViewModel() viewModel.state = .installing(.init(isAutoUpdate: false, retryTerminatingApplication: {}, dismiss: {})) @@ -57,34 +57,34 @@ struct UpdateViewModelTests { viewModel.state = .installing(.init(isAutoUpdate: true, retryTerminatingApplication: {}, dismiss: {})) #expect(viewModel.text == "Restart to Complete Update") } - + @Test func testNotFoundText() { let viewModel = UpdateViewModel() viewModel.state = .notFound(.init(acknowledgement: {})) #expect(viewModel.text == "No Updates Available") } - + @Test func testErrorText() { let viewModel = UpdateViewModel() let error = NSError(domain: "Test", code: 1, userInfo: [NSLocalizedDescriptionKey: "Network error"]) viewModel.state = .error(.init(error: error, retry: {}, dismiss: {})) #expect(viewModel.text == "Network error") } - + // MARK: - Max Width Text Tests - + @Test func testMaxWidthTextForDownloading() { let viewModel = UpdateViewModel() viewModel.state = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 50)) #expect(viewModel.maxWidthText == "Downloading: 100%") } - + @Test func testMaxWidthTextForExtracting() { let viewModel = UpdateViewModel() viewModel.state = .extracting(.init(progress: 0.5)) #expect(viewModel.maxWidthText == "Preparing: 100%") } - + @Test func testMaxWidthTextForNonProgressState() { let viewModel = UpdateViewModel() viewModel.state = .checking(.init(cancel: {})) diff --git a/macos/build.nu b/macos/build.nu new file mode 100755 index 00000000000..8c456d9b61f --- /dev/null +++ b/macos/build.nu @@ -0,0 +1,32 @@ +#!/usr/bin/env nu + +# Build the macOS Ghostty app using xcodebuild with a clean environment +# to avoid Nix shell interference (NIX_LDFLAGS, NIX_CFLAGS_COMPILE, etc.). + +def main [ + --scheme: string = "Ghostty" # Xcode scheme (Ghostty, Ghostty-iOS, DockTilePlugin) + --configuration: string = "Debug" # Build configuration (Debug, Release, ReleaseLocal) + --action: string = "build" # xcodebuild action (build, test, clean, etc.) +] { + let project = ($env.FILE_PWD | path join "Ghostty.xcodeproj") + let build_dir = ($env.FILE_PWD | path join "build") + + # Skip UI tests for CLI-based invocations because it requires + # special permissions. + let skip_testing = if $action == "test" { + [-skip-testing GhosttyUITests] + } else { + [] + } + + (^env -i + $"HOME=($env.HOME)" + "PATH=/usr/bin:/bin:/usr/sbin:/sbin" + xcodebuild + -project $project + -scheme $scheme + -configuration $configuration + $"SYMROOT=($build_dir)" + ...$skip_testing + $action) +} diff --git a/nix/devShell.nix b/nix/devShell.nix index 90059a730a4..c78c9081bdc 100644 --- a/nix/devShell.nix +++ b/nix/devShell.nix @@ -66,6 +66,7 @@ poop, typos, shellcheck, + swiftlint, uv, wayland, wayland-scanner, @@ -198,6 +199,9 @@ in # for benchmarking poop + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + swiftlint ]; # This should be set onto the rpath of the ghostty binary if you want diff --git a/nix/package.nix b/nix/package.nix index 1efef416418..391c9da059b 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -30,7 +30,7 @@ in stdenv.mkDerivation (finalAttrs: { pname = "ghostty"; - version = "1.3.0-dev"; + version = "1.3.0"; # We limit source like this to try and reduce the amount of rebuilds as possible # thus we only provide the source that is needed for the build diff --git a/nix/pkgs/blessed.nix b/nix/pkgs/blessed.nix index 8b6728f43f0..da5d6958d84 100644 --- a/nix/pkgs/blessed.nix +++ b/nix/pkgs/blessed.nix @@ -1,22 +1,24 @@ { lib, buildPythonPackage, - fetchPypi, + fetchFromGitHub, pythonOlder, flit-core, six, wcwidth, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "blessed"; - version = "1.23.0"; + version = "1.31"; pyproject = true; - disabled = pythonOlder "3.7"; + disabled = pythonOlder "3.8"; - src = fetchPypi { - inherit pname version; - hash = "sha256-VlkaMpZvcE9hMfFACvQVHZ6PX0FEEzpcoDQBl2Pe53s="; + src = fetchFromGitHub { + owner = "jquast"; + repo = "blessed"; + tag = finalAttrs.version; + hash = "sha256-Nn+aiDk0Qwk9xAvAqtzds/WlrLAozjPL1eSVNU75tJA="; }; build-system = [flit-core]; @@ -27,6 +29,7 @@ buildPythonPackage rec { ]; doCheck = false; + dontCheckRuntimeDeps = true; meta = with lib; { homepage = "https://github.com/jquast/blessed"; @@ -34,4 +37,4 @@ buildPythonPackage rec { maintainers = []; license = licenses.mit; }; -} +}) diff --git a/nix/pkgs/ucs-detect.nix b/nix/pkgs/ucs-detect.nix index 07ec6c2fc0d..5bbcdd0712d 100644 --- a/nix/pkgs/ucs-detect.nix +++ b/nix/pkgs/ucs-detect.nix @@ -1,36 +1,42 @@ { lib, buildPythonPackage, - fetchPypi, + fetchFromGitHub, pythonOlder, - setuptools, + hatchling, # Dependencies blessed, wcwidth, pyyaml, + prettytable, + requests, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "ucs-detect"; - version = "1.0.8"; + version = "2.0.2"; pyproject = true; disabled = pythonOlder "3.8"; - src = fetchPypi { - inherit version; - pname = "ucs_detect"; - hash = "sha256-ihB+tZCd6ykdeXYxc6V1Q6xALQ+xdCW5yqSL7oppqJc="; + src = fetchFromGitHub { + owner = "jquast"; + repo = "ucs-detect"; + tag = finalAttrs.version; + hash = "sha256-pCJNrJN+SO0pGveNJuISJbzOJYyxP9Tbljp8PwqbgYU="; }; dependencies = [ blessed wcwidth pyyaml + prettytable + requests ]; - nativeBuildInputs = [setuptools]; + nativeBuildInputs = [hatchling]; doCheck = false; + dontCheckRuntimeDeps = true; meta = with lib; { description = "Measures number of Terminal column cells of wide-character codes"; @@ -38,4 +44,4 @@ buildPythonPackage rec { license = licenses.mit; maintainers = []; }; -} +}) diff --git a/nix/pkgs/wcwidth.nix b/nix/pkgs/wcwidth.nix new file mode 100644 index 00000000000..4bbd1373b8e --- /dev/null +++ b/nix/pkgs/wcwidth.nix @@ -0,0 +1,27 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + hatchling, +}: +buildPythonPackage rec { + pname = "wcwidth"; + version = "0.6.0"; + pyproject = true; + + src = fetchPypi { + inherit pname version; + hash = "sha256-zcTkJi1u+aGlfgGDhMvrEgjYq7xkF2An4sJFXIExMVk="; + }; + + build-system = [hatchling]; + + doCheck = false; + + meta = with lib; { + description = "Measures the displayed width of unicode strings in a terminal"; + homepage = "https://github.com/jquast/wcwidth"; + license = licenses.mit; + maintainers = []; + }; +} diff --git a/pkg/afl++/LICENSE b/pkg/afl++/LICENSE new file mode 100644 index 00000000000..5f5fc85e4de --- /dev/null +++ b/pkg/afl++/LICENSE @@ -0,0 +1,23 @@ +Based on zig-afl-kit: https://github.com/kristoff-it/zig-afl-kit + +MIT License + +Copyright (c) 2024 Loris Cro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pkg/afl++/afl.c b/pkg/afl++/afl.c new file mode 100644 index 00000000000..61eb12c4aa7 --- /dev/null +++ b/pkg/afl++/afl.c @@ -0,0 +1,141 @@ +#include +#include +#include +#include +#include +#include +#include + +// AFL++ fuzzer harness for Zig fuzz targets. +// +// This file is the C "glue" that connects AFL++'s runtime to Zig-defined +// fuzz test functions. We can't use AFL++'s compiler wrappers (afl-clang, +// afl-gcc) because the code under test is compiled with Zig, so we manually +// expand the AFL macros (__AFL_INIT, __AFL_LOOP, __AFL_FUZZ_INIT, etc.) and +// wire up the sanitizer coverage symbols ourselves. + +// To ensure checks are not optimized out it is recommended to disable +// code optimization for the fuzzer harness main() +#pragma clang optimize off +#pragma GCC optimize("O0") + +// Zig-exported entry points. zig_fuzz_init() performs one-time setup and +// zig_fuzz_test() runs one fuzz iteration on the given input buffer. +// The Zig object should export these. +void zig_fuzz_init(); +void zig_fuzz_test(unsigned char*, size_t); + +// Linker-provided symbols marking the boundaries of the __sancov_guards +// section. These must be declared extern so the linker provides the actual +// section boundaries from the instrumented code, rather than creating new +// variables that shadow them. On macOS (Mach-O), the linker uses a different +// naming convention for section boundaries than Linux (ELF), so we use asm +// labels to reference them. +#ifdef __APPLE__ +extern uint32_t __start___sancov_guards __asm( + "section$start$__DATA$__sancov_guards"); +extern uint32_t __stop___sancov_guards __asm( + "section$end$__DATA$__sancov_guards"); +#else +extern uint32_t __start___sancov_guards; +extern uint32_t __stop___sancov_guards; +#endif + +// Provided by afl-compiler-rt; initializes the guard array used by +// SanitizerCoverage's trace-pc-guard instrumentation mode. +void __sanitizer_cov_trace_pc_guard_init(uint32_t*, uint32_t*); + +// Stubs for sanitizer coverage callbacks that the Zig-compiled code references +// but AFL's runtime (afl-compiler-rt) does not provide. Without these, linking +// would fail with undefined symbol errors. +__attribute__((visibility("default"))) __attribute__(( + tls_model("initial-exec"))) _Thread_local uintptr_t __sancov_lowest_stack; +void __sanitizer_cov_trace_pc_indir() {} +void __sanitizer_cov_8bit_counters_init() {} +void __sanitizer_cov_pcs_init() {} + +// Manual expansion of __AFL_FUZZ_INIT(). +// +// Enables shared-memory fuzzing: AFL++ writes test cases directly into +// shared memory (__afl_fuzz_ptr) instead of passing them via stdin, which +// is much faster. When not running under AFL++ (e.g. standalone execution), +// __afl_fuzz_ptr will be NULL and we fall back to reading from stdin into +// __afl_fuzz_alt (a 1 MB static buffer). +int __afl_sharedmem_fuzzing = 1; +extern __attribute__((visibility("default"))) unsigned int* __afl_fuzz_len; +extern __attribute__((visibility("default"))) unsigned char* __afl_fuzz_ptr; +unsigned char __afl_fuzz_alt[1048576]; +unsigned char* __afl_fuzz_alt_ptr = __afl_fuzz_alt; + +int main(int argc, char** argv) { + // Tell AFL's coverage runtime about our guard section so it can track + // which edges in the instrumented Zig code have been hit. + __sanitizer_cov_trace_pc_guard_init(&__start___sancov_guards, + &__stop___sancov_guards); + + // Manual expansion of __AFL_INIT() — deferred fork server mode. + // + // The magic string "##SIG_AFL_DEFER_FORKSRV##" is embedded in the binary + // so AFL++'s tooling can detect that this harness uses deferred fork + // server initialization. The `volatile` + `used` attributes prevent the + // compiler/linker from stripping it. We then call __afl_manual_init() to + // start the fork server at this point (after our setup) rather than at + // the very beginning of main(). + static volatile const char* _A __attribute__((used, unused)); + _A = (const char*)"##SIG_AFL_DEFER_FORKSRV##"; +#ifdef __APPLE__ + __attribute__((visibility("default"))) void _I(void) __asm__( + "___afl_manual_init"); +#else + __attribute__((visibility("default"))) void _I(void) __asm__( + "__afl_manual_init"); +#endif + _I(); + + zig_fuzz_init(); + + // Manual expansion of __AFL_FUZZ_TESTCASE_BUF. + // Use shared memory buffer if available, otherwise fall back to the + // static buffer (for standalone/non-AFL execution). + unsigned char* buf = __afl_fuzz_ptr ? __afl_fuzz_ptr : __afl_fuzz_alt_ptr; + + // Manual expansion of __AFL_LOOP(UINT_MAX) — persistent mode loop. + // + // Persistent mode keeps the process alive across many test cases instead + // of fork()'ing for each one, dramatically improving throughput. The magic + // string "##SIG_AFL_PERSISTENT##" signals to AFL++ that this binary + // supports persistent mode. __afl_persistent_loop() returns non-zero + // while there are more inputs to process. + // + // When connected to AFL++, we loop UINT_MAX times (essentially forever, + // AFL will restart us periodically). When running standalone, we loop + // once so the harness can be used for manual testing/reproduction. + while (({ + static volatile const char* _B __attribute__((used, unused)); + _B = (const char*)"##SIG_AFL_PERSISTENT##"; + extern __attribute__((visibility("default"))) int __afl_connected; +#ifdef __APPLE__ + __attribute__((visibility("default"))) int _L(unsigned int) __asm__( + "___afl_persistent_loop"); +#else + __attribute__((visibility("default"))) int _L(unsigned int) __asm__( + "__afl_persistent_loop"); +#endif + _L(__afl_connected ? UINT_MAX : 1); + })) { + // Manual expansion of __AFL_FUZZ_TESTCASE_LEN. + // In shared-memory mode, the length is provided directly by AFL++. + // In standalone mode, we read from stdin into the fallback buffer. + int len = + __afl_fuzz_ptr ? *__afl_fuzz_len + : (*__afl_fuzz_len = read(0, __afl_fuzz_alt_ptr, 1048576)) == 0xffffffff + ? 0 + : *__afl_fuzz_len; + + if (len >= 0) { + zig_fuzz_test(buf, len); + } + } + + return 0; +} diff --git a/pkg/afl++/build.zig b/pkg/afl++/build.zig new file mode 100644 index 00000000000..9de3ad01e56 --- /dev/null +++ b/pkg/afl++/build.zig @@ -0,0 +1,59 @@ +const std = @import("std"); + +/// Creates a build step that produces an AFL++-instrumented fuzzing +/// executable. +/// +/// Returns a `LazyPath` to the resulting fuzzing executable. +pub fn addInstrumentedExe( + b: *std.Build, + obj: *std.Build.Step.Compile, +) std.Build.LazyPath { + // Force the build system to produce the binary artifact even though we + // only consume the LLVM bitcode below. Without this, the dependency + // tracking doesn't wire up correctly. + _ = obj.getEmittedBin(); + + const pkg = b.dependencyFromBuildZig( + @This(), + .{}, + ); + + const afl_cc = b.addSystemCommand(&.{ + b.findProgram(&.{"afl-cc"}, &.{}) catch + @panic("Could not find 'afl-cc', which is required to build"), + "-O3", + }); + afl_cc.addArg("-o"); + const fuzz_exe = afl_cc.addOutputFileArg(obj.name); + afl_cc.addFileArg(pkg.path("afl.c")); + afl_cc.addFileArg(obj.getEmittedLlvmBc()); + return fuzz_exe; +} + +/// Creates a run step that invokes `afl-fuzz` with the given instrumented +/// executable, input corpus directory, and output directory. +/// +/// Returns the `Run` step so callers can wire it into a build step. +pub fn addFuzzerRun( + b: *std.Build, + exe: std.Build.LazyPath, + corpus_dir: std.Build.LazyPath, + output_dir: std.Build.LazyPath, +) *std.Build.Step.Run { + const run = b.addSystemCommand(&.{ + b.findProgram(&.{"afl-fuzz"}, &.{}) catch + @panic("Could not find 'afl-fuzz', which is required to run"), + "-i", + }); + run.addDirectoryArg(corpus_dir); + run.addArgs(&.{"-o"}); + run.addDirectoryArg(output_dir); + run.addArgs(&.{"--"}); + run.addFileArg(exe); + return run; +} + +// Required so `zig build` works although it does nothing. +pub fn build(b: *std.Build) !void { + _ = b; +} diff --git a/pkg/afl++/build.zig.zon b/pkg/afl++/build.zig.zon new file mode 100644 index 00000000000..1fd3d5a4b68 --- /dev/null +++ b/pkg/afl++/build.zig.zon @@ -0,0 +1,11 @@ +.{ + .name = .afl_plus_plus, + .fingerprint = 0x465bc4bebb188f16, + .version = "0.1.0", + .dependencies = .{}, + .paths = .{ + "build.zig", + "build.zig.zon", + "afl.c", + }, +} diff --git a/pkg/android-ndk/build.zig b/pkg/android-ndk/build.zig new file mode 100644 index 00000000000..5b005665bdc --- /dev/null +++ b/pkg/android-ndk/build.zig @@ -0,0 +1,207 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +pub fn build(_: *std.Build) !void {} + +// Configure the step to point to the Android NDK for libc and include +// paths. This requires the Android NDK installed in the system and +// setting the appropriate environment variables or installing the NDK +// in the default location. +// +// The environment variables can be set as follows: +// - `ANDROID_NDK_HOME`: Directly points to the NDK path, including the version. +// - `ANDROID_HOME` or `ANDROID_SDK_ROOT`: Points to the Android SDK path; +// latest available NDK will be automatically selected. +// +// NB: This is a workaround until zig natively supports bionic +// cross-compilation (ziglang/zig#23906). +pub fn addPaths(b: *std.Build, step: *std.Build.Step.Compile) !void { + const Cache = struct { + const Key = struct { + arch: std.Target.Cpu.Arch, + abi: std.Target.Abi, + api_level: u32, + }; + + var map: std.AutoHashMapUnmanaged(Key, ?struct { + libc: std.Build.LazyPath, + cpp_include: std.Build.LazyPath, + lib: std.Build.LazyPath, + }) = .empty; + }; + + const target = step.rootModuleTarget(); + const gop = try Cache.map.getOrPut(b.allocator, .{ + .arch = target.cpu.arch, + .abi = target.abi, + .api_level = target.os.version_range.linux.android, + }); + + if (!gop.found_existing) { + const ndk_path = findNDKPath(b) orelse return error.AndroidNDKNotFound; + + const ndk_triple = ndkTriple(target) orelse { + gop.value_ptr.* = null; + return error.AndroidNDKUnsupportedTarget; + }; + + const host = hostTag() orelse { + gop.value_ptr.* = null; + return error.AndroidNDKUnsupportedHost; + }; + + const sysroot = b.pathJoin(&.{ + ndk_path, + "toolchains", + "llvm", + "prebuilt", + host, + "sysroot", + }); + const include_dir = b.pathJoin(&.{ + sysroot, + "usr", + "include", + }); + const sys_include_dir = b.pathJoin(&.{ + sysroot, + "usr", + "include", + ndk_triple, + }); + const c_runtime_dir = b.pathJoin(&.{ + sysroot, + "usr", + "lib", + ndk_triple, + b.fmt("{d}", .{target.os.version_range.linux.android}), + }); + const lib = b.pathJoin(&.{ + sysroot, + "usr", + "lib", + ndk_triple, + }); + const cpp_include = b.pathJoin(&.{ + sysroot, + "usr", + "include", + "c++", + "v1", + }); + + const libc_txt = b.fmt( + \\include_dir={s} + \\sys_include_dir={s} + \\crt_dir={s} + \\msvc_lib_dir= + \\kernel32_lib_dir= + \\gcc_dir= + , .{ include_dir, sys_include_dir, c_runtime_dir }); + + const wf = b.addWriteFiles(); + const libc_path = wf.add("libc.txt", libc_txt); + + gop.value_ptr.* = .{ + .libc = libc_path, + .cpp_include = .{ .cwd_relative = cpp_include }, + .lib = .{ .cwd_relative = lib }, + }; + } + + const value = gop.value_ptr.* orelse return error.AndroidNDKNotFound; + + step.setLibCFile(value.libc); + step.root_module.addSystemIncludePath(value.cpp_include); + step.root_module.addLibraryPath(value.lib); +} + +fn findNDKPath(b: *std.Build) ?[]const u8 { + // Check if user has set the environment variable for the NDK path. + if (std.process.getEnvVarOwned(b.allocator, "ANDROID_NDK_HOME") catch null) |value| { + if (value.len == 0) return null; + var dir = std.fs.openDirAbsolute(value, .{}) catch return null; + defer dir.close(); + return value; + } + + // Check the common environment variables for the Android SDK path and look for the NDK inside it. + inline for (.{ "ANDROID_HOME", "ANDROID_SDK_ROOT" }) |env| { + if (std.process.getEnvVarOwned(b.allocator, env) catch null) |sdk| { + if (sdk.len > 0) { + if (findLatestNDK(b, sdk)) |ndk| return ndk; + } + } + } + + // As a fallback, we assume the most common/default SDK path based on the OS. + const home = std.process.getEnvVarOwned( + b.allocator, + if (builtin.os.tag == .windows) "LOCALAPPDATA" else "HOME", + ) catch return null; + + const default_sdk_path = b.pathJoin( + &.{ + home, + switch (builtin.os.tag) { + .linux => "Android/sdk", + .macos => "Library/Android/Sdk", + .windows => "Android/Sdk", + else => return null, + }, + }, + ); + + return findLatestNDK(b, default_sdk_path); +} + +fn findLatestNDK(b: *std.Build, sdk_path: []const u8) ?[]const u8 { + const ndk_dir = b.pathJoin(&.{ sdk_path, "ndk" }); + var dir = std.fs.openDirAbsolute(ndk_dir, .{ .iterate = true }) catch return null; + defer dir.close(); + + var latest_: ?struct { + name: []const u8, + version: std.SemanticVersion, + } = null; + var iterator = dir.iterate(); + + while (iterator.next() catch null) |file| { + if (file.kind != .directory) continue; + const version = std.SemanticVersion.parse(file.name) catch continue; + if (latest_) |latest| { + if (version.order(latest.version) != .gt) continue; + } + latest_ = .{ + .name = file.name, + .version = version, + }; + } + + const latest = latest_ orelse return null; + + return b.pathJoin(&.{ sdk_path, "ndk", latest.name }); +} + +fn hostTag() ?[]const u8 { + return switch (builtin.os.tag) { + .linux => "linux-x86_64", + // All darwin hosts use the same prebuilt binaries + // (https://developer.android.com/ndk/guides/other_build_systems). + .macos => "darwin-x86_64", + .windows => "windows-x86_64", + else => null, + }; +} + +// We must map the target architecture to the corresponding NDK triple following the NDK +// documentation: https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#architectures +fn ndkTriple(target: std.Target) ?[]const u8 { + return switch (target.cpu.arch) { + .arm => "arm-linux-androideabi", + .aarch64 => "aarch64-linux-android", + .x86 => "i686-linux-android", + .x86_64 => "x86_64-linux-android", + else => null, + }; +} diff --git a/pkg/android-ndk/build.zig.zon b/pkg/android-ndk/build.zig.zon new file mode 100644 index 00000000000..eb0de68201e --- /dev/null +++ b/pkg/android-ndk/build.zig.zon @@ -0,0 +1,10 @@ +.{ + .name = .android_ndk, + .version = "0.0.2", + .fingerprint = 0xee68d62c5a97b68b, + .dependencies = .{}, + .paths = .{ + "build.zig", + "build.zig.zon", + }, +} diff --git a/pkg/dcimgui/build.zig b/pkg/dcimgui/build.zig index ae907dac089..2a13898342a 100644 --- a/pkg/dcimgui/build.zig +++ b/pkg/dcimgui/build.zig @@ -56,6 +56,9 @@ pub fn build(b: *std.Build) !void { if (freetype) try flags.appendSlice(b.allocator, &.{ "-DIMGUI_ENABLE_FREETYPE=1", }); + if (backend_opengl3) try flags.appendSlice(b.allocator, &.{ + "-DZIGPKG_IMGUI_ENABLE_OPENGL3=1", + }); if (target.result.os.tag == .windows) { try flags.appendSlice(b.allocator, &.{ "-DIMGUI_IMPL_API=extern\t\"C\"\t__declspec(dllexport)", diff --git a/pkg/dcimgui/ext.cpp b/pkg/dcimgui/ext.cpp index d4732e0fa16..b686c07f4d0 100644 --- a/pkg/dcimgui/ext.cpp +++ b/pkg/dcimgui/ext.cpp @@ -27,4 +27,27 @@ CIMGUI_API void ImGuiStyle_ImGuiStyle(cimgui::ImGuiStyle* self) ::ImGuiStyle defaults; *reinterpret_cast<::ImGuiStyle*>(self) = defaults; } + +// Perform the OpenGL3 backend shutdown and then zero out the imgl3w +// function pointer table. ImGui_ImplOpenGL3_Shutdown() calls +// imgl3wShutdown() which dlcloses the GL library handles but does not +// zero out the function pointers. A subsequent ImGui_ImplOpenGL3_Init() +// sees the stale (non-null) pointers, skips loader re-initialization, +// and crashes when calling through them. Zeroing the table forces the +// next Init to reload the GL function pointers via imgl3wInit(). +#ifndef IMGUI_DISABLE +#if __has_include("backends/imgui_impl_opengl3.h") +#ifdef ZIGPKG_IMGUI_ENABLE_OPENGL3 +#include "backends/imgui_impl_opengl3.h" +#include "backends/imgui_impl_opengl3_loader.h" + +CIMGUI_API void ImGui_ImplOpenGL3_ShutdownWithLoaderCleanup() +{ + ::ImGui_ImplOpenGL3_Shutdown(); + memset(&imgl3wProcs, 0, sizeof(imgl3wProcs)); +} +#endif // ZIGPKG_IMGUI_ENABLE_OPENGL3 +#endif // __has_include("backends/imgui_impl_opengl3.h") +#endif // IMGUI_DISABLE + } diff --git a/pkg/dcimgui/main.zig b/pkg/dcimgui/main.zig index 59bfca4f27b..40a4325c052 100644 --- a/pkg/dcimgui/main.zig +++ b/pkg/dcimgui/main.zig @@ -16,6 +16,10 @@ pub extern fn ImGui_ImplOpenGL3_Shutdown() callconv(.c) void; pub extern fn ImGui_ImplOpenGL3_NewFrame() callconv(.c) void; pub extern fn ImGui_ImplOpenGL3_RenderDrawData(draw_data: *c.ImDrawData) callconv(.c) void; +// Extension: shutdown the OpenGL3 backend and zero out the imgl3w function +// pointer table so a subsequent Init can re-initialize the loader. +pub extern fn ImGui_ImplOpenGL3_ShutdownWithLoaderCleanup() callconv(.c) void; + // Metal backend pub extern fn ImGui_ImplMetal_Init(device: *anyopaque) callconv(.c) bool; pub extern fn ImGui_ImplMetal_Shutdown() callconv(.c) void; diff --git a/pkg/highway/build.zig b/pkg/highway/build.zig index 3715baf4a54..b6e188b13ae 100644 --- a/pkg/highway/build.zig +++ b/pkg/highway/build.zig @@ -31,6 +31,11 @@ pub fn build(b: *std.Build) !void { try apple_sdk.addPaths(b, lib); } + if (target.result.abi.isAndroid()) { + const android_ndk = @import("android_ndk"); + try android_ndk.addPaths(b, lib); + } + var flags: std.ArrayList([]const u8) = .empty; defer flags.deinit(b.allocator); try flags.appendSlice(b.allocator, &.{ diff --git a/pkg/highway/build.zig.zon b/pkg/highway/build.zig.zon index 0777fcb7a9b..4870d1db53f 100644 --- a/pkg/highway/build.zig.zon +++ b/pkg/highway/build.zig.zon @@ -12,5 +12,6 @@ }, .apple_sdk = .{ .path = "../apple-sdk" }, + .android_ndk = .{ .path = "../android-ndk" }, }, } diff --git a/pkg/macos/animation.zig b/pkg/macos/animation.zig index 247f9760572..54bd3e20db1 100644 --- a/pkg/macos/animation.zig +++ b/pkg/macos/animation.zig @@ -4,6 +4,7 @@ pub const c = @import("animation/c.zig").c; pub extern "c" const kCAGravityTopLeft: *anyopaque; pub extern "c" const kCAGravityBottomLeft: *anyopaque; pub extern "c" const kCAGravityCenter: *anyopaque; +pub extern "c" const kCAGravityResize: *anyopaque; test { @import("std").testing.refAllDecls(@This()); diff --git a/pkg/macos/video/display_link.zig b/pkg/macos/video/display_link.zig index 7d6b437f9cb..ece7dad1d78 100644 --- a/pkg/macos/video/display_link.zig +++ b/pkg/macos/video/display_link.zig @@ -1,6 +1,5 @@ const std = @import("std"); const assert = std.debug.assert; -const Allocator = std.mem.Allocator; const c = @import("c.zig").c; pub const DisplayLink = opaque { @@ -8,14 +7,18 @@ pub const DisplayLink = opaque { InvalidOperation, }; - pub fn createWithActiveCGDisplays() Allocator.Error!*DisplayLink { + pub const CreateError = error{ + Unavailable, + }; + + pub fn createWithActiveCGDisplays() CreateError!*DisplayLink { var result: ?*DisplayLink = null; if (c.CVDisplayLinkCreateWithActiveCGDisplays( @ptrCast(&result), ) != c.kCVReturnSuccess) - return error.OutOfMemory; + return error.Unavailable; - return result orelse error.OutOfMemory; + return result orelse error.Unavailable; } pub fn release(self: *DisplayLink) void { diff --git a/pkg/oniguruma/main.zig b/pkg/oniguruma/main.zig index a8e415cfb39..2541cc35859 100644 --- a/pkg/oniguruma/main.zig +++ b/pkg/oniguruma/main.zig @@ -1,4 +1,5 @@ const initpkg = @import("init.zig"); +const match_param = @import("match_param.zig"); const regex = @import("regex.zig"); const region = @import("region.zig"); const types = @import("types.zig"); @@ -10,6 +11,7 @@ pub const errors = @import("errors.zig"); pub const init = initpkg.init; pub const deinit = initpkg.deinit; pub const Encoding = types.Encoding; +pub const MatchParam = match_param.MatchParam; pub const Regex = regex.Regex; pub const Region = region.Region; pub const Syntax = types.Syntax; diff --git a/pkg/oniguruma/match_param.zig b/pkg/oniguruma/match_param.zig new file mode 100644 index 00000000000..b28258ff08e --- /dev/null +++ b/pkg/oniguruma/match_param.zig @@ -0,0 +1,23 @@ +const c = @import("c.zig").c; +const errors = @import("errors.zig"); +const Error = errors.Error; + +pub const MatchParam = struct { + value: *c.OnigMatchParam, + + pub fn init() !MatchParam { + const value = c.onig_new_match_param() orelse return Error.Memory; + return .{ .value = value }; + } + + pub fn deinit(self: *MatchParam) void { + c.onig_free_match_param(self.value); + } + + pub fn setRetryLimitInSearch(self: *MatchParam, limit: usize) !void { + _ = try errors.convertError(c.onig_set_retry_limit_in_search_of_match_param( + self.value, + @intCast(limit), + )); + } +}; diff --git a/pkg/oniguruma/regex.zig b/pkg/oniguruma/regex.zig index a73c7fc1059..fd920e01af9 100644 --- a/pkg/oniguruma/regex.zig +++ b/pkg/oniguruma/regex.zig @@ -3,6 +3,7 @@ const c = @import("c.zig").c; const types = @import("types.zig"); const errors = @import("errors.zig"); const testEnsureInit = @import("testing.zig").ensureInit; +const MatchParam = @import("match_param.zig").MatchParam; const Region = @import("region.zig").Region; const Error = errors.Error; const ErrorInfo = errors.ErrorInfo; @@ -43,6 +44,17 @@ pub const Regex = struct { self: *Regex, str: []const u8, options: Option, + ) !Region { + return self.searchWithParam(str, options, null); + } + + /// Search an entire string for matches. This always returns a region + /// which may heap allocate (C allocator). + pub fn searchWithParam( + self: *Regex, + str: []const u8, + options: Option, + match_param: ?*MatchParam, ) !Region { var region: Region = .{}; @@ -51,7 +63,14 @@ pub const Regex = struct { // any errors to free that memory. errdefer region.deinit(); - _ = try self.searchAdvanced(str, 0, str.len, ®ion, options); + _ = try self.searchAdvancedWithParam( + str, + 0, + str.len, + ®ion, + options, + match_param, + ); return region; } @@ -64,15 +83,47 @@ pub const Regex = struct { region: *Region, options: Option, ) !usize { - const pos = try errors.convertError(c.onig_search( - self.value, - str.ptr, - str.ptr + str.len, - str.ptr + start, - str.ptr + end, - @ptrCast(region), - options.int(), - )); + return self.searchAdvancedWithParam( + str, + start, + end, + region, + options, + null, + ); + } + + /// onig_search_with_param directly + pub fn searchAdvancedWithParam( + self: *Regex, + str: []const u8, + start: usize, + end: usize, + region: *Region, + options: Option, + match_param: ?*MatchParam, + ) !usize { + const pos = try errors.convertError(if (match_param) |param| + c.onig_search_with_param( + self.value, + str.ptr, + str.ptr + str.len, + str.ptr + start, + str.ptr + end, + @ptrCast(region), + options.int(), + param.value, + ) + else + c.onig_search( + self.value, + str.ptr, + str.ptr + str.len, + str.ptr + start, + str.ptr + end, + @ptrCast(region), + options.int(), + )); return @intCast(pos); } @@ -90,4 +141,12 @@ test { try testing.expectEqual(@as(usize, 1), reg.count()); try testing.expectError(Error.Mismatch, re.search("hello", .{})); + + var match_param = try MatchParam.init(); + defer match_param.deinit(); + try match_param.setRetryLimitInSearch(1000); + + var reg_param = try re.searchWithParam("hello foo bar", .{}, &match_param); + defer reg_param.deinit(); + try testing.expectEqual(@as(usize, 1), reg_param.count()); } diff --git a/pkg/simdutf/build.zig b/pkg/simdutf/build.zig index 3123cab2125..8dcd141c1f9 100644 --- a/pkg/simdutf/build.zig +++ b/pkg/simdutf/build.zig @@ -20,6 +20,11 @@ pub fn build(b: *std.Build) !void { try apple_sdk.addPaths(b, lib); } + if (target.result.abi.isAndroid()) { + const android_ndk = @import("android_ndk"); + try android_ndk.addPaths(b, lib); + } + var flags: std.ArrayList([]const u8) = .empty; defer flags.deinit(b.allocator); // Zig 0.13 bug: https://github.com/ziglang/zig/issues/20414 diff --git a/pkg/simdutf/build.zig.zon b/pkg/simdutf/build.zig.zon index cd81c841ee3..afbef541821 100644 --- a/pkg/simdutf/build.zig.zon +++ b/pkg/simdutf/build.zig.zon @@ -5,5 +5,6 @@ .paths = .{""}, .dependencies = .{ .apple_sdk = .{ .path = "../apple-sdk" }, + .android_ndk = .{ .path = "../android-ndk" }, }, } diff --git a/pkg/utfcpp/build.zig b/pkg/utfcpp/build.zig index e06813b8353..08efb4ac862 100644 --- a/pkg/utfcpp/build.zig +++ b/pkg/utfcpp/build.zig @@ -19,6 +19,11 @@ pub fn build(b: *std.Build) !void { try apple_sdk.addPaths(b, lib); } + if (target.result.abi.isAndroid()) { + const android_ndk = @import("android_ndk"); + try android_ndk.addPaths(b, lib); + } + var flags: std.ArrayList([]const u8) = .empty; defer flags.deinit(b.allocator); diff --git a/pkg/utfcpp/build.zig.zon b/pkg/utfcpp/build.zig.zon index eff395a60e2..1077e9655b8 100644 --- a/pkg/utfcpp/build.zig.zon +++ b/pkg/utfcpp/build.zig.zon @@ -12,5 +12,6 @@ }, .apple_sdk = .{ .path = "../apple-sdk" }, + .android_ndk = .{ .path = "../android-ndk" }, }, } diff --git a/po/README_TRANSLATORS.md b/po/README_TRANSLATORS.md index 25b7cab5bdc..b985e067801 100644 --- a/po/README_TRANSLATORS.md +++ b/po/README_TRANSLATORS.md @@ -35,20 +35,31 @@ Written by Ulrich Drepper. With this, you're ready to localize! -## Editing translation files +## Locale names + +A locale name always consists of a [two letter language +code](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) (e.g. +`de`, `es`, `fr`). Sometimes, for languages that have regional variations +(such as `zh` and `es`), the locale name includes a [two letter +country code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes). +One example is `es_AR` for Spanish as spoken in Argentina. + +Full locale names are more complicated, but Ghostty does not use all parts. [The +`gettext` documentation](https://www.gnu.org/software/gettext/manual/gettext.html#Locale-Names-1) +has more information on locale names. + +## Translation file names All translation files lie in the `po/` directory, including the main _template_ file called `com.mitchellh.ghostty.pot`. **Do not edit this file.** The -template is generated automatically from Ghostty's code and resources, and are +template is generated automatically from Ghostty's code and resources, and is intended to be regenerated by code contributors. If there is a problem with the template file, please reach out to a code contributor. -Instead, only edit the translation file corresponding to your language/locale, -identified via its _locale name_: for example, `de_DE.UTF-8.po` would be the -translation file for German (language code `de`) as spoken in Germany (country -code `DE`). The GNU `gettext` manual contains -[further information about locale names](https://www.gnu.org/software/gettext/manual/gettext.html#Locale-Names-1), -including a list of language and country codes. +Translation file names consist of the locale name and the extension +`.po`. For example: `de.po`, `zh_CN.po`. + +## Editing translation files > [!NOTE] > @@ -56,7 +67,7 @@ including a list of language and country codes. > ["Creating new translation files" section](#creating-new-translation-files) > of this document on how to create one. -The `.po` file contains a list of entries that look like this: +The translation file contains a list of entries that look like this: ```po #. Translators: the category in the right-click context menu that contains split items for all directions @@ -86,84 +97,120 @@ Lines beginning with `#` are comments, of which there are several kinds: affect translators in other locales. The first entry of the `.po` file has an empty `msgid`. This entry is special -as it stores the metadata related to the `.po` file itself. You usually do -not need to modify it. +as it stores the metadata related to the `.po` file itself. You should update +`PO-Revision-Date` and `Last-Translator` once you have finished your edits, but +you normally do not need to modify other metadata. ## Creating new translation files You can use the `msginit` tool to create new translation files. -Run the command below, optionally replacing `$LANG` with the name of a locale -that is _different_ to your system locale, or if the `LANG` environmental -variable is not set. +Run the command below, replacing `X` with your [locale name](#locale-names). ```console -$ msginit -i po/com.mitchellh.ghostty.pot -l $LANG -o "po/$LANG.po" +$ msginit -i po/com.mitchellh.ghostty.pot -l X -o "po/X.po" ``` -> [!NOTE] -> -> Ghostty enforces the convention that all parts of the locale, including the -> language code, country code, encoding, and possible regional variants -> **must** be communicated in the file name. Files like `pt.po` are not -> acceptable, while `pt_BR.UTF-8.po` is. -> -> This is to allow us to more easily accommodate regional variants of a -> language in the future, and to reject translations that may not be applicable -> to all speakers of a language (e.g. an unqualified `zh.po` may contain -> terminology specific to Chinese speakers in Mainland China, which are not -> found in Taiwan. Using `zh_CN.UTF-8.po` would allow that difference to be -> communicated.) - -> [!WARNING] -> -> **Make sure your selected locale uses the UTF-8 encoding, as it is the sole -> encoding supported by Ghostty and its dependencies.** -> -> For backwards compatibility reasons, some locales may default to a non-UTF-8 -> encoding when an encoding is not specified. For instance, `de_DE` defaults -> to using the legacy ISO-8859-1 encoding, which is incompatible with UTF-8. -> You need to manually instruct `msginit` to use UTF-8 in these instances, -> by appending `.UTF-8` to the end of the locale name (e.g. `de_DE.UTF-8`). - `msginit` may prompt you for other information such as your email address, which should be filled in accordingly. You can then add your translations within the newly created translation file. Afterwards, you need to update the list of known locales within Ghostty's -build system. To do so, open `src/os/i18n_locales.zig` and find the list -of locales after the comments, then add the full locale name into the list. +build system. To do so, open `src/os/i18n_locales.zig` and find the list of +locale names after the comments, then add your locale name into the list. -The order matters, so make sure to place your locale in the correct position. -Read the comments present in the file for more details on the order. If you're -unsure, place it at the end of the list. +The order matters, so make sure to place your locale name in the correct +position. Read the comments present in the file for more details on the order. +If you're unsure, place it at the end of the list. ```zig const locales = [_][]const u8{ - "zh_CN.UTF-8", - // <- Add your locale here (probably) + "zh_CN", + // <- Add your locale name here (probably) } ``` -You should then be able to run `zig build` and see your translations in action! +You should then be able to run `zig build run` and see your translations in +action! See the ["Viewing translations" section](#viewing-translations) below. -Before opening a pull request with the new translation file, you should also add -your locale to the `CODEOWNERS` file. Find the `# Localization` section near the -bottom and add a line like so (where `xx_YY` is your locale): +Before opening a pull request with the new translation file, you should also +update the `CODEOWNERS` file. This is described in more detail in the +["Localization teams" section](#localization-teams)—don't forget to read that +section before submitting a pull request! + +## Viewing translations + +> [!NOTE] +> The localization system is not yet implemented for macOS, so it is not +> possible to view your translations there. + +Simply run `zig build run`. Ghostty uses your system language by default; if +your translations are of the language of your system, use +`zig build run -- --language=X` (where `X` is your locale name). You can +alternatively set the `LANGUAGE` environment variable to your locale name. + +On some desktop environments, such as KDE Plasma, Ghostty uses server-side +decorations by default. This hides many strings from the UI, which is +undesirable when viewing your translations. You can force Ghostty to use +client-side decorations with `zig build run -- --window-decoration=client`. + +Some strings are present in multiple places! A notable example is the context +menus: the hamburger menu in the header bar duplicates many strings present in +the right click menu. + +## Localization teams + +Every locale has a localization team consisting of the locale's maintainers. +These maintainers review contributions to their locale's translations, and are +responsible for translating new strings when requested: occasionally, all locale +maintainers are pinged and requested to translate missing strings. + +The primary purposes of being a locale maintainer are a declaration of +_commitment_ to their upkeep, and being _informed_ of updates or update requests +of the translations, via GitHub's review requests or @mentions. + +So that future updates to a locale are possible, each localization team must +have at least two members. If you are introducing a new language, please +**consider volunteering** to be a part of the localization team, by mentioning +that you are willing to be a part of it in the pull request description! You, +and all reviewers, will be offered to join the locale team before the pull +request to add the new language is merged, but this denotes your dedication +upfront—for a pull request adding a new language to be merged, it needs at least +one review from a speaker of that language _and_ at least two localization team +members. No one is _required_ to join a localization team, even if they +introduced support for the language. + +### `CODEOWNERS` + +Localization teams are represented as teams in the Ghostty GitHub organization. +GitHub reads a `CODEOWNERS` file, which maps files to teams, to identify +relevant maintainers. When **introducing support for a language**, you should +add the `.po` file to `CODEOWNERS`. + +To do this, find the `# Localization` section near the bottom of the file, and +add a line like so: ```diff # Localization /po/README_TRANSLATORS.md @ghostty-org/localization /po/com.mitchellh.ghostty.pot @ghostty-org/localization - /po/zh_CN.UTF-8.po @ghostty-org/zh_CN -+/po/xx_YY.UTF-8.po @ghostty-org/xx_YY + /po/zh_CN.po @ghostty-org/zh_CN ++/po/X.po @ghostty-org/yy_ZZ ``` -## Style Guide +`X.po` here is the name of the translation file you created. Unlike the +translation file's name, localization team names **always include a language and +country code**; `yy` here is the _language code_, and `ZZ` is the _country +code_. + +When adding a new entry, try to keep the list in **alphabetical order** if +possible. + +## Style guide These are general style guidelines for translations. Naturally, the specific -recommended standards will differ based on the specific language/locale, -but these should serve as a baseline for the tone and voice of any translation. +recommended standards differ based on the specific language/locale, but these +should serve as a baseline for the tone and voice of any translation. - **Prefer an instructive, yet professional tone.** @@ -196,3 +243,45 @@ but these should serve as a baseline for the tone and voice of any translation. [GNOME Human Interface Guidelines](https://developer.gnome.org/hig/guidelines/writing-style.html) on Linux, and [Apple's Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/writing) on macOS. + +## Common issues + +Some mistakes are frequently made during translation. The most common ones are +listed below. + +### Unicode ellipses + +English source strings use the ellipses character, `…`, instead of three full +stops, `...`. If your language uses ellipses, use the ellipses character instead +of three full stops in your translations. You can copy this character from the +English source string itself. + +### Title case + +Title case is a feature of English writing where most words start with a capital +letter: This Clause Is Written In Title Case. It is commonly found in titles, +hence its name; however, English is one of the only languages that uses title +case. If your language does not use title case, **do not use title case for the +sake of copying the English source**. Please use the casing conventions of your +language instead. + +### `X-Generator` field + +Many `.po` file editors add an `X-Generator` field to the metadata section. +These should be removed as other translators might overwrite them when using +a different editor, and some (such as Poedit) update the line when a different +_version_ is used—this adds unnecessary changes to the diff. + +You can remove the `X-Generator` field by simply deleting that line from the +file with a plain text editor. + +### Updating metadata (revision date) + +It is very easy to overlook the `PO-Revision-Date` field in the metadata at the +top of the file. Please update this when you are done modifying the +translations! + +Depending on who last translated the file, the `Last-Translator` field might +also need updating: make sure it has your name and email. Finally, if your name +and email are not present in the copyright comment at the top of the file, +consider adding it there. diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 00000000000..ac4e8c24cbc --- /dev/null +++ b/po/bg.po @@ -0,0 +1,355 @@ +# Bulgarian translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Damyan Bogoev , 2025. +# reo101 , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-09 22:07+0200\n" +"Last-Translator: reo101 \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Отвори в Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Разрешаване на доÑтъп до клипборда" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Откажи" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Позволи" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Запомни избора за това разделÑне" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "За да покажеш това Ñъобщение отново, презареди конфигурациÑта" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Отказ" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Затвори" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Грешки в конфигурациÑта" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Открити Ñа една или повече грешки в конфигурациÑта. МолÑ, прегледайте " +"грешките по-долу и или презаредете конфигурациÑта Ñи, или ги игнорирайте." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Игнорирай" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Презареди конфигурациÑта" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ð˜Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ‚Ðµ дебъг верÑÐ¸Ñ Ð½Ð° Ghostty! ПроизводителноÑтта ще бъде намалена." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: ИнÑпектор на терминала" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Ðамери…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Предишно Ñъвпадение" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Следващо Ñъвпадение" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "О, не." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "ÐеуÑпешно придобиване на OpenGL контекÑÑ‚ за рендиране." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Този терминал е режим Ñамо за четене. Ð’Ñе още можете да преглеждате, " +"Ñелектирате и превъртате Ñъдържанието, но към работещото приложение нÑма да " +"бъдат изпращани входни ÑъбитиÑ." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Само за четене" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Копирай" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "ПоÑтави" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "УведомÑване при завършване на Ñледващата команда" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "ИзчиÑти" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Ðулирай" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Раздели" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Промени заглавие…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Раздели нагоре" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Раздели надолу" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Раздели налÑво" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Раздели надÑÑно" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Раздел" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Смени името на таба…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Ðов раздел" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Затвори раздел" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Прозорец" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Ðов прозорец" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Затвори прозорец" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "КонфигурациÑ" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Отвори конфигурациÑта" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "ОÑтавете празно за възÑтановÑване на заглавието по подразбиране." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "ОК" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Ðово разделÑне" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Преглед на отворените раздели" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Главно меню" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Командна палитра" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "ИнÑпектор на терминала" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "За Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Изход" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Изпълни команда…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Приложение Ñе опитва да запише в клипборда. Текущото Ñъдържание на клипборда " +"е показано по-долу." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Приложение Ñе опитва да чете от клипборда. Текущото Ñъдържание на клипборда " +"е показано по-долу." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Предупреждение: Потенциално опаÑно поÑтавÑне" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"ПоÑтавÑнето на този текÑÑ‚ в терминала може да е опаÑно, тъй като изглежда, " +"че може да бъдат изпълнени нÑкои команди." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Изход от Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "ЗатварÑне на раздела?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "ЗатварÑне на прозореца?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "ЗатварÑне на разделÑнето?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Ð’Ñички терминални ÑеÑии ще бъдат прекратени." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Ð’Ñички терминални ÑеÑии в този раздел ще бъдат прекратени." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Ð’Ñички терминални ÑеÑии в този прозорец ще бъдат прекратени." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ТекущиÑÑ‚ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð² това разделÑне ще бъде прекратен." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Командата завърши" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Командата завърши уÑпешно" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Командата завърши неуÑпешно" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Командата завърши уÑпешно" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Командата завърши неуÑпешно" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "ПромÑна на заглавието на терминала" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Смени името на таба" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "КонфигурациÑта е презаредена" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Копирано в клипборда" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Клипбордът е изчиÑтен" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Разработчици на Ghostty" diff --git a/po/bg_BG.UTF-8.po b/po/bg_BG.UTF-8.po deleted file mode 100644 index 3f7d55913aa..00000000000 --- a/po/bg_BG.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Bulgarian translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Damyan Bogoev , 2025. -# reo101 , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 22:07+0200\n" -"Last-Translator: reo101 \n" -"Language-Team: Bulgarian \n" -"Language: bg\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Разрешаване на доÑтъп до клипборда" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Откажи" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Позволи" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Запомни избора за това разделÑне" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "За да покажеш това Ñъобщение отново, презареди конфигурациÑта" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Отказ" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Затвори" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Грешки в конфигурациÑта" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Открити Ñа една или повече грешки в конфигурациÑта. МолÑ, прегледайте " -"грешките по-долу и или презаредете конфигурациÑта Ñи, или ги игнорирайте." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Игнорирай" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Презареди конфигурациÑта" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ð˜Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ‚Ðµ дебъг верÑÐ¸Ñ Ð½Ð° Ghostty! ПроизводителноÑтта ще бъде намалена." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: ИнÑпектор на терминала" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Ðамери…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Предишно Ñъвпадение" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Следващо Ñъвпадение" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "О, не." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "ÐеуÑпешно придобиване на OpenGL контекÑÑ‚ за рендиране." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Този терминал е режим Ñамо за четене. Ð’Ñе още можете да преглеждате, " -"Ñелектирате и превъртате Ñъдържанието, но към работещото приложение нÑма да " -"бъдат изпращани входни ÑъбитиÑ." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Само за четене" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Копирай" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "ПоÑтави" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "УведомÑване при завършване на Ñледващата команда" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "ИзчиÑти" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Ðулирай" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Раздели" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Промени заглавие…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Раздели нагоре" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Раздели надолу" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Раздели налÑво" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Раздели надÑÑно" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Раздел" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Ðов раздел" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Затвори раздел" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Прозорец" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Ðов прозорец" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Затвори прозорец" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "КонфигурациÑ" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Отвори конфигурациÑта" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "ОÑтавете празно за възÑтановÑване на заглавието по подразбиране." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "ОК" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Ðово разделÑне" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Преглед на отворените раздели" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Главно меню" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Командна палитра" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "ИнÑпектор на терминала" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "За Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Изход" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Изпълни команда…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Приложение Ñе опитва да запише в клипборда. Текущото Ñъдържание на клипборда " -"е показано по-долу." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Приложение Ñе опитва да чете от клипборда. Текущото Ñъдържание на клипборда " -"е показано по-долу." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Предупреждение: Потенциално опаÑно поÑтавÑне" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"ПоÑтавÑнето на този текÑÑ‚ в терминала може да е опаÑно, тъй като изглежда, " -"че може да бъдат изпълнени нÑкои команди." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Изход от Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "ЗатварÑне на раздела?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "ЗатварÑне на прозореца?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "ЗатварÑне на разделÑнето?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Ð’Ñички терминални ÑеÑии ще бъдат прекратени." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Ð’Ñички терминални ÑеÑии в този раздел ще бъдат прекратени." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Ð’Ñички терминални ÑеÑии в този прозорец ще бъдат прекратени." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "ТекущиÑÑ‚ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð² това разделÑне ще бъде прекратен." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Командата завърши" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Командата завърши уÑпешно" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Командата завърши неуÑпешно" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Командата завърши уÑпешно" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Командата завърши неуÑпешно" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "ПромÑна на заглавието на терминала" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "КонфигурациÑта е презаредена" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Копирано в клипборда" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Клипбордът е изчиÑтен" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Разработчици на Ghostty" diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 00000000000..0d97e9066f4 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,357 @@ +# Catalan translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Francesc Arpi , 2025. +# Kristofer Soler <31729650+KristoferSoler@users.noreply.github.com>, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2025-08-24 19:22+0200\n" +"Last-Translator: Kristofer Soler " +"<31729650+KristoferSoler@users.noreply.github.com>\n" +"Language-Team: \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Obre amb Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autoritza l'accés al porta-retalls" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Denegar" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Permet" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Recorda l’opció per a aquest panell dividit" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recarrega la configuració per tornar a mostrar aquest missatge" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cancel·la" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Tanca" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Errors de configuració" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"S'han trobat un o més errors de configuració. Si us plau, revisa els errors " +"a continuació i torna a carregar la configuració o ignora aquests errors." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignora" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Carrega la configuració" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Estàs executant una versió de depuració de Ghostty! El rendiment es veurà " +"afectat." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspector de terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Cerca…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Coincidència anterior" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Coincidència següent" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, no." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "No s'ha pogut obtenir un context OpenGL per al renderitzat." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Aquest terminal és en mode de només lectura. Encara pots veure, seleccionar " +"i desplaçar-te pel contingut, però no s'enviaran esdeveniments d'entrada a " +"l'aplicació en execució." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Només lectura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copia" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Enganxa" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notifica en finalitzar la propera comanda" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Neteja" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reinicia" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Divideix" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Canvia el títol…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Divideix cap amunt" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Divideix cap avall" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Divideix a l'esquerra" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Divideix a la dreta" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Pestanya" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Canvia el títol de la pestanya…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nova pestanya" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Tanca la pestanya" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nova finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Tanca la finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configuració" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Obre la configuració" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Deixa en blanc per restaurar el títol per defecte." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "D'acord" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nova divisió" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Mostra les pestanyes obertes" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menú principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta de comandes" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspector de terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Sobre Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Surt" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Executa una ordre…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicació està intentant escriure al porta-retalls. El contingut actual " +"del porta-retalls es mostra a continuació." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicació està intentant llegir del porta-retalls. El contingut actual " +"del porta-retalls es mostra a continuació." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Avís: Enganxament potencialment insegur" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Enganxar aquest text al terminal pot ser perillós, ja que sembla que es " +"podrien executar algunes ordres." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Surt de Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Tanca la pestanya?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Tanca la finestra?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Tanca la divisió?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Totes les sessions del terminal es tancaran." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Totes les sessions del terminal en aquesta pestanya es tancaran." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Totes les sessions del terminal en aquesta finestra es tancaran." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "El procés actualment en execució en aquesta divisió es tancarà." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comanda finalitzada" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comanda completada amb èxit" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comanda fallida" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comanda completada amb èxit" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comanda fallida" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Canvia el títol del terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Canvia el títol de la pestanya" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "S'ha tornat a carregar la configuració" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiat al porta-retalls" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Porta-retalls netejat" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Desenvolupadors de Ghostty" diff --git a/po/ca_ES.UTF-8.po b/po/ca_ES.UTF-8.po deleted file mode 100644 index 1b3ba1a0e55..00000000000 --- a/po/ca_ES.UTF-8.po +++ /dev/null @@ -1,354 +0,0 @@ -# Catalan translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Francesc Arpi , 2025. -# Kristofer Soler <31729650+KristoferSoler@users.noreply.github.com>, 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-08-24 19:22+0200\n" -"Last-Translator: Kristofer Soler " -"<31729650+KristoferSoler@users.noreply.github.com>\n" -"Language-Team: \n" -"Language: ca\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Autoritza l'accés al porta-retalls" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Denegar" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Permet" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Recorda l’opció per a aquest panell dividit" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Recarrega la configuració per tornar a mostrar aquest missatge" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Cancel·la" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Tanca" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Errors de configuració" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"S'han trobat un o més errors de configuració. Si us plau, revisa els errors " -"a continuació i torna a carregar la configuració o ignora aquests errors." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignora" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Carrega la configuració" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Estàs executant una versió de depuració de Ghostty! El rendiment es veurà " -"afectat." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspector de terminal" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copia" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Enganxa" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Neteja" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Reinicia" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Divideix" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Canvia el títol…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Divideix cap amunt" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Divideix cap avall" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Divideix a l'esquerra" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Divideix a la dreta" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Pestanya" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nova pestanya" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Tanca la pestanya" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nova finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Tanca la finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configuració" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Obre la configuració" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Deixa en blanc per restaurar el títol per defecte." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "D'acord" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nova divisió" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Mostra les pestanyes obertes" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menú principal" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta de comandes" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspector de terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Sobre Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Surt" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Executa una ordre…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicació està intentant escriure al porta-retalls. El contingut actual " -"del porta-retalls es mostra a continuació." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicació està intentant llegir del porta-retalls. El contingut actual " -"del porta-retalls es mostra a continuació." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Avís: Enganxament potencialment insegur" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Enganxar aquest text al terminal pot ser perillós, ja que sembla que es " -"podrien executar algunes ordres." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Surt de Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Tanca la pestanya?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Tanca la finestra?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Tanca la divisió?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Totes les sessions del terminal es tancaran." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Totes les sessions del terminal en aquesta pestanya es tancaran." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Totes les sessions del terminal en aquesta finestra es tancaran." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "El procés actualment en execució en aquesta divisió es tancarà." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Comanda completada amb èxit" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Comanda fallida" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Canvia el títol del terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "S'ha tornat a carregar la configuració" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copiat al porta-retalls" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Porta-retalls netejat" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Desenvolupadors de Ghostty" diff --git a/po/de.po b/po/de.po new file mode 100644 index 00000000000..da6a08ebc20 --- /dev/null +++ b/po/de.po @@ -0,0 +1,360 @@ +# German translations for com.mitchellh.ghostty package +# German translation for com.mitchellh.ghostty. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Robin Pfäffle , 2025. +# Jan Klass , 2026. +# Klaus Hipp , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-13 08:05+0100\n" +"Last-Translator: Klaus Hipp \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "In Ghostty öffnen" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Zugriff auf die Zwischenablage gewähren" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Nicht erlauben" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Erlauben" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Auswahl für dieses geteilte Fenster beibehalten" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "" +"Lade die Konfiguration erneut, um diese Eingabeaufforderung erneut anzuzeigen" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Schließen" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Konfigurationsfehler" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Ein oder mehrere Konfigurationsfehler wurden gefunden. Bitte überprüfe die " +"untenstehenden Fehler und lade entweder deine Konfiguration erneut oder " +"ignoriere die Fehler." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorieren" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Konfiguration neu laden" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Du verwendest einen Debug Build von Ghostty! Die Leistung wird reduziert " +"sein." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Terminalinspektor" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Suchen…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Vorherige Übereinstimmung" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Nächste Übereinstimmung" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh nein." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Es kann kein OpenGL-Kontext für das Rendering abgerufen werden." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Dieses Terminal befindet sich im schreibgeschützten Modus. Du kannst den " +"Inhalt weiterhin anzeigen, auswählen und durchscrollen, es werden jedoch " +"keine Eingabeereignisse an die laufende Anwendung gesendet." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Schreibgeschützt" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopieren" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Einfügen" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Bei Abschluss des nächsten Befehls benachrichtigen" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Leeren" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Zurücksetzen" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Fenster teilen" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Titel bearbeiten…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Fenster nach oben teilen" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Fenster nach unten teilen" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Fenter nach links teilen" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Fenster nach rechts teilen" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Tab-Titel ändern…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Neuer Tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Tab schließen" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Fenster" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Neues Fenster" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Fenster schließen" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Konfiguration" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Konfiguration öffnen" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Leer lassen, um den Standardtitel wiederherzustellen." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Neues geteiltes Fenster" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Offene Tabs einblenden" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Hauptmenü" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Befehlspalette" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Terminalinspektor" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Über Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Beenden" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Einen Befehl ausführen…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Eine Anwendung versucht in die Zwischenablage zu schreiben. Der aktuelle " +"Inhalt der Zwischenablage wird unten angezeigt." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Eine Anwendung versucht von der Zwischenablage zu lesen. Der aktuelle Inhalt " +"der Zwischenablage wird unten angezeigt." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Achtung: Möglicherweise unsicheres Einfügen" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Diesen Text in das Terminal einzufügen könnte möglicherweise gefährlich " +"sein. Es scheint, dass Anweisungen ausgeführt werden könnten." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Ghostty schließen?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Tab schließen?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Fenster schließen?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Geteiltes Fenster schließen?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Alle Terminalsitzungen werden beendet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Alle Terminalsitzungen in diesem Tab werden beendet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Alle Terminalsitzungen in diesem Fenster werden beendet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Der aktuell laufende Prozess in diesem geteilten Fenster wird beendet." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Befehl abgeschlossen" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Befehl erfolgreich" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Befehl fehlgeschlagen" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Befehl erfolgreich" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Befehl fehlgeschlagen" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Terminaltitel bearbeiten" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Tab-Titel ändern" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Konfiguration wurde neu geladen" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "In die Zwischenablage kopiert" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Zwischenablage geleert" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty-Entwickler" diff --git a/po/de_DE.UTF-8.po b/po/de_DE.UTF-8.po deleted file mode 100644 index 6e7d5039393..00000000000 --- a/po/de_DE.UTF-8.po +++ /dev/null @@ -1,360 +0,0 @@ -# German translations for com.mitchellh.ghostty package -# German translation for com.mitchellh.ghostty. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Robin Pfäffle , 2025. -# Jan Klass , 2026. -# Klaus Hipp , 2026. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-13 08:05+0100\n" -"Last-Translator: Klaus Hipp \n" -"Language-Team: German \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Zugriff auf die Zwischenablage gewähren" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Nicht erlauben" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Erlauben" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Auswahl für dieses geteilte Fenster beibehalten" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "" -"Lade die Konfiguration erneut, um diese Eingabeaufforderung erneut anzuzeigen" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Abbrechen" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Schließen" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Konfigurationsfehler" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Ein oder mehrere Konfigurationsfehler wurden gefunden. Bitte überprüfe die " -"untenstehenden Fehler und lade entweder deine Konfiguration erneut oder " -"ignoriere die Fehler." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorieren" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Konfiguration neu laden" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Du verwendest einen Debug Build von Ghostty! Die Leistung wird reduziert " -"sein." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Terminalinspektor" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Suchen…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Vorherige Übereinstimmung" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Nächste Übereinstimmung" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Oh nein." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Es kann kein OpenGL-Kontext für das Rendering abgerufen werden." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Dieses Terminal befindet sich im schreibgeschützten Modus. Du kannst den " -"Inhalt weiterhin anzeigen, auswählen und durchscrollen, es werden jedoch " -"keine Eingabeereignisse an die laufende Anwendung gesendet." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Schreibgeschützt" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopieren" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Einfügen" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Bei Abschluss des nächsten Befehls benachrichtigen" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Leeren" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Zurücksetzen" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Fenster teilen" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Titel bearbeiten…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Fenster nach oben teilen" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Fenster nach unten teilen" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Fenter nach links teilen" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Fenster nach rechts teilen" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Tab" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Neuer Tab" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Tab schließen" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Fenster" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Neues Fenster" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Fenster schließen" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Konfiguration" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Konfiguration öffnen" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Leer lassen, um den Standardtitel wiederherzustellen." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Neues geteiltes Fenster" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Offene Tabs einblenden" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Hauptmenü" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Befehlspalette" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Terminalinspektor" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Über Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Beenden" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Einen Befehl ausführen…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Eine Anwendung versucht in die Zwischenablage zu schreiben. Der aktuelle " -"Inhalt der Zwischenablage wird unten angezeigt." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Eine Anwendung versucht von der Zwischenablage zu lesen. Der aktuelle Inhalt " -"der Zwischenablage wird unten angezeigt." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Achtung: Möglicherweise unsicheres Einfügen" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Diesen Text in das Terminal einzufügen könnte möglicherweise gefährlich " -"sein. Es scheint, dass Anweisungen ausgeführt werden könnten." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Ghostty schließen?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Tab schließen?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Fenster schließen?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Geteiltes Fenster schließen?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Alle Terminalsitzungen werden beendet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Alle Terminalsitzungen in diesem Tab werden beendet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Alle Terminalsitzungen in diesem Fenster werden beendet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Der aktuell laufende Prozess in diesem geteilten Fenster wird beendet." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Befehl abgeschlossen" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Befehl erfolgreich" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Befehl fehlgeschlagen" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Befehl erfolgreich" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Befehl fehlgeschlagen" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Terminaltitel bearbeiten" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Konfiguration wurde neu geladen" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "In die Zwischenablage kopiert" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Zwischenablage geleert" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty-Entwickler" diff --git a/po/es_AR.UTF-8.po b/po/es_AR.UTF-8.po deleted file mode 100644 index 930d8ada5c9..00000000000 --- a/po/es_AR.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Spanish translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Alan Moyano , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 17:50-0300\n" -"Last-Translator: Alan Moyano \n" -"Language-Team: Argentinian \n" -"Language: es_AR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Autorizar acceso al portapapeles" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Denegar" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Permitir" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Recordar elección para esta división" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Recargar la configuración para volver a mostrar este mensaje" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Cancelar" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Cerrar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Errores de configuración" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Se encontraron uno o más errores de configuración. Por favor revisá los " -"errores a continuación, y recargá tu configuración o ignorá estos errores." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Recargar configuración" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Estás ejecutando una versión de depuración de Ghostty. El rendimiento no " -"será óptimo." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspector de la terminal" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Buscar…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Coincidencia anterior" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Coincidencia siguiente" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Uy, no." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "No se puedo obtener un contexto de OpenGL para el renderizado" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Esta terminal está en modo solo lectura. Aún puedes ver, seleccionar y " -"desplazarte por el contenido, pero no se enviarán los eventos de entrada a " -"la aplicación en ejecución." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Solo lectura" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copiar" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Pegar" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Notificar al finalizar el siguiente comando" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Limpiar" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Reiniciar" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Dividir" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Cambiar título…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Dividir arriba" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Dividir abajo" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Dividir a la izquierda" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Dividir a la derecha" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nueva pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Cerrar pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nueva ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Cerrar ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configuración" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Abrir configuración" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Dejar en blanco para restaurar el título predeterminado." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Aceptar" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nueva división" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Ver pestañas abiertas" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menú principal" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta de comandos" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspector de la terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Acerca de Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Salir" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Ejecutar un comando…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicación está intentando escribir en el portapapeles. El contenido " -"actual del portapapeles se muestra a continuación." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicación está intentando leer desde el portapapeles. El contenido " -"actual del portapapeles se muestra a continuación." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Advertencia: Pegado potencialmente inseguro" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Pegar este texto en la terminal puede ser peligroso ya que parece que " -"algunos comandos podrían ejecutarse." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "¿Salir de Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "¿Cerrar pestaña?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "¿Cerrar ventana?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "¿Cerrar división?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Todas las sesiones de terminal serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Todas las sesiones de terminal en esta pestaña serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Todas las sesiones de terminal en esta ventana serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "El proceso actualmente en ejecución en esta división será terminado." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Comando finalizado" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Comando ejecutado correctamente" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Comando fallido" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Comando ejecutado correctamente" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Comando fallido" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Cambiar el título de la terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Configuración recargada" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copiado al portapapeles" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Portapapeles limpiado" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Desarrolladores de Ghostty" diff --git a/po/es_AR.po b/po/es_AR.po new file mode 100644 index 00000000000..a5dd60d02a8 --- /dev/null +++ b/po/es_AR.po @@ -0,0 +1,355 @@ +# Spanish translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Alan Moyano , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-19 13:34-0300\n" +"Last-Translator: Alan Moyano \n" +"Language-Team: Argentinian \n" +"Language: es_AR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Abrir en Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autorizar acceso al portapapeles" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Denegar" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Permitir" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Recordar elección para esta división" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recargar la configuración para volver a mostrar este mensaje" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cancelar" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Cerrar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Errores de configuración" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Se encontraron uno o más errores de configuración. Por favor revisá los " +"errores a continuación, y recargá tu configuración o ignorá estos errores." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Recargar configuración" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Estás ejecutando una versión de depuración de Ghostty. El rendimiento no " +"será óptimo." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspector de la terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Buscar…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Coincidencia anterior" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Coincidencia siguiente" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Uy, no." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "No se pudo obtener un contexto de OpenGL para el renderizado" + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Esta terminal está en modo solo lectura. Aún puedes ver, seleccionar y " +"desplazarte por el contenido, pero no se enviarán los eventos de entrada a " +"la aplicación en ejecución." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Solo lectura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Pegar" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notificar al finalizar el siguiente comando" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Limpiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reiniciar" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Dividir" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Cambiar título…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Dividir arriba" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Dividir abajo" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Dividir a la izquierda" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Dividir a la derecha" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Cambiar título de la pestaña…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nueva pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Cerrar pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nueva ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Cerrar ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configuración" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Abrir configuración" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Dejar en blanco para restaurar el título predeterminado." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Aceptar" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nueva división" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Ver pestañas abiertas" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menú principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta de comandos" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspector de la terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Acerca de Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Salir" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Ejecutar un comando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando escribir en el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando leer desde el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Advertencia: Pegado potencialmente inseguro" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Pegar este texto en la terminal puede ser peligroso ya que parece que " +"algunos comandos podrían ejecutarse." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "¿Salir de Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "¿Cerrar pestaña?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "¿Cerrar ventana?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "¿Cerrar división?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Todas las sesiones de terminal serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Todas las sesiones de terminal en esta pestaña serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Todas las sesiones de terminal en esta ventana serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "El proceso actualmente en ejecución en esta división será terminado." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comando finalizado" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comando ejecutado correctamente" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comando ejecutado correctamente" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Cambiar título de la terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Cambiar título de la pestaña" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configuración recargada" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiado al portapapeles" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Portapapeles limpiado" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Desarrolladores de Ghostty" diff --git a/po/es_BO.UTF-8.po b/po/es_BO.UTF-8.po deleted file mode 100644 index 7f103f960ae..00000000000 --- a/po/es_BO.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Spanish translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Miguel Peredo , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-12 17:46+0200\n" -"Last-Translator: Miguel Peredo \n" -"Language-Team: Spanish \n" -"Language: es_BO\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Autorizar acceso al portapapeles" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Denegar" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Permitir" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Recordar su elección para esta división de ventana" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Recargar configuración para mostrar este aviso nuevamente" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Cancelar" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Cerrar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Errores de configuración" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Se encontraron uno o más errores de configuración. Por favor revise los " -"errores a continuación, y recargue su configuración o ignore estos errores." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Recargar configuración" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Está ejecutando una versión de depuración de Ghostty. El rendimiento no " -"será óptimo." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspector de la terminal" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Encontrar…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Resultado anterior" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Resultado siguiente" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "¡Epa!" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "No se puede iniciar OpenGL para rendering." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"La terminal está en modo de lectura. Puedes ver, seleccionar, y desplazar a " -"través del contenido, pero ninguna entrada (evento) va a ser enviada a la " -"aplicación que se está ejecutando." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Solo lectura" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copiar" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Pegar" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Notificar cuando el próximo comando finalice" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Limpiar" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Reiniciar" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Dividir" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Cambiar título…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Dividir arriba" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Dividir abajo" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Dividir a la izquierda" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Dividir a la derecha" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nueva pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Cerrar pestaña" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nueva ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Cerrar ventana" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configuración" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Abrir configuración" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Dejar en blanco para restaurar el título predeterminado." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Aceptar" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nueva ventana dividida" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Ver pestañas abiertas" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menú principal" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta de comandos" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspector de la terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Acerca de Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Salir" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Ejecutar comando…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicación está intentando escribir en el portapapeles. El contenido " -"actual del portapapeles se muestra a continuación." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Una aplicación está intentando leer desde el portapapeles. El contenido " -"actual del portapapeles se muestra a continuación." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Advertencia: Pegado potencialmente inseguro" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Pegar este texto en la terminal puede ser peligroso ya que parece que " -"algunos comandos podrían ejecutarse." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "¿Salir de Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "¿Cerrar pestaña?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "¿Cerrar ventana?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "¿Cerrar división?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Todas las sesiones de terminal serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Todas las sesiones de terminal en esta pestaña serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Todas las sesiones de terminal en esta ventana serán terminadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "El proceso actualmente en ejecución en esta división será terminado." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Comando finalizado" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Comando exitoso" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Comando fallido" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Comando ejecutado con éxito" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Comando fallido" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Cambiar el título de la terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Configuración recargada" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copiado al portapapeles" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "El portapapeles está limpio" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Desarrolladores de Ghostty" diff --git a/po/es_BO.po b/po/es_BO.po new file mode 100644 index 00000000000..d0b271d9e55 --- /dev/null +++ b/po/es_BO.po @@ -0,0 +1,355 @@ +# Spanish translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Miguel Peredo , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-12 17:46+0200\n" +"Last-Translator: Miguel Peredo \n" +"Language-Team: Spanish \n" +"Language: es_BO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Abrir en Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autorizar acceso al portapapeles" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Denegar" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Permitir" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Recordar su elección para esta división de ventana" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recargar configuración para mostrar este aviso nuevamente" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cancelar" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Cerrar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Errores de configuración" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Se encontraron uno o más errores de configuración. Por favor revise los " +"errores a continuación, y recargue su configuración o ignore estos errores." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Recargar configuración" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Está ejecutando una versión de depuración de Ghostty. El rendimiento no " +"será óptimo." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspector de la terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Encontrar…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Resultado anterior" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Resultado siguiente" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "¡Epa!" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "No se puede iniciar OpenGL para rendering." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"La terminal está en modo de lectura. Puedes ver, seleccionar, y desplazar a " +"través del contenido, pero ninguna entrada (evento) va a ser enviada a la " +"aplicación que se está ejecutando." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Solo lectura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Pegar" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notificar cuando el próximo comando finalice" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Limpiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reiniciar" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Dividir" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Cambiar título…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Dividir arriba" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Dividir abajo" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Dividir a la izquierda" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Dividir a la derecha" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Cambiar el título de la pestaña…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nueva pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Cerrar pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nueva ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Cerrar ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configuración" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Abrir configuración" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Dejar en blanco para restaurar el título predeterminado." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Aceptar" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nueva ventana dividida" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Ver pestañas abiertas" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menú principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta de comandos" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspector de la terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Acerca de Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Salir" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Ejecutar comando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando escribir en el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando leer desde el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Advertencia: Pegado potencialmente inseguro" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Pegar este texto en la terminal puede ser peligroso ya que parece que " +"algunos comandos podrían ejecutarse." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "¿Salir de Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "¿Cerrar pestaña?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "¿Cerrar ventana?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "¿Cerrar división?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Todas las sesiones de terminal serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Todas las sesiones de terminal en esta pestaña serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Todas las sesiones de terminal en esta ventana serán terminadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "El proceso actualmente en ejecución en esta división será terminado." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comando finalizado" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comando exitoso" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comando ejecutado con éxito" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Cambiar el título de la terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Cambiar el título de la pestaña" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configuración recargada" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiado al portapapeles" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "El portapapeles está limpio" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Desarrolladores de Ghostty" diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 00000000000..364da14c9a0 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,355 @@ +# Spanish translations for com.mitchellh.ghostty package +# Traducciones al español para el paquete com.mitchellh.ghostty. +# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# José Miguel Sarasola , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-05 10:23+0800\n" +"PO-Revision-Date: 2026-02-18 10:57+0100\n" +"Last-Translator: José Miguel Sarasola \n" +"Language-Team: \n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Abrir en Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autorizar acceso al portapapeles" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Denegar" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Permitir" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Recordar elección para esta división" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recargar configuración para volver a mostrar este aviso" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cancelar" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Cerrar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Errores en la configuración" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Se detectaron uno o más errores de configuración. Por favor, revisa los " +"errores más abajo y recarga la configuración o ignora estos errores." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Recargar configuración" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Â¡Estás ejecutando una versión de depuración de Ghostty! El rendimiento se verá perjudicado." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspector de terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Buscar…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Resultado previo" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Resultado siguiente" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, no." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "No se pudo obtener un contexto de OpenGL para el renderizado." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Este terminal está en modo de solo lectura. Puedes ver, seleccionar y hacer " +"scroll del contenido, pero no se enviarán eventos de entrada a la aplicación " +"en ejecución." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Solo lectura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Pegar" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notificar al finalizar el siguiente comando" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Limpiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reiniciar" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Dividir" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Cambiar título…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Dividir arriba" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Dividir abajo" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Dividir a la izquierda" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Dividir a la derecha" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Cambiar título de la pestaña…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nueva pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Cerrar pestaña" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nueva ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Cerrar ventana" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configuración" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Abrir configuración" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Dejar en blanco para restaurar el título predeterminado." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Aceptar" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nueva división" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Ver pestañas abiertas" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menú principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta de comandos" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspector de terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Acerca de Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Salir" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Ejecutar un comando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando escribir en el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Una aplicación está intentando leer desde el portapapeles. El contenido " +"actual del portapapeles se muestra a continuación." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Advertencia: Pegado potencialmente inseguro" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Pegar este texto en el terminal puede ser peligroso ya que parece que " +"algunos comandos podrían ejecutarse." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "¿Salir de Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "¿Cerrar pestaña?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "¿Cerrar ventana?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "¿Cerrar división?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Todas las sesiones del terminal serán finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Todas las sesiones del terminal en esta pestaña serán finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Todas las sesiones del terminal en esta ventana serán finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "El proceso ejecutándose en esta división será finalizado." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comando finalizado" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comando completado" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comando completado" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comando fallido" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Cambiar el título del terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Cambiar el título de la pestaña" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configuración recargada" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiado al portapapeles" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Portapapeles vaciado" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Desarrolladores de Ghostty" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 00000000000..9e9bf8dff5f --- /dev/null +++ b/po/fr.po @@ -0,0 +1,356 @@ +# French translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Kirwiisp , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 15:03+0200\n" +"Last-Translator: Pangoraw \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ouvrir dans Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autoriser l'accès au presse-papiers" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Refuser" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Autoriser" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Se rappeler du choix pour ce panneau" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recharger la configuration pour afficher à nouveau ce message" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Annuler" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Fermer" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Erreurs de configuration" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Une ou plusieurs erreurs de configuration ont été trouvées. Veuillez lire " +"les erreurs ci-dessous, et recharger votre configuration ou bien ignorer ces " +"erreurs." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorer" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Recharger la configuration" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Vous utilisez une version de débogage de Ghostty ! Les performances seront " +"dégradées." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspecteur" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Chercher…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Résultat précédent" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Résultat suivant" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, non." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Impossible d'obtenir un contexte OpenGL pour le rendu." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Ce terminal est en mode lecture seule. Vous pouvez encore voir, " +"sélectionner, et naviguer dans son contenu, mais aucune entrée ne sera " +"envoyée à l'application en cours." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Lecture seule" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copier" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Coller" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notifier à la complétion de la prochaine commande" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Tout effacer" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Réinitialiser" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Créer panneau" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Changer le titre…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Panneau en haut" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Panneau en bas" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Panneau à gauche" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Panneau à droite" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Onglet" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Changer le titre de l'onglet…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nouvel onglet" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Fermer l'onglet" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Fenêtre" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nouvelle fenêtre" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Fermer la fenêtre" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Config" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Ouvrir la configuration" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Laisser vide pour restaurer le titre par défaut." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nouveau panneau" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Voir les onglets ouverts" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menu principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Palette de commandes" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspecteur de terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "À propos de Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Quitter" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Exécuter une commande…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Une application essaie d'écrire dans le presse-papiers. Le contenu actuel du " +"presse-papiers est affiché ci-dessous." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Une application essaie de lire depuis le presse-papiers. Le contenu actuel " +"du presse-papiers est affiché ci-dessous." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Attention: Collage potentiellement dangereux" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Coller ce texte dans le terminal pourrait être dangereux, il semblerait que " +"certaines commandes pourraient être exécutées." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Quitter Ghostty ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Fermer l'onglet ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Fermer la fenêtre ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Fermer le panneau ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Toutes les sessions vont être arrêtées." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Toutes les sessions de cet onglet vont être arrêtées." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Toutes les sessions de cette fenêtre vont être arrêtées." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Le processus en cours dans ce panneau va être arrêté." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Commande terminée" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Commande réussie" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "La commande a échoué" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Commande réussie" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "La commande a échoué" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Changer le nom du terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Changer le titre de l'onglet" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configuration rechargée" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copié dans le presse-papiers" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Presse-papiers vidé" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Les développeurs de Ghostty" diff --git a/po/fr_FR.UTF-8.po b/po/fr_FR.UTF-8.po deleted file mode 100644 index 1687b490958..00000000000 --- a/po/fr_FR.UTF-8.po +++ /dev/null @@ -1,356 +0,0 @@ -# French translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Kirwiisp , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 21:18+0200\n" -"Last-Translator: Gerry Agbobada \n" -"Language-Team: French \n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Autoriser l'accès au presse-papiers" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Refuser" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Autoriser" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Se rappeler du choix pour ce panneau" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Recharger la configuration pour afficher à nouveau ce message" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Annuler" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Fermer" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Erreurs de configuration" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Une ou plusieurs erreurs de configuration ont été trouvées. Veuillez lire " -"les erreurs ci-dessous, et recharger votre configuration ou bien ignorer ces " -"erreurs." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorer" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Recharger la configuration" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Vous utilisez une version de débogage de Ghostty ! Les performances seront " -"dégradées." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspecteur" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Chercher…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Résultat précédent" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Résultat suivant" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Oh, non." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Impossible d'obtenir un contexte OpenGL pour le rendu." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Ce terminal est en mode lecture seule. Vous pouvez encore voir, " -"sélectionner, et naviguer dans son contenu, mais aucune entrée ne sera " -"envoyée à l'application en cours." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Lecture seule" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copier" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Coller" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Notifier à la complétion de la prochaine commande" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Tout effacer" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Réinitialiser" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Créer panneau" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Changer le titre…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Panneau en haut" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Panneau en bas" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Panneau à gauche" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Panneau à droite" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Onglet" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nouvel onglet" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Fermer l'onglet" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Fenêtre" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nouvelle fenêtre" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Fermer la fenêtre" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Config" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Ouvrir la configuration" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Laisser vide pour restaurer le titre par défaut." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nouveau panneau" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Voir les onglets ouverts" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menu principal" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Palette de commandes" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspecteur de terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "À propos de Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Quitter" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Exécuter une commande…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Une application essaie d'écrire dans le presse-papiers. Le contenu actuel du " -"presse-papiers est affiché ci-dessous." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Une application essaie de lire depuis le presse-papiers. Le contenu actuel " -"du presse-papiers est affiché ci-dessous." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Attention: Collage potentiellement dangereux" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Coller ce texte dans le terminal pourrait être dangereux, il semblerait que " -"certaines commandes pourraient être exécutées." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Quitter Ghostty ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Fermer l'onglet ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Fermer la fenêtre ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Fermer le panneau ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Toutes les sessions vont être arrêtées." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Toutes les sessions de cet onglet vont être arrêtées." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Toutes les sessions de cette fenêtre vont être arrêtées." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Le processus en cours dans ce panneau va être arrêté." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Commande terminée" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Commande réussie" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "La commande a échoué" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Commande réussie" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "La commande a échoué" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Changer le nom du terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Configuration rechargée" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copié dans le presse-papiers" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Presse-papiers vidé" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Les développeurs de Ghostty" diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 00000000000..575774f6fc3 --- /dev/null +++ b/po/ga.po @@ -0,0 +1,356 @@ +# Irish translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Aindriú Mac Giolla Eoin , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-05 10:23+0800\n" +"PO-Revision-Date: 2026-02-18 14:32+0000\n" +"Last-Translator: Aindriú Mac Giolla Eoin \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n" + + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Oscail i nGhostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Údarú rochtain ar an ngearrthaisce" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Diúltaigh" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Ceadaigh" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Sábháil an rogha don scoilt seo" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Athlódáil an chumraíocht chun an teachtaireacht seo a thaispeáint arís" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cealaigh" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Dún" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Earráidí cumraíochta" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Fuarthas earráid chumraíochta amháin nó níos mó. Athbhreithnigh na hearráidí " +"thíos, agus athlódáil do chumraíocht nó déan neamhaird de na hearráidí seo." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Déan neamhaird de" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Athlódáil cumraíocht" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Tá leagan dífhabhtaithe de Ghostty á rith agat! Laghdófar an fheidhmíocht." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Cigire teirminéil" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Cuardaigh…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "An toradh roimhe seo" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "An chéad toradh eile" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ó, fadbh." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Ní féidir comhthéacs OpenGL a fháil le haghaidh rindreála." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Tá an teirminéal seo i mód inléite amháin. Is féidir leat fós féachaint, " +"roghnú agus scroláil tríd an ábhar, ach ní seolfar aon teagmhais ionchuir " +"chuig an bhfeidhmchlár atá ag rith." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "InleÌite amhaÌin" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Cóipeáil" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Greamaigh" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Seol fógra nuair a chríochnaíonn an chéad ordú eile" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Glan" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Athshocraigh" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Scoilt" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Athraigh teideal…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Scoilt suas" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Scoilt síos" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Scoilt ar chlé" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Scoilt ar dheis" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Táb" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Athraigh teideal an táb…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Táb nua" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Dún táb" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Fuinneog" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Fuinneog nua" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Dún fuinneog" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Cumraíocht" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Oscail cumraíocht" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Fág bán chun an teideal réamhshocraithe a athbhunú." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Ceart go leor" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Scoilt nua" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Féach ar na táib oscailte" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Príomh-Roghchlár" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Pailéad ordaithe" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Cigire teirminéil" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Maidir le Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Scoir" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Rith ordú…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Tá feidhmchlár ag iarraidh scríobh chuig an ngearrthaisce. Taispeántar ábhar " +"reatha an ghearrthaisce thíos." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Tá feidhmchlár ag iarraidh léamh ón ngearrthaisce. Taispeántar ábhar reatha " +"an ghearrthaisce thíos." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Rabhadh: Greamaigh a d'fhéadfadh a bheith neamhshábháilte" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"D’fhéadfadh sé a bheith contúirteach an téacs seo a ghreamú isteach sa " +"teirminéal, toisc go d'fhéadfadh roinnt orduithe a fhorghníomhú." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Scoir Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Dún táb?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Dún fuinneog?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Dún an scoilt?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Cuirfear deireadh le gach seisiún teirminéil." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Cuirfear deireadh le gach seisiún teirminéil sa táb seo." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Cuirfear deireadh le gach seisiún teirminéil san fhuinneog seo." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "" +"Cuirfear deireadh leis an bpróiseas atá ar siúl faoi láthair sa scoilt seo." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Ordú críochnaithe" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "D’éirigh leis an ordú" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Theip ar an ordú" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "D'éirigh leis an ordú" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Theip ar an ordú" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Athraigh teideal teirminéil" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Athraigh teideal an táb" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Tá an chumraíocht athlódáilte" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Cóipeáilte chuig an ghearrthaisce" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Gearrthaisce glanta" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Forbróirí Ghostty" diff --git a/po/ga_IE.UTF-8.po b/po/ga_IE.UTF-8.po deleted file mode 100644 index 72f237f8624..00000000000 --- a/po/ga_IE.UTF-8.po +++ /dev/null @@ -1,353 +0,0 @@ -# Irish translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Aindriú Mac Giolla Eoin , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-08-26 15:46+0100\n" -"Last-Translator: Aindriú Mac Giolla Eoin \n" -"Language-Team: Irish \n" -"Language: ga\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n" -"X-Generator: Poedit 3.4.2\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Údarú rochtain ar an ngearrthaisce" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Diúltaigh" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Ceadaigh" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Sábháil an rogha don scoilt seo" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Athlódáil an chumraíocht chun an teachtaireacht seo a thaispeáint arís" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Cealaigh" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Dún" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Earráidí cumraíochta" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Fuarthas earráid chumraíochta amháin nó níos mó. Athbhreithnigh na hearráidí " -"thíos, agus athlódáil do chumraíocht nó déan neamhaird de na hearráidí seo." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Déan neamhaird de" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Athlódáil cumraíocht" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Tá leagan dífhabhtaithe de Ghostty á rith agat! Laghdófar an fheidhmíocht." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Cigire teirminéil" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Cóipeáil" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Greamaigh" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Glan" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Athshocraigh" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Scoilt" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Athraigh teideal…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Scoilt suas" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Scoilt síos" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Scoilt ar chlé" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Scoilt ar dheis" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Táb" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Táb nua" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Dún táb" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Fuinneog" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Fuinneog nua" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Dún fuinneog" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Cumraíocht" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Oscail cumraíocht" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Fág bán chun an teideal réamhshocraithe a athbhunú." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Ceart go leor" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Scoilt nua" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Féach ar na táib oscailte" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Príomh-Roghchlár" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Pailéad ordaithe" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Cigire teirminéil" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Maidir le Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Scoir" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Rith ordú…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Tá feidhmchlár ag iarraidh scríobh chuig an ngearrthaisce. Taispeántar ábhar " -"reatha an ghearrthaisce thíos." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Tá feidhmchlár ag iarraidh léamh ón ngearrthaisce. Taispeántar ábhar reatha " -"an ghearrthaisce thíos." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Rabhadh: Greamaigh a d'fhéadfadh a bheith neamhshábháilte" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"D’fhéadfadh sé a bheith contúirteach an téacs seo a ghreamú isteach sa " -"teirminéal, toisc go d'fhéadfadh roinnt orduithe a fhorghníomhú." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Scoir Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Dún táb?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Dún fuinneog?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Dún an scoilt?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Cuirfear deireadh le gach seisiún teirminéil." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Cuirfear deireadh le gach seisiún teirminéil sa táb seo." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Cuirfear deireadh le gach seisiún teirminéil san fhuinneog seo." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "" -"Cuirfear deireadh leis an bpróiseas atá ar siúl faoi láthair sa scoilt seo." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "D'éirigh leis an ordú" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Theip ar an ordú" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Athraigh teideal teirminéil" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Tá an chumraíocht athlódáilte" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Cóipeáilte chuig an ghearrthaisce" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Gearrthaisce glanta" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Forbróirí Ghostty" diff --git a/po/he.po b/po/he.po new file mode 100644 index 00000000000..5a04aae7b8a --- /dev/null +++ b/po/he.po @@ -0,0 +1,352 @@ +# Hebrew translations for com.mitchellh.ghostty. +# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Sl (Shahaf Levi), Sl's Repository Ltd , 2026. +# CraziestOwl , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 18:14+0300\n" +"Last-Translator: Sl (Shahaf Levi), Sl's Repository Ltd " +"\n" +"Language-Team: Hebrew \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "פתח/×™ בGhostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "×שר/×™ גישה ללוח ההעתקה" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "דחייה" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "×ישור" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "זכור/×™ ×ת הבחירה עבור פיצול ×–×”" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "טען/×™ ×ת ההגדרות מחדש כדי להציג ×ת הבקשה הזו שוב" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "ביטול" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "סגירה" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "שגי×ות בהגדרות" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"נמצ×ו ×חת ×ו יותר שגי×ות בהגדרות. ×× × ×‘×“×•×§/×™ ×ת השגי×ות המופיעות מטה ול×חר " +"מכן טען/×™ ×ת ההגדרות מחדש ×ו התעל×/×™ מהשגי×ות." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "התעלמות" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "טעינה מחדש של ההגדרות" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ ×ת/×” מריץ/×” גרסת ניפוי שגי×ות של Ghostty! ×”×‘×™×¦×•×¢×™× ×™×”×™×• ירודי×." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: בודק המסוף" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "חפש/י…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "ההת×מה הקודמת" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "ההת×מה הב××”" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "×וי, ל×" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "×œ× × ×™×ª×Ÿ לקבל הקשר OpenGL לצורך רינדור." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"מסוף ×–×” × ×ž×¦× ×‘×ž×¦×‘ קרי××” בלבד. עדיין תוכל/×™ לצפות, לבחור ולגלול בתוכן, ×ך ×œ× " +"יישלחו ×ירועי קלט ל×פליקציה הפעילה." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "לקרי××” בלבד" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "העתקה" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "הדבקה" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "תזכורת ×‘×¡×™×•× ×”×¤×§×•×“×” הב××”" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "ניקוי" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "×יפוס" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "פיצול" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "שינוי כותרת…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "פיצול למעלה" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "פיצול למטה" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "פיצול שמ×לה" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "פיצול ימינה" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "כרטיסייה" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "שנה/×™ ×ת כותרת הכרטיסייה…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "כרטיסייה חדשה" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "סגור/×™ כרטיסייה" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "חלון" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "חלון חדש" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "סגור/×™ חלון" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "הגדרות" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "פתיחת ההגדרות" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "הש×ר/×™ ריק כדי לשחזר ×ת כותרת ברירת המחדל." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "×ישור" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "פיצול חדש" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "הצג/×™ כרטיסיות פתוחות" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "תפריט ר×שי" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "לוח פקודות" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "בודק המסוף" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "×ודות Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "יצי××”" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "הרץ/×™ פקודה…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"יש ×פליקציה שמנסה לכתוב לתוך לוח ההעתקה. התוכן הנוכחי של הלוח מופיע למטה." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "יש ×פליקציה שמנסה ×œ×§×¨×•× ×ž×œ×•×— ההעתקה. התוכן הנוכחי של הלוח מופיע למטה." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "×זהרה: ההדבקה עלולה להיות מסוכנת" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"הדבקת טקסט ×–×” במסוף עלולה להיות מסוכנת, מכיוון שככל הנר××” ×”×™× ×ª×•×‘×™×œ להרצה של " +"פקודות מסוימות." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "לצ×ת מGhostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "לסגור ×ת הכרטיסייה?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "לסגור ×ת החלון?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "לסגור ×ת הפיצול?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "כל הפעלות המסוף יסתיימו." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "כל הפעלות המסוף בכרטיסייה זו יסתיימו." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "כל הפעלות המסוף בחלון ×–×” יסתיימו." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "התהליך שרץ כרגע בפיצול ×–×” יסתיי×." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "הפקודה הסתיימה" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "הפקודה הצליחה" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "הפקודה נכשלה" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "הפקודה הצליחה" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "הפקודה נכשלה" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "שינוי כותרת המסוף" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "שינוי כותרת הכרטיסייה" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "ההגדרות הוטענו מחדש" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "הועתק ללוח ההעתקה" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "לוח ההעתקה רוקן" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "×”×ž×¤×ª×—×™× ×©×œ Ghostty" diff --git a/po/he_IL.UTF-8.po b/po/he_IL.UTF-8.po deleted file mode 100644 index 7d7c8d7cc94..00000000000 --- a/po/he_IL.UTF-8.po +++ /dev/null @@ -1,352 +0,0 @@ -# Hebrew translations for com.mitchellh.ghostty. -# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Sl (Shahaf Levi), Sl's Repository Ltd , 2026. -# CraziestOwl , 2025. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-11 22:45+0300\n" -"Last-Translator: Sl (Shahaf Levi), Sl's Repository Ltd " -"\n" -"Language-Team: Hebrew \n" -"Language: he\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "×שר/×™ גישה ללוח ההעתקה" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "דחייה" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "×ישור" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "זכור/×™ ×ת הבחירה עבור פיצול ×–×”" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "טען/×™ ×ת ההגדרות מחדש כדי להציג ×ת הבקשה הזו שוב" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "ביטול" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "סגירה" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "שגי×ות בהגדרות" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"נמצ×ו ×חת ×ו יותר שגי×ות בהגדרות. ×× × ×‘×“×•×§/×™ ×ת השגי×ות המופיעות מטה ול×חר " -"מכן טען/×™ ×ת ההגדרות מחדש ×ו התעל×/×™ מהשגי×ות." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "התעלמות" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "טעינה מחדש של ההגדרות" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ ×ת/×” מריץ/×” גרסת ניפוי שגי×ות של Ghostty! ×”×‘×™×¦×•×¢×™× ×™×”×™×• ירודי×." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: בודק המסוף" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "חפש/י…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "ההת×מה הקודמת" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "ההת×מה הב××”" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "×וי, ל×" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "×œ× × ×™×ª×Ÿ לקבל הקשר OpenGL לצורך רינדור." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"מסוף ×–×” × ×ž×¦× ×‘×ž×¦×‘ קרי××” בלבד. עדיין תוכל/×™ לצפות, לבחור ולגלול בתוכן, ×ך ×œ× " -"יישלחו ×ירועי קלט ל×פליקציה הפעילה." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "לקרי××” בלבד" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "העתקה" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "הדבקה" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "תזכורת ×‘×¡×™×•× ×”×¤×§×•×“×” הב××”" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "ניקוי" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "×יפוס" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "פיצול" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "שינוי כותרת…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "פיצול למעלה" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "פיצול למטה" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "פיצול שמ×לה" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "פיצול ימינה" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "כרטיסייה" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "כרטיסייה חדשה" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "סגור/×™ כרטיסייה" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "חלון" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "חלון חדש" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "סגור/×™ חלון" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "הגדרות" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "פתיחת ההגדרות" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "הש×ר/×™ ריק כדי לשחזר ×ת כותרת ברירת המחדל." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "×ישור" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "פיצול חדש" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "הצג/×™ כרטיסיות פתוחות" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "תפריט ר×שי" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "לוח פקודות" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "בודק המסוף" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "×ודות Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "יצי××”" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "הרץ/×™ פקודה…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"יש ×פליקציה שמנסה לכתוב לתוך לוח ההעתקה. התוכן הנוכחי של הלוח מופיע למטה." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "יש ×פליקציה שמנסה ×œ×§×¨×•× ×ž×œ×•×— ההעתקה. התוכן הנוכחי של הלוח מופיע למטה." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "×זהרה: ההדבקה עלולה להיות מסוכנת" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"הדבקת טקסט ×–×” במסוף עלולה להיות מסוכנת, מכיוון שככל הנר××” ×”×™× ×ª×•×‘×™×œ להרצה של " -"פקודות מסוימות." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "לצ×ת מGhostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "לסגור ×ת הכרטיסייה?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "לסגור ×ת החלון?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "לסגור ×ת הפיצול?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "כל הפעלות המסוף יסתיימו." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "כל הפעלות המסוף בכרטיסייה זו יסתיימו." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "כל הפעלות המסוף בחלון ×–×” יסתיימו." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "התהליך שרץ כרגע בפיצול ×–×” יסתיי×." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "הפקודה הסתיימה" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "הפקודה הצליחה" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "הפקודה נכשלה" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "הפקודה הצליחה" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "הפקודה נכשלה" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "שינוי כותרת המסוף" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "ההגדרות הוטענו מחדש" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "הועתק ללוח ההעתקה" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "לוח ההעתקה רוקן" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "×”×ž×¤×ª×—×™× ×©×œ Ghostty" diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 00000000000..44a3a205052 --- /dev/null +++ b/po/hr.po @@ -0,0 +1,355 @@ +# Croatian translations for com.mitchellh.ghostty package +# Hrvatski prijevod za paket com.mitchellh.ghostty. +# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Filip , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 21:00+0200\n" +"Last-Translator: Filip7 \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Otvori u Ghosttyju" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Dopusti pristup meÄ‘uspremniku" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Odbij" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Dopusti" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Zapamti izbor za ovu podjelu" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Ponovno uÄitaj postavke za prikaz ovog upita" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Otkaži" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Zatvori" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "GreÅ¡ke u postavkama" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"PronaÄ‘ena je greÅ¡ka (ili viÅ¡e njih) u postavkama. Pregledaj niže navedene " +"greÅ¡ke te ponovno uÄitaj postavke ili zanemari ove greÅ¡ke." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Zanemari" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Ponovno uÄitaj postavke" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Pokrenuta je debug verzija Ghosttyja! Performanse će biti smanjene." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: inspektor terminala" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Pretraži…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Prethodno podudaranje" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Sljedeće podudaranje" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, ne." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Neuspjelo dohvaćanje OpenGL konteksta za renderiranje." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Ovaj terminal je u naÄinu rada samo za Äitanje. I dalje je moguće gledati, " +"odabirati i skrolati kroz sadržaj, no unos neće biti poslan pokrenutoj " +"aplikaciji." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Samo za Äitanje" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopiraj" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Zalijepi" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Obavijesti kada iduća naredba zavrÅ¡i" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "OÄisti" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Resetiraj" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Podijeli" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Promijeni naslov…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Podijeli gore" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Podijeli dolje" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Podijeli lijevo" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Podijeli desno" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Kartica" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Promijeni naslov kartice…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nova kartica" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Zatvori karticu" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Prozor" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Novi prozor" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Zatvori prozor" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Postavke" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Otvori postavke" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Ostavi prazno za povratak zadanog naslova." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nova podjela" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Pregledaj otvorene kartice" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Glavni izbornik" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta naredbi" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspektor terminala" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "O Ghosttyju" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "IzaÄ‘i" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "IzvrÅ¡i naredbu…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikacija pokuÅ¡ava pisati u meÄ‘uspremnik. Trenutna vrijednost meÄ‘uspremnika " +"prikazana je niže." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikacija pokuÅ¡ava proÄitati vrijednost meÄ‘uspremnika. Trenutna vrijednost " +"meÄ‘uspremnika je prikazana niže." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Upozorenje: Potencijalno opasno lijepljenje" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Lijepljenje ovog teksta u terminal može biti opasno jer se Äini da neke " +"naredbe mogu biti izvrÅ¡ene." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Zatvori Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Zatvori karticu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Zatvori prozor?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Zatvori podjelu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Sve sesije terminala će biti prekinute." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Sve sesije terminala u ovoj kartici će biti prekinute." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Sve sesije terminala u ovom prozoru će biti prekinute." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Pokrenuti procesi u ovoj podjeli će biti prekinuti." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Naredba je zavrÅ¡ena" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Naredba je uspjela" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Naredba nije uspjela" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Naredba je uspjela" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Naredba nije uspjela" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Promijeni naslov terminala" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Promijeni naslov kartice" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Ponovno uÄitane postavke" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Kopirano u meÄ‘uspremnik" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "OÄišćen meÄ‘uspremnik" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Razvijatelji Ghosttyja" diff --git a/po/hr_HR.UTF-8.po b/po/hr_HR.UTF-8.po deleted file mode 100644 index a73f8fee29a..00000000000 --- a/po/hr_HR.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Croatian translations for com.mitchellh.ghostty package -# Hrvatski prijevod za paket com.mitchellh.ghostty. -# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Filip , 2026. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-10 22:25+0200\n" -"Last-Translator: Filip7 \n" -"Language-Team: Croatian \n" -"Language: hr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Dopusti pristup meÄ‘uspremniku" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Odbij" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Dopusti" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Zapamti izbor za ovu podjelu" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Ponovno uÄitaj postavke za prikaz ovog upita" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Otkaži" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Zatvori" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "GreÅ¡ke u postavkama" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"PronaÄ‘ena je greÅ¡ka (ili viÅ¡e njih) u postavkama. Pregledaj niže navedene " -"greÅ¡ke te ponovno uÄitaj postavke ili zanemari ove greÅ¡ke." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Zanemari" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Ponovno uÄitaj postavke" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Pokrenuta je debug verzija Ghosttyja! Performanse će biti smanjene." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: inspektor terminala" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Pretraži…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Prethodno podudaranje" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Sljedeće podudaranje" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Oh, ne." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Neuspjelo dohvaćanje OpenGL konteksta za renderiranje." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Ovaj terminal je u naÄinu rada samo za Äitanje. I dalje je moguće gledati, " -"odabirati i skrolati kroz sadržaj, no unos neće biti poslan pokrenutoj " -"aplikaciji." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Samo za Äitanje" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopiraj" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Zalijepi" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Obavijesti kada iduća naredba zavrÅ¡i" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "OÄisti" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Resetiraj" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Podijeli" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Promijeni naslov…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Podijeli gore" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Podijeli dolje" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Podijeli lijevo" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Podijeli desno" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Kartica" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nova kartica" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Zatvori karticu" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Prozor" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Novi prozor" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Zatvori prozor" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Postavke" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Otvori postavke" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Ostavi prazno za povratak zadanog naslova." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nova podjela" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Pregledaj otvorene kartice" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Glavni izbornik" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta naredbi" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspektor terminala" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "O Ghosttyju" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "IzaÄ‘i" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "IzvrÅ¡i naredbu…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikacija pokuÅ¡ava pisati u meÄ‘uspremnik. Trenutna vrijednost meÄ‘uspremnika " -"prikazana je niže." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikacija pokuÅ¡ava proÄitati vrijednost meÄ‘uspremnika. Trenutna vrijednost " -"meÄ‘uspremnika je prikazana niže." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Upozorenje: Potencijalno opasno lijepljenje" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Lijepljenje ovog teksta u terminal može biti opasno jer se Äini da neke " -"naredbe mogu biti izvrÅ¡ene." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Zatvori Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Zatvori karticu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Zatvori prozor?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Zatvori podjelu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Sve sesije terminala će biti prekinute." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Sve sesije terminala u ovoj kartici će biti prekinute." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Sve sesije terminala u ovom prozoru će biti prekinute." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Pokrenuti procesi u ovoj podjeli će biti prekinuti." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Naredba je zavrÅ¡ena" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Naredba je uspjela" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Naredba nije uspjela" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Naredba je uspjela" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Naredba nije uspjela" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Promijeni naslov terminala" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Ponovno uÄitane postavke" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Kopirano u meÄ‘uspremnik" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "OÄišćen meÄ‘uspremnik" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Razvijatelji Ghosttyja" diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 00000000000..e7474e2c497 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,355 @@ +# Hungarian translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Balázs Szücs , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-26 21:00+0100\n" +"Last-Translator: Balázs Szücs \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Megnyitás a Ghostty alkalmazásban" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Vágólap-hozzáférés engedélyezése" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Elutasítás" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Engedélyezés" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Választás megjegyzése erre a felosztásra" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Konfiguráció frissítése a kérdés újbóli megjelenítéséhez" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Mégse" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Bezárás" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Konfigurációs hibák" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Egy vagy több konfigurációs hiba található. Kérjük, ellenÅ‘rizze az alábbi " +"hibákat, és frissítse a konfigurációt, vagy hagyja figyelmen kívül ezeket a " +"hibákat." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Figyelmen kívül hagyás" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Konfiguráció frissítése" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ A Ghostty hibakeresÅ‘ verzióját futtatja! A teljesítmény csökkenni fog." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Terminálvizsgáló" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Keresés…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "ElÅ‘zÅ‘ találat" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "KövetkezÅ‘ találat" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Jaj, ne." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Nem sikerült OpenGL-környezetet létrehozni a megjelenítéshez." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Ez a terminál csak olvasható módban van. A tartalmat továbbra is " +"megtekintheti, kijelölheti és görgetheti, de nem küld bemeneti eseményeket a " +"futó alkalmazásnak." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Csak olvasható" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Másolás" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Beillesztés" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Értesítés a következÅ‘ parancs befejezésekor" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Törlés" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Visszaállítás" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Felosztás" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Cím módosítása…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Felosztás felfelé" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Felosztás lefelé" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Felosztás balra" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Felosztás jobbra" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Fül" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Fül címének módosítása…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Új fül" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Fül bezárása" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Ablak" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Új ablak" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Ablak bezárása" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Konfiguráció" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Konfiguráció megnyitása" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Hagyja üresen az alapértelmezett cím visszaállításához." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Rendben" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Új felosztás" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Megnyitott fülek megtekintése" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "FÅ‘menü" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Parancspaletta" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Terminálvizsgáló" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "A Ghostty névjegye" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Kilépés" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Parancs végrehajtása…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Egy alkalmazás megpróbál írni a vágólapra. A vágólap jelenlegi tartalma lent " +"látható." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Egy alkalmazás megpróbál olvasni a vágólapról. A vágólap jelenlegi tartalma " +"lent látható." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Figyelem: potenciálisan veszélyes beillesztés" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Ennek a szövegnek a terminálba való beillesztése veszélyes lehet, mivel " +"néhány parancs végrehajtásra kerülhet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Kilép a Ghostty-ból?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Fül bezárása?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Ablak bezárása?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Felosztás bezárása?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Minden terminál munkamenet lezárul." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Ezen a fülön minden terminál munkamenet lezárul." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Ebben az ablakban minden terminál munkamenet lezárul." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Ebben a felosztásban a jelenleg futó folyamat lezárul." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Parancs befejezÅ‘dött" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Parancs sikeres" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Parancs sikertelen" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Parancs sikeres" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Parancs sikertelen" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Terminál címének módosítása" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Fül címének módosítása" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Konfiguráció frissítve" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Vágólapra másolva" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Vágólap törölve" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty fejlesztÅ‘k" diff --git a/po/hu_HU.UTF-8.po b/po/hu_HU.UTF-8.po deleted file mode 100644 index 6a3c618946a..00000000000 --- a/po/hu_HU.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Hungarian translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Balázs Szücs , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-10 18:32+0200\n" -"Last-Translator: Balázs Szücs \n" -"Language-Team: Hungarian \n" -"Language: hu\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Vágólap-hozzáférés engedélyezése" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Elutasítás" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Engedélyezés" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Választás megjegyzése erre a felosztásra" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Konfiguráció frissítése a kérdés újbóli megjelenítéséhez" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Mégse" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Bezárás" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Konfigurációs hibák" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Egy vagy több konfigurációs hiba található. Kérjük, ellenÅ‘rizze az alábbi " -"hibákat, és frissítse a konfigurációt, vagy hagyja figyelmen kívül ezeket a " -"hibákat." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Figyelmen kívül hagyás" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Konfiguráció frissítése" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ A Ghostty hibakeresÅ‘ verzióját futtatja! A teljesítmény csökkenni fog." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Terminálvizsgáló" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Keresés…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "ElÅ‘zÅ‘ találat" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "KövetkezÅ‘ találat" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Jaj, ne." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Nem sikerült OpenGL-környezetet létrehozni a megjelenítéshez." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Ez a terminál csak olvasható módban van. A tartalmat továbbra is " -"megtekintheti, kijelölheti és görgetheti, de nem küld bemeneti eseményeket a " -"futó alkalmazásnak." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Csak olvasható" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Másolás" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Beillesztés" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Értesítés a következÅ‘ parancs befejezésekor" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Törlés" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Visszaállítás" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Felosztás" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Cím módosítása…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Felosztás felfelé" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Felosztás lefelé" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Felosztás balra" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Felosztás jobbra" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Fül" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Új fül" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Fül bezárása" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Ablak" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Új ablak" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Ablak bezárása" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Konfiguráció" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Konfiguráció megnyitása" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Hagyja üresen az alapértelmezett cím visszaállításához." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Rendben" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Új felosztás" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Megnyitott fülek megtekintése" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "FÅ‘menü" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Parancspaletta" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Terminálvizsgáló" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "A Ghostty névjegye" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Kilépés" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Parancs végrehajtása…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Egy alkalmazás megpróbál írni a vágólapra. A vágólap jelenlegi tartalma lent " -"látható." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Egy alkalmazás megpróbál olvasni a vágólapról. A vágólap jelenlegi tartalma " -"lent látható." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Figyelem: potenciálisan veszélyes beillesztés" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Ennek a szövegnek a terminálba való beillesztése veszélyes lehet, mivel " -"néhány parancs végrehajtásra kerülhet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Kilép a Ghostty-ból?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Fül bezárása?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Ablak bezárása?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Felosztás bezárása?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Minden terminál munkamenet lezárul." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Ezen a fülön minden terminál munkamenet lezárul." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Ebben az ablakban minden terminál munkamenet lezárul." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Ebben a felosztásban a jelenleg futó folyamat lezárul." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Parancs befejezÅ‘dött" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Parancs sikeres" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Parancs sikertelen" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Parancs sikeres" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Parancs sikertelen" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Terminál címének módosítása" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Konfiguráció frissítve" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Vágólapra másolva" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Vágólap törölve" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty fejlesztÅ‘k" diff --git a/po/id.po b/po/id.po new file mode 100644 index 00000000000..e5660440ad7 --- /dev/null +++ b/po/id.po @@ -0,0 +1,354 @@ +# Indonesian translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Satrio Bayu Aji , 2026. +# Mikail Muzakki , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-03-08 20:23+0700\n" +"Last-Translator: Mikail Muzakki \n" +"Language-Team: Indonesian \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Buka di Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Mengesahkan akses papan klip" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Tolak" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Izinkan" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Ingat pilihan untuk belahan ini" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Muat ulang konfigurasi untuk menampilkan pesan ini lagi" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Batal" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Tutup" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Kesalahan konfigurasi" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Ditemukan satu atau lebih kesalahan konfigurasi. Silakan tinjau kesalahan di " +"bawah ini, dan muat ulang konfigurasi anda atau abaikan kesalahan ini." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Abaikan" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Muat ulang konfigurasi" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Anda sedang menjalankan versi debug dari Ghostty! Performa akan menurun." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspektur terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Cari…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Hasil sebelumnya" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Hasil berikutnya" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, tidak." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Tidak dapat memperoleh konteks OpenGL untuk penampilan grafis." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Terminal ini sedang dalam model hanya baca. Anda hanya bisa melihat, memilih, " +"dan menggulir konten, tetapi peristiwa input tidak akan dikirim ke " +"aplikasi berjalan." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Hanya baca" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Salin" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Tempel" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Beri tahu saat perintah berikutnya selesai" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Bersihkan" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Atur ulang" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Belah" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Ubah judul…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Belah atas" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Belah bawah" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Belah kiri" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Belah kanan" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Ubah judul tab…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Tab baru" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Tutup tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Jendela" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Jendela baru" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Tutup jendela" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Konfigurasi" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Buka konfigurasi" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Biarkan kosong untuk mengembalikan judul bawaan." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Belahan baru" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Lihat tab terbuka" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menu utama" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Palet perintah" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspektur terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Tentang Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Keluar" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Eksekusi perintah…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikasi sedang mencoba menulis ke papan klip. Isi papan klip saat ini " +"ditampilkan di bawah ini." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikasi sedang mencoba membaca dari papan klip. Isi papan klip saat ini " +"ditampilkan di bawah ini." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Peringatan: Tempelan berpotensi tidak aman" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Menempelkan teks ini ke terminal mungkin berbahaya karena sepertinya " +"beberapa perintah mungkin dijalankan." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Keluar dari Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Tutup tab?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Tutup jendela?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Tutup belahan?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Semua sesi terminal akan diakhiri." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Semua sesi terminal di tab ini akan diakhiri." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Semua sesi terminal di jendela ini akan diakhiri." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Proses yang sedang berjalan dalam belahan ini akan diakhiri." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Perintah selesai" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Perintah berhasil" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Perintah gagal" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Perintah berhasil" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Perintah gagal" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Ubah judul terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Ubah judul tab" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Memuat ulang konfigurasi" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Disalin ke papan klip" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Papan klip dibersihkan" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Pengembang Ghostty" diff --git a/po/id_ID.UTF-8.po b/po/id_ID.UTF-8.po deleted file mode 100644 index fc573563dab..00000000000 --- a/po/id_ID.UTF-8.po +++ /dev/null @@ -1,351 +0,0 @@ -# Indonesian translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Satrio Bayu Aji , 2025. -# Mikail Muzakki , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-08-01 10:15+0700\n" -"Last-Translator: Mikail Muzakki \n" -"Language-Team: Indonesian \n" -"Language: id\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Mengesahkan akses papan klip" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Tolak" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Izinkan" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Ingat pilihan untuk belahan ini" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Muat ulang konfigurasi untuk menampilkan pesan ini lagi" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Batal" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Tutup" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Kesalahan konfigurasi" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Ditemukan satu atau lebih kesalahan konfigurasi. Silakan tinjau kesalahan di " -"bawah ini, dan muat ulang konfigurasi anda atau abaikan kesalahan ini." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Abaikan" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Muat ulang konfigurasi" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Anda sedang menjalankan versi debug dari Ghostty! Performa akan menurun." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspektur terminal" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Salin" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Tempel" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Bersihkan" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Atur ulang" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Belah" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Ubah judul…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Belah atas" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Belah bawah" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Belah kiri" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Belah kanan" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Tab" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Tab baru" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Tutup tab" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Jendela" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Jendela baru" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Tutup jendela" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Konfigurasi" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Buka konfigurasi" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Biarkan kosong untuk mengembalikan judul bawaan." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Belahan baru" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Lihat tab terbuka" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menu utama" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Palet perintah" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspektur terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Tentang Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Keluar" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Eksekusi perintah…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikasi sedang mencoba menulis ke papan klip. Isi papan klip saat ini " -"ditampilkan di bawah ini." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikasi sedang mencoba membaca dari papan klip. Isi papan klip saat ini " -"ditampilkan di bawah ini." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Peringatan: Tempelan berpotensi tidak aman" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Menempelkan teks ini ke terminal mungkin berbahaya karena sepertinya " -"beberapa perintah mungkin dijalankan." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Keluar dari Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Tutup tab?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Tutup jendela?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Tutup belahan?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Semua sesi terminal akan diakhiri." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Semua sesi terminal di tab ini akan diakhiri." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Semua sesi terminal di jendela ini akan diakhiri." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Proses yang sedang berjalan dalam belahan ini akan diakhiri." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Perintah berhasil" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Perintah gagal" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Ubah judul terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Memuat ulang konfigurasi" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Disalin ke papan klip" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Papan klip dibersihkan" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Pengembang Ghostty" diff --git a/po/it.po b/po/it.po new file mode 100644 index 00000000000..ea203138237 --- /dev/null +++ b/po/it.po @@ -0,0 +1,357 @@ +# Italian translations for com.mitchellh.ghostty package. +# Traduzioni italiane per il pacchetto com.mitchellh.ghostty. +# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Giacomo Bettini , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2025-09-06 19:40+0200\n" +"Last-Translator: Giacomo Bettini \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Apri in Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Consenti accesso agli Appunti" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Non consentire" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Consenti" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Ricorda scelta per questa divisione" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "" +"Ricarica la configurazione per visualizzare nuovamente questo messaggio" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Annulla" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Chiudi" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Errori di configurazione" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Sono stati trovati uno o più errori di configurazione. Controlla gli errori " +"seguenti, poi ricarica la tua configurazione o ignora quegli errori." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignora" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Ricarica configurazione" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Stai usando una build di debug di Ghostty! Le prestazioni saranno ridotte." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Ispettore del terminale" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Cerca…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Corrispondenza precedente" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Corrispondenza successiva" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh no!" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Impossibile ottenere un contesto OpenGL per il rendering." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Questo terminale è in modalità di sola lettura. Puoi ancora vedere, " +"selezionare e scorrere il contenuto, ma non verrà inviato alcun evento " +"di input all'applicazione in esecuzione." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Sola lettura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copia" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Incolla" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notifica al termine del prossimo comando" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Pulisci" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reimposta" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Divisione" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Cambia titolo…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Dividi in alto" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Dividi in basso" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Dividi a sinistra" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Dividi a destra" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Scheda" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Cambia titolo scheda…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nuova scheda" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Chiudi scheda" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nuova finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Chiudi finestra" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configurazione" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Apri configurazione" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Lasciare vuoto per ripristinare il titolo predefinito." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nuova divisione" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Vedi schede aperte" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menù principale" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Riquadro comandi" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Ispettore del terminale" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Informazioni su Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Chiudi" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Esegui un comando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Un'applicazione sta cercando di scrivere negli Appunti. Il contenuto attuale " +"degli Appunti è mostrato di seguito." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Un'applicazione sta cercando di leggere dagli Appunti. Il contenuto attuale " +"degli Appunti è mostrato di seguito." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Attenzione: Incolla potenzialmente pericoloso" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Incollare questo testo nel terminale potrebbe essere pericoloso poiché " +"sembra contenere comandi che potrebbero venire eseguiti." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Chiudere Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Chiudere la scheda?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Chiudere la finestra?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Chiudere la divisione?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Tutte le sessioni del terminale saranno terminate." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Tutte le sessioni del terminale in questa scheda saranno terminate." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Tutte le sessioni del terminale in questa finestra saranno terminate." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "" +"Il processo attualmente in esecuzione in questa divisione sarà terminato." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comando terminato" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comando riuscito" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comando fallito" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comando riuscito" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comando fallito" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Cambia il titolo del terminale" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Cambia il titolo della scheda" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configurazione ricaricata" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiato negli Appunti" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Appunti svuotati" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Sviluppatori di Ghostty" diff --git a/po/it_IT.UTF-8.po b/po/it_IT.UTF-8.po deleted file mode 100644 index 87fc0c756bb..00000000000 --- a/po/it_IT.UTF-8.po +++ /dev/null @@ -1,354 +0,0 @@ -# Italian translations for com.mitchellh.ghostty package -# Traduzioni italiane per il pacchetto com.mitchellh.ghostty. -# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Giacomo Bettini , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-09-06 19:40+0200\n" -"Last-Translator: Giacomo Bettini \n" -"Language-Team: Italian \n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Consenti accesso agli Appunti" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Non consentire" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Consenti" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Ricorda scelta per questa divisione" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "" -"Ricarica la configurazione per visualizzare nuovamente questo messaggio" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Annulla" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Chiudi" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Errori di configurazione" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Sono stati trovati uno o più errori di configurazione. Controlla gli errori " -"seguenti, poi ricarica la tua configurazione o ignora quegli errori." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignora" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Ricarica configurazione" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Stai usando una build di debug di Ghostty! Le prestazioni saranno ridotte." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Ispettore del terminale" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copia" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Incolla" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Pulisci" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Reimposta" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Divisione" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Cambia titolo…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Dividi in alto" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Dividi in basso" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Dividi a sinistra" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Dividi a destra" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Scheda" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nuova scheda" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Chiudi scheda" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nuova finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Chiudi finestra" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configurazione" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Apri configurazione" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Lasciare vuoto per ripristinare il titolo predefinito." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nuova divisione" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Vedi schede aperte" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menù principale" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Riquadro comandi" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Ispettore del terminale" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Informazioni su Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Chiudi" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Esegui un comando…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Un'applicazione sta cercando di scrivere negli Appunti. Il contenuto attuale " -"degli Appunti è mostrato di seguito." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Un'applicazione sta cercando di leggere dagli Appunti. Il contenuto attuale " -"degli Appunti è mostrato di seguito." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Attenzione: Incolla potenzialmente pericoloso" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Incollare questo testo nel terminale potrebbe essere pericoloso poiché " -"sembra contenere comandi che potrebbero venire eseguiti." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Chiudere Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Chiudere la scheda?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Chiudere la finestra?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Chiudere la divisione?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Tutte le sessioni del terminale saranno terminate." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Tutte le sessioni del terminale in questa scheda saranno terminate." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Tutte le sessioni del terminale in questa finestra saranno terminate." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "" -"Il processo attualmente in esecuzione in questa divisione sarà terminato." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Comando riuscito" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Comando fallito" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Cambia il titolo del terminale" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Configurazione ricaricata" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copiato negli Appunti" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Appunti svuotati" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Sviluppatori di Ghostty" diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 00000000000..299eb81bc0a --- /dev/null +++ b/po/ja.po @@ -0,0 +1,354 @@ +# Japanese translations for com.mitchellh.ghostty package +# com.mitchellh.ghostty パッケージã«å¯¾ã™ã‚‹å’Œè¨³. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Lon Sagisawa , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-11 12:02+0900\n" +"Last-Translator: Takayuki Nagatomi \n" +"Language-Team: Japanese\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ghosttyã§é–‹ã" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "クリップボードã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’承èª" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "æ‹’å¦" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "許å¯" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "ã“ã®åˆ†å‰²ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«å¯¾ã—ã¦è¨­å®šã‚’記憶ã™ã‚‹" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "ã“ã®ãƒ—ロンプトをå†ã³è¡¨ç¤ºã™ã‚‹ã«ã¯è¨­å®šã‚’å†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "キャンセル" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "é–‰ã˜ã‚‹" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "設定ファイルã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"設定ファイルã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™ã€‚以下ã®ã‚¨ãƒ©ãƒ¼ã‚’確èªã—ã€è¨­å®šãƒ•ァイルã®å†èª­ã¿è¾¼" +"ã¿ã‚’ã™ã‚‹ã‹ã€ç„¡è¦–ã—ã¦ãã ã•ã„。" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "無視" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "設定ファイルã®å†èª­ã¿è¾¼ã¿" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ghostty ã®ãƒ‡ãƒãƒƒã‚°ãƒ“ルドを実行ã—ã¦ã„ã¾ã™! パフォーマンスãŒä½Žä¸‹ã—ã¦ã„ã¾ã™ã€‚" + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: 端末インスペクター" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "検索…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "å‰ã®ä¸€è‡´" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "次ã®ä¸€è‡´" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "ãŠã£ã¨ã€‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "レンダリング用ã®OpenGLコンテキストをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"ã“ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã¯èª­ã¿å–り専用モードã§ã™ã€‚コンテンツã®è¡¨ç¤ºã€é¸æŠžã€ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã¯" +"å¯èƒ½ã§ã™ãŒã€å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã¯å®Ÿè¡Œä¸­ã®ã‚¢ãƒ—リケーションã«é€ä¿¡ã•れã¾ã›ã‚“。" + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "読ã¿å–り専用" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "コピー" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "貼り付ã‘" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "次ã®ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œçµ‚了時ã«é€šçŸ¥ã™ã‚‹" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "クリア" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "リセット" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "分割" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "タイトルを変更…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "上ã«åˆ†å‰²" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "下ã«åˆ†å‰²" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "å·¦ã«åˆ†å‰²" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "å³ã«åˆ†å‰²" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "タブ" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "タブã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’変更…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "æ–°ã—ã„タブ" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "タブを閉ã˜ã‚‹" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "ウィンドウ" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "æ–°ã—ã„ウィンドウ" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "ウィンドウを閉ã˜ã‚‹" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "設定" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "設定ファイルを開ã" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "空白ã«ã—ãŸå ´åˆã€ãƒ‡ãƒ•ォルトã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’使用ã—ã¾ã™ã€‚" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "æ–°ã—ã„分割" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "é–‹ã„ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¿ãƒ–を表示" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "メインメニュー" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "コマンドパレット" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "端末インスペクター" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Ghostty ã«ã¤ã„ã¦" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "終了" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "コマンドを実行…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"アプリケーションãŒã‚¯ãƒªãƒƒãƒ—ãƒœãƒ¼ãƒ‰ã«æ›¸ã込もã†ã¨ã—ã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®ã‚¯ãƒªãƒƒãƒ—ボー" +"ドã®å†…容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"アプリケーションãŒã‚¯ãƒªãƒƒãƒ—ボードを読ã¿å–ã‚ã†ã¨ã—ã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®ã‚¯ãƒªãƒƒãƒ—ボー" +"ドã®å†…容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "警告: å±é™ºãªå¯èƒ½æ€§ã®ã‚る貼り付ã‘" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã«ã¯å®Ÿè¡Œå¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã«è²¼ã‚Šä»˜ã‘ã‚‹ã®ã¯" +"å±é™ºãªå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Ghostty を終了ã—ã¾ã™ã‹?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "タブを閉ã˜ã¾ã™ã‹?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "ウィンドウを閉ã˜ã¾ã™ã‹?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "分割ウィンドウを閉ã˜ã¾ã™ã‹?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "タブ内ã®ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "ウィンドウ内ã®ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "分割ウィンドウ内ã®ã™ã¹ã¦ã®ãƒ—ロセスãŒçµ‚了ã—ã¾ã™ã€‚" + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "コマンド実行終了" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "コマンド実行æˆåŠŸ" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "コマンド実行失敗" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "コマンド実行æˆåŠŸ" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "コマンド実行失敗" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "ターミナルã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’変更ã™ã‚‹" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "タブã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’変更ã™ã‚‹" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "設定をå†èª­ã¿è¾¼ã¿ã—ã¾ã—ãŸ" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "クリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸ" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "クリップボードを空ã«ã—ã¾ã—ãŸ" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty 開発者" diff --git a/po/ja_JP.UTF-8.po b/po/ja_JP.UTF-8.po deleted file mode 100644 index 24670dfb928..00000000000 --- a/po/ja_JP.UTF-8.po +++ /dev/null @@ -1,354 +0,0 @@ -# Japanese translations for com.mitchellh.ghostty package -# com.mitchellh.ghostty パッケージã«å¯¾ã™ã‚‹å’Œè¨³. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Lon Sagisawa , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-11 12:02+0900\n" -"Last-Translator: Takayuki Nagatomi \n" -"Language-Team: Japanese\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "クリップボードã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’承èª" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "æ‹’å¦" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "許å¯" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "ã“ã®åˆ†å‰²ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«å¯¾ã—ã¦è¨­å®šã‚’記憶ã™ã‚‹" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "ã“ã®ãƒ—ロンプトをå†ã³è¡¨ç¤ºã™ã‚‹ã«ã¯è¨­å®šã‚’å†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "キャンセル" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "é–‰ã˜ã‚‹" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "設定ファイルã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"設定ファイルã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™ã€‚以下ã®ã‚¨ãƒ©ãƒ¼ã‚’確èªã—ã€è¨­å®šãƒ•ァイルã®å†èª­ã¿è¾¼" -"ã¿ã‚’ã™ã‚‹ã‹ã€ç„¡è¦–ã—ã¦ãã ã•ã„。" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "無視" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "設定ファイルã®å†èª­ã¿è¾¼ã¿" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ghostty ã®ãƒ‡ãƒãƒƒã‚°ãƒ“ルドを実行ã—ã¦ã„ã¾ã™! パフォーマンスãŒä½Žä¸‹ã—ã¦ã„ã¾ã™ã€‚" - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: 端末インスペクター" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "検索…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "å‰ã®ä¸€è‡´" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "次ã®ä¸€è‡´" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "ãŠã£ã¨ã€‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "レンダリング用ã®OpenGLコンテキストをå–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"ã“ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã¯èª­ã¿å–り専用モードã§ã™ã€‚コンテンツã®è¡¨ç¤ºã€é¸æŠžã€ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã¯" -"å¯èƒ½ã§ã™ãŒã€å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã¯å®Ÿè¡Œä¸­ã®ã‚¢ãƒ—リケーションã«é€ä¿¡ã•れã¾ã›ã‚“。" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "読ã¿å–り専用" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "コピー" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "貼り付ã‘" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "次ã®ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œçµ‚了時ã«é€šçŸ¥ã™ã‚‹" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "クリア" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "リセット" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "分割" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "タイトルを変更…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "上ã«åˆ†å‰²" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "下ã«åˆ†å‰²" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "å·¦ã«åˆ†å‰²" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "å³ã«åˆ†å‰²" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "タブ" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "æ–°ã—ã„タブ" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "タブを閉ã˜ã‚‹" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "ウィンドウ" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "æ–°ã—ã„ウィンドウ" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "ウィンドウを閉ã˜ã‚‹" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "設定" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "設定ファイルを開ã" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "空白ã«ã—ãŸå ´åˆã€ãƒ‡ãƒ•ォルトã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’使用ã—ã¾ã™ã€‚" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "æ–°ã—ã„分割" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "é–‹ã„ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¿ãƒ–を表示" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "メインメニュー" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "コマンドパレット" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "端末インスペクター" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Ghostty ã«ã¤ã„ã¦" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "終了" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "コマンドを実行…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"アプリケーションãŒã‚¯ãƒªãƒƒãƒ—ãƒœãƒ¼ãƒ‰ã«æ›¸ã込もã†ã¨ã—ã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®ã‚¯ãƒªãƒƒãƒ—ボー" -"ドã®å†…容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"アプリケーションãŒã‚¯ãƒªãƒƒãƒ—ボードを読ã¿å–ã‚ã†ã¨ã—ã¦ã„ã¾ã™ã€‚ç¾åœ¨ã®ã‚¯ãƒªãƒƒãƒ—ボー" -"ドã®å†…容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "警告: å±é™ºãªå¯èƒ½æ€§ã®ã‚る貼り付ã‘" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã«ã¯å®Ÿè¡Œå¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã«è²¼ã‚Šä»˜ã‘ã‚‹ã®ã¯" -"å±é™ºãªå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Ghostty を終了ã—ã¾ã™ã‹?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "タブを閉ã˜ã¾ã™ã‹?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "ウィンドウを閉ã˜ã¾ã™ã‹?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "分割ウィンドウを閉ã˜ã¾ã™ã‹?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "タブ内ã®ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "ウィンドウ内ã®ã™ã¹ã¦ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ã¾ã™ã€‚" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "分割ウィンドウ内ã®ã™ã¹ã¦ã®ãƒ—ロセスãŒçµ‚了ã—ã¾ã™ã€‚" - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "コマンド実行終了" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "コマンド実行æˆåŠŸ" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "コマンド実行失敗" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "コマンド実行æˆåŠŸ" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "コマンド実行失敗" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "ターミナルã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’変更ã™ã‚‹" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "設定をå†èª­ã¿è¾¼ã¿ã—ã¾ã—ãŸ" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "クリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸ" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "クリップボードを空ã«ã—ã¾ã—ãŸ" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty 開発者" diff --git a/po/kk.po b/po/kk.po new file mode 100644 index 00000000000..91be4a4b3eb --- /dev/null +++ b/po/kk.po @@ -0,0 +1,354 @@ +# Kazakh translation for Ghostty. +# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Baurzhan Muftakhidinov , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-03-04 21:16+0500\n" +"Last-Translator: Baurzhan Muftakhidinov \n" +"Language-Team: Kazakh \n" +"Language: kk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ghostty ішінде ашу" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "ÐлмаÑу буферіне қол жеткізуді Ñ€Ò±Ò›Ñат ету" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Тыйым Ñалу" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "РұқÑат ету" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "ОÑÑ‹ бөлу үшін таңдауды еÑте Ñақтау" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Бұл Ñұрауды қайта көрÑету үшін конфигурациÑны қайта жүктеңіз" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Ð‘Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Жабу" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ò›Ð°Ñ‚ÐµÐ»ÐµÑ€Ñ–" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Бір немеÑе бірнеше ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ò›Ð°Ñ‚ÐµÑÑ– табылды. Төмендегі қателерді қарап " +"шығып, конфигурациÑны қайта жүктеңіз немеÑе бұл қателерді елемеңіз." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Елемеу" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "КонфигурациÑны қайта жүктеу" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ð¡Ñ–Ð· Ghostty жөндеу құраÑтырылымын Ñ–Ñке қоÑып тұрÑыз! Өнімділік төмен болуы " +"мүмкін." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Терминал инÑпекторы" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Табу…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Ðлдыңғы ÑәйкеÑтік" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "КелеÑÑ– ÑәйкеÑтік" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "О, жоқ." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Рендеринг үшін OpenGL контекÑтін алу мүмкін емеÑ." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Бұл терминал тек оқу режимінде. Сіз әлі де мазмұнды көре, таңдай және жылжыта " +"алаÑыз, бірақ Ñ–Ñке қоÑылған қолданбаға ешқандай енгізу оқиғалары жіберілмейді." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Тек оқу" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Көшіріп алу" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "КіріÑтіру" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "КелеÑÑ– команда аÑқталғанда хабарлау" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Тазарту" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "ТаÑтау" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Бөлу" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Тақырыпты өзгерту…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Жоғарыға бөлу" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Төменге бөлу" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Сол жаққа бөлу" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Оң жаққа бөлу" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Бет" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Бет атауын өзгерту…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Жаңа бет" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Бетті жабу" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Терезе" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Жаңа терезе" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Терезені жабу" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "КонфигурациÑ" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "КонфигурациÑны ашу" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "БаÑтапқы атауды қалпына келтіру үшін Ð±Ð¾Ñ Ò›Ð°Ð»Ð´Ñ‹Ñ€Ñ‹Ò£Ñ‹Ð·." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "ОК" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Жаңа бөлу" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Ðшық беттерді көру" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Ð‘Ð°Ñ Ð¼Ó™Ð·Ñ–Ñ€" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Командалар палитраÑÑ‹" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Терминал инÑпекторы" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Ghostty туралы" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Шығу" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Команданы орындау…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current clipboard " +"contents are shown below." +msgstr "" +"Қолданба алмаÑу буферіне жазуға әрекеттенуде. Ðғымдағы алмаÑу буферінің " +"мазмұны төменде көрÑетілген." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Қолданба алмаÑу буферінен оқуға әрекеттенуде. Ðғымдағы алмаÑу буферінің " +"мазмұны төменде көрÑетілген." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "ЕÑкерту: ҚауіпÑіз ÐµÐ¼ÐµÑ Ð±Ð¾Ð»Ð° алатын кіріÑтіру" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Бұл мәтінді терминалға кіріÑтіру қауіпті болуы мүмкін, Ñебебі кейбір " +"командалар орындалуы мүмкін ÑиÑқты." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Ghostty-ден шығу керек пе?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Бетті жабу керек пе?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Терезені жабу керек пе?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Бөлуді жабу керек пе?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Барлық терминал ÑеÑÑиÑлары тоқтатылады." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "ОÑÑ‹ беттегі барлық терминал ÑеÑÑиÑлары тоқтатылады." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "ОÑÑ‹ терезедегі барлық терминал ÑеÑÑиÑлары тоқтатылады." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ОÑÑ‹ бөлудегі ағымдағы орындалып жатқан процеÑÑ Ñ‚Ð¾Ò›Ñ‚Ð°Ñ‚Ñ‹Ð»Ð°Ð´Ñ‹." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Команда аÑқталды" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Команда Ñәтті орындалды" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Команда ÑәтÑіз аÑқталды" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Команда Ñәтті орындалды" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Команда ÑәтÑіз аÑқталды" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Терминал атауын өзгерту" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Бет атауын өзгерту" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ò›Ð°Ð¹Ñ‚Ð° жүктелді" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "ÐлмаÑу буферіне көшірілді" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "ÐлмаÑу буфері тазартылды" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty әзірлеушілері" diff --git a/po/ko_KR.UTF-8.po b/po/ko_KR.UTF-8.po deleted file mode 100644 index 478ab9c2018..00000000000 --- a/po/ko_KR.UTF-8.po +++ /dev/null @@ -1,352 +0,0 @@ -# Korean translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Ruben Engelbrecht , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-11 12:50+0900\n" -"Last-Translator: GyuYong Jung \n" -"Language-Team: Korean \n" -"Language: ko\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "í´ë¦½ë³´ë“œ 액세스 권한 부여" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "ê±°ë¶€" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "허용" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "ì´ ë¶„í• ì— ëŒ€í•œ ì„ íƒ ê¸°ì–µí•˜ê¸°" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "ì´ ì°½ì„ ë‹¤ì‹œ 보려면 ì„¤ì •ì„ ë‹¤ì‹œ 불러오세요" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "취소" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "닫기" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "설정 오류" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"ì„¤ì •ì— í•˜ë‚˜ ì´ìƒì˜ 문제가 발견ë˜ì—ˆìŠµë‹ˆë‹¤. 아래 오류를 확ì¸í•œ 후 ì„¤ì •ì„ ë‹¤ì‹œ " -"불러오거나 무시하세요." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "무시" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "설정 ê°’ 다시 불러오기" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Ghostty 디버그 빌드로 실행 중입니다! ì„±ëŠ¥ì´ ì €í•˜ë©ë‹ˆë‹¤." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: í„°ë¯¸ë„ ì¸ìŠ¤íŽ™í„°" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "찾기…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "ì´ì „ ê²°ê³¼" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "ë‹¤ìŒ ê²°ê³¼" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "ì´ëŸ°!" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "ë Œë”ë§ì„ 위한 OpenGL 컨í…스트를 가져올 수 없습니다." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"ì´ í„°ë¯¸ë„ì€ ì½ê¸° ì „ìš© 모드입니다. 콘í…츠를 ë³´ê³  ì„ íƒí•˜ê³  스í¬ë¡¤í•  수는 있지" -"ë§Œ 실행 ì¤‘ì¸ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ìž…ë ¥ ì´ë²¤íŠ¸ê°€ 전송ë˜ì§€ 않습니다." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "ì½ê¸° ì „ìš©" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "복사" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "붙여넣기" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "ë‹¤ìŒ ëª…ë ¹ 완료 시 알림" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "지우기" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "초기화" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "나누기" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "제목 변경…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "위로 ì°½ 나누기" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "아래로 ì°½ 나누기" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "왼쪽으로 ì°½ 나누기" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "오른쪽으로 ì°½ 나누기" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "탭" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "새 탭" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "탭 닫기" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "ì°½" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "새 ì°½" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "ì°½ 닫기" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "설정" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "설정 열기" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "ì œëª©ëž€ì„ ë¹„ì›Œ ë‘ë©´ 기본값으로 ë³µì›ë©ë‹ˆë‹¤." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "확ì¸" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "새 ë¶„í• " - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "열린 탭 보기" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "ë©”ì¸ ë©”ë‰´" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "명령 팔레트" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "í„°ë¯¸ë„ ì¸ìŠ¤íŽ™í„°" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Ghostty ì •ë³´" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "종료" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "ëª…ë ¹ì„ ì‹¤í–‰í•˜ì„¸ìš”â€¦" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"ì‘ìš© í”„ë¡œê·¸ëž¨ì´ í´ë¦½ë³´ë“œì— 쓰기를 시ë„하고 있습니다. 현재 í´ë¦½ë³´ë“œ ë‚´ìš©ì€ ì•„" -"래와 같습니다." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"ì‘ìš© í”„ë¡œê·¸ëž¨ì´ í´ë¦½ë³´ë“œì—서 ì½ê¸°ë¥¼ 시ë„하고 있습니다. 현재 í´ë¦½ë³´ë“œ ë‚´ìš©ì€ " -"아래와 같습니다." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "경고: 잠재ì ìœ¼ë¡œ 안전하지 ì•Šì€ ë¶™ì—¬ë„£ê¸°" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"ì´ í…스트를 터미ë„ì— ë¶™ì—¬ë„£ìœ¼ë©´ ì¼ë¶€ ëª…ë ¹ì´ ì‹¤í–‰ë  ìˆ˜ 있어 위험할 수 있습니" -"다." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Ghostty를 종료하시겠습니까?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "íƒ­ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "ì°½ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "ë¶„í• ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "모든 í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "ì´ íƒ­ì˜ ëª¨ë“  í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "ì´ ì°½ì˜ ëª¨ë“  í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "ì´ ë¶„í• ì—서 현재 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ê°€ 종료ë©ë‹ˆë‹¤." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "명령 완료" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "명령 성공" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "명령 실패" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "명령 성공" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "명령 실패" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "í„°ë¯¸ë„ ì œëª© 변경" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "ì„¤ì •ê°’ì„ ë‹¤ì‹œ 불러왔습니다" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "í´ë¦½ë³´ë“œì— 복사ë¨" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "í´ë¦½ë³´ë“œ 지워ì§" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty 개발ìžë“¤" diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 00000000000..f2559aa011d --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,352 @@ +# Korean translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Ruben Engelbrecht , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-11 12:50+0900\n" +"Last-Translator: GyuYong Jung \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ghosttyì—서 열기" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "í´ë¦½ë³´ë“œ 액세스 권한 부여" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "ê±°ë¶€" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "허용" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "ì´ ë¶„í• ì— ëŒ€í•œ ì„ íƒ ê¸°ì–µí•˜ê¸°" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "ì´ ì°½ì„ ë‹¤ì‹œ 보려면 ì„¤ì •ì„ ë‹¤ì‹œ 불러오세요" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "취소" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "닫기" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "설정 오류" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"ì„¤ì •ì— í•˜ë‚˜ ì´ìƒì˜ 문제가 발견ë˜ì—ˆìŠµë‹ˆë‹¤. 아래 오류를 확ì¸í•œ 후 ì„¤ì •ì„ ë‹¤ì‹œ " +"불러오거나 무시하세요." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "무시" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "설정 ê°’ 다시 불러오기" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Ghostty 디버그 빌드로 실행 중입니다! ì„±ëŠ¥ì´ ì €í•˜ë©ë‹ˆë‹¤." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: í„°ë¯¸ë„ ì¸ìŠ¤íŽ™í„°" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "찾기…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "ì´ì „ ê²°ê³¼" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "ë‹¤ìŒ ê²°ê³¼" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "ì´ëŸ°!" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "ë Œë”ë§ì„ 위한 OpenGL 컨í…스트를 가져올 수 없습니다." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"ì´ í„°ë¯¸ë„ì€ ì½ê¸° ì „ìš© 모드입니다. 콘í…츠를 ë³´ê³  ì„ íƒí•˜ê³  스í¬ë¡¤í•  수는 있지" +"ë§Œ 실행 ì¤‘ì¸ ì• í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œ ìž…ë ¥ ì´ë²¤íŠ¸ê°€ 전송ë˜ì§€ 않습니다." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "ì½ê¸° ì „ìš©" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "복사" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "붙여넣기" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "ë‹¤ìŒ ëª…ë ¹ 완료 시 알림" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "지우기" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "초기화" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "나누기" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "제목 변경…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "위로 ì°½ 나누기" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "아래로 ì°½ 나누기" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "왼쪽으로 ì°½ 나누기" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "오른쪽으로 ì°½ 나누기" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "탭" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "탭 제목 변경…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "새 탭" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "탭 닫기" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "ì°½" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "새 ì°½" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "ì°½ 닫기" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "설정" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "설정 열기" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "ì œëª©ëž€ì„ ë¹„ì›Œ ë‘ë©´ 기본값으로 ë³µì›ë©ë‹ˆë‹¤." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "확ì¸" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "새 ë¶„í• " + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "열린 탭 보기" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "ë©”ì¸ ë©”ë‰´" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "명령 팔레트" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "í„°ë¯¸ë„ ì¸ìŠ¤íŽ™í„°" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Ghostty ì •ë³´" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "종료" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "ëª…ë ¹ì„ ì‹¤í–‰í•˜ì„¸ìš”â€¦" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"ì‘ìš© í”„ë¡œê·¸ëž¨ì´ í´ë¦½ë³´ë“œì— 쓰기를 시ë„하고 있습니다. 현재 í´ë¦½ë³´ë“œ ë‚´ìš©ì€ ì•„" +"래와 같습니다." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"ì‘ìš© í”„ë¡œê·¸ëž¨ì´ í´ë¦½ë³´ë“œì—서 ì½ê¸°ë¥¼ 시ë„하고 있습니다. 현재 í´ë¦½ë³´ë“œ ë‚´ìš©ì€ " +"아래와 같습니다." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "경고: 잠재ì ìœ¼ë¡œ 안전하지 ì•Šì€ ë¶™ì—¬ë„£ê¸°" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"ì´ í…스트를 터미ë„ì— ë¶™ì—¬ë„£ìœ¼ë©´ ì¼ë¶€ ëª…ë ¹ì´ ì‹¤í–‰ë  ìˆ˜ 있어 위험할 수 있습니" +"다." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Ghostty를 종료하시겠습니까?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "íƒ­ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "ì°½ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "ë¶„í• ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "모든 í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "ì´ íƒ­ì˜ ëª¨ë“  í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "ì´ ì°½ì˜ ëª¨ë“  í„°ë¯¸ë„ ì„¸ì…˜ì´ ì¢…ë£Œë©ë‹ˆë‹¤." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ì´ ë¶„í• ì—서 현재 실행 ì¤‘ì¸ í”„ë¡œì„¸ìŠ¤ê°€ 종료ë©ë‹ˆë‹¤." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "명령 완료" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "명령 성공" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "명령 실패" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "명령 성공" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "명령 실패" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "í„°ë¯¸ë„ ì œëª© 변경" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "탭 제목 변경" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "ì„¤ì •ê°’ì„ ë‹¤ì‹œ 불러왔습니다" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "í´ë¦½ë³´ë“œì— 복사ë¨" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "í´ë¦½ë³´ë“œ 지워ì§" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty 개발ìžë“¤" diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 00000000000..ba4995ddc43 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,353 @@ +# Language LT translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Tadas Lotuzas , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-20 12:13+0100\n" +"Last-Translator: Tadas Lotuzas \n" +"Language-Team: Language LT\n" +"Language: LT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Atidaryti su Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Leisti prieigÄ… prie iÅ¡karpinÄ—s" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Drausti" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Leisti" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Prisiminti pasirinkimÄ… Å¡iam padalijimui" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "IÅ¡ naujo įkelkite konfigÅ«racijÄ…, kad vÄ—l bÅ«tų rodoma Å¡i užuomina" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "AtÅ¡aukti" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Uždaryti" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "KonfigÅ«racijos klaidos" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Rasta viena ar daugiau konfigÅ«racijos klaidų. PeržiÅ«rÄ—kite žemiau esanÄias " +"klaidas ir arba iÅ¡ naujo įkelkite konfigÅ«racijÄ…, arba ignoruokite Å¡ias " +"klaidas." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignoruoti" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "IÅ¡ naujo įkelti konfigÅ«racijÄ…" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Naudojate Ghostty derinimo versijÄ…! NaÅ¡umas bus sumažintas." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: terminalo inspektorius" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Rasti…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Ankstesnis atitikmuo" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Kitas atitikmuo" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oi, ne." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Nepavyko gauti OpenGL konteksto vaizdavimui." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Å is terminalas yra tik skaitymui. Vis tiek galite peržiÅ«rÄ—ti, pasirinkti ir " +"slinkti per turinį, taÄiau jokie įvesties įvykiai nebus siunÄiami " +"veikianÄiai programai." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Tik skaitymui" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopijuoti" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Ä®klijuoti" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "PraneÅ¡ti apie sekanÄios komandos užbaigimÄ…" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "IÅ¡valyti" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Atstatyti" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Padalinti" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Keisti pavadinimą…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Padalinti aukÅ¡tyn" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Padalinti žemyn" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Padalinti kairÄ—n" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Padalinti deÅ¡inÄ—n" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "KortelÄ—" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Keisti kortelÄ—s pavadinimą…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nauja kortelÄ—" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Uždaryti kortelÄ™" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Langas" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Naujas langas" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Uždaryti langÄ…" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "KonfigÅ«racija" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Atidaryti konfigÅ«racijÄ…" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Palikite tuÅ¡ÄiÄ…, kad atkurtumÄ—te numatytÄ…jį pavadinimÄ…." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Gerai" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Naujas padalijimas" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "PeržiÅ«rÄ—ti atidarytas korteles" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Pagrindinis meniu" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Komandų paletÄ—" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Terminalo inspektorius" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Apie Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "IÅ¡eiti" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Vykdyti komandą…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Programa bando raÅ¡yti į iÅ¡karpinÄ™. Žemiau rodomas dabartinis iÅ¡karpinÄ—s " +"turinys." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Programa bando skaityti iÅ¡ iÅ¡karpinÄ—s. Žemiau rodomas dabartinis iÅ¡karpinÄ—s " +"turinys." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Ä®spÄ—jimas: galimai nesaugus įklijavimas" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Å io teksto įklijavimas į terminalÄ… gali bÅ«ti pavojingas, nes panaÅ¡u, kad " +"gali bÅ«ti vykdomos tam tikros komandos." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "IÅ¡eiti iÅ¡ Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Uždaryti kortelÄ™?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Uždaryti langÄ…?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Uždaryti padalijimÄ…?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Visos terminalo sesijos bus nutrauktos." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Visos terminalo sesijos Å¡ioje kortelÄ—je bus nutrauktos." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Visos terminalo sesijos Å¡iame lange bus nutrauktos." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Å iuo metu vykdomas procesas Å¡iame padalijime bus nutrauktas." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Komanda užbaigta" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Komanda sÄ—kminga" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Komanda nepavyko" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Komanda sÄ—kminga" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Komanda nepavyko" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Keisti terminalo pavadinimÄ…" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Keisti kortelÄ—s pavadinimÄ…" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "KonfigÅ«racija įkelta iÅ¡ naujo" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Nukopijuota į iÅ¡karpinÄ™" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "IÅ¡karpinÄ— iÅ¡valyta" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty kÅ«rÄ—jai" diff --git a/po/lt_LT.UTF-8.po b/po/lt_LT.UTF-8.po deleted file mode 100644 index ed0ec86e6ac..00000000000 --- a/po/lt_LT.UTF-8.po +++ /dev/null @@ -1,353 +0,0 @@ -# Language LT translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 "Mitchell Hashimoto, Ghostty contributors" -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Tadas Lotuzas , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-10 08:14+0100\n" -"Last-Translator: Tadas Lotuzas \n" -"Language-Team: Language LT\n" -"Language: LT\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Leisti prieigÄ… prie iÅ¡karpinÄ—s" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Drausti" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Leisti" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Prisiminti pasirinkimÄ… Å¡iam padalijimui" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "IÅ¡ naujo įkelkite konfigÅ«racijÄ…, kad vÄ—l bÅ«tų rodoma Å¡i užuomina" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "AtÅ¡aukti" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Uždaryti" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "KonfigÅ«racijos klaidos" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Rasta viena ar daugiau konfigÅ«racijos klaidų. PeržiÅ«rÄ—kite žemiau esanÄias " -"klaidas ir arba iÅ¡ naujo įkelkite konfigÅ«racijÄ…, arba ignoruokite Å¡ias " -"klaidas." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignoruoti" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "IÅ¡ naujo įkelti konfigÅ«racijÄ…" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Naudojate Ghostty derinimo versijÄ…! NaÅ¡umas bus sumažintas." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: terminalo inspektorius" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Rasti…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Ankstesnis atitikmuo" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Kitas atitikmuo" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Oi, ne." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Nepavyko gauti OpenGL konteksto vaizdavimui." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Å is terminalas yra tik skaitymui. Vis tiek galite peržiÅ«rÄ—ti, pasirinkti ir " -"slinkti per turinį, taÄiau jokie įvesties įvykiai nebus siunÄiami " -"veikianÄiai programai." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Tik skaitymui" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopijuoti" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Ä®klijuoti" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "PraneÅ¡ti apie sekanÄios komandos užbaigimÄ…" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "IÅ¡valyti" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Atstatyti" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Padalinti" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Keisti pavadinimą…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Padalinti aukÅ¡tyn" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Padalinti žemyn" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Padalinti kairÄ—n" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Padalinti deÅ¡inÄ—n" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "KortelÄ—" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nauja kortelÄ—" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Uždaryti kortelÄ™" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Langas" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Naujas langas" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Uždaryti langÄ…" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "KonfigÅ«racija" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Atidaryti konfigÅ«racijÄ…" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Palikite tuÅ¡ÄiÄ…, kad atkurtumÄ—te numatytÄ…jį pavadinimÄ…." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Gerai" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Naujas padalijimas" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "PeržiÅ«rÄ—ti atidarytas korteles" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Pagrindinis meniu" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Komandų paletÄ—" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Terminalo inspektorius" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Apie Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "IÅ¡eiti" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Vykdyti komandą…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Programa bando raÅ¡yti į iÅ¡karpinÄ™. Žemiau rodomas dabartinis iÅ¡karpinÄ—s " -"turinys." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Programa bando skaityti iÅ¡ iÅ¡karpinÄ—s. Žemiau rodomas dabartinis iÅ¡karpinÄ—s " -"turinys." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Ä®spÄ—jimas: galimai nesaugus įklijavimas" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Å io teksto įklijavimas į terminalÄ… gali bÅ«ti pavojingas, nes panaÅ¡u, kad " -"gali bÅ«ti vykdomos tam tikros komandos." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "IÅ¡eiti iÅ¡ Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Uždaryti kortelÄ™?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Uždaryti langÄ…?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Uždaryti padalijimÄ…?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Visos terminalo sesijos bus nutrauktos." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Visos terminalo sesijos Å¡ioje kortelÄ—je bus nutrauktos." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Visos terminalo sesijos Å¡iame lange bus nutrauktos." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Å iuo metu vykdomas procesas Å¡iame padalijime bus nutrauktas." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Komanda užbaigta" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Komanda sÄ—kminga" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Komanda nepavyko" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Komanda sÄ—kminga" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Komanda nepavyko" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Keisti terminalo pavadinimÄ…" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "KonfigÅ«racija įkelta iÅ¡ naujo" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Nukopijuota į iÅ¡karpinÄ™" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "IÅ¡karpinÄ— iÅ¡valyta" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty kÅ«rÄ—jai" diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 00000000000..d8d6313fcbe --- /dev/null +++ b/po/lv.po @@ -0,0 +1,352 @@ +# Latvian translations for com.mitchellh.ghostty package. +# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Ä’riks Remess , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-18 11:34+0200\n" +"PO-Revision-Date: 2026-02-09 03:24+0200\n" +"Last-Translator: Ä’riks Remess \n" +"Language-Team: Latvian\n" +"Language: LV\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n!=0 ? 1 : 2);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "AtvÄ“rt ar Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Atļaut piekļuvi starpliktuvei" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "NoraidÄ«t" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Atļaut" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "AtcerÄ“ties izvÄ“li Å¡im sadalÄ«jumam" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "PÄrlÄdÄ“jiet konfigurÄciju, lai Å¡o uzvedni rÄdÄ«tu atkal" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Atcelt" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "AizvÄ“rt" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "KonfigurÄcijas kļūdas" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Tika atrasta viena vai vairÄkas konfigurÄcijas kļūdas. LÅ«dzu, pÄrskatiet " +"zemÄk redzamÄs kļūdas un pÄrlÄdÄ“jiet konfigurÄciju vai ignorÄ“jiet tÄs." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "IgnorÄ“t" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "PÄrlÄdÄ“t konfigurÄciju" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ JÅ«s izmantojat Ghostty atkļūdoÅ¡anas bÅ«vÄ“jumu! VeiktspÄ“ja bÅ«s zemÄka." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: TerminÄļa inspektors" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "MeklÄ“t…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "IepriekšējÄ atbilstÄ«ba" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "NÄkamÄ atbilstÄ«ba" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ak, nÄ“." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "NeizdevÄs iegÅ«t OpenGL kontekstu attÄ“loÅ¡anai." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Å is terminÄlis ir tikai lasīšanas režīmÄ. JÅ«s joprojÄm varat skatÄ«t, atlasÄ«t " +"un ritinÄt saturu, taÄu ievade netiks sÅ«tÄ«ta palaistajai lietotnei." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Tikai lasīšanai" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "KopÄ“t" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "IelÄ«mÄ“t" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Paziņot, kad nÄkamÄ komanda bÅ«s izpildÄ«ta" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "NotÄ«rÄ«t" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "AtiestatÄ«t" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "SadalÄ«t" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "MainÄ«t virsrakstu…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "SadalÄ«t uz augÅ¡u" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "SadalÄ«t uz leju" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "SadalÄ«t pa kreisi" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "SadalÄ«t pa labi" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Cilne" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "MainÄ«t cilnes virsrakstu…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Jauna cilne" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "AizvÄ“rt cilni" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Logs" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Jauns logs" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "AizvÄ“rt logu" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "KonfigurÄcija" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "AtvÄ“rt konfigurÄciju" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "AtstÄj tukÅ¡u, lai atjaunotu noklusÄ“to virsrakstu." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Labi" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Jauns sadalÄ«jums" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "SkatÄ«t atvÄ“rtÄs cilnes" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "GalvenÄ izvÄ“lne" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Komandu palete" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "TerminÄļa inspektors" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Par Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Iziet" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "IzpildÄ«t komandu…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Lietotne mēģina rakstÄ«t starpliktuvÄ“. ZemÄk ir redzams paÅ¡reizÄ“jais " +"starpliktuves saturs." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Lietotne mēģina lasÄ«t no starpliktuves. ZemÄk ir redzams paÅ¡reizÄ“jais " +"starpliktuves saturs." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "BrÄ«dinÄjums: potenciÄli nedroÅ¡a ielÄ«mēšana" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Å Ä« teksta ielÄ«mēšana terminÄlÄ« var bÅ«t bÄ«stama, jo izskatÄs, ka var tikt " +"izpildÄ«tas komandas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Iziet no Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "AizvÄ“rt cilni?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "AizvÄ“rt logu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "AizvÄ“rt sadalÄ«jumu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Visas terminÄļa sesijas tiks pÄrtrauktas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Visas terminÄļa sesijas Å¡ajÄ cilnÄ“ tiks pÄrtrauktas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Visas terminÄļa sesijas Å¡ajÄ logÄ tiks pÄrtrauktas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "PaÅ¡laik palaistais process Å¡ajÄ sadalÄ«jumÄ tiks pÄrtraukts." + +#: src/apprt/gtk/class/surface.zig:1104 +msgid "Command Finished" +msgstr "Komanda izpildÄ«ta" + +#: src/apprt/gtk/class/surface.zig:1105 +msgid "Command Succeeded" +msgstr "Komanda izdevÄs" + +#: src/apprt/gtk/class/surface.zig:1106 +msgid "Command Failed" +msgstr "Komanda neizdevÄs" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Komanda izdevÄs" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Komanda neizdevÄs" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "MainÄ«t terminÄļa virsrakstu" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "MainÄ«t cilnes virsrakstu" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "KonfigurÄcija pÄrlÄdÄ“ta" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "NokopÄ“ts starpliktuvÄ“" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Starpliktuve notÄ«rÄ«ta" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty izstrÄdÄtÄji" diff --git a/po/lv_LV.UTF-8.po b/po/lv_LV.UTF-8.po deleted file mode 100644 index 96d340175ae..00000000000 --- a/po/lv_LV.UTF-8.po +++ /dev/null @@ -1,352 +0,0 @@ -# Latvian translations for com.mitchellh.ghostty package. -# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Ä’riks Remess , 2026. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 03:24+0200\n" -"Last-Translator: Ä’riks Remess \n" -"Language-Team: Latvian\n" -"Language: LV\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n!=0 ? 1 : 2);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Atļaut piekļuvi starpliktuvei" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "NoraidÄ«t" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Atļaut" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "AtcerÄ“ties izvÄ“li Å¡im sadalÄ«jumam" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "PÄrlÄdÄ“jiet konfigurÄciju, lai Å¡o uzvedni rÄdÄ«tu atkal" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Atcelt" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "AizvÄ“rt" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "KonfigurÄcijas kļūdas" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Tika atrasta viena vai vairÄkas konfigurÄcijas kļūdas. LÅ«dzu, pÄrskatiet " -"zemÄk redzamÄs kļūdas un pÄrlÄdÄ“jiet konfigurÄciju vai ignorÄ“jiet tÄs." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "IgnorÄ“t" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "PÄrlÄdÄ“t konfigurÄciju" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ JÅ«s izmantojat Ghostty atkļūdoÅ¡anas bÅ«vÄ“jumu! VeiktspÄ“ja bÅ«s zemÄka." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: TerminÄļa inspektors" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "MeklÄ“t…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "IepriekšējÄ atbilstÄ«ba" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "NÄkamÄ atbilstÄ«ba" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Ak, nÄ“." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "NeizdevÄs iegÅ«t OpenGL kontekstu attÄ“loÅ¡anai." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Å is terminÄlis ir tikai lasīšanas režīmÄ. JÅ«s joprojÄm varat skatÄ«t, atlasÄ«t " -"un ritinÄt saturu, taÄu ievade netiks sÅ«tÄ«ta palaistajai lietotnei." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Tikai lasīšanai" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "KopÄ“t" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "IelÄ«mÄ“t" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Paziņot, kad nÄkamÄ komanda bÅ«s izpildÄ«ta" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "NotÄ«rÄ«t" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "AtiestatÄ«t" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "SadalÄ«t" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "MainÄ«t virsrakstu…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "SadalÄ«t uz augÅ¡u" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "SadalÄ«t uz leju" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "SadalÄ«t pa kreisi" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "SadalÄ«t pa labi" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Cilne" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Jauna cilne" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "AizvÄ“rt cilni" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Logs" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Jauns logs" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "AizvÄ“rt logu" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "KonfigurÄcija" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "AtvÄ“rt konfigurÄciju" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "AtstÄj tukÅ¡u, lai atjaunotu noklusÄ“to virsrakstu." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Labi" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Jauns sadalÄ«jums" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "SkatÄ«t atvÄ“rtÄs cilnes" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "GalvenÄ izvÄ“lne" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Komandu palete" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "TerminÄļa inspektors" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Par Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Iziet" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "IzpildÄ«t komandu…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Lietotne mēģina rakstÄ«t starpliktuvÄ“. ZemÄk ir redzams paÅ¡reizÄ“jais " -"starpliktuves saturs." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Lietotne mēģina lasÄ«t no starpliktuves. ZemÄk ir redzams paÅ¡reizÄ“jais " -"starpliktuves saturs." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "BrÄ«dinÄjums: potenciÄli nedroÅ¡a ielÄ«mēšana" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Å Ä« teksta ielÄ«mēšana terminÄlÄ« var bÅ«t bÄ«stama, jo izskatÄs, ka var tikt " -"izpildÄ«tas komandas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Iziet no Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "AizvÄ“rt cilni?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "AizvÄ“rt logu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "AizvÄ“rt sadalÄ«jumu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Visas terminÄļa sesijas tiks pÄrtrauktas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Visas terminÄļa sesijas Å¡ajÄ cilnÄ“ tiks pÄrtrauktas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Visas terminÄļa sesijas Å¡ajÄ logÄ tiks pÄrtrauktas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "PaÅ¡laik palaistais process Å¡ajÄ sadalÄ«jumÄ tiks pÄrtraukts." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Komanda izpildÄ«ta" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Komanda izdevÄs" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Komanda neizdevÄs" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Komanda izdevÄs" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Komanda neizdevÄs" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "MainÄ«t terminÄļa virsrakstu" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "KonfigurÄcija pÄrlÄdÄ“ta" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "NokopÄ“ts starpliktuvÄ“" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Starpliktuve notÄ«rÄ«ta" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty izstrÄdÄtÄji" diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 00000000000..0307fff95f1 --- /dev/null +++ b/po/mk.po @@ -0,0 +1,355 @@ +# Macedonian translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Andrej Daskalov , 2025. +# Marija Gjorgjieva Gjondeva , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-12 17:00+0100\n" +"Last-Translator: Andrej Daskalov \n" +"Language-Team: Macedonian\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Отвори во Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Ðвторизирај приÑтап до привремена меморија" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Одбиј" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Дозволи" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Запомни го изборот за оваа поделба" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Одново вчитај конфигурација за да Ñе повторно прикаже пораката" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Откажи" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Затвори" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Грешки во конфигурацијата" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Пронајдени Ñе една или повеќе грешки во конфигурацијата. Прегледајте ги " +"грешките подолу и повторно вчитајте ја конфигурацијата или игнорирајте ги " +"овие грешки." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Игнорирај" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Одново вчитај конфигурација" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ð˜Ð·Ð²Ñ€ÑˆÑƒÐ²Ð°Ñ‚Ðµ дебаг верзија на Ghostty! ПерформанÑите ќе бидат намалени." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: ИнÑпектор на терминал" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Пронајди…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Претходно Ñовпаѓање" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Следно Ñовпаѓање" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "УпÑ." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Ðе може да Ñе добие OpenGL контекÑÑ‚ за рендерирање." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Овој терминал е во режим за читање. Сè уште можете да гледате, избирате и да " +"Ñе движите низ Ñодржината, но влезните наÑтани нема да бидат иÑпратени до " +"апликацијата." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Само читање" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Копирај" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Вметни" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "ИзвеÑти по завршување на Ñледната команда" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "ИÑчиÑти" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "РеÑетирај" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Подели" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Промени наÑлов…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Подели нагоре" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Подели надолу" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Подели налево" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Подели надеÑно" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Јазиче" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Промени наÑлов на јазиче…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Ðово јазиче" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Затвори јазиче" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Прозор" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Ðов прозор" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Затвори прозор" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Конфигурација" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Отвори конфигурација" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "ОÑтавете празно за враќање на ÑтандарÑниот наÑлов." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Во ред" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Ðова поделба" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Прегледај отворени јазичиња" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Главно мени" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Командна палета" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "ИнÑпектор на терминал" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "За Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Излез" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Изврши команда…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Ðпликација Ñе обидува да запише во привремената меморија. Содржината е " +"прикажана подолу." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Ðпликација Ñе обидува да чита од привремената меморија. Содржината е " +"прикажана подолу." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Предупредување: Потенцијално небезбедно вметнување" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Вметнувањето на овој текÑÑ‚ во терминалот може да биде опаÑно, бидејќи " +"изгледа како да ќе Ñе извршат одредени команди." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Излези од Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Затвори јазиче?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Затвори прозор?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Затвори поделба?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Сите ÑеÑии на терминал ќе бидат прекинати." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Сите ÑеÑии во ова јазиче ќе бидат прекинати." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Сите ÑеÑии во овој прозорец ќе бидат прекинати." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ПроцеÑот кој моментално Ñе извршува во оваа поделба ќе биде прекинат." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Командата заврши" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Командата уÑпеа" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Командата не уÑпеа" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Командата уÑпеа" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Командата не уÑпеа" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Промени наÑлов на терминал" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Промени наÑлов на јазиче" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Конфигурацијата е одново вчитана" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Копирано во привремена меморија" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "ИÑчиÑтена привремена меморија" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Развивачи на Ghostty" diff --git a/po/mk_MK.UTF-8.po b/po/mk_MK.UTF-8.po deleted file mode 100644 index 539283271df..00000000000 --- a/po/mk_MK.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Macedonian translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Andrej Daskalov , 2025. -# Marija Gjorgjieva Gjondeva , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-12 17:00+0100\n" -"Last-Translator: Andrej Daskalov \n" -"Language-Team: Macedonian\n" -"Language: mk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Ðвторизирај приÑтап до привремена меморија" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Одбиј" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Дозволи" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Запомни го изборот за оваа поделба" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Одново вчитај конфигурација за да Ñе повторно прикаже пораката" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Откажи" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Затвори" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Грешки во конфигурацијата" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Пронајдени Ñе една или повеќе грешки во конфигурацијата. Прегледајте ги " -"грешките подолу и повторно вчитајте ја конфигурацијата или игнорирајте ги " -"овие грешки." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Игнорирај" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Одново вчитај конфигурација" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ð˜Ð·Ð²Ñ€ÑˆÑƒÐ²Ð°Ñ‚Ðµ дебаг верзија на Ghostty! ПерформанÑите ќе бидат намалени." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: ИнÑпектор на терминал" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Пронајди…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Претходно Ñовпаѓање" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Следно Ñовпаѓање" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "УпÑ." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Ðе може да Ñе добие OpenGL контекÑÑ‚ за рендерирање." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Овој терминал е во режим за читање. Сè уште можете да гледате, избирате и да " -"Ñе движите низ Ñодржината, но влезните наÑтани нема да бидат иÑпратени до " -"апликацијата." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Само читање" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Копирај" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Вметни" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "ИзвеÑти по завршување на Ñледната команда" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "ИÑчиÑти" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "РеÑетирај" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Подели" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Промени наÑлов…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Подели нагоре" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Подели надолу" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Подели налево" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Подели надеÑно" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Јазиче" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Ðово јазиче" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Затвори јазиче" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Прозор" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Ðов прозор" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Затвори прозор" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Конфигурација" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Отвори конфигурација" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "ОÑтавете празно за враќање на ÑтандарÑниот наÑлов." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Во ред" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Ðова поделба" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Прегледај отворени јазичиња" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Главно мени" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Командна палета" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "ИнÑпектор на терминал" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "За Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Излез" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Изврши команда…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Ðпликација Ñе обидува да запише во привремената меморија. Содржината е " -"прикажана подолу." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Ðпликација Ñе обидува да чита од привремената меморија. Содржината е " -"прикажана подолу." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Предупредување: Потенцијално небезбедно вметнување" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Вметнувањето на овој текÑÑ‚ во терминалот може да биде опаÑно, бидејќи " -"изгледа како да ќе Ñе извршат одредени команди." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Излези од Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Затвори јазиче?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Затвори прозор?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Затвори поделба?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Сите ÑеÑии на терминал ќе бидат прекинати." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Сите ÑеÑии во ова јазиче ќе бидат прекинати." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Сите ÑеÑии во овој прозорец ќе бидат прекинати." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "ПроцеÑот кој моментално Ñе извршува во оваа поделба ќе биде прекинат." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Командата заврши" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Командата уÑпеа" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Командата не уÑпеа" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Командата уÑпеа" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Командата не уÑпеа" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Промени наÑлов на терминал" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Конфигурацијата е одново вчитана" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Копирано во привремена меморија" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "ИÑчиÑтена привремена меморија" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Развивачи на Ghostty" diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 00000000000..8a81c3e59f5 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,356 @@ +# Norwegian Bokmal translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Hanna Rose , 2025. +# Uzair Aftab , 2025. +# Christoffer Tønnessen , 2025. +# cryptocode , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-12 15:50+0000\n" +"Last-Translator: Hanna Rose \n" +"Language-Team: Norwegian Bokmal \n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ã…pne i Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Gi tilgang til utklippstavlen" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "AvslÃ¥" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Tillat" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Husk valget for dette delte vinduet?" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Last inn konfigurasjonen pÃ¥ nytt for Ã¥ vise denne meldingen igjen" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Avbryt" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Lukk" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Konfigurasjonsfeil" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Én eller flere konfigurasjonsfeil ble funnet. Vennligst gjennomgÃ¥ feilene " +"under, og enten last konfigurasjonen din pÃ¥ nytt eller ignorer disse feilene." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorer" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Last konfigurasjon pÃ¥ nytt" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Du kjører et debug-bygg av Ghostty. Debug-bygg har redusert ytelse." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Terminalinspektør" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Finn…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Forrige treff" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Neste treff" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ã…, nei." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Kan ikke hente en OpenGL-kontekst for rendering." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Denne terminalen er i skrivebeskyttet modus. Du kan fortsatt se, markere og " +"bla gjennom innholdet, men ingen inndatahendelser vil bli sendt til den " +"kjørende applikasjonen." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Skrivebeskyttet" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopier" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Lim inn" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Varsle nÃ¥r neste kommandoen fullføres" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Fjern" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Nullstill" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Del vindu" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Endre tittel…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Del oppover" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Del nedover" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Del til venstre" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Del til høyre" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Fane" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Endre fanetittel…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Ny fane" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Lukk fane" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Vindu" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nytt vindu" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Lukk vindu" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Konfigurasjon" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Ã…pne konfigurasjon" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Blank verdi gjenoppretter standardtittelen." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Del opp vindu" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Se Ã¥pne faner" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Hovedmeny" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Kommandopalett" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Terminalinspektør" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Om Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Avslutt" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Kjør en kommando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"En applikasjon forsøker Ã¥ skrive til utklippstavlen. Gjeldende " +"utklippstavleinnhold er vist nedenfor." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"En applikasjon forsøker Ã¥ lese fra utklippstavlen. Gjeldende " +"utklippstavleinnhold er vist nedenfor." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Adarsel: Lim inn kan være utrygt" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Det ser ut som at kommandoer vil bli kjørt hvis du limer inn dette, vurder " +"om du mener det er trygt." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Avslutt Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Lukk fane?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Lukk vindu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Lukk delt vindu?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Alle terminaløkter vil bli avsluttet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Alle terminaløkter i denne fanen vil bli avsluttet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Alle terminaløkter i dette vinduet vil bli avsluttet." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Den kjørende prosessen for denne splitten vil bli avsluttet." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Kommandoen fullført" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Kommandoen lyktes" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Kommandoen mislyktes" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Kommando lyktes" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Kommando mislyktes" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Endre terminaltittel" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Endre fanetittel" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Konfigurasjonen ble lastet pÃ¥ nytt" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Kopiert til utklippstavlen" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Utklippstavle tømt" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty-utviklere" diff --git a/po/nb_NO.UTF-8.po b/po/nb_NO.UTF-8.po deleted file mode 100644 index 68d470ceb1a..00000000000 --- a/po/nb_NO.UTF-8.po +++ /dev/null @@ -1,356 +0,0 @@ -# Norwegian Bokmal translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Hanna Rose , 2025. -# Uzair Aftab , 2025. -# Christoffer Tønnessen , 2025. -# cryptocode , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-12 15:50+0000\n" -"Last-Translator: Hanna Rose \n" -"Language-Team: Norwegian Bokmal \n" -"Language: nb\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Gi tilgang til utklippstavlen" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "AvslÃ¥" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Tillat" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Husk valget for dette delte vinduet?" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Last inn konfigurasjonen pÃ¥ nytt for Ã¥ vise denne meldingen igjen" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Avbryt" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Lukk" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Konfigurasjonsfeil" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Én eller flere konfigurasjonsfeil ble funnet. Vennligst gjennomgÃ¥ feilene " -"under, og enten last konfigurasjonen din pÃ¥ nytt eller ignorer disse feilene." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorer" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Last konfigurasjon pÃ¥ nytt" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Du kjører et debug-bygg av Ghostty. Debug-bygg har redusert ytelse." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Terminalinspektør" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Finn…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Forrige treff" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Neste treff" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Ã…, nei." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Kan ikke hente en OpenGL-kontekst for rendering." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Denne terminalen er i skrivebeskyttet modus. Du kan fortsatt se, markere og " -"bla gjennom innholdet, men ingen inndatahendelser vil bli sendt til den " -"kjørende applikasjonen." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Skrivebeskyttet" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopier" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Lim inn" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Varsle nÃ¥r neste kommandoen fullføres" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Fjern" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Nullstill" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Del vindu" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Endre tittel…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Del oppover" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Del nedover" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Del til venstre" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Del til høyre" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Fane" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Ny fane" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Lukk fane" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Vindu" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nytt vindu" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Lukk vindu" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Konfigurasjon" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Ã…pne konfigurasjon" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Blank verdi gjenoppretter standardtittelen." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Del opp vindu" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Se Ã¥pne faner" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Hovedmeny" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Kommandopalett" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Terminalinspektør" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Om Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Avslutt" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Kjør en kommando…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"En applikasjon forsøker Ã¥ skrive til utklippstavlen. Gjeldende " -"utklippstavleinnhold er vist nedenfor." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"En applikasjon forsøker Ã¥ lese fra utklippstavlen. Gjeldende " -"utklippstavleinnhold er vist nedenfor." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Adarsel: Lim inn kan være utrygt" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Det ser ut som at kommandoer vil bli kjørt hvis du limer inn dette, vurder " -"om du mener det er trygt." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Avslutt Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Lukk fane?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Lukk vindu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Lukk delt vindu?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Alle terminaløkter vil bli avsluttet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Alle terminaløkter i denne fanen vil bli avsluttet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Alle terminaløkter i dette vinduet vil bli avsluttet." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Den kjørende prosessen for denne splitten vil bli avsluttet." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Kommandoen fullført" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Kommandoen lyktes" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Kommandoen mislyktes" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Kommando lyktes" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Kommando mislyktes" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Endre terminaltittel" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Konfigurasjonen ble lastet pÃ¥ nytt" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Kopiert til utklippstavlen" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Utklippstavle tømt" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty-utviklere" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 00000000000..1d3e1014c2c --- /dev/null +++ b/po/nl.po @@ -0,0 +1,356 @@ +# Dutch translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Nico Geesink , 2025. +# Merijntje Tak , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 20:59+0100\n" +"Last-Translator: Nico Geesink \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Open in Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Verleen toegang tot klembord" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Weigeren" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Toestaan" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Onthoud keuze voor deze splitsing" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Herlaad de configuratie om deze prompt opnieuw weer te geven" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Annuleren" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Afsluiten" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Configuratiefouten" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Er zijn één of meer configuratiefouten gevonden. Bekijk de onderstaande " +"fouten en herlaad je configuratie of negeer deze fouten." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Negeer" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Herlaad configuratie" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Je draait een debugversie van Ghostty! Prestaties zullen minder zijn dan " +"normaal." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: terminalinspecteur" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Zoeken…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Vorige resultaat" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Volgende resultaat" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Oh, nee." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "OpenGL-context voor rendering aanmaken mislukt." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Deze terminal staat in alleen-lezen modus. Je kunt de inhoud nog steeds " +"bekijken en selecteren, maar er wordt geen invoer naar de applicatie " +"verzonden." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Alleen-lezen" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopiëren" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Plakken" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Meld wanneer het volgende commando is afgerond" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Leegmaken" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Herstellen" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Splitsen" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Wijzig titel…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Splits naar boven" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Splits naar beneden" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Splits naar links" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Splits naar rechts" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Tabblad" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Wijzig tabbladtitel…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nieuw tabblad" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Sluit tabblad" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Venster" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nieuw venster" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Sluit venster" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configuratie" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Open configuratie" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Laat leeg om de standaardtitel te herstellen." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nieuwe splitsing" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Open tabbladen bekijken" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Hoofdmenu" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Opdrachtpalet" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Terminalinspecteur" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Over Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Afsluiten" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Voer een commando uit…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Een applicatie probeert de inhoud van het klembord te wijzigen. De huidige " +"inhoud van het klembord wordt hieronder weergegeven." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Een applicatie probeert de inhoud van het klembord te lezen. De huidige " +"inhoud van het klembord wordt hieronder weergegeven." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Waarschuwing: mogelijk onveilige plakactie" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Het plakken van deze tekst in de terminal is mogelijk gevaarlijk, omdat het " +"lijkt op een commando dat uitgevoerd kan worden." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Wil je Ghostty afsluiten?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Wil je dit tabblad afsluiten?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Wil je dit venster afsluiten?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Wil je deze splitsing afsluiten?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Alle terminalsessies zullen worden beëindigd." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Alle terminalsessies binnen dit tabblad zullen worden beëindigd." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Alle terminalsessies binnen dit venster zullen worden beëindigd." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Alle processen in deze splitsing zullen worden beëindigd." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Commando afgerond" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Commando succesvol afgerond" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Commando onsuccesvol afgerond" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Opdracht geslaagd" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Opdracht mislukt" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Titel van de terminal wijzigen" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Wijzig tabbladtitel" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "De configuratie is herladen" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Gekopieerd naar klembord" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Klembord geleegd" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty-ontwikkelaars" diff --git a/po/nl_NL.UTF-8.po b/po/nl_NL.UTF-8.po deleted file mode 100644 index 9caee41a4f8..00000000000 --- a/po/nl_NL.UTF-8.po +++ /dev/null @@ -1,356 +0,0 @@ -# Dutch translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Nico Geesink , 2025. -# Merijntje Tak , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 20:39+0100\n" -"Last-Translator: Nico Geesink \n" -"Language-Team: Dutch \n" -"Language: nl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Verleen toegang tot klembord" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Weigeren" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Toestaan" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Onthoud keuze voor deze splitsing" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Herlaad de configuratie om deze prompt opnieuw weer te geven" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Annuleren" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Afsluiten" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Configuratiefouten" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Er zijn één of meer configuratiefouten gevonden. Bekijk de onderstaande " -"fouten en herlaad je configuratie of negeer deze fouten." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Negeer" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Herlaad configuratie" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Je draait een debugversie van Ghostty! Prestaties zullen minder zijn dan " -"normaal." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: terminalinspecteur" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Zoeken…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Vorige resultaat" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Volgende resultaat" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Oh, nee." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "OpenGL-context voor rendering aanmaken mislukt." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Deze terminal staat in alleen-lezen modus. Je kunt de inhoud nog steeds " -"bekijken en selecteren, maar er wordt geen invoer naar de applicatie " -"verzonden." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Alleen-lezen" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopiëren" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Plakken" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Meld wanneer het volgende commando is afgerond" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Leegmaken" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Herstellen" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Splitsen" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Wijzig titel…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Splits naar boven" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Splits naar beneden" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Splits naar links" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Splits naar rechts" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Tabblad" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nieuw tabblad" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Sluit tabblad" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Venster" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nieuw venster" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Sluit venster" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configuratie" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Open configuratie" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Laat leeg om de standaardtitel te herstellen." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nieuwe splitsing" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Open tabbladen bekijken" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Hoofdmenu" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Opdrachtpalet" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Terminalinspecteur" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Over Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Afsluiten" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Voer een commando uit…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Een applicatie probeert de inhoud van het klembord te wijzigen. De huidige " -"inhoud van het klembord wordt hieronder weergegeven." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Een applicatie probeert de inhoud van het klembord te lezen. De huidige " -"inhoud van het klembord wordt hieronder weergegeven." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Waarschuwing: mogelijk onveilige plakactie" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Het plakken van deze tekst in de terminal is mogelijk gevaarlijk, omdat het " -"lijkt op een commando dat uitgevoerd kan worden." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Wil je Ghostty afsluiten?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Wil je dit tabblad afsluiten?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Wil je dit venster afsluiten?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Wil je deze splitsing afsluiten?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Alle terminalsessies zullen worden beëindigd." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Alle terminalsessies binnen dit tabblad zullen worden beëindigd." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Alle terminalsessies binnen dit venster zullen worden beëindigd." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Alle processen in deze splitsing zullen worden beëindigd." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Commando afgerond" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Commando succesvol afgerond" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Commando onsuccesvol afgerond" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Opdracht geslaagd" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Opdracht mislukt" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Titel van de terminal wijzigen" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "De configuratie is herladen" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Gekopieerd naar klembord" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Klembord geleegd" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty-ontwikkelaars" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 00000000000..483cb96627c --- /dev/null +++ b/po/pl.po @@ -0,0 +1,356 @@ +# Polish translations for com.mitchellh.ghostty package +# Polskie tÅ‚umaczenia dla pakietu com.mitchellh.ghostty. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Bartosz Sokorski , 2025. +# trag1c , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-11 14:12+0100\n" +"Last-Translator: trag1c \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Otwórz w Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Udziel dostÄ™pu do schowka" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Odmów" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Zezwól" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "ZapamiÄ™taj wybór dla tego podziaÅ‚u" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "PrzeÅ‚aduj konfiguracjÄ™, by ponownie wyÅ›wietlić ten komunikat" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Anuluj" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Zamknij" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Błędy konfiguracji" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Znaleziono jeden lub wiÄ™cej błędów konfiguracji. Sprawdź błędy wylistowane " +"poniżej i przeÅ‚aduj konfiguracjÄ™ lub zignoruj je." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Zignoruj" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "PrzeÅ‚aduj konfiguracjÄ™" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Używasz wersji Ghostty do debugowania! Wydajność bÄ™dzie obniżona." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Inspektor terminala Ghostty" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Znajdź…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Poprzednie dopasowanie" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "NastÄ™pne dopasowanie" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "O nie!" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Nie można uzyskać kontekstu OpenGL do renderowania." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Ten terminal znajduje siÄ™ w trybie tylko do odczytu. Wciąż możesz " +"przeglÄ…dać, zaznaczać i przewijać zawartość, ale wprowadzane dane nie bÄ™dÄ… " +"przesyÅ‚ane do wykonywanej aplikacji." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Tylko do odczytu" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopiuj" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Wklej" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Powiadom o ukoÅ„czeniu nastÄ™pnej komendy" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Wyczyść" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Zresetuj" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "PodziaÅ‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "ZmieÅ„ tytuł…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Podziel w górÄ™" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Podziel w dół" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Podziel w lewo" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Podziel w prawo" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Karta" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "ZmieÅ„ tytuÅ‚ karty…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nowa karta" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Zamknij kartÄ™" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Okno" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nowe okno" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Zamknij okno" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Konfiguracja" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Otwórz konfiguracjÄ™" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Pozostaw puste by przywrócić domyÅ›lny tytuÅ‚." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nowy podziaÅ‚" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Zobacz otwarte karty" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menu główne" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta komend" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspektor terminala" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "O Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Zamknij" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Wykonaj komendę…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikacja próbuje zapisać do schowka. Obecna zawartość schowka pokazana " +"poniżej." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Aplikacja próbuje odczytać zawartość schowka. Zawartość schowka pokazana " +"poniżej." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Uwaga: potencjalnie niebezpieczne wklejenie ze schowka" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Wklejenie tego tekstu do terminala może być niebezpieczne, ponieważ może " +"spowodować wykonanie komend." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Zamknąć Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Zamknąć kartÄ™?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Zamknąć okno?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Zamknąć podziaÅ‚?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Wszystkie sesje terminala zostanÄ… zakoÅ„czone." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Wszystkie sesje terminala w obecnej karcie zostanÄ… zakoÅ„czone." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Wszystkie sesje terminala w obecnym oknie zostanÄ… zakoÅ„czone." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Wszyskie trwajÄ…ce procesy w obecnym podziale zostanÄ… zakoÅ„czone." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Komenda zakoÅ„czona" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Komenda wykonana pomyÅ›lnie" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Komenda nie powiodÅ‚a siÄ™" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Komenda wykonana pomyÅ›lnie" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Komenda nie powiodÅ‚a siÄ™" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "ZmieÅ„ tytuÅ‚ terminala" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "ZmieÅ„ tytuÅ‚ karty" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "PrzeÅ‚adowano konfiguracjÄ™" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Skopiowano do schowka" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Wyczyszczono schowek" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Twórcy Ghostty" diff --git a/po/pl_PL.UTF-8.po b/po/pl_PL.UTF-8.po deleted file mode 100644 index 974fbb25032..00000000000 --- a/po/pl_PL.UTF-8.po +++ /dev/null @@ -1,356 +0,0 @@ -# Polish translations for com.mitchellh.ghostty package -# Polskie tÅ‚umaczenia dla pakietu com.mitchellh.ghostty. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Bartosz Sokorski , 2025. -# trag1c , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-11 14:12+0100\n" -"Last-Translator: trag1c \n" -"Language-Team: Polish \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Udziel dostÄ™pu do schowka" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Odmów" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Zezwól" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "ZapamiÄ™taj wybór dla tego podziaÅ‚u" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "PrzeÅ‚aduj konfiguracjÄ™, by ponownie wyÅ›wietlić ten komunikat" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Anuluj" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Zamknij" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Błędy konfiguracji" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Znaleziono jeden lub wiÄ™cej błędów konfiguracji. Sprawdź błędy wylistowane " -"poniżej i przeÅ‚aduj konfiguracjÄ™ lub zignoruj je." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Zignoruj" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "PrzeÅ‚aduj konfiguracjÄ™" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Używasz wersji Ghostty do debugowania! Wydajność bÄ™dzie obniżona." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Inspektor terminala Ghostty" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Znajdź…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Poprzednie dopasowanie" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "NastÄ™pne dopasowanie" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "O nie!" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Nie można uzyskać kontekstu OpenGL do renderowania." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Ten terminal znajduje siÄ™ w trybie tylko do odczytu. Wciąż możesz " -"przeglÄ…dać, zaznaczać i przewijać zawartość, ale wprowadzane dane nie bÄ™dÄ… " -"przesyÅ‚ane do wykonywanej aplikacji." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Tylko do odczytu" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopiuj" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Wklej" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Powiadom o ukoÅ„czeniu nastÄ™pnej komendy" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Wyczyść" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Zresetuj" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "PodziaÅ‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "ZmieÅ„ tytuł…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Podziel w górÄ™" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Podziel w dół" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Podziel w lewo" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Podziel w prawo" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Karta" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nowa karta" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Zamknij kartÄ™" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Okno" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nowe okno" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Zamknij okno" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Konfiguracja" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Otwórz konfiguracjÄ™" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Pozostaw puste by przywrócić domyÅ›lny tytuÅ‚." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nowy podziaÅ‚" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Zobacz otwarte karty" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menu główne" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta komend" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspektor terminala" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "O Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Zamknij" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Wykonaj komendę…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikacja próbuje zapisać do schowka. Obecna zawartość schowka pokazana " -"poniżej." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Aplikacja próbuje odczytać zawartość schowka. Zawartość schowka pokazana " -"poniżej." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Uwaga: potencjalnie niebezpieczne wklejenie ze schowka" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Wklejenie tego tekstu do terminala może być niebezpieczne, ponieważ może " -"spowodować wykonanie komend." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Zamknąć Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Zamknąć kartÄ™?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Zamknąć okno?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Zamknąć podziaÅ‚?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Wszystkie sesje terminala zostanÄ… zakoÅ„czone." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Wszystkie sesje terminala w obecnej karcie zostanÄ… zakoÅ„czone." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Wszystkie sesje terminala w obecnym oknie zostanÄ… zakoÅ„czone." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Wszyskie trwajÄ…ce procesy w obecnym podziale zostanÄ… zakoÅ„czone." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Komenda zakoÅ„czona" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Komenda wykonana pomyÅ›lnie" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Komenda nie powiodÅ‚a siÄ™" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Komenda wykonana pomyÅ›lnie" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Komenda nie powiodÅ‚a siÄ™" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "ZmieÅ„ tytuÅ‚ terminala" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "PrzeÅ‚adowano konfiguracjÄ™" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Skopiowano do schowka" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Wyczyszczono schowek" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Twórcy Ghostty" diff --git a/po/pt_BR.UTF-8.po b/po/pt_BR.UTF-8.po deleted file mode 100644 index 78306434368..00000000000 --- a/po/pt_BR.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Portuguese translations for com.mitchellh.ghostty package -# Traduções em português brasileiro para o pacote com.mitchellh.ghostty. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Gustavo Peres , 2025. -# Guilherme Tiscoski , 2025. -# Nilton Perim Neto , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-09-15 13:57-0300\n" -"Last-Translator: Nilton Perim Neto \n" -"Language-Team: Brazilian Portuguese \n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Autorizar acesso à área de transferência" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Negar" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Permitir" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Lembrar escolha para esta divisão" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Recarregue a configuração para mostrar este aviso novamente" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Cancelar" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Fechar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Erros de configuração" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Um ou mais erros de configuração encontrados. Por favor revise os erros " -"abaixo, e ou recarregue sua configuração, ou ignore esses erros." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ignorar" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Recarregar configuração" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Você está rodando uma build de debug do Ghostty! O desempenho será afetado." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Inspetor do terminal" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Copiar" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Colar" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Limpar" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Reiniciar" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Dividir" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Mudar título…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Dividir para cima" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Dividir para baixo" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Dividir à esquerda" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Dividir à direita" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Aba" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Nova aba" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Fechar aba" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Janela" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Nova janela" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Fechar janela" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Configurar" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Abrir configuração" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Deixe em branco para restaurar o título padrão." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "OK" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Nova divisão" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Visualizar abas abertas" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Menu Principal" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Paleta de comandos" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Inspetor de terminal" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Sobre o Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Sair" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Executar um comando…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Uma aplicação está tentando escrever na área de transferência. O conteúdo " -"atual da área de transferência está aparecendo abaixo." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Uma aplicação está tentando ler da área de transferência. O conteúdo atual " -"da área de transferência está sendo exibido abaixo." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Aviso: Conteúdo potencialmente inseguro" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Colar esse texto em um terminal pode ser perigoso, pois parece que alguns " -"comandos podem ser executados." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Fechar Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Fechar aba?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Fechar janela?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Fechar divisão?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Todas as sessões de terminal serão finalizadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Todas as sessões de terminal nessa aba serão finalizadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Todas as sessões de terminal nessa janela serão finalizadas." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "O processo atual rodando nessa divisão será finalizado." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Comando executado com sucesso" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Comando falhou" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Mudar título do Terminal" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Configuração recarregada" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Copiado para a área de transferência" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Ãrea de transferência limpa" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Desenvolvedores do Ghostty" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 00000000000..024da72af68 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,358 @@ +# Portuguese translations for com.mitchellh.ghostty package +# Traduções em português brasileiro para o pacote com.mitchellh.ghostty. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Gustavo Peres , 2025. +# Guilherme Tiscoski , 2025. +# Nilton Perim Neto , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-05 10:23+0800\n" +"PO-Revision-Date: 2026-02-18 10:50-0300\n" +"Last-Translator: Guilherme Tiscoski \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Abrir no Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Autorizar acesso à área de transferência" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Negar" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Permitir" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Lembrar escolha para esta divisão" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Recarregue a configuração para mostrar este aviso novamente" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Cancelar" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Fechar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Erros de configuração" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Um ou mais erros de configuração encontrados. Por favor revise os erros " +"abaixo, e ou recarregue sua configuração, ou ignore esses erros." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ignorar" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Recarregar configuração" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Você está rodando uma build de debug do Ghostty! O desempenho será afetado." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Inspetor do terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Buscar…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Resultado anterior" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Próximo resultado" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ah, não." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Não foi possível obter um contexto OpenGL para renderização." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Este terminal está em modo somente leitura. Você ainda pode visualizar, " +"selecionar e rolar o conteúdo, mas nenhum evento de entrada será enviado " +"para a aplicação em execução." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Somente leitura" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Copiar" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Colar" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Notificar ao finalizar o próximo comando" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Limpar" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Reiniciar" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Dividir" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Mudar título…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Dividir para cima" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Dividir para baixo" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Dividir à esquerda" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Dividir à direita" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Aba" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Mudar título da aba…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Nova aba" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Fechar aba" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Janela" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Nova janela" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Fechar janela" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Configurar" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Abrir configuração" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Deixe em branco para restaurar o título padrão." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "OK" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Nova divisão" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Visualizar abas abertas" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Menu Principal" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Paleta de comandos" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Inspetor de terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Sobre o Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Sair" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Executar um comando…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Uma aplicação está tentando escrever na área de transferência. O conteúdo " +"atual da área de transferência está aparecendo abaixo." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Uma aplicação está tentando ler da área de transferência. O conteúdo atual " +"da área de transferência está sendo exibido abaixo." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Aviso: Conteúdo potencialmente inseguro" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Colar esse texto em um terminal pode ser perigoso, pois parece que alguns " +"comandos podem ser executados." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Fechar Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Fechar aba?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Fechar janela?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Fechar divisão?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Todas as sessões de terminal serão finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Todas as sessões de terminal nessa aba serão finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Todas as sessões de terminal nessa janela serão finalizadas." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "O processo atual rodando nessa divisão será finalizado." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Comando finalizado" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Comando bem-sucedido" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Comando falhou" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Comando executado com sucesso" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Comando falhou" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Mudar título do Terminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Mudar título da aba" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Configuração recarregada" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Copiado para a área de transferência" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Ãrea de transferência limpa" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Desenvolvedores do Ghostty" diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 00000000000..d64229eedb6 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,357 @@ +# Russian translations for com.mitchellh.ghostty package +# РуÑÑкие переводы Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° com.mitchellh.ghostty. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# blackzeshi , 2025. +# Ivan Bastrakov , 2025. +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2025-02-18 10:20+0100\n" +"Last-Translator: Ivan Bastrakov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Открыть в Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Разрешить доÑтуп к буферу обмена" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Отклонить" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Разрешить" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Запомнить выбор Ð´Ð»Ñ Ñтого Ñплита" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Перезагрузите конфигурацию, чтобы Ñнова увидеть Ñто Ñообщение" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Отмена" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Закрыть" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Ошибки конфигурации" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Ð’ конфигурации обнаружены перечиÑленные ниже ошибки. При необходимоÑти " +"иÑправьте их, а затем перезагрузите конфигурацию." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Игнорировать" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Перезагрузить конфигурацию" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ð’Ñ‹ запуÑтили отладочную Ñборку Ghostty! Это может влиÑть на " +"производительноÑть." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: инÑпектор терминала" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Ðайти…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Предыдущий результат" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Следующий результат" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ой!" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Ðе удалоÑÑŒ получить доÑтуп к контекÑту OpenGL Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Терминал работает в режиме только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ: его Ñодержимое можно " +"прокручивать и выделÑть, но запущенное приложение не будет получать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ " +"ввода." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Режим только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Копировать" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Ð’Ñтавить" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Сообщить о завершении Ñледующей команды" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "ОчиÑтить" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "СброÑ" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Сплит" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Переименовать…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Сплит вверх" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Сплит вниз" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Сплит влево" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Сплит вправо" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Вкладка" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Переименовать вкладку…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Закрыть вкладку" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Окно" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Ðовое окно" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Закрыть окно" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "КонфигурациÑ" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Открыть конфигурационный файл" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "ОÑтавьте поле пуÑтым, чтобы вернуть название по умолчанию." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "ОК" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Ðовый Ñплит" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "ПроÑмотреть открытые вкладки" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Главное меню" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Палитра команд" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "ИнÑпектор терминала" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "О Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Выход" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Выполнить команду…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Приложение пытаетÑÑ Ð·Ð°Ð¿Ð¸Ñать данные в буфер обмена. Текущее Ñодержимое " +"буфера обмена показано ниже." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Приложение пытаетÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ данные из буфера обмена. Его Ñодержимое " +"показано ниже." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Внимание! Ð’ÑтавлÑемые данные могут нанеÑти вред вашей ÑиÑтеме" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Этот текÑÑ‚ может быть опаÑен: его вÑтавка в терминал приведёт к выполнению " +"команд." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Выйти из Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Закрыть вкладку?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Закрыть окно?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Закрыть Ñплит-режим?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Ð’Ñе ÑеÑÑии терминала будут оÑтановлены." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Ð’Ñе ÑеÑÑии терминала в Ñтой вкладке будут оÑтановлены." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Ð’Ñе ÑеÑÑии терминала в Ñтом окне будут оÑтановлены." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ПроцеÑÑ, работающий в Ñтой Ñплит-облаÑти, будет оÑтановлен." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Команда завершилаÑÑŒ" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Команда выполнена уÑпешно" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Команда завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Команда выполнена уÑпешно" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Команда завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Переименовать терминал" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Переименовать вкладку" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð°" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Скопировано в буфер обмена" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Буфер обмена очищен" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Разработчики Ghostty" diff --git a/po/ru_RU.UTF-8.po b/po/ru_RU.UTF-8.po deleted file mode 100644 index e4e314141ce..00000000000 --- a/po/ru_RU.UTF-8.po +++ /dev/null @@ -1,354 +0,0 @@ -# Russian translations for com.mitchellh.ghostty package -# РуÑÑкие переводы Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° com.mitchellh.ghostty. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# blackzeshi , 2025. -# Ivan Bastrakov , 2025. -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2025-09-03 01:50+0300\n" -"Last-Translator: Ivan Bastrakov \n" -"Language-Team: Russian \n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Разрешить доÑтуп к буферу обмена" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Отклонить" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Разрешить" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Запомнить выбор Ð´Ð»Ñ Ñтого Ñплита" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Перезагрузите конфигурацию, чтобы Ñнова увидеть Ñто Ñообщение" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "Отмена" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Закрыть" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Ошибки конфигурации" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñодержит ошибки. Проверьте их ниже, а затем либо перезагрузите " -"конфигурацию, либо проигнорируйте ошибки." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Игнорировать" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Обновить конфигурацию" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ð’Ñ‹ запуÑтили отладочную Ñборку Ghostty! Это может влиÑть на " -"производительноÑть." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: инÑпектор терминала" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Копировать" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Ð’Ñтавить" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "ОчиÑтить" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "СброÑ" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Сплит" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Изменить заголовок…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Сплит вверх" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Сплит вниз" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Сплит влево" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Сплит вправо" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Вкладка" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "ÐÐ¾Ð²Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Закрыть вкладку" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Окно" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Ðовое окно" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Закрыть окно" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "КонфигурациÑ" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Открыть конфигурационный файл" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "ОÑтавьте пуÑтым, чтобы воÑÑтановить иÑходный заголовок." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "ОК" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Ðовый Ñплит" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "ПроÑмотреть открытые вкладки" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Главное меню" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Палитра команд" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "ИнÑпектор терминала" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "О Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Выход" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Выполнить команду…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Приложение пытаетÑÑ Ð·Ð°Ð¿Ð¸Ñать данные в буфер обмена. Текущее Ñодержимое " -"буфера обмена показано ниже." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Приложение пытаетÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ данные из буфера обмена. Эти данные отображены " -"ниже." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Внимание! Ð’ÑтавлÑемые данные могут нанеÑти вред вашей ÑиÑтеме" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Ð’Ñтавка Ñтого текÑта в терминал может быть опаÑной. Это выглÑдит как " -"команды, которые могут быть иÑполнены." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Закрыть Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Закрыть вкладку?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Закрыть окно?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Закрыть Ñплит-режим?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Ð’Ñе ÑеÑÑии терминала будут оÑтановлены." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Ð’Ñе ÑеÑÑии терминала в Ñтой вкладке будут оÑтановлены." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Ð’Ñе ÑеÑÑии терминала в Ñтом окне будут оÑтановлены." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "ПроцеÑÑ, работающий в Ñтой Ñплит-облаÑти, будет оÑтановлен." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Команда выполнена уÑпешно" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Команда завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Изменить заголовок терминала" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð±Ñ‹Ð»Ð° обновлена" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Скопировано в буфер обмена" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Буфер обмена очищен" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Разработчики Ghostty" diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 00000000000..37af61b7d34 --- /dev/null +++ b/po/tr.po @@ -0,0 +1,356 @@ +# Turkish translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Emir SARI , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-09 22:18+0300\n" +"Last-Translator: Emir SARI \n" +"Language-Team: Turkish\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Ghostty’de Aç" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Pano EriÅŸimine İzin Ver" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Reddet" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "İzin Ver" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Bu bölme için tercihi anımsa" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Bu istemi tekrar göstermek için yapılandırmayı yeniden yükle" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "İptal" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Kapat" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Yapılandırma Hataları" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Bir veya daha fazla yapılandırma hatası bulundu. Lütfen aÅŸağıdaki hataları " +"gözden geçirin ve ardından ya yapılandırmanızı yeniden yükleyin ya da bu " +"hataları yok sayın." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Yok Say" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Yapılandırmayı Yeniden Yükle" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ghostty’nin hata ayıklama amaçlı yapılmış bir sürümünü kullanıyorsunuz! " +"BaÅŸarım normale göre daha düşük olacaktır." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Uçbirim Denetçisi" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Bul…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Önceki EÅŸleÅŸme" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Sonraki EÅŸleÅŸme" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Hayır, olamaz." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Görüntü oluÅŸturma iÅŸlemi için OpenGL baÄŸlamı elde edilemiyor." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Bu uçbirim salt okunur kipte. İçeriÄŸi görüntüleyebilir, seçebilir ve " +"kaydırabilirsiniz; ancak çalışan uygulamaya hiçbir giriÅŸ olayı " +"gönderilmeyecektir." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Salt Okunur" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Kopyala" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Yapıştır" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Sonraki Komut BittiÄŸinde Bildir" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Temizle" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Sıfırla" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Böl" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "BaÅŸlığı DeÄŸiÅŸtir…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Yukarı DoÄŸru Böl" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "AÅŸağı DoÄŸru Böl" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Sola DoÄŸru Böl" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "SaÄŸa DoÄŸru Böl" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Sekme" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Sekme BaÅŸlığını DeÄŸiÅŸtir…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Yeni Sekme" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Sekmeyi Kapat" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Pencere" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Yeni Pencere" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Pencereyi Kapat" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Yapılandırma" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Yapılandırmayı Aç" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Öntanımlı baÅŸlığı geri yüklemek için boÅŸ bırakın." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Tamam" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Yeni Bölme" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Açık Sekmeleri Görüntüle" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Ana Menü" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Komut Paleti" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Uçbirim Denetçisi" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Ghostty Hakkında" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Çık" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Bir komut çalıştır…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Bir uygulama panoya yazmaya çalışıyor. Geçerli pano içeriÄŸi aÅŸağıda " +"gösterilmektedir." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Bir uygulama panodan okumaya çalışıyor. Geçerli pano içeriÄŸi aÅŸağıda " +"gösterilmektedir." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Uyarı: Tehlikeli Olabilecek Yapıştırma" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Bu metni uçbirime yapıştırmak tehlikeli olabilir; çünkü bir komut " +"yürütülebilecekmiÅŸ gibi duruyor." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Ghostty’den Çık?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Sekmeyi Kapat?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Pencereyi Kapat?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Bölmeyi Kapat?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Tüm uçbirim oturumları sonlandırılacaktır." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Bu sekmedeki tüm uçbirim oturumları sonlandırılacaktır." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Bu penceredeki tüm uçbirim oturumları sonlandırılacaktır." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Bu bölmedeki ÅŸu anda çalışan süreç sonlandırılacaktır." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Komut Bitti" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Komut BaÅŸarılı" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Komut BaÅŸarısız" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Komut baÅŸarılı oldu" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Komut baÅŸarısız oldu" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Uçbirim BaÅŸlığını DeÄŸiÅŸtir" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Sekme BaÅŸlığını DeÄŸiÅŸtir" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Yapılandırma yeniden yüklendi" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Panoya kopyalandı" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Pano temizlendi" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty GeliÅŸtiricileri" diff --git a/po/tr_TR.UTF-8.po b/po/tr_TR.UTF-8.po deleted file mode 100644 index 322d15d5aa3..00000000000 --- a/po/tr_TR.UTF-8.po +++ /dev/null @@ -1,356 +0,0 @@ -# Turkish translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Emir SARI , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 22:18+0300\n" -"Last-Translator: Emir SARI \n" -"Language-Team: Turkish\n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Pano EriÅŸimine İzin Ver" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Reddet" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "İzin Ver" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "Bu bölme için tercihi anımsa" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Bu istemi tekrar göstermek için yapılandırmayı yeniden yükle" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "İptal" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Kapat" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Yapılandırma Hataları" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"Bir veya daha fazla yapılandırma hatası bulundu. Lütfen aÅŸağıdaki hataları " -"gözden geçirin ve ardından ya yapılandırmanızı yeniden yükleyin ya da bu " -"hataları yok sayın." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Yok Say" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Yapılandırmayı Yeniden Yükle" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ghostty’nin hata ayıklama amaçlı yapılmış bir sürümünü kullanıyorsunuz! " -"BaÅŸarım normale göre daha düşük olacaktır." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: Uçbirim Denetçisi" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Bul…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Önceki EÅŸleÅŸme" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "Sonraki EÅŸleÅŸme" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Hayır, olamaz." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Görüntü oluÅŸturma iÅŸlemi için OpenGL baÄŸlamı elde edilemiyor." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Bu uçbirim salt okunur kipte. İçeriÄŸi görüntüleyebilir, seçebilir ve " -"kaydırabilirsiniz; ancak çalışan uygulamaya hiçbir giriÅŸ olayı " -"gönderilmeyecektir." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Salt Okunur" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Kopyala" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Yapıştır" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "Sonraki Komut BittiÄŸinde Bildir" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "Temizle" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Sıfırla" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Böl" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "BaÅŸlığı DeÄŸiÅŸtir…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Yukarı DoÄŸru Böl" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "AÅŸağı DoÄŸru Böl" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Sola DoÄŸru Böl" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "SaÄŸa DoÄŸru Böl" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Sekme" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Yeni Sekme" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Sekmeyi Kapat" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Pencere" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Yeni Pencere" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Pencereyi Kapat" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "Yapılandırma" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Yapılandırmayı Aç" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Öntanımlı baÅŸlığı geri yüklemek için boÅŸ bırakın." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "Tamam" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Yeni Bölme" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "Açık Sekmeleri Görüntüle" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Ana Menü" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Komut Paleti" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "Uçbirim Denetçisi" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Ghostty Hakkında" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Çık" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Bir komut çalıştır…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Bir uygulama panoya yazmaya çalışıyor. Geçerli pano içeriÄŸi aÅŸağıda " -"gösterilmektedir." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Bir uygulama panodan okumaya çalışıyor. Geçerli pano içeriÄŸi aÅŸağıda " -"gösterilmektedir." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Uyarı: Tehlikeli Olabilecek Yapıştırma" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Bu metni uçbirime yapıştırmak tehlikeli olabilir; çünkü bir komut " -"yürütülebilecekmiÅŸ gibi duruyor." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Ghostty’den Çık?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Sekmeyi Kapat?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Pencereyi Kapat?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Bölmeyi Kapat?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Tüm uçbirim oturumları sonlandırılacaktır." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Bu sekmedeki tüm uçbirim oturumları sonlandırılacaktır." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Bu penceredeki tüm uçbirim oturumları sonlandırılacaktır." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "Bu bölmedeki ÅŸu anda çalışan süreç sonlandırılacaktır." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Komut Bitti" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Komut BaÅŸarılı" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Komut BaÅŸarısız" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Komut baÅŸarılı oldu" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Komut baÅŸarısız oldu" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Uçbirim BaÅŸlığını DeÄŸiÅŸtir" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "Yapılandırma yeniden yüklendi" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Panoya kopyalandı" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Pano temizlendi" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty GeliÅŸtiricileri" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 00000000000..e2766b0ab6d --- /dev/null +++ b/po/uk.po @@ -0,0 +1,355 @@ +# Ukrainian translations for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Danylo Zalizchuk , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 13:14+0100\n" +"Last-Translator: Volodymyr Chernetskyi " +"<19735328+chernetskyi@users.noreply.github.com>\n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Відкрити в Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Ðадати доÑтуп до буфера обміну" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Заборонити" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Дозволити" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "ЗапамʼÑтати Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— панелі" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Перезавантажте налаштуваннÑ, щоб показати це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð¾Ð²Ñƒ" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "СкаÑувати" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Закрити" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Помилки налаштуваннÑ" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"ВиÑвлено одну або декілька помилок налаштуваннÑ. Будь лаÑка, переглÑньте " +"помилки нижче Ñ– або перезавантажте налаштуваннÑ, або проігноруйте ці помилки." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Ігнорувати" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Перезавантажити налаштуваннÑ" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Ð’Ð¸ викориÑтовуєте відладочну збірку Ghostty! ПродуктивніÑть буде погіршено." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: ІнÑпектор терміналу" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Знайти…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Попередній збіг" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "ÐаÑтупний збіг" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Халепа." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ контекÑÑ‚ OpenGL Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Цей термінал працює в режимі читаннÑ. Можна переглÑдати, виділÑти Ñ– гортати " +"вміÑÑ‚, але ввід не буде передано до запущеної програми." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Скопіювати" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Ð’Ñтавити" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "СповіÑтити про Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð½Ð°Ñтупної команди" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "ОчиÑтити" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Скинути" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Панель" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Змінити заголовок…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Ðова панель зверху" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Ðова панель знизу" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Ðова панель ліворуч" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Ðова панель праворуч" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Вкладка" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Змінити заголовок вкладки…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Ðова вкладка" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Закрити вкладку" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Вікно" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Ðове вікно" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Закрити вікно" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "ÐалаштуваннÑ" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Відкрити налаштуваннÑ" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Залиште порожнім, щоб відновити заголовок за замовчуваннÑм." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "ОК" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Ðова панель" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "ПереглÑнути відкриті вкладки" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Головне меню" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Палітра команд" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "ІнÑпектор терміналу" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Про Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Завершити" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Виконати команду…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Програма намагаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати дані до буфера обміну. Ðижче наведено вміÑÑ‚ " +"буфера обміну." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Програма намагаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані з буфера обміну. Ðижче наведено вміÑÑ‚ " +"буфера обміну." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Увага: потенційно небезпечна вÑтавка" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Ð’Ñтавка цього текÑту в термінал може бути небезпечною, бо Ñхоже, що деÑкі " +"команди можуть бути виконані." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Завершити Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Закрити вкладку?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Закрити вікно?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Закрити панель?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу будуть завершені." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу в цій вкладці будуть завершені." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу в цьому вікні будуть завершені." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "ПроцеÑ, що виконуєтьÑÑ Ð² цій панелі, буде завершено." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Команда завершилаÑÑŒ" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Команда завершилаÑÑŒ уÑпішно" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Команда завершилаÑÑŒ з помилкою" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Команда завершилаÑÑŒ уÑпішно" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Команда завершилаÑÑŒ з помилкою" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Змінити заголовок терміналу" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Змінити заголовок вкладки" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð¾" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Скопійовано до буферa обміну" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Буфер обміну очищено" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Розробники Ghostty" diff --git a/po/uk_UA.UTF-8.po b/po/uk_UA.UTF-8.po deleted file mode 100644 index 5ff919f8f22..00000000000 --- a/po/uk_UA.UTF-8.po +++ /dev/null @@ -1,355 +0,0 @@ -# Ukrainian translations for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Danylo Zalizchuk , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-09 21:03+0100\n" -"Last-Translator: Volodymyr Chernetskyi " -"<19735328+chernetskyi@users.noreply.github.com>\n" -"Language-Team: Ukrainian \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "Ðадати доÑтуп до буфера обміну" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "Заборонити" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "Дозволити" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "ЗапамʼÑтати Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— панелі" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "Перезавантажте налаштуваннÑ, щоб показати це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð¾Ð²Ñƒ" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "СкаÑувати" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "Закрити" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "Помилки налаштуваннÑ" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"ВиÑвлено одну або декілька помилок налаштуваннÑ. Будь лаÑка, переглÑньте " -"помилки нижче Ñ– або перезавантажте налаштуваннÑ, або проігноруйте ці помилки." - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "Ігнорувати" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "Перезавантажити налаштуваннÑ" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "" -"âš ï¸ Ð’Ð¸ викориÑтовуєте відладочну збірку Ghostty! ПродуктивніÑть буде погіршено." - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty: ІнÑпектор терміналу" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "Знайти…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "Попередній збіг" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "ÐаÑтупний збіг" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "Халепа." - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ контекÑÑ‚ OpenGL Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ." - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"Цей термінал працює в режимі читаннÑ. Можна переглÑдати, виділÑти Ñ– гортати " -"вміÑÑ‚, але ввід не буде передано до запущеної програми." - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "Тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "Скопіювати" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "Ð’Ñтавити" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "СповіÑтити про Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð½Ð°Ñтупної команди" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "ОчиÑтити" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "Скинути" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "Панель" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "Змінити заголовок…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "Ðова панель зверху" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "Ðова панель знизу" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "Ðова панель ліворуч" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "Ðова панель праворуч" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "Вкладка" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "Ðова вкладка" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "Закрити вкладку" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "Вікно" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "Ðове вікно" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "Закрити вікно" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "ÐалаштуваннÑ" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "Відкрити налаштуваннÑ" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "Залиште порожнім, щоб відновити заголовок за замовчуваннÑм." - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "ОК" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "Ðова панель" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "ПереглÑнути відкриті вкладки" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "Головне меню" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "Палітра команд" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "ІнÑпектор терміналу" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "Про Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "Завершити" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "Виконати команду…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Програма намагаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати дані до буфера обміну. Ðижче наведено вміÑÑ‚ " -"буфера обміну." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "" -"Програма намагаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані з буфера обміну. Ðижче наведено вміÑÑ‚ " -"буфера обміну." - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "Увага: потенційно небезпечна вÑтавка" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "" -"Ð’Ñтавка цього текÑту в термінал може бути небезпечною, бо Ñхоже, що деÑкі " -"команди можуть бути виконані." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "Завершити Ghostty?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "Закрити вкладку?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "Закрити вікно?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "Закрити панель?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу будуть завершені." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу в цій вкладці будуть завершені." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "Ð’ÑÑ– ÑеÑÑ–Ñ— терміналу в цьому вікні будуть завершені." - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "ПроцеÑ, що виконуєтьÑÑ Ð² цій панелі, буде завершено." - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "Команда завершилаÑÑŒ" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "Команда завершилаÑÑŒ уÑпішно" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "Команда завершилаÑÑŒ з помилкою" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "Команда завершилаÑÑŒ уÑпішно" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "Команда завершилаÑÑŒ з помилкою" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "Змінити заголовок терміналу" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð¾" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "Скопійовано до буферa обміну" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "Буфер обміну очищено" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Розробники Ghostty" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 00000000000..04bc5d8ed67 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,353 @@ +# Vietnamese translations for com.mitchellh.ghostty package. +# Copyright (C) 2026 "Mitchell Hashimoto, Ghostty contributors" +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Anh Thang , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-03-04 09:32+0700\n" +"Last-Translator: Anh Thang \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "Mở Ghostty" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "Cho phép Truy cập Bảng tạm" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "Từ chối" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "Cho phép" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "Ghi nhá»› lá»±a chá»n cho chia màn hình này" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "Tải lại cấu hình để hiển thị lại thông báo này" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "Há»§y" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "Äóng" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "Lá»—i cấu hình" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"Phát hiện má»™t hoặc nhiá»u lá»—i cấu hình. Vui lòng xem xét các lá»—i bên dưới, " +"sau đó tải lại cấu hình hoặc bá» qua các lá»—i này." + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "Bá» qua" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "Tải lại cấu hình" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "" +"âš ï¸ Bạn Ä‘ang chạy bản build thá»­ nghiệm (debug) cá»§a Ghostty! Hiệu năng sẽ bị giảm." + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty: Bá»™ kiểm tra Terminal" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "Tìm kiếm…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "Kết quả trước" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "Kết quả tiếp theo" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "Ôi há»ng rồi." + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "Không thể lấy ngữ cảnh OpenGL để kết xuất đồ há»a." + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"Terminal này Ä‘ang ở chế độ chỉ Ä‘á»c. Bạn vẫn có thể xem, chá»n và cuá»™n " +"ná»™i dung, nhưng các sá»± kiện nhập liệu sẽ không được gá»­i đến ứng dụng." + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "Chỉ Ä‘á»c" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "Sao chép" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "Dán" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "Thông báo khi lệnh tiếp theo kết thúc" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "Xóa" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "Äặt lại" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "Chia màn hình" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "Äổi tiêu Ä‘á»â€¦" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "Chia lên trên" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "Chia xuống dưới" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "Chia sang trái" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "Chia sang phải" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "Tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "Äổi tiêu đỠTab…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "Tab má»›i" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "Äóng Tab" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "Cá»­a sổ" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "Cá»­a sổ má»›i" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "Äóng cá»­a sổ" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "Cấu hình" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "Mở tệp cấu hình" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "Äể trống để khôi phục tiêu đỠmặc định." + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "Äồng ý" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "Chia màn hình má»›i" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "Xem các Tab Ä‘ang mở" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "Trình đơn chính" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "Bảng lệnh" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "Bá»™ kiểm tra Terminal" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "Vá» Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "Thoát" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "Chạy má»™t lệnh…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Má»™t ứng dụng Ä‘ang cố gắng ghi vào bảng tạm. Ná»™i dung hiện tại cá»§a " +"bảng tạm được hiển thị bên dưới." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "" +"Má»™t ứng dụng Ä‘ang cố gắng Ä‘á»c từ bảng tạm. Ná»™i dung hiện tại cá»§a " +"bảng tạm được hiển thị bên dưới." + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "Cảnh báo: Thao tác Dán có thể không an toàn" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "" +"Dán văn bản này vào terminal có thể nguy hiểm vì có vẻ như má»™t số " +"lệnh sẽ bị thá»±c thi." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "Thoát Ghostty?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "Äóng Tab?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "Äóng cá»­a sổ?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "Äóng phần chia màn hình?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "Tất cả các phiên làm việc terminal sẽ bị chấm dứt." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "Tất cả các phiên làm việc terminal trong tab này sẽ bị chấm dứt." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "Tất cả các phiên làm việc terminal trong cá»­a sổ này sẽ bị chấm dứt." + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "Tiến trình Ä‘ang chạy trong phần chia này sẽ bị chấm dứt." + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "Lệnh đã kết thúc" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "Lệnh thành công" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "Lệnh thất bại" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "Lệnh thành công" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "Lệnh thất bại" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "Äổi tiêu đỠTerminal" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "Äổi tiêu đỠTab" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "Äã tải lại cấu hình" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "Äã sao chép vào bảng tạm" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "Äã xóa sạch bảng tạm" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Các nhà phát triển Ghostty" diff --git a/po/zh_CN.UTF-8.po b/po/zh_CN.UTF-8.po deleted file mode 100644 index 92b79ee2163..00000000000 --- a/po/zh_CN.UTF-8.po +++ /dev/null @@ -1,345 +0,0 @@ -# Chinese translations for com.mitchellh.ghostty package -# com.mitchellh.ghostty 软件包的简体中文翻译. -# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Leah , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-12 01:56+0800\n" -"Last-Translator: Leah \n" -"Language-Team: Chinese (simplified) \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "剪贴æ¿è®¿é—®æŽˆæƒ" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "æ‹’ç»" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "å…许" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "为本分å±è®°ä½å½“å‰é€‰æ‹©" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "本æç¤ºå°†åœ¨é‡è½½é…ç½®åŽå†æ¬¡å‡ºçް" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "å–æ¶ˆ" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "关闭" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "é…置错误" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "" -"加载é…置时å‘现了以下错误。请仔细阅读错误信æ¯ï¼Œå¹¶é€‰æ‹©å¿½ç•¥æˆ–釿–°åŠ è½½é…置文件。" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "忽略" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "釿–°åŠ è½½é…ç½®" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ Ghostty 正在以调试模å¼è¿è¡Œï¼æ€§èƒ½å°†å¤§æ‰“折扣。" - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty 终端调试器" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "查找…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "上一个匹é…项" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "下一个匹é…项" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "糟糕。" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "未能获å–å¯ç”¨äºŽæ¸²æŸ“çš„ OpenGL 环境。" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"本终端当å‰å¤„于åªè¯»æ¨¡å¼ã€‚ä½ ä»å¯æµè§ˆã€é€‰æ‹©ã€å¹¶æ»šåŠ¨å…¶ä¸­å†…å®¹ï¼Œä½†ä»»ä½•ç”¨æˆ·è¾“å…¥éƒ½ä¸" -"会传给è¿è¡Œä¸­çš„程åºã€‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "åªè¯»" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "å¤åˆ¶" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "粘贴" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "下æ¡å‘½ä»¤å®Œæˆæ—¶å‘出æé†’" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "清除å±å¹•" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "é‡ç½®ç»ˆç«¯" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "分å±" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "更改标题…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "å‘上分å±" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "å‘下分å±" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "å‘左分å±" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "å‘å³åˆ†å±" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "标签页" - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "新建标签页" - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "关闭标签页" - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "窗å£" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "新建窗å£" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "关闭窗å£" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "é…ç½®" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "打开é…置文件" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "留空以é‡ç½®è‡³é»˜è®¤æ ‡é¢˜ã€‚" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "确认" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "新建分å±" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "æµè§ˆæ ‡ç­¾é¡µ" - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "主èœå•" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "命令颿¿" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "终端调试器" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "关于 Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "退出" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "é€‰æ‹©è¦æ‰§è¡Œçš„命令…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "一个应用正在试图å‘剪贴æ¿å†™å…¥å†…容。剪贴æ¿ç›®å‰çš„内容如下:" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "一个应用正在试图从剪贴æ¿è¯»å–内容。剪贴æ¿ç›®å‰çš„内容如下:" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "警告:粘贴内容å¯èƒ½ä¸å®‰å…¨" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "将以下内容粘贴至终端内将å¯èƒ½æ‰§è¡Œæœ‰å®³å‘½ä»¤ã€‚" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "退出 Ghostty å—?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "关闭标签页å—?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "关闭窗å£å—?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "关闭分å±å—?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "终端内所有è¿è¡Œä¸­çš„进程将被终止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "标签页内所有è¿è¡Œä¸­çš„进程将被终止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "窗å£å†…所有è¿è¡Œä¸­çš„进程将被终止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "分å±å†…正在è¿è¡Œä¸­çš„进程将被终止。" - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "命令已完æˆ" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "命令执行æˆåŠŸ" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "命令执行失败" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "命令执行æˆåŠŸ" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "命令执行失败" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "更改终端标题" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "已釿–°åŠ è½½é…ç½®" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "å·²å¤åˆ¶è‡³å‰ªè´´æ¿" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "已清空剪贴æ¿" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty å¼€å‘团队" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 00000000000..8e7e241fc7b --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,345 @@ +# Chinese translations for com.mitchellh.ghostty package +# com.mitchellh.ghostty 软件包的简体中文翻译. +# Copyright (C) 2025 Mitchell Hashimoto, Ghostty contributors +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Leah , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-12 01:56+0800\n" +"Last-Translator: Leah \n" +"Language-Team: Chinese (simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "在 Ghostty 中打开" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "剪贴æ¿è®¿é—®æŽˆæƒ" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "æ‹’ç»" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "å…许" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "为本分å±è®°ä½å½“å‰é€‰æ‹©" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "本æç¤ºå°†åœ¨é‡è½½é…ç½®åŽå†æ¬¡å‡ºçް" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "å–æ¶ˆ" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "关闭" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "é…置错误" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "" +"加载é…置时å‘现了以下错误。请仔细阅读错误信æ¯ï¼Œå¹¶é€‰æ‹©å¿½ç•¥æˆ–釿–°åŠ è½½é…置文件。" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "忽略" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "釿–°åŠ è½½é…ç½®" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ Ghostty 正在以调试模å¼è¿è¡Œï¼æ€§èƒ½å°†å¤§æ‰“折扣。" + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty 终端调试器" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "查找…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "上一个匹é…项" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "下一个匹é…项" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "糟糕。" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "未能获å–å¯ç”¨äºŽæ¸²æŸ“çš„ OpenGL 环境。" + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"本终端当å‰å¤„于åªè¯»æ¨¡å¼ã€‚ä½ ä»å¯æµè§ˆã€é€‰æ‹©ã€å¹¶æ»šåŠ¨å…¶ä¸­å†…å®¹ï¼Œä½†ä»»ä½•ç”¨æˆ·è¾“å…¥éƒ½ä¸" +"会传给è¿è¡Œä¸­çš„程åºã€‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "åªè¯»" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "å¤åˆ¶" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "粘贴" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "下æ¡å‘½ä»¤å®Œæˆæ—¶å‘出æé†’" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "清除å±å¹•" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "é‡ç½®ç»ˆç«¯" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "分å±" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "更改标题…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "å‘上分å±" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "å‘下分å±" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "å‘左分å±" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "å‘å³åˆ†å±" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "标签页" + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "更改标签页标题…" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "新建标签页" + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "关闭标签页" + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "窗å£" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "新建窗å£" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "关闭窗å£" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "é…ç½®" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "打开é…置文件" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "留空以é‡ç½®è‡³é»˜è®¤æ ‡é¢˜ã€‚" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "确认" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "新建分å±" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "æµè§ˆæ ‡ç­¾é¡µ" + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "主èœå•" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "命令颿¿" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "终端调试器" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "关于 Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "退出" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "é€‰æ‹©è¦æ‰§è¡Œçš„命令…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "一个应用正在试图å‘剪贴æ¿å†™å…¥å†…容。剪贴æ¿ç›®å‰çš„内容如下:" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "一个应用正在试图从剪贴æ¿è¯»å–内容。剪贴æ¿ç›®å‰çš„内容如下:" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "警告:粘贴内容å¯èƒ½ä¸å®‰å…¨" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "将以下内容粘贴至终端内将å¯èƒ½æ‰§è¡Œæœ‰å®³å‘½ä»¤ã€‚" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "退出 Ghostty å—?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "关闭标签页å—?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "关闭窗å£å—?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "关闭分å±å—?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "终端内所有è¿è¡Œä¸­çš„进程将被终止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "标签页内所有è¿è¡Œä¸­çš„进程将被终止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "窗å£å†…所有è¿è¡Œä¸­çš„进程将被终止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "分å±å†…正在è¿è¡Œä¸­çš„进程将被终止。" + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "命令已完æˆ" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "命令执行æˆåŠŸ" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "命令执行失败" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "命令执行æˆåŠŸ" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "命令执行失败" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "更改终端标题" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "更改标签页标题" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "已釿–°åŠ è½½é…ç½®" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "å·²å¤åˆ¶è‡³å‰ªè´´æ¿" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "已清空剪贴æ¿" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty å¼€å‘团队" diff --git a/po/zh_TW.UTF-8.po b/po/zh_TW.UTF-8.po deleted file mode 100644 index 25dacd566ff..00000000000 --- a/po/zh_TW.UTF-8.po +++ /dev/null @@ -1,343 +0,0 @@ -# Traditional Chinese (Taiwan) translation for com.mitchellh.ghostty package. -# Copyright (C) 2025 Mitchell Hashimoto -# This file is distributed under the same license as the com.mitchellh.ghostty package. -# Peter Dave Hello , 2025. -# -msgid "" -msgstr "" -"Project-Id-Version: com.mitchellh.ghostty\n" -"Report-Msgid-Bugs-To: m@mitchellh.com\n" -"POT-Creation-Date: 2026-02-17 23:16+0100\n" -"PO-Revision-Date: 2026-02-10 15:32+0800\n" -"Last-Translator: Yi-Jyun Pan \n" -"Language-Team: Chinese (traditional)\n" -"Language: zh_TW\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: dist/linux/ghostty_nautilus.py:53 -msgid "Open in Ghostty" -msgstr "" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 -msgid "Authorize Clipboard Access" -msgstr "授權存å–剪貼簿" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 -msgid "Deny" -msgstr "拒絕" - -#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 -msgid "Allow" -msgstr "å…許" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 -msgid "Remember choice for this split" -msgstr "è¨˜ä½æ­¤çª—æ ¼çš„é¸æ“‡" - -#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 -msgid "Reload configuration to show this prompt again" -msgstr "釿–°è¼‰å…¥è¨­å®šä»¥å†æ¬¡é¡¯ç¤ºæ­¤æç¤º" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 -#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 -msgid "Cancel" -msgstr "å–æ¶ˆ" - -#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 -#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 -#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 -msgid "Close" -msgstr "關閉" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 -msgid "Configuration Errors" -msgstr "設定錯誤" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 -msgid "" -"One or more configuration errors were found. Please review the errors below, " -"and either reload your configuration or ignore these errors." -msgstr "ç™¼ç¾æœ‰è¨­å®šéŒ¯èª¤ã€‚è«‹æª¢è¦–ä»¥ä¸‹éŒ¯èª¤ï¼Œä¸¦é‡æ–°è¼‰å…¥è¨­å®šæˆ–忽略這些錯誤。" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 -msgid "Ignore" -msgstr "忽略" - -#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 -#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 -msgid "Reload Configuration" -msgstr "釿–°è¼‰å…¥è¨­å®š" - -#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 -#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 -msgid "" -"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." -msgstr "âš ï¸ æ‚¨æ­£åœ¨åŸ·è¡Œ Ghostty 的除錯版本ï¼ç¨‹å¼é‹ä½œæ•ˆèƒ½å°‡æœƒå—到影響。" - -#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 -msgid "Ghostty: Terminal Inspector" -msgstr "Ghostty:終端機檢查工具" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 -msgid "Find…" -msgstr "尋找…" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 -msgid "Previous Match" -msgstr "上一筆符åˆ" - -#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 -msgid "Next Match" -msgstr "下一筆符åˆ" - -#: src/apprt/gtk/ui/1.2/surface.blp:6 -msgid "Oh, no." -msgstr "噢ä¸ã€‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:7 -msgid "Unable to acquire an OpenGL context for rendering." -msgstr "無法å–得用於算繪的 OpenGL 上下文。" - -#: src/apprt/gtk/ui/1.2/surface.blp:97 -msgid "" -"This terminal is in read-only mode. You can still view, select, and scroll " -"through the content, but no input events will be sent to the running " -"application." -msgstr "" -"本終端機目å‰è™•於唯讀模å¼ã€‚您ä»å¯æŸ¥çœ‹ã€é¸å–åŠæ²å‹•å…§å®¹ï¼Œä½†ä¸æœƒå‚³é€ä»»ä½•輸入事件" -"至執行中的應用程å¼ã€‚" - -#: src/apprt/gtk/ui/1.2/surface.blp:107 -msgid "Read-only" -msgstr "唯讀" - -#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 -msgid "Copy" -msgstr "複製" - -#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 -msgid "Paste" -msgstr "貼上" - -#: src/apprt/gtk/ui/1.2/surface.blp:270 -msgid "Notify on Next Command Finish" -msgstr "ä¸‹å€‹å‘½ä»¤å®Œæˆæ™‚通知" - -#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 -msgid "Clear" -msgstr "清除" - -#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 -msgid "Reset" -msgstr "é‡è¨­" - -#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 -msgid "Split" -msgstr "分割" - -#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 -msgid "Change Title…" -msgstr "變更標題…" - -#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 -#: src/apprt/gtk/ui/1.5/window.blp:250 -msgid "Split Up" -msgstr "å‘上分割" - -#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 -#: src/apprt/gtk/ui/1.5/window.blp:255 -msgid "Split Down" -msgstr "å‘下分割" - -#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 -#: src/apprt/gtk/ui/1.5/window.blp:260 -msgid "Split Left" -msgstr "å‘左分割" - -#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 -#: src/apprt/gtk/ui/1.5/window.blp:265 -msgid "Split Right" -msgstr "å‘å³åˆ†å‰²" - -#: src/apprt/gtk/ui/1.2/surface.blp:322 -msgid "Tab" -msgstr "分é " - -#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 -#: src/apprt/gtk/ui/1.5/window.blp:320 -msgid "Change Tab Title…" -msgstr "è®Šæ›´åˆ†é æ¨™é¡Œâ€¦" - -#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 -#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 -msgid "New Tab" -msgstr "開新分é " - -#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 -msgid "Close Tab" -msgstr "關閉分é " - -#: src/apprt/gtk/ui/1.2/surface.blp:342 -msgid "Window" -msgstr "視窗" - -#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 -msgid "New Window" -msgstr "開新視窗" - -#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 -msgid "Close Window" -msgstr "關閉視窗" - -#: src/apprt/gtk/ui/1.2/surface.blp:358 -msgid "Config" -msgstr "設定" - -#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 -msgid "Open Configuration" -msgstr "開啟設定" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 -msgid "Leave blank to restore the default title." -msgstr "留空å³å¯é‚„原為é è¨­æ¨™é¡Œã€‚" - -#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 -msgid "OK" -msgstr "確定" - -#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 -msgid "New Split" -msgstr "新增窗格" - -#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 -msgid "View Open Tabs" -msgstr "檢視已開啟的分é " - -#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 -msgid "Main Menu" -msgstr "主é¸å–®" - -#: src/apprt/gtk/ui/1.5/window.blp:285 -msgid "Command Palette" -msgstr "命令颿¿" - -#: src/apprt/gtk/ui/1.5/window.blp:290 -msgid "Terminal Inspector" -msgstr "終端機檢查工具" - -#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 -msgid "About Ghostty" -msgstr "關於 Ghostty" - -#: src/apprt/gtk/ui/1.5/window.blp:312 -msgid "Quit" -msgstr "çµæŸ" - -#: src/apprt/gtk/ui/1.5/command-palette.blp:17 -msgid "Execute a command…" -msgstr "執行命令…" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 -msgid "" -"An application is attempting to write to the clipboard. The current " -"clipboard contents are shown below." -msgstr "æœ‰æ‡‰ç”¨ç¨‹å¼æ­£å˜—試寫入剪貼簿,目å‰çš„剪貼簿內容顯示如下。" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 -msgid "" -"An application is attempting to read from the clipboard. The current " -"clipboard contents are shown below." -msgstr "æœ‰æ‡‰ç”¨ç¨‹å¼æ­£å˜—試讀å–剪貼簿,目å‰çš„剪貼簿內容顯示如下。" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 -msgid "Warning: Potentially Unsafe Paste" -msgstr "警告:å¯èƒ½æœ‰æ½›åœ¨å®‰å…¨é¢¨éšªçš„貼上æ“作" - -#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 -msgid "" -"Pasting this text into the terminal may be dangerous as it looks like some " -"commands may be executed." -msgstr "å°‡é€™æ®µæ–‡å­—è²¼åˆ°çµ‚ç«¯æ©Ÿå…·æœ‰æ½›åœ¨é¢¨éšªï¼Œå› ç‚ºå®ƒçœ‹èµ·ä¾†åƒæ˜¯å¯èƒ½æœƒè¢«åŸ·è¡Œçš„命令。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 -msgid "Quit Ghostty?" -msgstr "è¦çµæŸ Ghostty 嗎?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 -msgid "Close Tab?" -msgstr "是å¦è¦é—œé–‰åˆ†é ï¼Ÿ" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 -msgid "Close Window?" -msgstr "是å¦è¦é—œé–‰è¦–窗?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 -msgid "Close Split?" -msgstr "是å¦è¦é—œé–‰çª—格?" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 -msgid "All terminal sessions will be terminated." -msgstr "所有終端機工作階段都將被終止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 -msgid "All terminal sessions in this tab will be terminated." -msgstr "此分é ä¸­çš„æ‰€æœ‰çµ‚端機工作階段都將被終止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 -msgid "All terminal sessions in this window will be terminated." -msgstr "此視窗中的所有終端機工作階段都將被終止。" - -#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 -msgid "The currently running process in this split will be terminated." -msgstr "此窗格中目å‰åŸ·è¡Œçš„處ç†ç¨‹åºå°‡è¢«çµ‚止。" - -#: src/apprt/gtk/class/surface.zig:1108 -msgid "Command Finished" -msgstr "命令執行完æˆ" - -#: src/apprt/gtk/class/surface.zig:1109 -msgid "Command Succeeded" -msgstr "命令執行æˆåŠŸ" - -#: src/apprt/gtk/class/surface.zig:1110 -msgid "Command Failed" -msgstr "命令執行失敗" - -#: src/apprt/gtk/class/surface_child_exited.zig:109 -msgid "Command succeeded" -msgstr "命令執行æˆåŠŸ" - -#: src/apprt/gtk/class/surface_child_exited.zig:113 -msgid "Command failed" -msgstr "命令執行失敗" - -#: src/apprt/gtk/class/title_dialog.zig:225 -msgid "Change Terminal Title" -msgstr "變更終端機標題" - -#: src/apprt/gtk/class/title_dialog.zig:226 -msgid "Change Tab Title" -msgstr "è®Šæ›´åˆ†é æ¨™é¡Œ" - -#: src/apprt/gtk/class/window.zig:1007 -msgid "Reloaded the configuration" -msgstr "已釿–°è¼‰å…¥è¨­å®š" - -#: src/apprt/gtk/class/window.zig:1566 -msgid "Copied to clipboard" -msgstr "已複製到剪貼簿" - -#: src/apprt/gtk/class/window.zig:1568 -msgid "Cleared clipboard" -msgstr "已清除剪貼簿" - -#: src/apprt/gtk/class/window.zig:1708 -msgid "Ghostty Developers" -msgstr "Ghostty 開發者" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 00000000000..cacdc8acbb7 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,343 @@ +# Traditional Chinese (Taiwan) translation for com.mitchellh.ghostty package. +# Copyright (C) 2025 Mitchell Hashimoto +# This file is distributed under the same license as the com.mitchellh.ghostty package. +# Peter Dave Hello , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: com.mitchellh.ghostty\n" +"Report-Msgid-Bugs-To: m@mitchellh.com\n" +"POT-Creation-Date: 2026-02-17 23:16+0100\n" +"PO-Revision-Date: 2026-02-18 13:58+0800\n" +"Last-Translator: Yi-Jyun Pan \n" +"Language-Team: Chinese (traditional)\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: dist/linux/ghostty_nautilus.py:53 +msgid "Open in Ghostty" +msgstr "在 Ghostty 中開啟" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:12 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:197 +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:201 +msgid "Authorize Clipboard Access" +msgstr "授權存å–剪貼簿" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:17 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:17 +msgid "Deny" +msgstr "拒絕" + +#: src/apprt/gtk/ui/1.0/clipboard-confirmation-dialog.blp:18 +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:18 +msgid "Allow" +msgstr "å…許" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:92 +msgid "Remember choice for this split" +msgstr "è¨˜ä½æ­¤çª—æ ¼çš„é¸æ“‡" + +#: src/apprt/gtk/ui/1.4/clipboard-confirmation-dialog.blp:93 +msgid "Reload configuration to show this prompt again" +msgstr "釿–°è¼‰å…¥è¨­å®šä»¥å†æ¬¡é¡¯ç¤ºæ­¤æç¤º" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:7 +#: src/apprt/gtk/ui/1.5/title-dialog.blp:8 +msgid "Cancel" +msgstr "å–æ¶ˆ" + +#: src/apprt/gtk/ui/1.2/close-confirmation-dialog.blp:8 +#: src/apprt/gtk/ui/1.2/search-overlay.blp:85 +#: src/apprt/gtk/ui/1.3/surface-child-exited.blp:17 +msgid "Close" +msgstr "關閉" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:6 +msgid "Configuration Errors" +msgstr "設定錯誤" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:7 +msgid "" +"One or more configuration errors were found. Please review the errors below, " +"and either reload your configuration or ignore these errors." +msgstr "ç™¼ç¾æœ‰è¨­å®šéŒ¯èª¤ã€‚è«‹æª¢è¦–ä»¥ä¸‹éŒ¯èª¤ï¼Œä¸¦é‡æ–°è¼‰å…¥è¨­å®šæˆ–忽略這些錯誤。" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:10 +msgid "Ignore" +msgstr "忽略" + +#: src/apprt/gtk/ui/1.2/config-errors-dialog.blp:11 +#: src/apprt/gtk/ui/1.2/surface.blp:366 src/apprt/gtk/ui/1.5/window.blp:300 +msgid "Reload Configuration" +msgstr "釿–°è¼‰å…¥è¨­å®š" + +#: src/apprt/gtk/ui/1.2/debug-warning.blp:7 +#: src/apprt/gtk/ui/1.3/debug-warning.blp:6 +msgid "" +"âš ï¸ You're running a debug build of Ghostty! Performance will be degraded." +msgstr "âš ï¸ æ‚¨æ­£åœ¨åŸ·è¡Œ Ghostty 的除錯版本ï¼ç¨‹å¼é‹ä½œæ•ˆèƒ½å°‡æœƒå—到影響。" + +#: src/apprt/gtk/ui/1.5/inspector-window.blp:5 +msgid "Ghostty: Terminal Inspector" +msgstr "Ghostty:終端機檢查工具" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:29 +msgid "Find…" +msgstr "尋找…" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:64 +msgid "Previous Match" +msgstr "上一筆符åˆ" + +#: src/apprt/gtk/ui/1.2/search-overlay.blp:74 +msgid "Next Match" +msgstr "下一筆符åˆ" + +#: src/apprt/gtk/ui/1.2/surface.blp:6 +msgid "Oh, no." +msgstr "噢ä¸ã€‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:7 +msgid "Unable to acquire an OpenGL context for rendering." +msgstr "無法å–得用於算繪的 OpenGL 上下文。" + +#: src/apprt/gtk/ui/1.2/surface.blp:97 +msgid "" +"This terminal is in read-only mode. You can still view, select, and scroll " +"through the content, but no input events will be sent to the running " +"application." +msgstr "" +"本終端機目å‰è™•於唯讀模å¼ã€‚您ä»å¯æŸ¥çœ‹ã€é¸å–åŠæ²å‹•å…§å®¹ï¼Œä½†ä¸æœƒå‚³é€ä»»ä½•輸入事件" +"至執行中的應用程å¼ã€‚" + +#: src/apprt/gtk/ui/1.2/surface.blp:107 +msgid "Read-only" +msgstr "唯讀" + +#: src/apprt/gtk/ui/1.2/surface.blp:260 src/apprt/gtk/ui/1.5/window.blp:200 +msgid "Copy" +msgstr "複製" + +#: src/apprt/gtk/ui/1.2/surface.blp:265 src/apprt/gtk/ui/1.5/window.blp:205 +msgid "Paste" +msgstr "貼上" + +#: src/apprt/gtk/ui/1.2/surface.blp:270 +msgid "Notify on Next Command Finish" +msgstr "ä¸‹å€‹å‘½ä»¤å®Œæˆæ™‚通知" + +#: src/apprt/gtk/ui/1.2/surface.blp:277 src/apprt/gtk/ui/1.5/window.blp:273 +msgid "Clear" +msgstr "清除" + +#: src/apprt/gtk/ui/1.2/surface.blp:282 src/apprt/gtk/ui/1.5/window.blp:278 +msgid "Reset" +msgstr "é‡è¨­" + +#: src/apprt/gtk/ui/1.2/surface.blp:289 src/apprt/gtk/ui/1.5/window.blp:242 +msgid "Split" +msgstr "分割" + +#: src/apprt/gtk/ui/1.2/surface.blp:292 src/apprt/gtk/ui/1.5/window.blp:245 +msgid "Change Title…" +msgstr "變更標題…" + +#: src/apprt/gtk/ui/1.2/surface.blp:297 src/apprt/gtk/ui/1.5/window.blp:177 +#: src/apprt/gtk/ui/1.5/window.blp:250 +msgid "Split Up" +msgstr "å‘上分割" + +#: src/apprt/gtk/ui/1.2/surface.blp:303 src/apprt/gtk/ui/1.5/window.blp:182 +#: src/apprt/gtk/ui/1.5/window.blp:255 +msgid "Split Down" +msgstr "å‘下分割" + +#: src/apprt/gtk/ui/1.2/surface.blp:309 src/apprt/gtk/ui/1.5/window.blp:187 +#: src/apprt/gtk/ui/1.5/window.blp:260 +msgid "Split Left" +msgstr "å‘左分割" + +#: src/apprt/gtk/ui/1.2/surface.blp:315 src/apprt/gtk/ui/1.5/window.blp:192 +#: src/apprt/gtk/ui/1.5/window.blp:265 +msgid "Split Right" +msgstr "å‘å³åˆ†å‰²" + +#: src/apprt/gtk/ui/1.2/surface.blp:322 +msgid "Tab" +msgstr "分é " + +#: src/apprt/gtk/ui/1.2/surface.blp:325 src/apprt/gtk/ui/1.5/window.blp:224 +#: src/apprt/gtk/ui/1.5/window.blp:320 +msgid "Change Tab Title…" +msgstr "è®Šæ›´åˆ†é æ¨™é¡Œâ€¦" + +#: src/apprt/gtk/ui/1.2/surface.blp:330 src/apprt/gtk/ui/1.5/window.blp:57 +#: src/apprt/gtk/ui/1.5/window.blp:107 src/apprt/gtk/ui/1.5/window.blp:229 +msgid "New Tab" +msgstr "開新分é " + +#: src/apprt/gtk/ui/1.2/surface.blp:335 src/apprt/gtk/ui/1.5/window.blp:234 +msgid "Close Tab" +msgstr "關閉分é " + +#: src/apprt/gtk/ui/1.2/surface.blp:342 +msgid "Window" +msgstr "視窗" + +#: src/apprt/gtk/ui/1.2/surface.blp:345 src/apprt/gtk/ui/1.5/window.blp:212 +msgid "New Window" +msgstr "開新視窗" + +#: src/apprt/gtk/ui/1.2/surface.blp:350 src/apprt/gtk/ui/1.5/window.blp:217 +msgid "Close Window" +msgstr "關閉視窗" + +#: src/apprt/gtk/ui/1.2/surface.blp:358 +msgid "Config" +msgstr "設定" + +#: src/apprt/gtk/ui/1.2/surface.blp:361 src/apprt/gtk/ui/1.5/window.blp:295 +msgid "Open Configuration" +msgstr "開啟設定" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:5 +msgid "Leave blank to restore the default title." +msgstr "留空å³å¯é‚„原為é è¨­æ¨™é¡Œã€‚" + +#: src/apprt/gtk/ui/1.5/title-dialog.blp:9 +msgid "OK" +msgstr "確定" + +#: src/apprt/gtk/ui/1.5/window.blp:58 src/apprt/gtk/ui/1.5/window.blp:108 +msgid "New Split" +msgstr "新增窗格" + +#: src/apprt/gtk/ui/1.5/window.blp:68 src/apprt/gtk/ui/1.5/window.blp:126 +msgid "View Open Tabs" +msgstr "檢視已開啟的分é " + +#: src/apprt/gtk/ui/1.5/window.blp:78 src/apprt/gtk/ui/1.5/window.blp:140 +msgid "Main Menu" +msgstr "主é¸å–®" + +#: src/apprt/gtk/ui/1.5/window.blp:285 +msgid "Command Palette" +msgstr "命令颿¿" + +#: src/apprt/gtk/ui/1.5/window.blp:290 +msgid "Terminal Inspector" +msgstr "終端機檢查工具" + +#: src/apprt/gtk/ui/1.5/window.blp:307 src/apprt/gtk/class/window.zig:1727 +msgid "About Ghostty" +msgstr "關於 Ghostty" + +#: src/apprt/gtk/ui/1.5/window.blp:312 +msgid "Quit" +msgstr "çµæŸ" + +#: src/apprt/gtk/ui/1.5/command-palette.blp:17 +msgid "Execute a command…" +msgstr "執行命令…" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:198 +msgid "" +"An application is attempting to write to the clipboard. The current " +"clipboard contents are shown below." +msgstr "æœ‰æ‡‰ç”¨ç¨‹å¼æ­£å˜—試寫入剪貼簿,目å‰çš„剪貼簿內容顯示如下。" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:202 +msgid "" +"An application is attempting to read from the clipboard. The current " +"clipboard contents are shown below." +msgstr "æœ‰æ‡‰ç”¨ç¨‹å¼æ­£å˜—試讀å–剪貼簿,目å‰çš„剪貼簿內容顯示如下。" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:205 +msgid "Warning: Potentially Unsafe Paste" +msgstr "警告:å¯èƒ½æœ‰æ½›åœ¨å®‰å…¨é¢¨éšªçš„貼上æ“作" + +#: src/apprt/gtk/class/clipboard_confirmation_dialog.zig:206 +msgid "" +"Pasting this text into the terminal may be dangerous as it looks like some " +"commands may be executed." +msgstr "å°‡é€™æ®µæ–‡å­—è²¼åˆ°çµ‚ç«¯æ©Ÿå…·æœ‰æ½›åœ¨é¢¨éšªï¼Œå› ç‚ºå®ƒçœ‹èµ·ä¾†åƒæ˜¯å¯èƒ½æœƒè¢«åŸ·è¡Œçš„命令。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:184 +msgid "Quit Ghostty?" +msgstr "è¦çµæŸ Ghostty 嗎?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:185 +msgid "Close Tab?" +msgstr "是å¦è¦é—œé–‰åˆ†é ï¼Ÿ" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:186 +msgid "Close Window?" +msgstr "是å¦è¦é—œé–‰è¦–窗?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:187 +msgid "Close Split?" +msgstr "是å¦è¦é—œé–‰çª—格?" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:193 +msgid "All terminal sessions will be terminated." +msgstr "所有終端機工作階段都將被終止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:194 +msgid "All terminal sessions in this tab will be terminated." +msgstr "此分é ä¸­çš„æ‰€æœ‰çµ‚端機工作階段都將被終止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:195 +msgid "All terminal sessions in this window will be terminated." +msgstr "此視窗中的所有終端機工作階段都將被終止。" + +#: src/apprt/gtk/class/close_confirmation_dialog.zig:196 +msgid "The currently running process in this split will be terminated." +msgstr "此窗格中目å‰åŸ·è¡Œçš„處ç†ç¨‹åºå°‡è¢«çµ‚止。" + +#: src/apprt/gtk/class/surface.zig:1108 +msgid "Command Finished" +msgstr "命令執行完æˆ" + +#: src/apprt/gtk/class/surface.zig:1109 +msgid "Command Succeeded" +msgstr "命令執行æˆåŠŸ" + +#: src/apprt/gtk/class/surface.zig:1110 +msgid "Command Failed" +msgstr "命令執行失敗" + +#: src/apprt/gtk/class/surface_child_exited.zig:109 +msgid "Command succeeded" +msgstr "命令執行æˆåŠŸ" + +#: src/apprt/gtk/class/surface_child_exited.zig:113 +msgid "Command failed" +msgstr "命令執行失敗" + +#: src/apprt/gtk/class/title_dialog.zig:225 +msgid "Change Terminal Title" +msgstr "變更終端機標題" + +#: src/apprt/gtk/class/title_dialog.zig:226 +msgid "Change Tab Title" +msgstr "è®Šæ›´åˆ†é æ¨™é¡Œ" + +#: src/apprt/gtk/class/window.zig:1007 +msgid "Reloaded the configuration" +msgstr "已釿–°è¼‰å…¥è¨­å®š" + +#: src/apprt/gtk/class/window.zig:1566 +msgid "Copied to clipboard" +msgstr "已複製到剪貼簿" + +#: src/apprt/gtk/class/window.zig:1568 +msgid "Cleared clipboard" +msgstr "已清除剪貼簿" + +#: src/apprt/gtk/class/window.zig:1708 +msgid "Ghostty Developers" +msgstr "Ghostty 開發者" diff --git a/snap/local/launcher b/snap/local/launcher index 71b92f5bb80..6057881b3cb 100755 --- a/snap/local/launcher +++ b/snap/local/launcher @@ -41,7 +41,7 @@ fi export LD_LIBRARY_PATH=${SNAP}/usr/lib/${ARCH}:${SNAP}/usr/lib/${ARCH}/vdpau:${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:} export LIBGL_DRIVERS_PATH=${LIBGL_DRIVERS_PATH:+$LIBGL_DRIVERS_PATH:}${SNAP}/usr/lib/${ARCH}/dri/ export LIBVA_DRIVERS_PATH=${LIBVA_DRIVERS_PATH:+$LIBVA_DRIVERS_PATH:}${SNAP}/usr/lib/${ARCH}/dri/ -export __EGL_VENDOR_LIBRARY_DIRS=${__EGL_VENDOR_LIBRARY_DIRS:+$__EGL_VENDOR_LIBRARY_DIRS:}${SNAP}/usr/share/glvnd/egl_vendor.d +export __EGL_VENDOR_LIBRARY_DIRS=${__EGL_VENDOR_LIBRARY_DIRS:+$__EGL_VENDOR_LIBRARY_DIRS:}/etc/glvnd/egl_vendor.d:/usr/share/glvnd/egl_vendor.d:${SNAP}/usr/share/glvnd/egl_vendor.d export __EGL_EXTERNAL_PLATFORM_CONFIG_DIRS=${__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS:+$__EGL_EXTERNAL_PLATFORM_CONFIG_DIRS:}${SNAP}/usr/share/egl/egl_external_platform.d export DRIRC_CONFIGDIR=${SNAP}/usr/share/drirc.d export VK_LAYER_PATH=${VK_LAYER_PATH:+$VK_LAYER_PATH:}${SNAP}/usr/share/vulkan/implicit_layer.d/:${SNAP}/usr/share/vulkan/explicit_layer.d/ diff --git a/src/Command.zig b/src/Command.zig index 3a40143b948..2b381912b66 100644 --- a/src/Command.zig +++ b/src/Command.zig @@ -725,6 +725,11 @@ test "Command: redirect stdout to file" { .path = "C:\\Windows\\System32\\whoami.exe", .args = &.{"C:\\Windows\\System32\\whoami.exe"}, .stdout = stdout, + .os_pre_exec = null, + .rt_pre_exec = null, + .rt_post_fork = null, + .rt_pre_exec_info = undefined, + .rt_post_fork_info = undefined, } else .{ .path = "/bin/sh", .args = &.{ "/bin/sh", "-c", "echo hello" }, diff --git a/src/Surface.zig b/src/Surface.zig index 588d529689d..8e88d495e2f 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -39,6 +39,17 @@ const SurfaceMouse = @import("surface_mouse.zig"); const log = std.log.scoped(.surface); +fn cmuxSurfaceBootstrapTraceEnabled() bool { + return std.posix.getenv("CMUX_SURFACE_BOOTSTRAP_DEBUG") != null or + std.posix.getenv("CMUX_PANE_STRIP_MOTION_SETUP") != null or + std.posix.getenv("CMUX_UI_TEST_PANE_STRIP_MOTION_SETUP") != null; +} + +fn cmuxSurfaceBootstrapTrace(comptime fmt: []const u8, args: anytype) void { + if (!cmuxSurfaceBootstrapTraceEnabled()) return; + std.debug.print("[CMUXSURFACE-CORE] " ++ fmt ++ "\n", args); +} + // The renderer implementation to use. const Renderer = rendererpkg.Renderer; @@ -46,8 +57,8 @@ const Renderer = rendererpkg.Renderer; /// being resized to a size that is too small to be useful. These defaults /// are chosen to match the default size of Mac's Terminal.app, but is /// otherwise somewhat arbitrary. -const min_window_width_cells: u32 = 10; -const min_window_height_cells: u32 = 4; +pub const min_window_width_cells: u32 = 10; +pub const min_window_height_cells: u32 = 4; /// The maximum number of key tables that can be active at any /// given time. `activate_key_table` calls after this are ignored. @@ -312,6 +323,7 @@ const DerivedConfig = struct { mouse_reporting: bool, mouse_scroll_multiplier: configpkg.MouseScrollMultiplier, mouse_shift_capture: configpkg.MouseShiftCapture, + fullscreen: configpkg.Fullscreen, macos_non_native_fullscreen: configpkg.NonNativeFullscreen, macos_option_as_alt: ?input.OptionAsAlt, selection_clear_on_copy: bool, @@ -389,6 +401,7 @@ const DerivedConfig = struct { .mouse_reporting = config.@"mouse-reporting", .mouse_scroll_multiplier = config.@"mouse-scroll-multiplier", .mouse_shift_capture = config.@"mouse-shift-capture", + .fullscreen = config.fullscreen, .macos_non_native_fullscreen = config.@"macos-non-native-fullscreen", .macos_option_as_alt = config.@"macos-option-as-alt", .selection_clear_on_copy = config.@"selection-clear-on-copy", @@ -462,6 +475,8 @@ pub fn init( rt_app: *apprt.runtime.App, rt_surface: *apprt.runtime.Surface, ) !void { + cmuxSurfaceBootstrapTrace("Surface.init begin", .{}); + // Apply our conditional state. If we fail to apply the conditional state // then we log and attempt to move forward with the old config. var config_: ?configpkg.Config = config_original.changeConditionalState( @@ -483,17 +498,32 @@ pub fn init( } else config_original; // Get our configuration - var derived_config = try DerivedConfig.init(alloc, config); + var derived_config = DerivedConfig.init(alloc, config) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init DerivedConfig.init failed err={}", .{err}); + return err; + }; errdefer derived_config.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init DerivedConfig.init ok", .{}); // Initialize our renderer with our initialized surface. - try Renderer.surfaceInit(rt_surface); + Renderer.surfaceInit(rt_surface) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init Renderer.surfaceInit failed err={}", .{err}); + return err; + }; + cmuxSurfaceBootstrapTrace("Surface.init Renderer.surfaceInit ok", .{}); // Determine our DPI configurations so we can properly configure // font points to pixels and handle other high-DPI scaling factors. - const content_scale = try rt_surface.getContentScale(); + const content_scale = rt_surface.getContentScale() catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init getContentScale failed err={}", .{err}); + return err; + }; const x_dpi = content_scale.x * font.face.default_dpi; const y_dpi = content_scale.y * font.face.default_dpi; + cmuxSurfaceBootstrapTrace( + "Surface.init contentScale ok x={d:.3} y={d:.3}", + .{ content_scale.x, content_scale.y }, + ); log.debug("xscale={} yscale={} xdpi={} ydpi={}", .{ content_scale.x, content_scale.y, @@ -510,16 +540,23 @@ pub fn init( // Setup our font group. This will reuse an existing font group if // it was already loaded. - const font_grid_key, const font_grid = try app.font_grid_set.ref( + const font_grid_key, const font_grid = app.font_grid_set.ref( &derived_config.font, font_size, - ); + ) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init font_grid_set.ref failed err={}", .{err}); + return err; + }; + cmuxSurfaceBootstrapTrace("Surface.init font_grid_set.ref ok", .{}); // Build our size struct which has all the sizes we need. const size: rendererpkg.Size = size: { var size: rendererpkg.Size = .{ .screen = screen: { - const surface_size = try rt_surface.getSize(); + const surface_size = rt_surface.getSize() catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init getSize failed err={}", .{err}); + return err; + }; break :screen .{ .width = surface_size.width, .height = surface_size.height, @@ -542,38 +579,62 @@ pub fn init( break :size size; }; + cmuxSurfaceBootstrapTrace( + "Surface.init size ok screen={}x{} cell={}x{}", + .{ size.screen.width, size.screen.height, size.cell.width, size.cell.height }, + ); // Create our terminal grid with the initial size const app_mailbox: App.Mailbox = .{ .rt_app = rt_app, .mailbox = &app.mailbox }; - var renderer_impl = try Renderer.init(alloc, .{ - .config = try .init(alloc, config), + const renderer_config = Renderer.DerivedConfig.init(alloc, config) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init renderer config init failed err={}", .{err}); + return err; + }; + var renderer_impl = Renderer.init(alloc, .{ + .config = renderer_config, .font_grid = font_grid, .size = size, .surface_mailbox = .{ .surface = self, .app = app_mailbox }, .rt_surface = rt_surface, .thread = &self.renderer_thread, - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init Renderer.init failed err={}", .{err}); + return err; + }; errdefer renderer_impl.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init Renderer.init ok", .{}); // The mutex used to protect our renderer state. - const mutex = try alloc.create(std.Thread.Mutex); + const mutex = alloc.create(std.Thread.Mutex) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init mutex alloc failed err={}", .{err}); + return err; + }; mutex.* = .{}; errdefer alloc.destroy(mutex); + cmuxSurfaceBootstrapTrace("Surface.init mutex alloc ok", .{}); // Create the renderer thread - var render_thread = try rendererpkg.Thread.init( + var render_thread = rendererpkg.Thread.init( alloc, config, rt_surface, &self.renderer, &self.renderer_state, app_mailbox, - ); + ) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init renderer thread init failed err={}", .{err}); + return err; + }; errdefer render_thread.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init renderer thread init ok", .{}); // Create the IO thread - var io_thread = try termio.Thread.init(alloc); + var io_thread = termio.Thread.init(alloc) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init io thread init failed err={}", .{err}); + return err; + }; errdefer io_thread.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init io thread init ok", .{}); self.* = .{ .alloc = alloc, @@ -605,10 +666,14 @@ pub fn init( }; // The command we're going to execute - const command: ?configpkg.Command = if (app.first) - config.@"initial-command" orelse config.command - else - config.command; + const command: ?configpkg.Command = command: { + if (app.first) { + if (config.@"initial-command") |command| { + break :command command; + } + } + break :command config.command; + }; // Start our IO implementation // This separate block ({}) is important because our errdefers must @@ -621,12 +686,13 @@ pub fn init( std.process.EnvMap.init(alloc); }; errdefer env.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init defaultTermioEnv ok", .{}); // don't leak GHOSTTY_LOG to any subprocesses env.remove("GHOSTTY_LOG"); // Initialize our IO backend - var io_exec = try termio.Exec.init(alloc, .{ + var io_exec = termio.Exec.init(alloc, .{ .command = command, .env = env, .env_override = config.env, @@ -638,24 +704,39 @@ pub fn init( .term = config.term, .rt_pre_exec_info = .init(config), .rt_post_fork_info = .init(config), - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init termio.Exec.init failed err={}", .{err}); + return err; + }; errdefer io_exec.deinit(); + cmuxSurfaceBootstrapTrace("Surface.init termio.Exec.init ok", .{}); // Initialize our IO mailbox - var io_mailbox = try termio.Mailbox.initSPSC(alloc); + var io_mailbox = termio.Mailbox.initSPSC(alloc) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init termio.Mailbox.initSPSC failed err={}", .{err}); + return err; + }; errdefer io_mailbox.deinit(alloc); + cmuxSurfaceBootstrapTrace("Surface.init termio.Mailbox.initSPSC ok", .{}); - try termio.Termio.init(&self.io, alloc, .{ + termio.Termio.init(&self.io, alloc, .{ .size = size, .full_config = config, - .config = try termio.Termio.DerivedConfig.init(alloc, config), + .config = termio.Termio.DerivedConfig.init(alloc, config) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init Termio.DerivedConfig.init failed err={}", .{err}); + return err; + }, .backend = .{ .exec = io_exec }, .mailbox = io_mailbox, .renderer_state = &self.renderer_state, .renderer_wakeup = render_thread.wakeup, .renderer_mailbox = render_thread.mailbox, .surface_mailbox = .{ .surface = self, .app = app_mailbox }, - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init termio.Termio.init failed err={}", .{err}); + return err; + }; + cmuxSurfaceBootstrapTrace("Surface.init termio.Termio.init ok", .{}); } // Outside the block, IO has now taken ownership of our temporary state // so we can just defer this and not the subcomponents. @@ -685,11 +766,19 @@ pub fn init( // init stuff we should get rid of this. But this is required because // sizeCallback does retina-aware stuff we don't do here and don't want // to duplicate. - try self.resize(self.size.screen); + self.resize(self.size.screen) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init resize failed err={}", .{err}); + return err; + }; + cmuxSurfaceBootstrapTrace("Surface.init resize ok", .{}); // Give the renderer one more opportunity to finalize any surface // setup on the main thread prior to spinning up the rendering thread. - try renderer_impl.finalizeSurfaceInit(rt_surface); + renderer_impl.finalizeSurfaceInit(rt_surface) catch |err| { + cmuxSurfaceBootstrapTrace("Surface.init finalizeSurfaceInit failed err={}", .{err}); + return err; + }; + cmuxSurfaceBootstrapTrace("Surface.init finalizeSurfaceInit ok", .{}); // Start our renderer thread self.renderer_thr = try std.Thread.spawn( @@ -1174,7 +1263,7 @@ fn selectionScrollTick(self: *Surface) !void { } // Scroll the viewport as required - try t.scrollViewport(.{ .delta = delta }); + t.scrollViewport(.{ .delta = delta }); // Next, trigger our drag behavior const pin = t.screens.active.pages.pin(.{ @@ -2010,6 +2099,46 @@ pub fn hasSelection(self: *const Surface) bool { return self.io.terminal.screens.active.selection != null; } +/// Start a selection anchored at the active cursor position. +pub fn selectCursorCell(self: *Surface) !bool { + self.renderer_state.mutex.lock(); + defer self.renderer_state.mutex.unlock(); + + const screen: *terminal.Screen = self.io.terminal.screens.active; + const pin = pin: { + // pointFromPin(.viewport, ...) can return points beyond the visible rows + // when the viewport includes additional written history; only anchor to + // the live cursor if it is truly visible in the viewport. + if (screen.pages.pointFromPin(.viewport, screen.cursor.page_pin.*)) |pt| { + if (pt.viewport.y < @as(u32, screen.pages.rows)) { + break :pin screen.cursor.page_pin.*; + } + } + + // If we've scrolled away from the live cursor, start at the viewport origin + // so copy mode can select from the currently visible history. + break :pin screen.pages.pin(.{ .viewport = .{} }) orelse return false; + }; + // Entering keyboard copy mode should not clobber clipboard contents. + try screen.select(terminal.Selection.init(pin, pin, false)); + screen.dirty.selection = true; + try self.queueRender(); + return true; +} + +/// Clear the active selection, if any. +pub fn clearSelection(self: *Surface) !bool { + self.renderer_state.mutex.lock(); + defer self.renderer_state.mutex.unlock(); + + const screen: *terminal.Screen = self.io.terminal.screens.active; + if (screen.selection == null) return false; + try self.setSelection(null); + screen.dirty.selection = true; + try self.queueRender(); + return true; +} + /// Returns the selected text. This is allocated. pub fn selectionString(self: *Surface, alloc: Allocator) !?[:0]const u8 { self.renderer_state.mutex.lock(); @@ -2432,6 +2561,12 @@ pub fn sizeCallback(self: *Surface, size: apprt.SurfaceSize) !void { } fn resize(self: *Surface, size: rendererpkg.ScreenSize) !void { + // Resizes can arrive during UI/layout transitions where the surface is momentarily + // too small to fit even a single terminal cell. Rendering at a 0xN or Nx0 grid + // produces a transient "blank" frame. Keep the last valid size until we have + // a usable grid again. + const prev_size = self.size; + // Save our screen size self.size.screen = size; self.balancePaddingIfNeeded(); @@ -2441,6 +2576,10 @@ fn resize(self: *Surface, size: rendererpkg.ScreenSize) !void { // We have to update the IO thread no matter what because we send // pixel-level sizing to the subprocess. const grid_size = self.size.grid(); + if (grid_size.columns == 0 or grid_size.rows == 0) { + self.size = prev_size; + return; + } if (grid_size.columns < 5 and (self.size.padding.left > 0 or self.size.padding.right > 0)) { log.warn("WARNING: very small terminal grid detected with padding " ++ "set. Is your padding reasonable?", .{}); @@ -2779,7 +2918,7 @@ pub fn keyCallback( try self.setSelection(null); } - if (self.config.scroll_to_bottom.keystroke) try self.io.terminal.scrollViewport(.bottom); + if (self.config.scroll_to_bottom.keystroke) self.io.terminal.scrollViewport(.bottom); try self.queueRender(); } @@ -2971,6 +3110,9 @@ fn maybeHandleBinding( // If our action was "ignore" then we return the special input // effect of "ignored". for (actions) |action| if (action == .ignore) { + // If we're in a sequence, clear it. + self.endKeySequence(.drop, .retain); + return .ignored; }; } @@ -3532,7 +3674,7 @@ pub fn scrollCallback( // Modify our viewport, this requires a lock since it affects // rendering. We have to switch signs here because our delta // is negative down but our viewport is positive down. - try self.io.terminal.scrollViewport(.{ .delta = y.delta * -1 }); + self.io.terminal.scrollViewport(.{ .delta = y.delta * -1 }); } } @@ -4267,6 +4409,9 @@ fn maybePromptClick(self: *Surface) !bool { // do anything. if (screen.semantic_prompt.click == .none) return false; + // If cursor-click-to-move is disabled, we don't do any prompt clicking. + if (!self.config.cursor_click_to_move) return false; + // If our cursor isn't currently at a prompt then we don't handle // prompt clicks because we can't move if we're not in a prompt! if (!t.cursorIsAtPrompt()) return false; @@ -5063,7 +5208,7 @@ pub fn posToViewport(self: Surface, xpos: f64, ypos: f64) terminal.point.Coordin /// /// Precondition: the render_state mutex must be held. fn scrollToBottom(self: *Surface) !void { - try self.io.terminal.scrollViewport(.{ .bottom = {} }); + self.io.terminal.scrollViewport(.{ .bottom = {} }); try self.queueRender(); } diff --git a/src/apprt/action.zig b/src/apprt/action.zig index 1d9ef633c7d..55e80a70063 100644 --- a/src/apprt/action.zig +++ b/src/apprt/action.zig @@ -7,6 +7,7 @@ const input = @import("../input.zig"); const renderer = @import("../renderer.zig"); const terminal = @import("../terminal/main.zig"); const CoreSurface = @import("../Surface.zig"); +const lib = @import("../lib/main.zig"); /// The target for an action. This is generally the thing that had focus /// while the action was made but the concept of "focus" is not guaranteed @@ -19,6 +20,10 @@ pub const Target = union(Key) { pub const Key = enum(c_int) { app, surface, + + test "ghostty.h Target.Key" { + try lib.checkGhosttyHEnum(Key, "GHOSTTY_TARGET_"); + } }; // Sync with: ghostty_target_u @@ -109,7 +114,7 @@ pub const Action = union(Key) { /// Toggle the quick terminal in or out. toggle_quick_terminal, - /// Toggle the command palette. This currently only works on macOS. + /// Toggle the command palette. toggle_command_palette, /// Toggle the visibility of all Ghostty terminal windows. @@ -401,6 +406,10 @@ pub const Action = union(Key) { search_selected, readonly, copy_title_to_clipboard, + + test "ghostty.h Action.Key" { + try lib.checkGhosttyHEnum(Key, "GHOSTTY_ACTION_"); + } }; /// Sync with: ghostty_action_u @@ -482,6 +491,10 @@ pub const SplitDirection = enum(c_int) { down, left, up, + + test "ghostty.h SplitDirection" { + try lib.checkGhosttyHEnum(SplitDirection, "GHOSTTY_SPLIT_DIRECTION_"); + } }; // This is made extern (c_int) to make interop easier with our embedded @@ -494,6 +507,10 @@ pub const GotoSplit = enum(c_int) { left, down, right, + + test "ghostty.h GotoSplit" { + try lib.checkGhosttyHEnum(GotoSplit, "GHOSTTY_GOTO_SPLIT_"); + } }; // This is made extern (c_int) to make interop easier with our embedded @@ -501,6 +518,10 @@ pub const GotoSplit = enum(c_int) { pub const GotoWindow = enum(c_int) { previous, next, + + test "ghostty.h GotoWindow" { + try lib.checkGhosttyHEnum(GotoWindow, "GHOSTTY_GOTO_WINDOW_"); + } }; /// The amount to resize the split by and the direction to resize it in. @@ -513,6 +534,10 @@ pub const ResizeSplit = extern struct { down, left, right, + + test "ghostty.h ResizeSplit.Direction" { + try lib.checkGhosttyHEnum(Direction, "GHOSTTY_RESIZE_SPLIT_"); + } }; }; @@ -528,6 +553,11 @@ pub const GotoTab = enum(c_int) { next = -2, last = -3, _, + + // TODO: check non-exhaustive enums + // test "ghostty.h GotoTab" { + // try lib.checkGhosttyHEnum(GotoTab, "GHOSTTY_GOTO_TAB_"); + // } }; /// The fullscreen mode to toggle to if we're moving to fullscreen. @@ -539,18 +569,30 @@ pub const Fullscreen = enum(c_int) { macos_non_native, macos_non_native_visible_menu, macos_non_native_padded_notch, + + test "ghostty.h Fullscreen" { + try lib.checkGhosttyHEnum(Fullscreen, "GHOSTTY_FULLSCREEN_"); + } }; pub const FloatWindow = enum(c_int) { on, off, toggle, + + test "ghostty.h FloatWindow" { + try lib.checkGhosttyHEnum(FloatWindow, "GHOSTTY_FLOAT_WINDOW_"); + } }; pub const SecureInput = enum(c_int) { on, off, toggle, + + test "ghostty.h SecureInput" { + try lib.checkGhosttyHEnum(SecureInput, "GHOSTTY_SECURE_INPUT_"); + } }; /// The inspector mode to toggle to if we're toggling the inspector. @@ -558,27 +600,47 @@ pub const Inspector = enum(c_int) { toggle, show, hide, + + test "ghostty.h Inspector" { + try lib.checkGhosttyHEnum(Inspector, "GHOSTTY_INSPECTOR_"); + } }; pub const QuitTimer = enum(c_int) { start, stop, + + test "ghostty.h QuitTimer" { + try lib.checkGhosttyHEnum(QuitTimer, "GHOSTTY_QUIT_TIMER_"); + } }; pub const Readonly = enum(c_int) { off, on, + + test "ghostty.h Readonly" { + try lib.checkGhosttyHEnum(Readonly, "GHOSTTY_READONLY_"); + } }; pub const MouseVisibility = enum(c_int) { visible, hidden, + + test "ghostty.h MouseVisibility" { + try lib.checkGhosttyHEnum(MouseVisibility, "GHOSTTY_MOUSE_"); + } }; /// Whether to prompt for the surface title or tab title. pub const PromptTitle = enum(c_int) { surface, tab, + + test "ghostty.h PromptTitle" { + try lib.checkGhosttyHEnum(PromptTitle, "GHOSTTY_PROMPT_TITLE_"); + } }; pub const MouseOverLink = struct { @@ -782,6 +844,11 @@ pub const ColorKind = enum(c_int) { // 0+ values indicate a palette index _, + + // TODO: check non-non-exhaustive enums + // test "ghostty.h ColorKind" { + // try lib.checkGhosttyHEnum(ColorKind, "GHOSTTY_COLOR_KIND_"); + // } }; pub const ReloadConfig = extern struct { @@ -832,6 +899,10 @@ pub const OpenUrl = struct { /// The URL is known to contain HTML content. html, + + test "ghostty.h OpenUrl.Kind" { + try lib.checkGhosttyHEnum(Kind, "GHOSTTY_ACTION_OPEN_URL_KIND_"); + } }; // Sync with: ghostty_action_open_url_s @@ -858,6 +929,10 @@ pub const CloseTabMode = enum(c_int) { other, /// Close all tabs to the right of the current tab. right, + + test "ghostty.h CloseTabMode" { + try lib.checkGhosttyHEnum(CloseTabMode, "GHOSTTY_ACTION_CLOSE_TAB_MODE_"); + } }; pub const CommandFinished = struct { @@ -922,3 +997,7 @@ pub const SearchSelected = struct { }; } }; + +test { + _ = std.testing.refAllDeclsRecursive(@This()); +} diff --git a/src/apprt/embedded.zig b/src/apprt/embedded.zig index dcf8a635790..f1c370dcbe7 100644 --- a/src/apprt/embedded.zig +++ b/src/apprt/embedded.zig @@ -23,6 +23,17 @@ const Config = configpkg.Config; const log = std.log.scoped(.embedded_window); +fn cmuxSurfaceBootstrapTraceEnabled() bool { + return std.posix.getenv("CMUX_SURFACE_BOOTSTRAP_DEBUG") != null or + std.posix.getenv("CMUX_PANE_STRIP_MOTION_SETUP") != null or + std.posix.getenv("CMUX_UI_TEST_PANE_STRIP_MOTION_SETUP") != null; +} + +fn cmuxSurfaceBootstrapTrace(comptime fmt: []const u8, args: anytype) void { + if (!cmuxSurfaceBootstrapTraceEnabled()) return; + std.debug.print("[CMUXSURFACE] " ++ fmt ++ "\n", args); +} + pub const resourcesDir = internal_os.resourcesDir; pub const App = struct { @@ -238,14 +249,33 @@ pub const App = struct { /// Create a new surface for the app. fn newSurface(self: *App, opts: Surface.Options) !*Surface { + cmuxSurfaceBootstrapTrace( + "app.newSurface begin context={} scale={d:.3} font={d:.3} env_count={} wd={} cmd={}", + .{ + opts.context, + opts.scale_factor, + opts.font_size, + opts.env_var_count, + @intFromBool(opts.working_directory != null), + @intFromBool(opts.command != null), + }, + ); + // Grab a surface allocation because we're going to need it. - var surface = try self.core_app.alloc.create(Surface); + var surface = self.core_app.alloc.create(Surface) catch |err| { + cmuxSurfaceBootstrapTrace("app.newSurface alloc failed err={}", .{err}); + return err; + }; errdefer self.core_app.alloc.destroy(surface); // Create the surface - try surface.init(self, opts); + surface.init(self, opts) catch |err| { + cmuxSurfaceBootstrapTrace("app.newSurface init failed err={}", .{err}); + return err; + }; errdefer surface.deinit(); + cmuxSurfaceBootstrapTrace("app.newSurface success surface_ptr=0x{x}", .{@intFromPtr(surface)}); return surface; } @@ -462,6 +492,17 @@ pub const Surface = struct { }; pub fn init(self: *Surface, app: *App, opts: Options) !void { + cmuxSurfaceBootstrapTrace( + "embedded.Surface.init begin context={} scale={d:.3} font={d:.3} env_count={} wd={} cmd={}", + .{ + opts.context, + opts.scale_factor, + opts.font_size, + opts.env_var_count, + @intFromBool(opts.working_directory != null), + @intFromBool(opts.command != null), + }, + ); self.* = .{ .app = app, .platform = try .init(opts.platform_tag, opts.platform), @@ -476,12 +517,20 @@ pub const Surface = struct { }; // Add ourselves to the list of surfaces on the app. - try app.core_app.addSurface(self); + app.core_app.addSurface(self) catch |err| { + cmuxSurfaceBootstrapTrace("embedded.Surface.init addSurface failed err={}", .{err}); + return err; + }; errdefer app.core_app.deleteSurface(self); + cmuxSurfaceBootstrapTrace("embedded.Surface.init addSurface ok", .{}); // Shallow copy the config so that we can modify it. - var config = try apprt.surface.newConfig(app.core_app, &app.config, opts.context); + var config = apprt.surface.newConfig(app.core_app, &app.config, opts.context) catch |err| { + cmuxSurfaceBootstrapTrace("embedded.Surface.init newConfig failed err={}", .{err}); + return err; + }; defer config.deinit(); + cmuxSurfaceBootstrapTrace("embedded.Surface.init newConfig ok", .{}); // If we have a working directory from the options then we set it. if (opts.working_directory) |c_wd| { @@ -566,21 +615,30 @@ pub const Surface = struct { // Initialize our surface right away. We're given a view that is // ready to use. - try self.core_surface.init( + self.core_surface.init( app.core_app.alloc, &config, app.core_app, app, self, - ); + ) catch |err| { + cmuxSurfaceBootstrapTrace("embedded.Surface.init core_surface.init failed err={}", .{err}); + return err; + }; errdefer self.core_surface.deinit(); + cmuxSurfaceBootstrapTrace("embedded.Surface.init core_surface.init ok", .{}); // If our options requested a specific font-size, set that. if (opts.font_size != 0) { var font_size = self.core_surface.font_size; font_size.points = opts.font_size; - try self.core_surface.setFontSize(font_size); + self.core_surface.setFontSize(font_size) catch |err| { + cmuxSurfaceBootstrapTrace("embedded.Surface.init setFontSize failed err={}", .{err}); + return err; + }; } + + cmuxSurfaceBootstrapTrace("embedded.Surface.init success", .{}); } pub fn deinit(self: *Surface) void { @@ -781,6 +839,11 @@ pub const Surface = struct { } pub fn updateSize(self: *Surface, width: u32, height: u32) void { + // A 0-sized surface can't be rendered and is commonly produced transiently + // by UI/layout systems during split/resize operations. Treat it as a no-op + // so we keep the last valid size/content until a real size arrives. + if (width == 0 or height == 0) return; + // Runtimes sometimes generate superfluous resize events even // if the size did not actually change (SwiftUI). We check // that the size actually changed from what we last recorded @@ -848,7 +911,7 @@ pub const Surface = struct { mods: input.Mods, ) void { // Convert our unscaled x/y to scaled. - self.cursor_pos = self.cursorPosToPixels(.{ + const pos = self.cursorPosToPixels(.{ .x = @floatCast(x), .y = @floatCast(y), }) catch |err| { @@ -859,6 +922,19 @@ pub const Surface = struct { return; }; + // There are cases where the platform reports a mouse motion event + // without the cursor actually moving. For example, on macOS, updating + // the window title can trigger a phantom mouse-move event at the same + // coordinates. This can cause the mouse to incorrectly unhide when + // mouse-hide-while-typing is enabled (commonly seen with TUI apps + // like Zellij that frequently update the title). To prevent incorrect + // behavior, we only continue with callback logic if the cursor has + // actually moved. + if (@abs(self.cursor_pos.x - pos.x) < 1 and + @abs(self.cursor_pos.y - pos.y) < 1) return; + + self.cursor_pos = pos; + self.core_surface.cursorPosCallback(self.cursor_pos, mods) catch |err| { log.err("error in cursor pos callback err={}", .{err}); return; @@ -1519,6 +1595,7 @@ pub const CAPI = struct { opts: *const apprt.Surface.Options, ) ?*Surface { return surface_new_(app, opts) catch |err| { + cmuxSurfaceBootstrapTrace("ghostty_surface_new failed err={}", .{err}); log.err("error initializing surface err={}", .{err}); return null; }; @@ -1579,6 +1656,22 @@ pub const CAPI = struct { return surface.core_surface.hasSelection(); } + /// Start a selection at the active cursor cell. + export fn ghostty_surface_select_cursor_cell(surface: *Surface) bool { + return surface.core_surface.selectCursorCell() catch |err| { + log.warn("error selecting cursor cell err={}", .{err}); + return false; + }; + } + + /// Clear the active selection. + export fn ghostty_surface_clear_selection(surface: *Surface) bool { + return surface.core_surface.clearSelection() catch |err| { + log.warn("error clearing selection err={}", .{err}); + return false; + }; + } + /// Same as ghostty_surface_read_text but reads from the user selection, /// if any. export fn ghostty_surface_read_selection( diff --git a/src/apprt/gtk/Surface.zig b/src/apprt/gtk/Surface.zig index 918e77146ec..715973671c0 100644 --- a/src/apprt/gtk/Surface.zig +++ b/src/apprt/gtk/Surface.zig @@ -2,6 +2,7 @@ const Self = @This(); const std = @import("std"); const apprt = @import("../../apprt.zig"); +const configpkg = @import("../../config.zig"); const CoreSurface = @import("../../Surface.zig"); const ApprtApp = @import("App.zig"); const Application = @import("class/application.zig").Application; diff --git a/src/apprt/gtk/class/application.zig b/src/apprt/gtk/class/application.zig index c24352c180e..c3ff51e0f76 100644 --- a/src/apprt/gtk/class/application.zig +++ b/src/apprt/gtk/class/application.zig @@ -22,6 +22,7 @@ const xev = @import("../../../global.zig").xev; const Binding = @import("../../../input.zig").Binding; const CoreConfig = configpkg.Config; const CoreSurface = @import("../../../Surface.zig"); +const lib = @import("../../../lib/main.zig"); const ext = @import("../ext.zig"); const key = @import("../key.zig"); @@ -709,6 +710,7 @@ pub const Application = extern struct { .app => null, .surface => |v| v, }, + .none, ), .open_config => return Action.openConfig(self), @@ -1669,17 +1671,30 @@ pub const Application = extern struct { ) callconv(.c) void { log.debug("received new window action", .{}); - parameter: { + var arena: std.heap.ArenaAllocator = .init(Application.default().allocator()); + defer arena.deinit(); + + const alloc = arena.allocator(); + + var working_directory: ?[:0]const u8 = null; + var title: ?[:0]const u8 = null; + var command: ?configpkg.Command = null; + var args: std.ArrayList([:0]const u8) = .empty; + + overrides: { // were we given a parameter? - const parameter = parameter_ orelse break :parameter; + const parameter = parameter_ orelse break :overrides; const as_variant_type = glib.VariantType.new("as"); defer as_variant_type.free(); // ensure that the supplied parameter is an array of strings if (glib.Variant.isOfType(parameter, as_variant_type) == 0) { - log.warn("parameter is of type {s}", .{parameter.getTypeString()}); - break :parameter; + log.warn("parameter is of type '{s}', not '{s}'", .{ + parameter.getTypeString(), + as_variant_type.peekString()[0..as_variant_type.getStringLength()], + }); + break :overrides; } const s_variant_type = glib.VariantType.new("s"); @@ -1688,7 +1703,10 @@ pub const Application = extern struct { var it: glib.VariantIter = undefined; _ = it.init(parameter); - while (it.nextValue()) |value| { + var e_seen: bool = false; + var i: usize = 0; + + while (it.nextValue()) |value| : (i += 1) { defer value.unref(); // just to be sure @@ -1698,13 +1716,64 @@ pub const Application = extern struct { const buf = value.getString(&len); const str = buf[0..len]; - log.debug("new-window command argument: {s}", .{str}); + log.debug("new-window argument: {d} {s}", .{ i, str }); + + if (e_seen) { + const cpy = alloc.dupeZ(u8, str) catch |err| { + log.warn("unable to duplicate argument {d} {s}: {t}", .{ i, str, err }); + break :overrides; + }; + args.append(alloc, cpy) catch |err| { + log.warn("unable to append argument {d} {s}: {t}", .{ i, str, err }); + break :overrides; + }; + continue; + } + + if (std.mem.eql(u8, str, "-e")) { + e_seen = true; + continue; + } + + if (lib.cutPrefix(u8, str, "--command=")) |v| { + var cmd: configpkg.Command = undefined; + cmd.parseCLI(alloc, v) catch |err| { + log.warn("unable to parse command: {t}", .{err}); + continue; + }; + command = cmd; + continue; + } + if (lib.cutPrefix(u8, str, "--working-directory=")) |v| { + working_directory = alloc.dupeZ(u8, std.mem.trim(u8, v, &std.ascii.whitespace)) catch |err| wd: { + log.warn("unable to duplicate working directory: {t}", .{err}); + break :wd null; + }; + continue; + } + if (lib.cutPrefix(u8, str, "--title=")) |v| { + title = alloc.dupeZ(u8, std.mem.trim(u8, v, &std.ascii.whitespace)) catch |err| t: { + log.warn("unable to duplicate title: {t}", .{err}); + break :t null; + }; + continue; + } } } - _ = self.core().mailbox.push(.{ - .new_window = .{}, - }, .{ .forever = {} }); + if (args.items.len > 0) { + command = .{ + .direct = args.items, + }; + } + + Action.newWindow(self, null, .{ + .command = command, + .working_directory = working_directory, + .title = title, + }) catch |err| { + log.warn("unable to create new window: {t}", .{err}); + }; } pub fn actionOpenConfig( @@ -2151,6 +2220,13 @@ const Action = struct { pub fn newWindow( self: *Application, parent: ?*CoreSurface, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, ) !void { // Note that we've requested a window at least once. This is used // to trigger quit on no windows. Note I'm not sure if this is REALLY @@ -2159,14 +2235,32 @@ const Action = struct { // was a delay in the event loop before we created a Window. self.private().requested_window = true; - const win = Window.new(self); - initAndShowWindow(self, win, parent); + const win = Window.new(self, .{ + .title = overrides.title, + }); + initAndShowWindow( + self, + win, + parent, + .{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }, + ); } fn initAndShowWindow( self: *Application, win: *Window, parent: ?*CoreSurface, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, ) void { // Setup a binding so that whenever our config changes so does the // window. There's never a time when the window config should be out @@ -2180,7 +2274,23 @@ const Action = struct { ); // Create a new tab with window context (first tab in new window) - win.newTabForWindow(parent); + win.newTabForWindow(parent, .{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }); + + // Estimate the initial window size before presenting so the window + // manager can position it correctly. + if (win.getActiveSurface()) |surface| { + surface.estimateInitialSize(); + if (surface.getDefaultSize()) |size| { + win.as(gtk.Window).setDefaultSize( + @intCast(size.width), + @intCast(size.height), + ); + } + } // Show the window gtk.Window.present(win.as(gtk.Window)); @@ -2494,7 +2604,7 @@ const Action = struct { .@"quick-terminal" = true, }); assert(win.isQuickTerminal()); - initAndShowWindow(self, win, null); + initAndShowWindow(self, win, null, .none); return true; } diff --git a/src/apprt/gtk/class/command_palette.zig b/src/apprt/gtk/class/command_palette.zig index 0d91c43b273..9c79f2712d8 100644 --- a/src/apprt/gtk/class/command_palette.zig +++ b/src/apprt/gtk/class/command_palette.zig @@ -691,12 +691,12 @@ const Command = extern struct { defer surface.unref(); const alloc = priv.arena.allocator(); - const surface_title = surface.getTitle() orelse "Untitled"; + const effective_title = surface.getEffectiveTitle() orelse "Untitled"; j.title = std.fmt.allocPrintSentinel( alloc, "Focus: {s}", - .{surface_title}, + .{effective_title}, 0, ) catch null; @@ -717,8 +717,7 @@ const Command = extern struct { defer surface.unref(); const alloc = priv.arena.allocator(); - - const title = surface.getTitle() orelse "Untitled"; + const title = surface.getEffectiveTitle() orelse "Untitled"; const pwd = surface.getPwd(); if (pwd) |p| { diff --git a/src/apprt/gtk/class/imgui_widget.zig b/src/apprt/gtk/class/imgui_widget.zig index 01b3f3e5c52..0ef753a87d5 100644 --- a/src/apprt/gtk/class/imgui_widget.zig +++ b/src/apprt/gtk/class/imgui_widget.zig @@ -257,8 +257,18 @@ pub const ImguiWidget = extern struct { priv.tick_callback_id = 0; } + // Unrealize is not guaranteed to be called with a current GL context, + // so we make it current for ImGui cleanup. + priv.gl_area.makeCurrent(); + if (priv.gl_area.getError()) |err| { + log.warn("GLArea for Dear ImGui widget failed to realize: {s}", .{err.f_message orelse "(unknown)"}); + return; + } + self.setCurrentContext() catch return; - cimgui.ImGui_ImplOpenGL3_Shutdown(); + cimgui.ImGui_ImplOpenGL3_ShutdownWithLoaderCleanup(); + cimgui.c.ImGui_DestroyContext(priv.ig_context); + priv.ig_context = null; } /// Handle a request to resize the GLArea diff --git a/src/apprt/gtk/class/split_tree.zig b/src/apprt/gtk/class/split_tree.zig index 0ff7e60441d..311fbd8a6cf 100644 --- a/src/apprt/gtk/class/split_tree.zig +++ b/src/apprt/gtk/class/split_tree.zig @@ -7,6 +7,7 @@ const glib = @import("glib"); const gobject = @import("gobject"); const gtk = @import("gtk"); +const configpkg = @import("../../../config.zig"); const apprt = @import("../../../apprt.zig"); const ext = @import("../ext.zig"); const gresource = @import("../build/gresource.zig"); @@ -157,11 +158,6 @@ pub const SplitTree = extern struct { /// used to debounce updates. rebuild_source: ?c_uint = null, - /// Tracks whether we want a rebuild to happen at the next tick - /// that our surface tree has no surfaces with parents. See the - /// propTree function for a lot more details. - rebuild_pending: bool, - /// Used to store state about a pending surface close for the /// close dialog. pending_close: ?Surface.Tree.Node.Handle, @@ -208,11 +204,22 @@ pub const SplitTree = extern struct { self: *Self, direction: Surface.Tree.Split.Direction, parent_: ?*Surface, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, ) Allocator.Error!void { const alloc = Application.default().allocator(); // Create our new surface. - const surface: *Surface = .new(); + const surface: *Surface = .new(.{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }); defer surface.unref(); _ = surface.refSink(); @@ -408,13 +415,6 @@ pub const SplitTree = extern struct { self, .{ .detail = "focused" }, ); - _ = gobject.Object.signals.notify.connect( - surface.as(gtk.Widget), - *Self, - propSurfaceParent, - self, - .{ .detail = "parent" }, - ); } } @@ -478,20 +478,6 @@ pub const SplitTree = extern struct { return surface; } - /// Returns whether any of the surfaces in the tree have a parent. - /// This is important because we can only rebuild the widget tree - /// when every surface has no parent. - fn getTreeHasParents(self: *Self) bool { - const tree: *const Surface.Tree = self.getTree() orelse &.empty; - var it = tree.iterator(); - while (it.next()) |entry| { - const surface = entry.view; - if (surface.as(gtk.Widget).getParent() != null) return true; - } - - return false; - } - pub fn getHasSurfaces(self: *Self) bool { const tree: *const Surface.Tree = self.private().tree orelse &.empty; return !tree.isEmpty(); @@ -638,6 +624,7 @@ pub const SplitTree = extern struct { self.newSplit( direction, self.getActiveSurface(), + .none, ) catch |err| { log.warn("new split failed error={}", .{err}); }; @@ -779,27 +766,6 @@ pub const SplitTree = extern struct { self.as(gobject.Object).notifyByPspec(properties.@"active-surface".impl.param_spec); } - fn propSurfaceParent( - _: *gtk.Widget, - _: *gobject.ParamSpec, - self: *Self, - ) callconv(.c) void { - const priv = self.private(); - - // If we're not waiting to rebuild then ignore this. - if (!priv.rebuild_pending) return; - - // If any parents still exist in our tree then don't do anything. - if (self.getTreeHasParents()) return; - - // Schedule the rebuild. Note, I tried to do this immediately (not - // on an idle tick) and it didn't work and had obvious rendering - // glitches. Something to look into in the future. - assert(priv.rebuild_source == null); - priv.rebuild_pending = false; - priv.rebuild_source = glib.idleAdd(onRebuild, self); - } - fn propTree( self: *Self, _: *gobject.ParamSpec, @@ -807,6 +773,12 @@ pub const SplitTree = extern struct { ) callconv(.c) void { const priv = self.private(); + // No matter what we notify + self.as(gobject.Object).freezeNotify(); + defer self.as(gobject.Object).thawNotify(); + self.as(gobject.Object).notifyByPspec(properties.@"has-surfaces".impl.param_spec); + self.as(gobject.Object).notifyByPspec(properties.@"is-zoomed".impl.param_spec); + // If we were planning a rebuild, always remove that so we can // start from a clean slate. if (priv.rebuild_source) |v| { @@ -816,38 +788,22 @@ pub const SplitTree = extern struct { priv.rebuild_source = null; } - // We need to wait for all our previous surfaces to lose their - // parent before adding them to a new one. I'm not sure if its a GTK - // bug, but manually forcing an unparent of all prior surfaces AND - // adding them to a new parent in the same tick causes the GLArea - // to break (it seems). I didn't investigate too deeply. - // - // Note, we also can't just defer to an idle tick (via idleAdd) because - // sometimes it takes more than one tick for all our surfaces to - // lose their parent. - // - // To work around this issue, if we have any surfaces that have - // a parent, we set the build pending flag and wait for the tree - // to be fully parent-free before building. - priv.rebuild_pending = self.getTreeHasParents(); - - // Reset our prior bin. This will force all prior surfaces to - // unparent... eventually. - priv.tree_bin.setChild(null); - - // If none of the surfaces we plan on drawing require an unparent - // then we can setup our tree immediately. Otherwise, it'll happen - // via the `propSurfaceParent` callback. - if (!priv.rebuild_pending and priv.rebuild_source == null) { - priv.rebuild_source = glib.idleAdd( - onRebuild, - self, - ); + // If we transitioned to an empty tree, clear immediately instead of + // waiting for an idle callback. Delaying teardown can keep the last + // surface alive during shutdown if the main loop exits first. + if (priv.tree == null) { + priv.tree_bin.setChild(null); + return; } - // Dependent properties - self.as(gobject.Object).notifyByPspec(properties.@"has-surfaces".impl.param_spec); - self.as(gobject.Object).notifyByPspec(properties.@"is-zoomed".impl.param_spec); + // Build on an idle callback so rapid tree changes are debounced. + // We keep the existing tree attached until the rebuild runs, + // which avoids transient empty frames. + assert(priv.rebuild_source == null); + priv.rebuild_source = glib.idleAdd( + onRebuild, + self, + ); } fn onRebuild(ud: ?*anyopaque) callconv(.c) c_int { @@ -857,22 +813,21 @@ pub const SplitTree = extern struct { const priv = self.private(); priv.rebuild_source = null; - // Prior to rebuilding the tree, our surface tree must be - // comprised of fully orphaned surfaces. - assert(!self.getTreeHasParents()); - // Rebuild our tree const tree: *const Surface.Tree = self.private().tree orelse &.empty; - if (!tree.isEmpty()) { - priv.tree_bin.setChild(self.buildTree( + if (tree.isEmpty()) { + priv.tree_bin.setChild(null); + } else { + const built = self.buildTree( tree, tree.zoomed orelse .root, - )); + ); + defer built.deinit(); + priv.tree_bin.setChild(built.widget); } - // If we have a last focused surface, we need to refocus it, because - // during the frame between setting the bin to null and rebuilding, - // GTK will reset our focus state (as it should!) + // Replacing our tree widget hierarchy can reset focus state. + // If we have a last-focused surface, restore focus to it. if (priv.last_focused.get()) |v| { defer v.unref(); v.grabFocus(); @@ -889,26 +844,120 @@ pub const SplitTree = extern struct { /// Builds the widget tree associated with a surface split tree. /// - /// The final returned widget is expected to be a floating reference, - /// ready to be attached to a parent widget. + /// Returned widgets are expected to be attached to a parent by the caller. + /// + /// If `release_ref` is true then `widget` has an extra temporary + /// reference that must be released once it is parented in the rebuilt + /// tree. + const BuildTreeResult = struct { + widget: *gtk.Widget, + release_ref: bool, + + pub fn initNew(widget: *gtk.Widget) BuildTreeResult { + return .{ .widget = widget, .release_ref = false }; + } + + pub fn initReused(widget: *gtk.Widget) BuildTreeResult { + // We add a temporary ref to the widget to ensure it doesn't + // get destroyed while we're rebuilding the tree and detaching + // it from its old parent. The caller is expected to release + // this ref once the widget is attached to its new parent. + _ = widget.as(gobject.Object).ref(); + + // Detach after we ref it so that this doesn't mark the + // widget for destruction. + detachWidget(widget); + + return .{ .widget = widget, .release_ref = true }; + } + + pub fn deinit(self: BuildTreeResult) void { + // If we have to release a ref, do it. + if (self.release_ref) self.widget.as(gobject.Object).unref(); + } + }; + fn buildTree( self: *Self, tree: *const Surface.Tree, current: Surface.Tree.Node.Handle, - ) *gtk.Widget { + ) BuildTreeResult { return switch (tree.nodes[current.idx()]) { - .leaf => |v| gobject.ext.newInstance(SurfaceScrolledWindow, .{ - .surface = v, - }).as(gtk.Widget), - .split => |s| SplitTreeSplit.new( - current, - &s, - self.buildTree(tree, s.left), - self.buildTree(tree, s.right), - ).as(gtk.Widget), + .leaf => |v| leaf: { + const window = ext.getAncestor( + SurfaceScrolledWindow, + v.as(gtk.Widget), + ) orelse { + // The surface isn't in a window already so we don't + // have to worry about reuse. + break :leaf .initNew(gobject.ext.newInstance( + SurfaceScrolledWindow, + .{ .surface = v }, + ).as(gtk.Widget)); + }; + + // Keep this widget alive while we detach it from the + // old tree and adopt it into the new one. + break :leaf .initReused(window.as(gtk.Widget)); + }, + .split => |s| split: { + const left = self.buildTree(tree, s.left); + defer left.deinit(); + const right = self.buildTree(tree, s.right); + defer right.deinit(); + + break :split .initNew(SplitTreeSplit.new( + current, + &s, + left.widget, + right.widget, + ).as(gtk.Widget)); + }, }; } + /// Detach a split widget from its current parent. + /// + /// We intentionally use parent-specific child APIs when possible + /// (`GtkPaned.setStartChild/setEndChild`, `AdwBin.setChild`) instead of + /// calling `gtk.Widget.unparent` directly. Container implementations track + /// child pointers/properties internally, and those setters are the path + /// that keeps container state and notifications in sync. + fn detachWidget(widget: *gtk.Widget) void { + const parent = widget.getParent() orelse return; + + // Surface will be in a paned when it is split. + if (gobject.ext.cast(gtk.Paned, parent)) |paned| { + if (paned.getStartChild()) |child| { + if (child == widget) { + paned.setStartChild(null); + return; + } + } + + if (paned.getEndChild()) |child| { + if (child == widget) { + paned.setEndChild(null); + return; + } + } + } + + // Surface will be in a bin when it is not split. + if (gobject.ext.cast(adw.Bin, parent)) |bin| { + if (bin.getChild()) |child| { + if (child == widget) { + bin.setChild(null); + return; + } + } + } + + // Fallback for unexpected parents where we don't have a typed + // container API available. + widget.unparent(); + } + //--------------------------------------------------------------- // Class diff --git a/src/apprt/gtk/class/surface.zig b/src/apprt/gtk/class/surface.zig index 7627470a587..8ce9ac1d18e 100644 --- a/src/apprt/gtk/class/surface.zig +++ b/src/apprt/gtk/class/surface.zig @@ -10,6 +10,7 @@ const gtk = @import("gtk"); const apprt = @import("../../../apprt.zig"); const build_config = @import("../../../build_config.zig"); +const configpkg = @import("../../../config.zig"); const datastruct = @import("../../../datastruct/main.zig"); const font = @import("../../../font/main.zig"); const input = @import("../../../input.zig"); @@ -693,6 +694,10 @@ pub const Surface = extern struct { /// Whether primary paste (middle-click paste) is enabled. gtk_enable_primary_paste: bool = true, + /// True when a left mouse down was consumed purely for a focus change, + /// and the matching left mouse release should also be suppressed. + suppress_left_mouse_release: bool = false, + /// How much pending horizontal scroll do we have? pending_horizontal_scroll: f64 = 0.0, @@ -700,11 +705,33 @@ pub const Surface = extern struct { /// stops scrolling. pending_horizontal_scroll_reset: ?c_uint = null, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + } = .none, + pub var offset: c_int = 0; }; - pub fn new() *Self { - return gobject.ext.newInstance(Self, .{}); + pub fn new(overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }) *Self { + const self = gobject.ext.newInstance(Self, .{ + .@"title-override" = overrides.title, + }); + const alloc = Application.default().allocator(); + const priv: *Private = self.private(); + priv.overrides = .{ + .command = if (overrides.command) |c| c.clone(alloc) catch null else null, + .working_directory = if (overrides.working_directory) |wd| alloc.dupeZ(u8, wd) catch null else null, + }; + return self; } pub fn core(self: *Self) ?*CoreSurface { @@ -796,10 +823,11 @@ pub const Surface = extern struct { /// should be applied to the surface fn closureShouldUnfocusedSplitBeShown( _: *Self, + search_active: c_int, focused: c_int, is_split: c_int, ) callconv(.c) c_int { - return @intFromBool(focused == 0 and is_split != 0); + return @intFromBool(search_active == 0 and focused == 0 and is_split != 0); } pub fn toggleFullscreen(self: *Self) void { @@ -1849,6 +1877,7 @@ pub const Surface = extern struct { } fn finalize(self: *Self) callconv(.c) void { + const alloc = Application.default().allocator(); const priv = self.private(); if (priv.core_surface) |v| { // Remove ourselves from the list of known surfaces in the app. @@ -1862,7 +1891,6 @@ pub const Surface = extern struct { // Deinit the surface v.deinit(); - const alloc = Application.default().allocator(); alloc.destroy(v); priv.core_surface = null; @@ -1895,9 +1923,16 @@ pub const Surface = extern struct { glib.free(@ptrCast(@constCast(v))); priv.title_override = null; } + if (priv.overrides.command) |c| { + c.deinit(alloc); + priv.overrides.command = null; + } + if (priv.overrides.working_directory) |wd| { + alloc.free(wd); + priv.overrides.working_directory = null; + } // Clean up key sequence and key table state - const alloc = Application.default().allocator(); for (priv.key_sequence.items) |s| alloc.free(s); priv.key_sequence.deinit(alloc); for (priv.key_tables.items) |s| alloc.free(s); @@ -2005,6 +2040,55 @@ pub const Surface = extern struct { self.as(gobject.Object).notifyByPspec(properties.@"default-size".impl.param_spec); } + /// Estimate and set the initial window size from config and font metrics. + /// This can be called before the core surface exists to set up the window + /// size before presenting. This is an estimate because it does not take + /// into account any padding that may need to be added to the window. + pub fn estimateInitialSize(self: *Self) void { + const priv: *Private = self.private(); + const config_obj = priv.config orelse return; + const config = config_obj.get(); + + // Both dimensions must be configured + if (config.@"window-height" <= 0 or config.@"window-width" <= 0) return; + + const app = Application.default(); + const alloc = app.allocator(); + + // Get content scale and compute DPI + const content_scale = self.getContentScale(); + const x_dpi = content_scale.x * font.face.default_dpi; + const y_dpi = content_scale.y * font.face.default_dpi; + + const font_size: font.face.DesiredSize = .{ + .points = config.@"font-size", + .xdpi = @intFromFloat(x_dpi), + .ydpi = @intFromFloat(y_dpi), + }; + + // Get font grid for cell metrics + var derived_config = font.SharedGridSet.DerivedConfig.init(alloc, config) catch return; + defer derived_config.deinit(); + + const font_grid_key, const font_grid = app.core().font_grid_set.ref( + &derived_config, + font_size, + ) catch return; + defer app.core().font_grid_set.deref(font_grid_key); + + const cell = font_grid.cellSize(); + + const width = @max(CoreSurface.min_window_width_cells, config.@"window-width") * cell.width; + const height = @max(CoreSurface.min_window_height_cells, config.@"window-height") * cell.height; + const width_f32: f32 = @floatFromInt(width); + const height_f32: f32 = @floatFromInt(height); + + const final_width: u32 = @intFromFloat(@ceil(width_f32 / content_scale.x)); + const final_height: u32 = @intFromFloat(@ceil(height_f32 / content_scale.y)); + + self.setDefaultSize(.{ .width = final_width, .height = final_height }); + } + /// Get the key sequence list. Full transfer. fn getKeySequence(self: *Self) ?*ext.StringList { const priv = self.private(); @@ -2684,13 +2768,21 @@ pub const Surface = extern struct { // If we don't have focus, grab it. const gl_area_widget = priv.gl_area.as(gtk.Widget); - if (gl_area_widget.hasFocus() == 0) { + const had_focus = gl_area_widget.hasFocus() != 0; + if (!had_focus) { _ = gl_area_widget.grabFocus(); } // Report the event const button = translateMouseButton(gesture.as(gtk.GestureSingle).getCurrentButton()); + // If this click is only transitioning split focus, suppress it so + // it doesn't get forwarded to the terminal as a mouse event. + if (!had_focus and button == .left) { + priv.suppress_left_mouse_release = true; + return; + } + if (button == .middle and !priv.gtk_enable_primary_paste) { return; } @@ -2746,6 +2838,11 @@ pub const Surface = extern struct { const gtk_mods = event.getModifierState(); const button = translateMouseButton(gesture.as(gtk.GestureSingle).getCurrentButton()); + if (button == .left and priv.suppress_left_mouse_release) { + priv.suppress_left_mouse_release = false; + return; + } + if (button == .middle and !priv.gtk_enable_primary_paste) { return; } @@ -3247,7 +3344,7 @@ pub const Surface = extern struct { }; fn initSurface(self: *Self) InitError!void { - const priv = self.private(); + const priv: *Private = self.private(); assert(priv.core_surface == null); const gl_area = priv.gl_area; @@ -3280,6 +3377,13 @@ pub const Surface = extern struct { ); defer config.deinit(); + if (priv.overrides.command) |c| { + config.command = try c.clone(config._arena.?.allocator()); + } + if (priv.overrides.working_directory) |wd| { + config.@"working-directory" = try config._arena.?.allocator().dupeZ(u8, wd); + } + // Properties that can impact surface init if (priv.font_size_request) |size| config.@"font-size" = size.points; if (priv.pwd) |pwd| config.@"working-directory" = pwd; diff --git a/src/apprt/gtk/class/tab.zig b/src/apprt/gtk/class/tab.zig index 15e1266426c..0c60c8ccc29 100644 --- a/src/apprt/gtk/class/tab.zig +++ b/src/apprt/gtk/class/tab.zig @@ -5,6 +5,7 @@ const glib = @import("glib"); const gobject = @import("gobject"); const gtk = @import("gtk"); +const configpkg = @import("../../../config.zig"); const apprt = @import("../../../apprt.zig"); const CoreSurface = @import("../../../Surface.zig"); const ext = @import("../ext.zig"); @@ -186,22 +187,34 @@ pub const Tab = extern struct { } } - fn init(self: *Self, _: *Class) callconv(.c) void { - gtk.Widget.initTemplate(self.as(gtk.Widget)); + pub fn new(config: ?*Config, overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, - // Init our actions - self.initActionMap(); + pub const none: @This() = .{}; + }) *Self { + const tab = gobject.ext.newInstance(Tab, .{}); + + const priv: *Private = tab.private(); + + if (config) |c| priv.config = c.ref(); // If our configuration is null then we get the configuration // from the application. - const priv = self.private(); if (priv.config == null) { const app = Application.default(); priv.config = app.getConfig(); } + tab.as(gobject.Object).notifyByPspec(properties.config.impl.param_spec); + // Create our initial surface in the split tree. - priv.split_tree.newSplit(.right, null) catch |err| switch (err) { + priv.split_tree.newSplit(.right, null, .{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }) catch |err| switch (err) { error.OutOfMemory => { // TODO: We should make our "no surfaces" state more aesthetically // pleasing and show something like an "Oops, something went wrong" @@ -209,6 +222,15 @@ pub const Tab = extern struct { @panic("oom"); }, }; + + return tab; + } + + fn init(self: *Self, _: *Class) callconv(.c) void { + gtk.Widget.initTemplate(self.as(gtk.Widget)); + + // Init our actions + self.initActionMap(); } fn initActionMap(self: *Self) void { @@ -330,6 +352,10 @@ pub const Tab = extern struct { glib.free(@ptrCast(@constCast(v))); priv.title = null; } + if (priv.title_override) |v| { + glib.free(@ptrCast(@constCast(v))); + priv.title_override = null; + } gobject.Object.virtual_methods.finalize.call( Class.parent, diff --git a/src/apprt/gtk/class/window.zig b/src/apprt/gtk/class/window.zig index f96bccd642e..c01cad618d8 100644 --- a/src/apprt/gtk/class/window.zig +++ b/src/apprt/gtk/class/window.zig @@ -266,10 +266,27 @@ pub const Window = extern struct { pub var offset: c_int = 0; }; - pub fn new(app: *Application) *Self { - return gobject.ext.newInstance(Self, .{ + pub fn new( + app: *Application, + overrides: struct { + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, + ) *Self { + const win = gobject.ext.newInstance(Self, .{ .application = app, }); + + if (overrides.title) |title| { + // If the overrides have a title set, we set that immediately + // so that any applications inspecting the window states see an + // immediate title set when the window appears, rather than waiting + // possibly a few event loop ticks for it to sync from the surface. + win.as(gtk.Window).setTitle(title); + } + + return win; } fn init(self: *Self, _: *Class) callconv(.c) void { @@ -278,10 +295,14 @@ pub const Window = extern struct { // If our configuration is null then we get the configuration // from the application. const priv = self.private(); - if (priv.config == null) { + + const config = config: { + if (priv.config) |config| break :config config.get(); const app = Application.default(); - priv.config = app.getConfig(); - } + const config = app.getConfig(); + priv.config = config; + break :config config.get(); + }; // We initialize our windowing protocol to none because we can't // actually initialize this until we get realized. @@ -305,17 +326,16 @@ pub const Window = extern struct { self.initActionMap(); // Start states based on config. - if (priv.config) |config_obj| { - const config = config_obj.get(); - if (config.maximize) self.as(gtk.Window).maximize(); - if (config.fullscreen) self.as(gtk.Window).fullscreen(); - - // If we have an explicit title set, we set that immediately - // so that any applications inspecting the window states see - // an immediate title set when the window appears, rather than - // waiting possibly a few event loop ticks for it to sync from - // the surface. - if (config.title) |v| self.as(gtk.Window).setTitle(v); + if (config.maximize) self.as(gtk.Window).maximize(); + if (config.fullscreen != .false) self.as(gtk.Window).fullscreen(); + + // If we have an explicit title set, we set that immediately + // so that any applications inspecting the window states see + // an immediate title set when the window appears, rather than + // waiting possibly a few event loop ticks for it to sync from + // the surface. + if (config.title) |title| { + self.as(gtk.Window).setTitle(title); } // We always sync our appearance at the end because loading our @@ -339,6 +359,7 @@ pub const Window = extern struct { .init("close-tab", actionCloseTab, s_variant_type), .init("new-tab", actionNewTab, null), .init("new-window", actionNewWindow, null), + .init("prompt-surface-title", actionPromptSurfaceTitle, null), .init("prompt-tab-title", actionPromptTabTitle, null), .init("prompt-context-tab-title", actionPromptContextTabTitle, null), .init("ring-bell", actionRingBell, null), @@ -367,22 +388,61 @@ pub const Window = extern struct { /// at the position dictated by the `window-new-tab-position` config. /// The new tab will be selected. pub fn newTab(self: *Self, parent_: ?*CoreSurface) void { - _ = self.newTabPage(parent_, .tab); + _ = self.newTabPage(parent_, .tab, .none); } - pub fn newTabForWindow(self: *Self, parent_: ?*CoreSurface) void { - _ = self.newTabPage(parent_, .window); + pub fn newTabForWindow( + self: *Self, + parent_: ?*CoreSurface, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, + ) void { + _ = self.newTabPage( + parent_, + .window, + .{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }, + ); } - fn newTabPage(self: *Self, parent_: ?*CoreSurface, context: apprt.surface.NewSurfaceContext) *adw.TabPage { - const priv = self.private(); + fn newTabPage( + self: *Self, + parent_: ?*CoreSurface, + context: apprt.surface.NewSurfaceContext, + overrides: struct { + command: ?configpkg.Command = null, + working_directory: ?[:0]const u8 = null, + title: ?[:0]const u8 = null, + + pub const none: @This() = .{}; + }, + ) *adw.TabPage { + const priv: *Private = self.private(); const tab_view = priv.tab_view; // Create our new tab object - const tab = gobject.ext.newInstance(Tab, .{ - .config = priv.config, - }); + const tab = Tab.new( + priv.config, + .{ + .command = overrides.command, + .working_directory = overrides.working_directory, + .title = overrides.title, + }, + ); + if (parent_) |p| { + // For a new window's first tab, inherit the parent's initial size hints. + if (context == .window) { + surfaceInit(p.rt_surface.gobj(), self); + } tab.setParentWithContext(p, context); } @@ -1248,7 +1308,7 @@ pub const Window = extern struct { _: *adw.TabOverview, self: *Self, ) callconv(.c) *adw.TabPage { - return self.newTabPage(if (self.getActiveSurface()) |v| v.core() else null, .tab); + return self.newTabPage(if (self.getActiveSurface()) |v| v.core() else null, .tab, .none); } fn tabOverviewOpen( @@ -1799,6 +1859,14 @@ pub const Window = extern struct { tab.promptTabTitle(); } + fn actionPromptSurfaceTitle( + _: *gio.SimpleAction, + _: ?*glib.Variant, + self: *Window, + ) callconv(.c) void { + self.performBindingAction(.prompt_surface_title); + } + fn actionPromptTabTitle( _: *gio.SimpleAction, _: ?*glib.Variant, diff --git a/src/apprt/gtk/ipc/new_window.zig b/src/apprt/gtk/ipc/new_window.zig index 19c46e3aaa7..02fed3229ab 100644 --- a/src/apprt/gtk/ipc/new_window.zig +++ b/src/apprt/gtk/ipc/new_window.zig @@ -18,7 +18,7 @@ const DBus = @import("DBus.zig"); // `ghostty +new-window -e echo hello` would be equivalent to the following command (on a release build): // // ``` -// gdbus call --session --dest com.mitchellh.ghostty --object-path /com/mitchellh/ghostty --method org.gtk.Actions.Activate new-window-command '[<@as ["echo" "hello"]>]' [] +// gdbus call --session --dest com.mitchellh.ghostty --object-path /com/mitchellh/ghostty --method org.gtk.Actions.Activate new-window-command '[<@as ["-e" "echo" "hello"]>]' [] // ``` pub fn newWindow(alloc: Allocator, target: apprt.ipc.Target, value: apprt.ipc.Action.NewWindow) (Allocator.Error || std.Io.Writer.Error || apprt.ipc.Errors)!bool { var dbus = try DBus.init( @@ -32,10 +32,10 @@ pub fn newWindow(alloc: Allocator, target: apprt.ipc.Target, value: apprt.ipc.Ac defer dbus.deinit(alloc); if (value.arguments) |arguments| { - // If `-e` was specified on the command line, the first - // parameter is an array of strings that contain the arguments - // that came after `-e`, which will be interpreted as a command - // to run. + // If any arguments were specified on the command line, the first + // parameter is an array of strings that contain the arguments. They + // will be sent to the main Ghostty instance and interpreted as CLI + // arguments. const as_variant_type = glib.VariantType.new("as"); defer as_variant_type.free(); diff --git a/src/apprt/gtk/ui/1.2/surface.blp b/src/apprt/gtk/ui/1.2/surface.blp index d8483285ff0..794ea1801d9 100644 --- a/src/apprt/gtk/ui/1.2/surface.blp +++ b/src/apprt/gtk/ui/1.2/surface.blp @@ -203,7 +203,7 @@ Overlay terminal_page { // Apply unfocused-split-fill and unfocused-split-opacity to current surface // this is only applied when a tab has more than one surface Revealer { - reveal-child: bind $should_unfocused_split_be_shown(template.focused, template.is-split) as ; + reveal-child: bind $should_unfocused_split_be_shown(search_overlay.active, template.focused, template.is-split) as ; transition-duration: 0; // This is all necessary so that the Revealer itself doesn't override // any input events from the other overlays. Namely, if you don't have @@ -221,7 +221,7 @@ Overlay terminal_page { DropTarget drop_target { drop => $drop(); - actions: copy; + actions: copy | move; } } diff --git a/src/apprt/gtk/ui/1.5/window.blp b/src/apprt/gtk/ui/1.5/window.blp index a139f8cc5c6..b66a9309362 100644 --- a/src/apprt/gtk/ui/1.5/window.blp +++ b/src/apprt/gtk/ui/1.5/window.blp @@ -243,7 +243,7 @@ menu main_menu { item { label: _("Change Title…"); - action: "win.prompt-title"; + action: "win.prompt-surface-title"; } item { diff --git a/src/apprt/ipc.zig b/src/apprt/ipc.zig index a6e8412e049..b37647e0212 100644 --- a/src/apprt/ipc.zig +++ b/src/apprt/ipc.zig @@ -3,6 +3,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const assert = @import("../quirks.zig").inlineAssert; +const lib = @import("../lib/main.zig"); pub const Errors = error{ /// The IPC failed. If a function returns this error, it's expected that @@ -22,6 +23,10 @@ pub const Target = union(Key) { pub const Key = enum(c_int) { class, detect, + + test "ghostty.h Target.Key" { + try lib.checkGhosttyHEnum(Key, "GHOSTTY_IPC_TARGET_"); + } }; // Sync with: ghostty_ipc_target_u @@ -106,8 +111,12 @@ pub const Action = union(enum) { }; /// Sync with: ghostty_ipc_action_tag_e - pub const Key = enum(c_uint) { + pub const Key = enum(c_int) { new_window, + + test "ghostty.h Action.Key" { + try lib.checkGhosttyHEnum(Key, "GHOSTTY_IPC_ACTION_"); + } }; /// Sync with: ghostty_ipc_action_u diff --git a/src/benchmark/CodepointWidth.zig b/src/benchmark/CodepointWidth.zig index effabb036e4..30d3f91e75f 100644 --- a/src/benchmark/CodepointWidth.zig +++ b/src/benchmark/CodepointWidth.zig @@ -6,6 +6,7 @@ const CodepointWidth = @This(); const std = @import("std"); +const builtin = @import("builtin"); const assert = std.debug.assert; const Allocator = std.mem.Allocator; const Benchmark = @import("Benchmark.zig"); @@ -104,6 +105,11 @@ fn stepNoop(ptr: *anyopaque) Benchmark.Error!void { extern "c" fn wcwidth(c: u32) c_int; fn stepWcwidth(ptr: *anyopaque) Benchmark.Error!void { + if (comptime builtin.os.tag == .windows) { + log.warn("wcwidth is not available on Windows", .{}); + return; + } + const self: *CodepointWidth = @ptrCast(@alignCast(ptr)); const f = self.data_f orelse return; diff --git a/src/build/GhosttyLibVt.zig b/src/build/GhosttyLibVt.zig index aae8ace191a..6d44c62b614 100644 --- a/src/build/GhosttyLibVt.zig +++ b/src/build/GhosttyLibVt.zig @@ -1,6 +1,7 @@ const GhosttyLibVt = @This(); const std = @import("std"); +const builtin = @import("builtin"); const assert = std.debug.assert; const RunStep = std.Build.Step.Run; const GhosttyZig = @import("GhosttyZig.zig"); @@ -61,6 +62,26 @@ pub fn initShared( .{ .include_extensions = &.{".h"} }, ); + if (lib.rootModuleTarget().abi.isAndroid()) { + // Support 16kb page sizes, required for Android 15+. + lib.link_z_max_page_size = 16384; // 16kb + + try @import("android_ndk").addPaths(b, lib); + } + + if (lib.rootModuleTarget().os.tag.isDarwin()) { + // Self-hosted x86_64 doesn't work for darwin. It may not work + // for other platforms too but definitely darwin. + lib.use_llvm = true; + + // This is required for codesign and dynamic linking to work. + lib.headerpad_max_install_names = true; + + // If we're not cross compiling then we try to find the Apple + // SDK using standard Apple tooling. + if (builtin.os.tag.isDarwin()) try @import("apple_sdk").addPaths(b, lib); + } + // Get our debug symbols const dsymutil: ?std.Build.LazyPath = dsymutil: { if (!target.result.os.tag.isDarwin()) { diff --git a/src/build/GhosttyXcodebuild.zig b/src/build/GhosttyXcodebuild.zig index 5ca4c5e9a64..81af994ca51 100644 --- a/src/build/GhosttyXcodebuild.zig +++ b/src/build/GhosttyXcodebuild.zig @@ -104,6 +104,8 @@ pub fn init( "test", "-scheme", "Ghostty", + "-skip-testing", + "GhosttyUITests", }); if (xc_arch) |arch| step.addArgs(&.{ "-arch", arch }); diff --git a/src/build/GitVersion.zig b/src/build/GitVersion.zig index 566fec2e9c9..8b368d2cd3f 100644 --- a/src/build/GitVersion.zig +++ b/src/build/GitVersion.zig @@ -39,7 +39,7 @@ pub fn detect(b: *std.Build) !Version { const short_hash = short_hash: { const output = b.runAllowFail( - &[_][]const u8{ "git", "-C", b.build_root.path orelse ".", "log", "--pretty=format:%h", "-n", "1" }, + &[_][]const u8{ "git", "-C", b.build_root.path orelse ".", "-c", "log.showSignature=false", "log", "--pretty=format:%h", "-n", "1" }, &code, .Ignore, ) catch |err| switch (err) { diff --git a/src/build/SharedDeps.zig b/src/build/SharedDeps.zig index 0ca43e78d6f..9276c99145f 100644 --- a/src/build/SharedDeps.zig +++ b/src/build/SharedDeps.zig @@ -477,7 +477,9 @@ pub fn add( .freetype = true, .@"backend-metal" = target.result.os.tag.isDarwin(), .@"backend-osx" = target.result.os.tag == .macos, - .@"backend-opengl3" = target.result.os.tag != .macos, + // OpenGL3 backend should only be built on non-Apple targets. + // Apple platforms use Metal (and macOS may also use the OSX backend). + .@"backend-opengl3" = !target.result.os.tag.isDarwin(), })) |dep| { step.root_module.addImport("dcimgui", dep.module("dcimgui")); step.linkLibrary(dep.artifact("dcimgui")); diff --git a/src/build/uucode_config.zig b/src/build/uucode_config.zig index 594a053669f..2bb0d4508b0 100644 --- a/src/build/uucode_config.zig +++ b/src/build/uucode_config.zig @@ -20,12 +20,17 @@ fn computeWidth( _ = backing; _ = tracking; - // This condition is to get the previous behavior of uucode's `wcwidth`, - // returning the width of a code point in a grapheme cluster but with the - // exception to treat emoji modifiers as width 2 so they can be displayed - // in isolation. PRs to follow will take advantage of the new uucode - // `wcwidth_standalone` vs `wcwidth_zero_in_grapheme` split. - if (data.wcwidth_zero_in_grapheme and !data.is_emoji_modifier) { + // This condition is needed as Ghostty currently has a singular concept for + // the `width` of a code point, while `uucode` splits the concept into + // `wcwidth_standalone` and `wcwidth_zero_in_grapheme`. The two cases where + // we want to use the `wcwidth_standalone` despite the code point occupying + // zero width in a grapheme (`wcwidth_zero_in_grapheme`) are emoji + // modifiers and prepend code points. For emoji modifiers we want to + // support displaying them in isolation as color patches, and if prepend + // characters were to be width 0 they would disappear from the output with + // Ghostty's current width 0 handling. Future work will take advantage of + // the new uucode `wcwidth_standalone` vs `wcwidth_zero_in_grapheme` split. + if (data.wcwidth_zero_in_grapheme and !data.is_emoji_modifier and data.grapheme_break_no_control != .prepend) { data.width = 0; } else { data.width = @min(2, data.wcwidth_standalone); @@ -37,6 +42,7 @@ const width = config.Extension{ "wcwidth_standalone", "wcwidth_zero_in_grapheme", "is_emoji_modifier", + "grapheme_break_no_control", }, .compute = &computeWidth, .fields = &.{ @@ -94,6 +100,7 @@ pub const tables = [_]config.Table{ }, .fields = &.{ width.field("width"), + wcwidth.field("wcwidth_zero_in_grapheme"), grapheme_break_no_control.field("grapheme_break_no_control"), is_symbol.field("is_symbol"), d.field("is_emoji_vs_base"), diff --git a/src/cli/list_actions.zig b/src/cli/list_actions.zig index 682eed251fb..aaef1195ee8 100644 --- a/src/cli/list_actions.zig +++ b/src/cli/list_actions.zig @@ -46,6 +46,7 @@ pub fn run(alloc: Allocator) !u8 { opts.docs, std.heap.page_allocator, ); + try stdout_writer.interface.flush(); return 0; } diff --git a/src/cli/new_window.zig b/src/cli/new_window.zig index f3f4740d12e..12acafadfc0 100644 --- a/src/cli/new_window.zig +++ b/src/cli/new_window.zig @@ -5,6 +5,8 @@ const Action = @import("../cli.zig").ghostty.Action; const apprt = @import("../apprt.zig"); const args = @import("args.zig"); const diagnostics = @import("diagnostics.zig"); +const lib = @import("../lib/main.zig"); +const homedir = @import("../os/homedir.zig"); pub const Options = struct { /// This is set by the CLI parser for deinit. @@ -13,35 +15,63 @@ pub const Options = struct { /// If set, open up a new window in a custom instance of Ghostty. class: ?[:0]const u8 = null, - /// If `-e` is found in the arguments, this will contain all of the - /// arguments to pass to Ghostty as the command. - _arguments: ?[][:0]const u8 = null, + /// Did the user specify a `--working-directory` argument on the command line? + _working_directory_seen: bool = false, + + /// All of the arguments after `+new-window`. They will be sent to Ghosttty + /// for processing. + _arguments: std.ArrayList([:0]const u8) = .empty, /// Enable arg parsing diagnostics so that we don't get an error if /// there is a "normal" config setting on the cli. _diagnostics: diagnostics.DiagnosticList = .{}, - /// Manual parse hook, used to deal with `-e` - pub fn parseManuallyHook(self: *Options, alloc: Allocator, arg: []const u8, iter: anytype) Allocator.Error!bool { - // If it's not `-e` continue with the standard argument parsning. - if (!std.mem.eql(u8, arg, "-e")) return true; + /// Manual parse hook, collect all of the arguments after `+new-window`. + pub fn parseManuallyHook(self: *Options, alloc: Allocator, arg: []const u8, iter: anytype) (error{InvalidValue} || homedir.ExpandError || std.fs.Dir.RealPathAllocError || Allocator.Error)!bool { + var e_seen: bool = std.mem.eql(u8, arg, "-e"); - var arguments: std.ArrayList([:0]const u8) = .empty; - errdefer { - for (arguments.items) |argument| alloc.free(argument); - arguments.deinit(alloc); - } + // Include the argument that triggered the manual parse hook. + if (try self.checkArg(alloc, arg)) |a| try self._arguments.append(alloc, a); - // Otherwise gather up the rest of the arguments to use as the command. + // Gather up the rest of the arguments to use as the command. while (iter.next()) |param| { - try arguments.append(alloc, try alloc.dupeZ(u8, param)); + if (e_seen) { + try self._arguments.append(alloc, try alloc.dupeZ(u8, param)); + continue; + } + if (std.mem.eql(u8, param, "-e")) { + e_seen = true; + try self._arguments.append(alloc, try alloc.dupeZ(u8, param)); + continue; + } + if (try self.checkArg(alloc, param)) |a| try self._arguments.append(alloc, a); } - self._arguments = try arguments.toOwnedSlice(alloc); - return false; } + fn checkArg(self: *Options, alloc: Allocator, arg: []const u8) (error{InvalidValue} || homedir.ExpandError || std.fs.Dir.RealPathAllocError || Allocator.Error)!?[:0]const u8 { + if (lib.cutPrefix(u8, arg, "--class=")) |rest| { + self.class = try alloc.dupeZ(u8, std.mem.trim(u8, rest, &std.ascii.whitespace)); + return null; + } + + if (lib.cutPrefix(u8, arg, "--working-directory=")) |rest| { + const stripped = std.mem.trim(u8, rest, &std.ascii.whitespace); + if (std.mem.eql(u8, stripped, "home")) return try alloc.dupeZ(u8, arg); + if (std.mem.eql(u8, stripped, "inherit")) return try alloc.dupeZ(u8, arg); + const cwd: std.fs.Dir = std.fs.cwd(); + var expandhome_buf: [std.fs.max_path_bytes]u8 = undefined; + const expanded = try homedir.expandHome(stripped, &expandhome_buf); + var realpath_buf: [std.fs.max_path_bytes]u8 = undefined; + const realpath = try cwd.realpath(expanded, &realpath_buf); + self._working_directory_seen = true; + return try std.fmt.allocPrintSentinel(alloc, "--working-directory={s}", .{realpath}, 0); + } + + return try alloc.dupeZ(u8, arg); + } + pub fn deinit(self: *Options) void { if (self._arena) |arena| arena.deinit(); self.* = undefined; @@ -63,11 +93,23 @@ pub const Options = struct { /// and contact a running Ghostty instance that was configured with the same /// `class` as was given on the command line. /// -/// If the `-e` flag is included on the command line, any arguments that follow -/// will be sent to the running Ghostty instance and used as the command to run -/// in the new window rather than the default. If `-e` is not specified, Ghostty -/// will use the default command (either specified with `command` in your config -/// or your default shell as configured on your system). +/// All of the arguments after the `+new-window` argument (except for the +/// `--class` flag) will be sent to the remote Ghostty instance and will be +/// parsed as command line flags. These flags will override certain settings +/// when creating the first surface in the new window. Currently, only +/// `--working-directory`, `--command`, and `--title` are supported. `-e` will +/// also work as an alias for `--command`, except that if `-e` is found on the +/// command line all following arguments will become part of the command and no +/// more arguments will be parsed for configuration settings. +/// +/// If `--working-directory` is found on the command line and is a relative +/// path (i.e. doesn't start with `/`) it will be resolved to an absolute path +/// relative to the current working directory that the `ghostty +new-window` +/// command is run from. `~/` prefixes will also be expanded to the user's home +/// directory. +/// +/// If `--working-directory` is _not_ found on the command line, the working +/// directory that `ghostty +new-window` is run from will be passed to Ghostty. /// /// GTK uses an application ID to identify instances of applications. If Ghostty /// is compiled with release optimizations, the default application ID will be @@ -92,8 +134,16 @@ pub const Options = struct { /// * `--class=`: If set, open up a new window in a custom instance of /// Ghostty. The class must be a valid GTK application ID. /// +/// * `--command`: The command to be executed in the first surface of the new window. +/// +/// * `--working-directory=`: The working directory to pass to Ghostty. +/// +/// * `--title`: A title that will override the title of the first surface in +/// the new window. The title override may be edited or removed later. +/// /// * `-e`: Any arguments after this will be interpreted as a command to -/// execute inside the new window instead of the default command. +/// execute inside the first surface of the new window instead of the +/// default command. /// /// Available since: 1.2.0 pub fn run(alloc: Allocator) !u8 { @@ -143,11 +193,12 @@ fn runArgs( if (exit) return 1; } - if (opts._arguments) |arguments| { - if (arguments.len == 0) { - try stderr.print("The -e flag was specified on the command line, but no other arguments were found.\n", .{}); - return 1; - } + if (!opts._working_directory_seen) { + const alloc = opts._arena.?.allocator(); + const cwd: std.fs.Dir = std.fs.cwd(); + var buf: [std.fs.max_path_bytes]u8 = undefined; + const wd = try cwd.realpath(".", &buf); + try opts._arguments.append(alloc, try std.fmt.allocPrintSentinel(alloc, "--working-directory={s}", .{wd}, 0)); } var arena = ArenaAllocator.init(alloc_gpa); @@ -159,7 +210,7 @@ fn runArgs( if (opts.class) |class| .{ .class = class } else .detect, .new_window, .{ - .arguments = opts._arguments, + .arguments = if (opts._arguments.items.len == 0) null else opts._arguments.items, }, ) catch |err| switch (err) { error.IPCFailed => { diff --git a/src/cli/ssh-cache/DiskCache.zig b/src/cli/ssh-cache/DiskCache.zig index 6214d042963..6fa74b43d18 100644 --- a/src/cli/ssh-cache/DiskCache.zig +++ b/src/cli/ssh-cache/DiskCache.zig @@ -57,6 +57,16 @@ pub fn clear(self: DiskCache) !void { pub const AddResult = enum { added, updated }; +pub const AddError = std.fs.Dir.MakeError || + std.fs.Dir.StatFileError || + std.fs.File.OpenError || + std.fs.File.ChmodError || + std.io.Reader.LimitedAllocError || + FixupPermissionsError || + ReadEntriesError || + WriteCacheFileError || + Error; + /// Add or update a hostname entry in the cache. /// Returns AddResult.added for new entries or AddResult.updated for existing ones. /// The cache file is created if it doesn't exist with secure permissions (0600). @@ -64,7 +74,7 @@ pub fn add( self: DiskCache, alloc: Allocator, hostname: []const u8, -) !AddResult { +) AddError!AddResult { if (!isValidCacheKey(hostname)) return error.HostnameIsInvalid; // Create cache directory if needed @@ -128,13 +138,19 @@ pub fn add( return result; } +pub const RemoveError = std.fs.File.OpenError || + FixupPermissionsError || + ReadEntriesError || + WriteCacheFileError || + Error; + /// Remove a hostname entry from the cache. /// No error is returned if the hostname doesn't exist or the cache file is missing. pub fn remove( self: DiskCache, alloc: Allocator, hostname: []const u8, -) !void { +) RemoveError!void { if (!isValidCacheKey(hostname)) return error.HostnameIsInvalid; // Open our file @@ -168,13 +184,17 @@ pub fn remove( try self.writeCacheFile(entries, null); } +pub const ContainsError = std.fs.File.OpenError || + ReadEntriesError || + error{HostnameIsInvalid}; + /// Check if a hostname exists in the cache. /// Returns false if the cache file doesn't exist. pub fn contains( self: DiskCache, alloc: Allocator, hostname: []const u8, -) !bool { +) ContainsError!bool { if (!isValidCacheKey(hostname)) return error.HostnameIsInvalid; // Open our file @@ -194,7 +214,9 @@ pub fn contains( return entries.contains(hostname); } -fn fixupPermissions(file: std.fs.File) (std.fs.File.StatError || std.fs.File.ChmodError)!void { +pub const FixupPermissionsError = (std.fs.File.StatError || std.fs.File.ChmodError); + +fn fixupPermissions(file: std.fs.File) FixupPermissionsError!void { // Windows does not support chmod if (comptime builtin.os.tag == .windows) return; @@ -206,11 +228,18 @@ fn fixupPermissions(file: std.fs.File) (std.fs.File.StatError || std.fs.File.Chm } } +pub const WriteCacheFileError = std.fs.Dir.OpenError || + std.fs.AtomicFile.InitError || + std.fs.AtomicFile.FlushError || + std.fs.AtomicFile.FinishError || + Entry.FormatError || + error{InvalidCachePath}; + fn writeCacheFile( self: DiskCache, entries: std.StringHashMap(Entry), expire_days: ?u32, -) !void { +) WriteCacheFileError!void { const cache_dir = std.fs.path.dirname(self.path) orelse return error.InvalidCachePath; const cache_basename = std.fs.path.basename(self.path); @@ -270,10 +299,12 @@ pub fn deinitEntries( entries.deinit(); } +pub const ReadEntriesError = std.mem.Allocator.Error || std.io.Reader.LimitedAllocError; + fn readEntries( alloc: Allocator, file: std.fs.File, -) !std.StringHashMap(Entry) { +) ReadEntriesError!std.StringHashMap(Entry) { var reader = file.reader(&.{}); const content = try reader.interface.allocRemaining( alloc, diff --git a/src/cli/ssh-cache/Entry.zig b/src/cli/ssh-cache/Entry.zig index f3403dbd4fb..b586161f269 100644 --- a/src/cli/ssh-cache/Entry.zig +++ b/src/cli/ssh-cache/Entry.zig @@ -33,7 +33,9 @@ pub fn parse(line: []const u8) ?Entry { }; } -pub fn format(self: Entry, writer: *std.Io.Writer) !void { +pub const FormatError = std.Io.Writer.Error; + +pub fn format(self: Entry, writer: *std.Io.Writer) FormatError!void { try writer.print( "{s}|{d}|{s}\n", .{ self.hostname, self.timestamp, self.terminfo_version }, diff --git a/src/config.zig b/src/config.zig index 4abd319a6bf..0bf61a47fb6 100644 --- a/src/config.zig +++ b/src/config.zig @@ -31,6 +31,7 @@ pub const Keybinds = Config.Keybinds; pub const MouseShiftCapture = Config.MouseShiftCapture; pub const MouseScrollMultiplier = Config.MouseScrollMultiplier; pub const NonNativeFullscreen = Config.NonNativeFullscreen; +pub const Fullscreen = Config.Fullscreen; pub const RepeatableCodepointMap = Config.RepeatableCodepointMap; pub const RepeatableFontVariation = Config.RepeatableFontVariation; pub const RepeatableString = Config.RepeatableString; diff --git a/src/config/CApi.zig b/src/config/CApi.zig index 4ea9ea63f7a..ca15ce4e89f 100644 --- a/src/config/CApi.zig +++ b/src/config/CApi.zig @@ -144,3 +144,101 @@ export fn ghostty_config_open_path() c.String { const Diagnostic = extern struct { message: [*:0]const u8 = "", }; + +test "ghostty_config_get: bool" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.maximize = true; + + var out = false; + const key = "maximize"; + try testing.expect(ghostty_config_get(&cfg, &out, key, key.len)); + try testing.expect(out); +} + +test "ghostty_config_get: enum" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.@"window-theme" = .dark; + + var out: [*:0]const u8 = undefined; + const key = "window-theme"; + try testing.expect(ghostty_config_get(&cfg, @ptrCast(&out), key, key.len)); + const str = std.mem.sliceTo(out, 0); + try testing.expectEqualStrings("dark", str); +} + +test "ghostty_config_get: optional null returns false" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.@"unfocused-split-fill" = null; + + var out: Config.Color.C = undefined; + const key = "unfocused-split-fill"; + try testing.expect(!ghostty_config_get(&cfg, @ptrCast(&out), key, key.len)); +} + +test "ghostty_config_get: unknown key returns false" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + + var out = false; + const key = "not-a-real-key"; + try testing.expect(!ghostty_config_get(&cfg, &out, key, key.len)); +} + +test "ghostty_config_get: optional string null returns true" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.title = null; + + var out: ?[*:0]const u8 = undefined; + const key = "title"; + try testing.expect(ghostty_config_get(&cfg, @ptrCast(&out), key, key.len)); + try testing.expect(out == null); +} + +test "ghostty_config_get: float" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.@"background-opacity" = 0.42; + + var out: f64 = 0; + const key = "background-opacity"; + try testing.expect(ghostty_config_get(&cfg, &out, key, key.len)); + try testing.expectApproxEqAbs(@as(f64, 0.42), out, 0.000001); +} + +test "ghostty_config_get: struct cval conversion" { + const testing = std.testing; + const alloc = testing.allocator; + + var cfg = try Config.default(alloc); + defer cfg.deinit(); + cfg.background = .{ .r = 12, .g = 34, .b = 56 }; + + var out: Config.Color.C = undefined; + const key = "background"; + try testing.expect(ghostty_config_get(&cfg, @ptrCast(&out), key, key.len)); + try testing.expectEqual(@as(u8, 12), out.r); + try testing.expectEqual(@as(u8, 34), out.g); + try testing.expectEqual(@as(u8, 56), out.b); +} diff --git a/src/config/Config.zig b/src/config/Config.zig index bb86b6bd59a..591c0b049f4 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -29,7 +29,7 @@ const file_load = @import("file_load.zig"); const formatterpkg = @import("formatter.zig"); const themepkg = @import("theme.zig"); const url = @import("url.zig"); -const Key = @import("key.zig").Key; +pub const Key = @import("key.zig").Key; const MetricModifier = fontpkg.Metrics.Modifier; const help_strings = @import("help_strings"); pub const Command = @import("command.zig").Command; @@ -39,6 +39,7 @@ pub const Path = @import("path.zig").Path; pub const RepeatablePath = @import("path.zig").RepeatablePath; const ClipboardCodepointMap = @import("ClipboardCodepointMap.zig"); const KeyRemapSet = @import("../input/key_mods.zig").RemapSet; +const string = @import("string.zig"); // We do this instead of importing all of terminal/main.zig to // limit the dependency graph. This is important because some things @@ -95,10 +96,9 @@ pub const compatibility = std.StaticStringMap( }); /// Set Ghostty's graphical user interface language to a language other than the -/// system default language. The language must be fully specified, including the -/// encoding. For example: +/// system default language. For example: /// -/// language = de_DE.UTF-8 +/// language = de /// /// will force the strings in Ghostty's graphical user interface to be in German /// rather than the system default. @@ -802,11 +802,35 @@ palette: Palette = .{}, /// look. Colors that have been explicitly set via `palette` are never /// overwritten. /// +/// The default value is false (disabled), because many legacy programs +/// using the 256-color palette hardcode assumptions about what these +/// colors are (mostly assuming the xterm 256 color palette). However, this +/// is still a very useful tool for theme authors and users who want +/// to customize their palette without having to specify all 256 colors. +/// /// For more information on how the generation works, see here: /// https://gist.github.com/jake-stewart/0a8ea46159a7da2c808e5be2177e1783 /// /// Available since: 1.3.0 -@"palette-generate": bool = true, +@"palette-generate": bool = false, + +/// Invert the palette colors generated when `palette-generate` is enabled, +/// so that the colors go in reverse order. This allows palette-based +/// applications to work well in both light and dark mode since the +/// palettes are always relatively good colors. +/// +/// This defaults to off because some legacy terminal applications +/// hardcode the assumption that palette indices 16–231 are ordered from +/// darkest to lightest, so enabling this would make them unreadable. +/// This is not a generally good assumption and we encourage modern +/// terminal applications to use the indices in a more semantic way. +/// +/// This has no effect if `palette-generate` is disabled. +/// +/// For more information see `palette-generate`. +/// +/// Available since: 1.3.0 +@"palette-harmonious": bool = false, /// The color of the cursor. If this is not set, a default will be chosen. /// @@ -874,19 +898,18 @@ palette: Palette = .{}, /// background color. @"cursor-text": ?TerminalColor = null, -/// Enables the ability to move the cursor at prompts by using `alt+click` on -/// Linux and `option+click` on macOS. +/// Enables the ability to move the cursor at prompts by clicking on a +/// location in the prompt text. /// -/// This feature requires shell integration (specifically prompt marking -/// via `OSC 133`) and only works in primary screen mode. Alternate screen -/// applications like vim usually have their own version of this feature but -/// this configuration doesn't control that. +/// This feature requires shell integration, specifically prompt marking +/// via `OSC 133`. Some shells like Fish (v4) and Nu (0.111+) natively +/// support this while others may require additional configuration or +/// Ghostty's shell integration features to be enabled. /// -/// It should be noted that this feature works by translating your desired -/// position into a series of synthetic arrow key movements, so some weird -/// behavior around edge cases are to be expected. This is unfortunately how -/// this feature is implemented across terminals because there isn't any other -/// way to implement it. +/// Depending on the shell, this works either by translating your click +/// position into a series of synthetic arrow key movements or by sending +/// a click event directly to the shell. In either case, some unexpected +/// behavior around edge cases is possible. @"cursor-click-to-move": bool = true, /// Hide the mouse immediately when typing. The mouse becomes visible again @@ -906,7 +929,7 @@ palette: Palette = .{}, /// anything but modifiers or keybinds that are processed by Ghostty). /// /// - `output` If set, scroll the surface to the bottom if there is new data -/// to display. (Currently unimplemented.) +/// to display (e.g., when new lines are printed to the terminal). /// /// The default is `keystroke, no-output`. @"scroll-to-bottom": ScrollToBottom = .default, @@ -1188,8 +1211,6 @@ command: ?Command = null, /// notifications for a single command, overriding the `never` and `unfocused` /// options. /// -/// GTK only. -/// /// Available since 1.3.0. @"notify-on-command-finish": NotifyOnCommandFinish = .never, @@ -1204,8 +1225,6 @@ command: ?Command = null, /// Options can be combined by listing them as a comma separated list. Options /// can be negated by prefixing them with `no-`. For example `no-bell,notify`. /// -/// GTK only. -/// /// Available since 1.3.0. @"notify-on-command-finish-action": NotifyOnCommandFinishAction = .{ .bell = true, @@ -1243,8 +1262,6 @@ command: ?Command = null, /// The maximum value is `584y 49w 23h 34m 33s 709ms 551µs 615ns`. Any /// value larger than this will be clamped to the maximum value. /// -/// GTK only. -/// /// Available since 1.3.0 @"notify-on-command-finish-after": Duration = .{ .duration = 5 * std.time.ns_per_s }, @@ -1428,10 +1445,27 @@ maximize: bool = false, /// does not apply to tabs, splits, etc. However, this setting will apply to all /// new windows, not just the first one. /// -/// On macOS, this setting does not work if window-decoration is set to -/// "none", because native fullscreen on macOS requires window decorations -/// to be set. -fullscreen: bool = false, +/// Allowable values are: +/// +/// * `false` - Don't start in fullscreen (default) +/// * `true` - Start in native fullscreen +/// * `non-native` - (macOS only) Start in non-native fullscreen, hiding the +/// menu bar. This is faster than native fullscreen since it doesn't use +/// animations. On non-macOS platforms, this behaves the same as `true`. +/// * `non-native-visible-menu` - (macOS only) Start in non-native fullscreen, +/// keeping the menu bar visible. On non-macOS platforms, behaves like `true`. +/// * `non-native-padded-notch` - (macOS only) Start in non-native fullscreen, +/// hiding the menu bar but padding for the notch on applicable devices. +/// On non-macOS platforms, behaves like `true`. +/// +/// Important: tabs DO NOT WORK with non-native fullscreen modes. Non-native +/// fullscreen removes the titlebar and macOS native tabs require the titlebar. +/// If you use tabs, use `true` (native) instead. +/// +/// On macOS, `true` (native fullscreen) does not work if `window-decoration` +/// is set to `false`, because native fullscreen on macOS requires window +/// decorations. +fullscreen: Fullscreen = .false, /// The title Ghostty will use for the window. This will force the title of the /// window to be this title at all times and Ghostty will ignore any set title @@ -1822,6 +1856,12 @@ class: ?[:0]const u8 = null, /// If an invalid key is pressed, the sequence ends but the table remains /// active. /// +/// * Chain actions work within tables, the `chain` keyword applies to +/// the most recently defined binding in the table. e.g. if you set +/// `table/ctrl+a=new_window` you can chain by using `chain=text:hello`. +/// Important: chain itself doesn't get prefixed with the table name, +/// since it applies to the most recent binding in any table. +/// /// * Prefixes like `global:` work within tables: /// `foo/global:ctrl+a=new_window`. /// @@ -2904,6 +2944,20 @@ keybind: Keybinds = .{}, /// /// * `vec4 iPreviousCursorColor` - Color of the previous terminal cursor. /// +/// * `vec4 iCurrentCursorStyle` - Style of the terminal cursor +/// +/// Macros simplified use are defined for the various cursor styles: +/// +/// - `CURSORSTYLE_BLOCK` or `0` +/// - `CURSORSTYLE_BLOCK_HOLLOW` or `1` +/// - `CURSORSTYLE_BAR` or `2` +/// - `CURSORSTYLE_UNDERLINE` or `3` +/// - `CURSORSTYLE_LOCK` or `4` +/// +/// * `vec4 iPreviousCursorStyle` - Style of the previous terminal cursor +/// +/// * `vec4 iCursorVisible` - Visibility of the terminal cursor. +/// /// * `float iTimeCursorChange` - Timestamp of terminal cursor change. /// /// When the terminal cursor changes position or color, this is set to @@ -3033,7 +3087,7 @@ keybind: Keybinds = .{}, /// the path is not absolute, it is considered relative to the directory of the /// configuration file that it is referenced from, or from the current working /// directory if this is used as a CLI flag. The path may be prefixed with `~/` -/// to reference the user's home directory. (GTK only) +/// to reference the user's home directory. /// /// Available since: 1.2.0 @"bell-audio-path": ?Path = null, @@ -3041,7 +3095,6 @@ keybind: Keybinds = .{}, /// If `audio` is an enabled bell feature, this is the volume to play the audio /// file at (relative to the system volume). This is a floating point number /// ranging from 0.0 (silence) to 1.0 (as loud as possible). The default is 0.5. -/// (GTK only) /// /// Available since: 1.2.0 @"bell-audio-volume": f64 = 0.5, @@ -3294,6 +3347,16 @@ keybind: Keybinds = .{}, /// you may want to disable it. @"macos-secure-input-indication": bool = true, +/// If true, Ghostty exposes and handles the built-in AppleScript dictionary +/// on macOS. +/// +/// If false, all AppleScript interactions are disabled. This includes +/// AppleScript commands and AppleScript object lookup for windows, tabs, +/// and terminals. +/// +/// The default is true. +@"macos-applescript": bool = true, + /// Customize the macOS app icon. /// /// This only affects the icon that appears in the dock, application @@ -4740,8 +4803,8 @@ fn compatBoldIsBright( _ = alloc; assert(std.mem.eql(u8, key, "bold-is-bright")); - const set = cli.args.parseBool(value_ orelse "t") catch return false; - if (set) { + const isset = cli.args.parseBool(value_ orelse "t") catch return false; + if (isset) { self.@"bold-color" = .bright; } @@ -5136,6 +5199,17 @@ pub const NonNativeFullscreen = enum(c_int) { @"padded-notch", }; +/// Valid values for fullscreen config option +/// c_int because it needs to be extern compatible +/// If this is changed, you must also update ghostty.h +pub const Fullscreen = enum(c_int) { + false, + true, + @"non-native", + @"non-native-visible-menu", + @"non-native-padded-notch", +}; + pub const WindowPaddingColor = enum { background, extend, @@ -5578,7 +5652,7 @@ pub const Palette = struct { /// ghostty_config_palette_s pub const C = extern struct { - colors: [265]Color.C, + colors: [256]Color.C, }; pub fn cval(self: Self) Palette.C { @@ -5919,22 +5993,15 @@ pub const SelectionWordChars = struct { pub fn parseCLI(self: *Self, alloc: Allocator, input: ?[]const u8) !void { const value = input orelse return error.ValueRequired; - // Parse UTF-8 string into codepoints + // Parse string with Zig escape sequence support into codepoints var list: std.ArrayList(u21) = .empty; defer list.deinit(alloc); // Always include null as first boundary try list.append(alloc, 0); - // Parse the UTF-8 string - const utf8_view = std.unicode.Utf8View.init(value) catch { - // Invalid UTF-8, just use null boundary - self.codepoints = try list.toOwnedSlice(alloc); - return; - }; - - var utf8_it = utf8_view.iterator(); - while (utf8_it.nextCodepoint()) |codepoint| { + var it = string.codepointIterator(value); + while (it.next() catch return error.InvalidValue) |codepoint| { try list.append(alloc, codepoint); } @@ -5987,6 +6054,56 @@ pub const SelectionWordChars = struct { try testing.expectEqual(@as(u21, ';'), chars.codepoints[3]); try testing.expectEqual(@as(u21, ','), chars.codepoints[4]); } + + test "parseCLI escape sequences" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + // \t escape should be parsed as tab + var chars: Self = .{}; + try chars.parseCLI(alloc, " \\t;,"); + + try testing.expectEqual(@as(usize, 5), chars.codepoints.len); + try testing.expectEqual(@as(u21, 0), chars.codepoints[0]); + try testing.expectEqual(@as(u21, ' '), chars.codepoints[1]); + try testing.expectEqual(@as(u21, '\t'), chars.codepoints[2]); + try testing.expectEqual(@as(u21, ';'), chars.codepoints[3]); + try testing.expectEqual(@as(u21, ','), chars.codepoints[4]); + } + + test "parseCLI backslash escape" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + // \\ should be parsed as a single backslash + var chars: Self = .{}; + try chars.parseCLI(alloc, "\\\\;"); + + try testing.expectEqual(@as(usize, 3), chars.codepoints.len); + try testing.expectEqual(@as(u21, 0), chars.codepoints[0]); + try testing.expectEqual(@as(u21, '\\'), chars.codepoints[1]); + try testing.expectEqual(@as(u21, ';'), chars.codepoints[2]); + } + + test "parseCLI unicode escape" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + // \u{2502} should be parsed as │ + var chars: Self = .{}; + try chars.parseCLI(alloc, "\\u{2502};"); + + try testing.expectEqual(@as(usize, 3), chars.codepoints.len); + try testing.expectEqual(@as(u21, 0), chars.codepoints[0]); + try testing.expectEqual(@as(u21, '│'), chars.codepoints[1]); + try testing.expectEqual(@as(u21, ';'), chars.codepoints[2]); + } }; /// FontVariation is a repeatable configuration value that sets a single @@ -6123,6 +6240,15 @@ pub const Keybinds = struct { /// which allows all table names to be available without reservation. tables: std.StringArrayHashMapUnmanaged(inputpkg.Binding.Set) = .empty, + /// The most recent binding target for `chain=` additions. + /// + /// This is intentionally tracked at the Keybinds level so that chains can + /// apply across table boundaries according to parse order. + chain_target: union(enum) { + root, + table: []const u8, + } = .root, + pub fn init(self: *Keybinds, alloc: Allocator) !void { // We don't clear the memory because it's in the arena and unlikely // to be free-able anyways (since arenas can only clear the last @@ -6130,6 +6256,7 @@ pub const Keybinds = struct { // will be freed when the config is freed. self.set = .{}; self.tables = .empty; + self.chain_target = .root; // keybinds for opening and reloading config try self.set.put( @@ -6912,6 +7039,7 @@ pub const Keybinds = struct { log.info("config has 'keybind = clear', all keybinds cleared", .{}); self.set = .{}; self.tables = .empty; + self.chain_target = .root; return; } @@ -6949,16 +7077,39 @@ pub const Keybinds = struct { if (binding.len == 0) { log.debug("config has 'keybind = {s}/', table cleared", .{table_name}); gop.value_ptr.* = .{}; + self.chain_target = .root; return; } + // Chains are only allowed at the root level. Their target is + // tracked globally by parse order in `self.chain_target`. + if (std.mem.startsWith(u8, binding, "chain=")) { + return error.InvalidFormat; + } + // Parse and add the binding to the table try gop.value_ptr.parseAndPut(alloc, binding); + self.chain_target = .{ .table = gop.key_ptr.* }; + return; + } + + if (std.mem.startsWith(u8, value, "chain=")) { + switch (self.chain_target) { + .root => try self.set.parseAndPut(alloc, value), + .table => |table_name| { + const table = self.tables.getPtr(table_name) orelse { + self.chain_target = .root; + return error.InvalidFormat; + }; + try table.parseAndPut(alloc, value); + }, + } return; } // Parse into default set try self.set.parseAndPut(alloc, value); + self.chain_target = .root; } /// Deep copy of the struct. Required by Config. @@ -7400,6 +7551,63 @@ pub const Keybinds = struct { try testing.expect(keybinds.tables.contains("mytable")); } + test "parseCLI chain without prior parsed binding is invalid" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + var keybinds: Keybinds = .{}; + + try testing.expectError( + error.InvalidFormat, + keybinds.parseCLI(alloc, "chain=new_tab"), + ); + } + + test "parseCLI table chain syntax is invalid" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + var keybinds: Keybinds = .{}; + + try keybinds.parseCLI(alloc, "foo/a=text:hello"); + try testing.expectError( + error.InvalidFormat, + keybinds.parseCLI(alloc, "foo/chain=deactivate_key_table"), + ); + } + + test "parseCLI chain applies to most recent table binding" { + const testing = std.testing; + var arena = ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const alloc = arena.allocator(); + + var keybinds: Keybinds = .{}; + + try keybinds.parseCLI(alloc, "ctrl+n=activate_key_table:foo"); + try keybinds.parseCLI(alloc, "foo/a=text:hello"); + try keybinds.parseCLI(alloc, "chain=deactivate_key_table"); + + const root_entry = keybinds.set.get(.{ + .mods = .{ .ctrl = true }, + .key = .{ .unicode = 'n' }, + }).?.value_ptr.*; + try testing.expect(root_entry == .leaf); + try testing.expect(root_entry.leaf.action == .activate_key_table); + + const foo_entry = keybinds.tables.get("foo").?.get(.{ + .key = .{ .unicode = 'a' }, + }).?.value_ptr.*; + try testing.expect(foo_entry == .leaf_chained); + try testing.expectEqual(@as(usize, 2), foo_entry.leaf_chained.actions.items.len); + try testing.expect(foo_entry.leaf_chained.actions.items[0] == .text); + try testing.expect(foo_entry.leaf_chained.actions.items[1] == .deactivate_key_table); + } + test "clone with tables" { const testing = std.testing; var arena = ArenaAllocator.init(testing.allocator); diff --git a/src/config/command.zig b/src/config/command.zig index 7e16ad5c70d..7cd70acb317 100644 --- a/src/config/command.zig +++ b/src/config/command.zig @@ -165,6 +165,16 @@ pub const Command = union(enum) { }; } + pub fn deinit(self: *const Self, alloc: Allocator) void { + switch (self.*) { + .shell => |v| alloc.free(v), + .direct => |l| { + for (l) |v| alloc.free(v); + alloc.free(l); + }, + } + } + pub fn formatEntry(self: Self, formatter: formatterpkg.EntryFormatter) !void { switch (self) { .shell => |v| try formatter.formatEntry([]const u8, v), diff --git a/src/config/path.zig b/src/config/path.zig index ebcd084d2b6..793cf1845ae 100644 --- a/src/config/path.zig +++ b/src/config/path.zig @@ -32,6 +32,20 @@ pub const Path = union(enum) { return std.meta.eql(self, other); } + /// ghostty_config_path_s + pub const C = extern struct { + path: [*:0]const u8, + optional: bool, + }; + + /// Returns the path as a C-compatible struct. + pub fn cval(self: Path) C { + return switch (self) { + .optional => |path| .{ .path = path.ptr, .optional = true }, + .required => |path| .{ .path = path.ptr, .optional = false }, + }; + } + /// Parse the input and return a Path. A leading `?` indicates that the path /// is _optional_ and an error should not be logged or displayed to the user /// if that path does not exist. Otherwise the path is required and an error diff --git a/src/config/string.zig b/src/config/string.zig index 71826f005f2..45079937321 100644 --- a/src/config/string.zig +++ b/src/config/string.zig @@ -36,6 +36,40 @@ pub fn parse(out: []u8, bytes: []const u8) ![]u8 { return out[0..dst_i]; } +/// Creates an iterator that requires no allocation to extract codepoints +/// from the string literal, parsing escape sequences as it goes. +pub fn codepointIterator(bytes: []const u8) CodepointIterator { + return .{ .bytes = bytes, .i = 0 }; +} + +pub const CodepointIterator = struct { + bytes: []const u8, + i: usize, + + pub fn next(self: *CodepointIterator) error{InvalidString}!?u21 { + if (self.i >= self.bytes.len) return null; + switch (self.bytes[self.i]) { + // An escape sequence + '\\' => return switch (std.zig.string_literal.parseEscapeSequence( + self.bytes, + &self.i, + )) { + .failure => error.InvalidString, + .success => |cp| cp, + }, + + // Not an escape, parse as UTF-8 + else => |start| { + const cp_len = std.unicode.utf8ByteSequenceLength(start) catch + return error.InvalidString; + defer self.i += cp_len; + return std.unicode.utf8Decode(self.bytes[self.i..][0..cp_len]) catch + return error.InvalidString; + }, + } + } +}; + test "parse: empty" { const testing = std.testing; @@ -65,3 +99,48 @@ test "parse: escapes" { try testing.expectEqualStrings("hello\u{1F601}world", result); } } + +test "codepointIterator: empty" { + var it = codepointIterator(""); + try std.testing.expectEqual(null, try it.next()); +} + +test "codepointIterator: ascii no escapes" { + var it = codepointIterator("abc"); + try std.testing.expectEqual(@as(u21, 'a'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, 'b'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, 'c'), (try it.next()).?); + try std.testing.expectEqual(null, try it.next()); +} + +test "codepointIterator: multibyte utf8" { + // │ is U+2502 (3 bytes in UTF-8) + var it = codepointIterator("a│b"); + try std.testing.expectEqual(@as(u21, 'a'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, '│'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, 'b'), (try it.next()).?); + try std.testing.expectEqual(null, try it.next()); +} + +test "codepointIterator: escape sequences" { + var it = codepointIterator("a\\tb\\n\\\\"); + try std.testing.expectEqual(@as(u21, 'a'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, '\t'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, 'b'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, '\n'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, '\\'), (try it.next()).?); + try std.testing.expectEqual(null, try it.next()); +} + +test "codepointIterator: unicode escape" { + var it = codepointIterator("\\u{2502}x"); + try std.testing.expectEqual(@as(u21, '│'), (try it.next()).?); + try std.testing.expectEqual(@as(u21, 'x'), (try it.next()).?); + try std.testing.expectEqual(null, try it.next()); +} + +test "codepointIterator: emoji unicode escape" { + var it = codepointIterator("\\u{1F601}"); + try std.testing.expectEqual(@as(u21, 0x1F601), (try it.next()).?); + try std.testing.expectEqual(null, try it.next()); +} diff --git a/src/config/url.zig b/src/config/url.zig index da0892a911b..e7cf8603c68 100644 --- a/src/config/url.zig +++ b/src/config/url.zig @@ -65,11 +65,11 @@ const non_dotted_path_lookahead = ; const dotted_path_space_segments = - \\(?:(?= 0 and target.y >= 0); + assert(target.maxX() <= 1 and target.maxY() <= 1); + switch (direction) { + .left => target.x += 1, + .right => target.x -= 1, + .up => target.y += 1, + .down => target.y -= 1, + } + + return self.nearest( + sp, + from, + direction, + target, + ); + } + /// Resize the given node in place. The node MUST be a split (asserted). /// /// In general, this is an immutable data structure so this is @@ -1974,6 +2014,60 @@ test "SplitTree: spatial goto" { try testing.expectEqualStrings("A", view.label); } + // Spatial A => left (wrapped) + { + const target = (try split.goto( + alloc, + from: { + var it = split.iterator(); + break :from while (it.next()) |entry| { + if (std.mem.eql(u8, entry.view.label, "A")) { + break entry.handle; + } + } else return error.NotFound; + }, + .{ .spatial = .left }, + )).?; + const view = split.nodes[target.idx()].leaf; + try testing.expectEqualStrings("B", view.label); + } + + // Spatial B => right (wrapped) + { + const target = (try split.goto( + alloc, + from: { + var it = split.iterator(); + break :from while (it.next()) |entry| { + if (std.mem.eql(u8, entry.view.label, "B")) { + break entry.handle; + } + } else return error.NotFound; + }, + .{ .spatial = .right }, + )).?; + const view = split.nodes[target.idx()].leaf; + try testing.expectEqualStrings("A", view.label); + } + + // Spatial C => down (wrapped) + { + const target = (try split.goto( + alloc, + from: { + var it = split.iterator(); + break :from while (it.next()) |entry| { + if (std.mem.eql(u8, entry.view.label, "C")) { + break entry.handle; + } + } else return error.NotFound; + }, + .{ .spatial = .down }, + )).?; + const view = split.nodes[target.idx()].leaf; + try testing.expectEqualStrings("A", view.label); + } + // Equalize var equal = try split.equalize(alloc); defer equal.deinit(); diff --git a/src/font/shaper/coretext.zig b/src/font/shaper/coretext.zig index ab3c6aaab55..5a8a6ccbf42 100644 --- a/src/font/shaper/coretext.zig +++ b/src/font/shaper/coretext.zig @@ -1895,7 +1895,7 @@ test "shape Bengali ligatures with out of order vowels" { try testing.expectEqual(@as(u16, 0), cells[0].x); try testing.expectEqual(@as(u16, 0), cells[1].x); // See the giant "We need to reset the `cell_offset`" comment, but here - // we should technically have the rest of these be `x` of 1, but that + // we should technically have the rest of these be `x` of 2, but that // would require going back in the stream to adjust past cells, and // we don't take on that complexity. try testing.expectEqual(@as(u16, 0), cells[2].x); diff --git a/src/font/shaper/harfbuzz.zig b/src/font/shaper/harfbuzz.zig index 946611e797c..b1126dd4e7d 100644 --- a/src/font/shaper/harfbuzz.zig +++ b/src/font/shaper/harfbuzz.zig @@ -1447,12 +1447,12 @@ test "shape Bengali ligatures with out of order vowels" { // Whereas CoreText puts everything all into the first cell (see the // corresponding test), HarfBuzz splits into two clusters. - try testing.expectEqual(@as(u16, 1), cells[2].x); - try testing.expectEqual(@as(u16, 1), cells[3].x); - try testing.expectEqual(@as(u16, 1), cells[4].x); - try testing.expectEqual(@as(u16, 1), cells[5].x); - try testing.expectEqual(@as(u16, 1), cells[6].x); - try testing.expectEqual(@as(u16, 1), cells[7].x); + try testing.expectEqual(@as(u16, 2), cells[2].x); + try testing.expectEqual(@as(u16, 2), cells[3].x); + try testing.expectEqual(@as(u16, 2), cells[4].x); + try testing.expectEqual(@as(u16, 2), cells[5].x); + try testing.expectEqual(@as(u16, 2), cells[6].x); + try testing.expectEqual(@as(u16, 2), cells[7].x); // The vowel sign E renders before the SSA: try testing.expect(cells[2].x_offset < cells[3].x_offset); diff --git a/src/input/Binding.zig b/src/input/Binding.zig index 57414d76482..286c8f2edc2 100644 --- a/src/input/Binding.zig +++ b/src/input/Binding.zig @@ -570,12 +570,9 @@ pub const Action = union(enum) { toggle_tab_overview, /// Change the title of the current focused surface via a pop-up prompt. - /// - /// This requires libadwaita 1.5 or newer on Linux. The current libadwaita - /// version can be found by running `ghostty +version`. prompt_surface_title, - /// Change the title of the current tab/window via a pop-up prompt. The + /// Change the title of the current tab via a pop-up prompt. The /// title set via this prompt overrides any title set by the terminal /// and persists across focus changes within the tab. prompt_tab_title, diff --git a/src/input/command.zig b/src/input/command.zig index d6d2b024783..f50e6840b09 100644 --- a/src/input/command.zig +++ b/src/input/command.zig @@ -440,13 +440,13 @@ fn actionCommands(action: Action.Key) []const Command { .prompt_surface_title => comptime &.{.{ .action = .prompt_surface_title, - .title = "Change Terminal Title...", + .title = "Change Terminal Title…", .description = "Prompt for a new title for the current terminal.", }}, .prompt_tab_title => comptime &.{.{ .action = .prompt_tab_title, - .title = "Change Tab Title...", + .title = "Change Tab Title…", .description = "Prompt for a new title for the current tab.", }}, diff --git a/src/input/key_encode.zig b/src/input/key_encode.zig index 3716c226ef2..0373fb5f94c 100644 --- a/src/input/key_encode.zig +++ b/src/input/key_encode.zig @@ -214,7 +214,13 @@ fn kitty( } } - const entry = entry_ orelse return; + const entry = entry_ orelse { + // No entry found. If we have UTF-8 text this is a pure text event + // (e.g. composed/IME text), so send it as-is so programs can + // still receive it. + if (event.utf8.len > 0) return try writer.writeAll(event.utf8); + return; + }; // If this is just a modifier we require "report all" to send the sequence. if (entry.modifier and !opts.kitty_flags.report_all) return; @@ -1443,6 +1449,25 @@ test "kitty: composing with modifier" { try testing.expectEqualStrings("\x1b[57441;2u", writer.buffered()); } +test "kitty: composed text with report all" { + var buf: [128]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buf); + try kitty(&writer, .{ + .key = .unidentified, + .mods = .{}, + .utf8 = "\xc3\xbb", // û + }, .{ + .kitty_flags = .{ + .disambiguate = true, + .report_events = true, + .report_alternates = true, + .report_all = true, + .report_associated = true, + }, + }); + try testing.expectEqualStrings("\xc3\xbb", writer.buffered()); +} + test "kitty: shift+a on US keyboard" { var buf: [128]u8 = undefined; var writer: std.Io.Writer = .fixed(&buf); diff --git a/src/lib/enum.zig b/src/lib/enum.zig index 6fc75984613..bdec2ab88e6 100644 --- a/src/lib/enum.zig +++ b/src/lib/enum.zig @@ -91,3 +91,55 @@ test "abi by removing a key" { try testing.expectEqual(2, @intFromEnum(T.d)); } } + +/// Verify that for every key in enum T, there is a matching declaration in +/// `ghostty.h` with the correct value. This should only ever be called inside a `test` +/// because the `ghostty.h` module is only available then. +pub fn checkGhosttyHEnum(comptime T: type, comptime prefix: []const u8) !void { + const info = @typeInfo(T); + + try std.testing.expect(info == .@"enum"); + try std.testing.expect(info.@"enum".tag_type == c_int); + try std.testing.expect(info.@"enum".is_exhaustive == true); + + @setEvalBranchQuota(1000000); + + const c = @import("ghostty.h"); + + var set: std.EnumSet(T) = .initFull(); + + const c_decls = @typeInfo(c).@"struct".decls; + const enum_fields = info.@"enum".fields; + + inline for (enum_fields) |field| { + const upper_name = comptime u: { + var buf: [128]u8 = undefined; + break :u std.ascii.upperString(&buf, field.name); + }; + + inline for (c_decls) |decl| { + if (!comptime std.mem.startsWith(u8, decl.name, prefix)) continue; + + const suffix = decl.name[prefix.len..]; + + if (!comptime std.mem.eql(u8, suffix, upper_name)) continue; + + std.testing.expectEqual(field.value, @field(c, decl.name)) catch |e| { + std.log.err(@typeName(T) ++ " key " ++ field.name ++ " does not have the same backing int as " ++ decl.name, .{}); + return e; + }; + + set.remove(@enumFromInt(field.value)); + } + } + + std.testing.expect(set.count() == 0) catch |e| { + var it = set.iterator(); + while (it.next()) |v| { + var buf: [128]u8 = undefined; + const upper_string = std.ascii.upperString(&buf, @tagName(v)); + std.log.err("ghostty.h is missing value for {s}{s}", .{ prefix, upper_string }); + } + return e; + }; +} diff --git a/src/lib/main.zig b/src/lib/main.zig index 5a626b1e885..89c6f6c47f5 100644 --- a/src/lib/main.zig +++ b/src/lib/main.zig @@ -5,10 +5,12 @@ const unionpkg = @import("union.zig"); pub const allocator = @import("allocator.zig"); pub const Enum = enumpkg.Enum; +pub const checkGhosttyHEnum = enumpkg.checkGhosttyHEnum; pub const String = types.String; pub const Struct = @import("struct.zig").Struct; pub const Target = @import("target.zig").Target; pub const TaggedUnion = unionpkg.TaggedUnion; +pub const cutPrefix = @import("string.zig").cutPrefix; test { std.testing.refAllDecls(@This()); diff --git a/src/lib/string.zig b/src/lib/string.zig new file mode 100644 index 00000000000..795823c25fd --- /dev/null +++ b/src/lib/string.zig @@ -0,0 +1,15 @@ +const std = @import("std"); + +// This is a copy of std.mem.cutPrefix from 0.16. Once Ghostty has been ported +// to 0.16 this can be removed. + +/// If slice starts with prefix, returns the rest of slice starting at +/// prefix.len. +pub fn cutPrefix(comptime T: type, slice: []const T, prefix: []const T) ?[]const T { + return if (std.mem.startsWith(T, slice, prefix)) slice[prefix.len..] else null; +} + +test cutPrefix { + try std.testing.expectEqualStrings("foo", cutPrefix(u8, "--example=foo", "--example=").?); + try std.testing.expectEqual(null, cutPrefix(u8, "--example=foo", "-example=")); +} diff --git a/src/lib_vt.zig b/src/lib_vt.zig index 03a883e20f4..426660621ca 100644 --- a/src/lib_vt.zig +++ b/src/lib_vt.zig @@ -32,6 +32,7 @@ pub const modes = terminal.modes; pub const page = terminal.page; pub const parse_table = terminal.parse_table; pub const search = terminal.search; +pub const sgr = terminal.sgr; pub const size = terminal.size; pub const x11_color = terminal.x11_color; @@ -58,6 +59,8 @@ pub const Style = terminal.Style; pub const Terminal = terminal.Terminal; pub const Stream = terminal.Stream; pub const StreamAction = terminal.StreamAction; +pub const ReadonlyStream = terminal.ReadonlyStream; +pub const ReadonlyHandler = terminal.ReadonlyHandler; pub const Cursor = Screen.Cursor; pub const CursorStyle = Screen.CursorStyle; pub const CursorStyleReq = terminal.CursorStyle; diff --git a/src/os/homedir.zig b/src/os/homedir.zig index 0868a4fa5ef..14a4558cc1a 100644 --- a/src/os/homedir.zig +++ b/src/os/homedir.zig @@ -13,7 +13,7 @@ const Error = error{ /// is generally an expensive process so the value should be cached. pub inline fn home(buf: []u8) !?[]const u8 { return switch (builtin.os.tag) { - inline .linux, .freebsd, .macos => try homeUnix(buf), + .linux, .freebsd, .macos => try homeUnix(buf), .windows => try homeWindows(buf), // iOS doesn't have a user-writable home directory @@ -122,7 +122,13 @@ pub const ExpandError = error{ pub fn expandHome(path: []const u8, buf: []u8) ExpandError![]const u8 { return switch (builtin.os.tag) { .linux, .freebsd, .macos => try expandHomeUnix(path, buf), + + // `~/` is not an idiom generally used on Windows + .windows => return path, + + // iOS doesn't have a user-writable home directory .ios => return path, + else => @compileError("unimplemented"), }; } diff --git a/src/os/hostname.zig b/src/os/hostname.zig index f728a24551e..af9148fbf76 100644 --- a/src/os/hostname.zig +++ b/src/os/hostname.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const builtin = @import("builtin"); const posix = std.posix; pub const LocalHostnameValidationError = error{ @@ -99,9 +100,21 @@ pub fn isLocal(hostname: []const u8) LocalHostnameValidationError!bool { if (std.mem.eql(u8, "localhost", hostname)) return true; // If hostname is not "localhost" it must match our hostname. - var buf: [posix.HOST_NAME_MAX]u8 = undefined; - const ourHostname = try posix.gethostname(&buf); - return std.mem.eql(u8, hostname, ourHostname); + switch (builtin.os.tag) { + .windows => { + const windows = @import("windows.zig"); + var buf: [256:0]u8 = undefined; + var nSize: windows.DWORD = buf.len; + if (windows.exp.kernel32.GetComputerNameA(&buf, &nSize) == 0) return false; + const ourHostname = buf[0..nSize]; + return std.mem.eql(u8, hostname, ourHostname); + }, + else => { + var buf: [posix.HOST_NAME_MAX]u8 = undefined; + const ourHostname = try posix.gethostname(&buf); + return std.mem.eql(u8, hostname, ourHostname); + }, + } } test "isLocal returns true when provided hostname is localhost" { @@ -109,9 +122,21 @@ test "isLocal returns true when provided hostname is localhost" { } test "isLocal returns true when hostname is local" { - var buf: [posix.HOST_NAME_MAX]u8 = undefined; - const localHostname = try posix.gethostname(&buf); - try std.testing.expect(try isLocal(localHostname)); + switch (builtin.os.tag) { + .windows => { + const windows = @import("windows.zig"); + var buf: [256:0]u8 = undefined; + var nSize: windows.DWORD = buf.len; + if (windows.exp.kernel32.GetComputerNameA(&buf, &nSize) == 0) return error.GetComputerNameFailed; + const localHostname = buf[0..nSize]; + try std.testing.expect(try isLocal(localHostname)); + }, + else => { + var buf: [posix.HOST_NAME_MAX]u8 = undefined; + const localHostname = try posix.gethostname(&buf); + try std.testing.expect(try isLocal(localHostname)); + }, + } } test "isLocal returns false when hostname is not local" { diff --git a/src/os/i18n_locales.zig b/src/os/i18n_locales.zig index 48efbaf2890..a044bfa4835 100644 --- a/src/os/i18n_locales.zig +++ b/src/os/i18n_locales.zig @@ -28,30 +28,33 @@ /// we don't have a good way to determine this. We can always reorder /// with some data. pub const locales = [_][:0]const u8{ - "zh_CN.UTF-8", - "de_DE.UTF-8", - "fr_FR.UTF-8", - "ja_JP.UTF-8", - "nl_NL.UTF-8", - "nb_NO.UTF-8", - "ru_RU.UTF-8", - "uk_UA.UTF-8", - "pl_PL.UTF-8", - "ko_KR.UTF-8", - "mk_MK.UTF-8", - "tr_TR.UTF-8", - "id_ID.UTF-8", - "es_BO.UTF-8", - "es_AR.UTF-8", - "pt_BR.UTF-8", - "ca_ES.UTF-8", - "it_IT.UTF-8", - "bg_BG.UTF-8", - "ga_IE.UTF-8", - "hu_HU.UTF-8", - "he_IL.UTF-8", - "zh_TW.UTF-8", - "hr_HR.UTF-8", - "lt_LT.UTF-8", - "lv_LV.UTF-8", + "zh_CN", + "de", + "fr", + "ja", + "nl", + "nb", + "ru", + "uk", + "pl", + "ko_KR", + "mk", + "tr", + "id", + "es_BO", + "es_AR", + "es_ES", + "pt_BR", + "ca", + "it", + "bg", + "ga", + "hu", + "he", + "zh_TW", + "hr", + "lt", + "lv", + "vi", + "kk", }; diff --git a/src/os/string_encoding.zig b/src/os/string_encoding.zig index 042001ea75e..875a5bc17e4 100644 --- a/src/os/string_encoding.zig +++ b/src/os/string_encoding.zig @@ -1,35 +1,30 @@ const std = @import("std"); -/// Do an in-place decode of a string that has been encoded in the same way -/// that `bash`'s `printf %q` encodes a string. This is safe because a string -/// can only get shorter after decoding. This destructively modifies the buffer -/// given to it. If an error is returned the buffer may be in an unusable state. -pub fn printfQDecode(buf: [:0]u8) error{DecodeError}![:0]const u8 { - const data: [:0]u8 = data: { +/// Decode date from the buffer that has been encoded in the same way that +/// `bash`'s `printf %q` encodes a string and write it to the writer. If an +/// error is returned garbage may have been written to the buffer. +pub fn printfQDecode(writer: *std.Io.Writer, buf: []const u8) (std.Io.Writer.Error || error{DecodeError})!void { + const data: []const u8 = data: { // Strip off `$''` quoting. if (std.mem.startsWith(u8, buf, "$'")) { if (buf.len < 3 or !std.mem.endsWith(u8, buf, "'")) return error.DecodeError; - buf[buf.len - 1] = 0; - break :data buf[2 .. buf.len - 1 :0]; + break :data buf[2 .. buf.len - 1]; } // Strip off `''` quoting. if (std.mem.startsWith(u8, buf, "'")) { if (buf.len < 2 or !std.mem.endsWith(u8, buf, "'")) return error.DecodeError; - buf[buf.len - 1] = 0; - break :data buf[1 .. buf.len - 1 :0]; + break :data buf[1 .. buf.len - 1]; } break :data buf; }; var src: usize = 0; - var dst: usize = 0; while (src < data.len) { switch (data[src]) { else => { - data[dst] = data[src]; + try writer.writeByte(data[src]); src += 1; - dst += 1; }, '\\' => { if (src + 1 >= data.len) return error.DecodeError; @@ -40,132 +35,141 @@ pub fn printfQDecode(buf: [:0]u8) error{DecodeError}![:0]const u8 { '\'', '$', => |c| { - data[dst] = c; + try writer.writeByte(c); src += 2; - dst += 1; }, 'e' => { - data[dst] = std.ascii.control_code.esc; + try writer.writeByte(std.ascii.control_code.esc); src += 2; - dst += 1; }, 'n' => { - data[dst] = std.ascii.control_code.lf; + try writer.writeByte(std.ascii.control_code.lf); src += 2; - dst += 1; }, 'r' => { - data[dst] = std.ascii.control_code.cr; + try writer.writeByte(std.ascii.control_code.cr); src += 2; - dst += 1; }, 't' => { - data[dst] = std.ascii.control_code.ht; + try writer.writeByte(std.ascii.control_code.ht); src += 2; - dst += 1; }, 'v' => { - data[dst] = std.ascii.control_code.vt; + try writer.writeByte(std.ascii.control_code.vt); src += 2; - dst += 1; }, else => return error.DecodeError, } }, } } - - data[dst] = 0; - return data[0..dst :0]; } test "printf_q 1" { - const s: [:0]const u8 = "bobr\\ kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try printfQDecode(&src); - try std.testing.expectEqualStrings("bobr kurwa", dst); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr\\ kurwa"; + + try printfQDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr kurwa", w.written()); } test "printf_q 2" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "bobr\\nkurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try printfQDecode(&src); - try std.testing.expectEqualStrings("bobr\nkurwa", dst); + + try printfQDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr\nkurwa", w.written()); } test "printf_q 3" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "bobr\\dkurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } test "printf_q 4" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "bobr kurwa\\"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } test "printf_q 5" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "$'bobr kurwa'"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try printfQDecode(&src); - try std.testing.expectEqualStrings("bobr kurwa", dst); + + try printfQDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr kurwa", w.written()); } test "printf_q 6" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "'bobr kurwa'"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try printfQDecode(&src); - try std.testing.expectEqualStrings("bobr kurwa", dst); + + try printfQDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr kurwa", w.written()); } test "printf_q 7" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "$'bobr kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } test "printf_q 8" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); const s: [:0]const u8 = "$'"; var src: [s.len:0]u8 = undefined; @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } test "printf_q 9" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); const s: [:0]const u8 = "'bobr kurwa"; var src: [s.len:0]u8 = undefined; @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } test "printf_q 10" { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + const s: [:0]const u8 = "'"; var src: [s.len:0]u8 = undefined; @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, printfQDecode(&src)); + try std.testing.expectError(error.DecodeError, printfQDecode(&w.writer, s)); } -/// Do an in-place decode of a string that has been URL percent encoded. -/// This is safe because a string can only get shorter after decoding. This -/// destructively modifies the buffer given to it. If an error is returned the -/// buffer may be in an unusable state. -pub fn urlPercentDecode(buf: [:0]u8) error{DecodeError}![:0]const u8 { +/// Decode data from the buffer that has been URL percent encoded and write +/// it to the given buffer. If an error is returned the garbage may have been +/// written to the writer. +pub fn urlPercentDecode(writer: *std.Io.Writer, buf: []const u8) (std.Io.Writer.Error || error{DecodeError})!void { var src: usize = 0; - var dst: usize = 0; while (src < buf.len) { switch (buf[src]) { else => { - buf[dst] = buf[src]; + try writer.writeByte(buf[src]); src += 1; - dst += 1; }, '%' => { if (src + 2 >= buf.len) return error.DecodeError; @@ -173,9 +177,8 @@ pub fn urlPercentDecode(buf: [:0]u8) error{DecodeError}![:0]const u8 { '0'...'9', 'a'...'f', 'A'...'F' => { switch (buf[src + 2]) { '0'...'9', 'a'...'f', 'A'...'F' => { - buf[dst] = std.math.shl(u8, hex(buf[src + 1]), 4) | hex(buf[src + 2]); + try writer.writeByte(std.math.shl(u8, hex(buf[src + 1]), 4) | hex(buf[src + 2])); src += 3; - dst += 1; }, else => return error.DecodeError, } @@ -185,8 +188,6 @@ pub fn urlPercentDecode(buf: [:0]u8) error{DecodeError}![:0]const u8 { }, } } - buf[dst] = 0; - return buf[0..dst :0]; } inline fn hex(c: u8) u4 { @@ -200,70 +201,96 @@ inline fn hex(c: u8) u4 { test "singles percent" { for (0..255) |c| { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + var buf_: [4]u8 = undefined; const buf = try std.fmt.bufPrintZ(&buf_, "%{x:0>2}", .{c}); - const decoded = try urlPercentDecode(buf); + + try urlPercentDecode(&w.writer, buf); + const decoded = w.written(); + try std.testing.expectEqual(1, decoded.len); try std.testing.expectEqual(c, decoded[0]); } for (0..255) |c| { + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + var buf_: [4]u8 = undefined; const buf = try std.fmt.bufPrintZ(&buf_, "%{X:0>2}", .{c}); - const decoded = try urlPercentDecode(buf); + + try urlPercentDecode(&w.writer, buf); + const decoded = w.written(); + try std.testing.expectEqual(1, decoded.len); try std.testing.expectEqual(c, decoded[0]); } } test "percent 1" { - const s: [:0]const u8 = "bobr%20kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try urlPercentDecode(&src); - try std.testing.expectEqualStrings("bobr kurwa", dst); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%20kurwa"; + + try urlPercentDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr kurwa", w.written()); } test "percent 2" { - const s: [:0]const u8 = "bobr%2kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, urlPercentDecode(&src)); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%2kurwa"; + + try std.testing.expectError(error.DecodeError, urlPercentDecode(&w.writer, s)); } test "percent 3" { - const s: [:0]const u8 = "bobr%kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, urlPercentDecode(&src)); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%kurwa"; + + try std.testing.expectError(error.DecodeError, urlPercentDecode(&w.writer, s)); } test "percent 4" { - const s: [:0]const u8 = "bobr%%kurwa"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, urlPercentDecode(&src)); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%%kurwa"; + + try std.testing.expectError(error.DecodeError, urlPercentDecode(&w.writer, s)); } test "percent 5" { - const s: [:0]const u8 = "bobr%20kurwa%20"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - const dst = try urlPercentDecode(&src); - try std.testing.expectEqualStrings("bobr kurwa ", dst); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%20kurwa%20"; + + try urlPercentDecode(&w.writer, s); + try std.testing.expectEqualStrings("bobr kurwa ", w.written()); } test "percent 6" { - const s: [:0]const u8 = "bobr%20kurwa%2"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, urlPercentDecode(&src)); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%20kurwa%2"; + + try std.testing.expectError(error.DecodeError, urlPercentDecode(&w.writer, s)); } test "percent 7" { - const s: [:0]const u8 = "bobr%20kurwa%"; - var src: [s.len:0]u8 = undefined; - @memcpy(&src, s); - try std.testing.expectError(error.DecodeError, urlPercentDecode(&src)); + var w: std.Io.Writer.Allocating = .init(std.testing.allocator); + defer w.deinit(); + + const s: []const u8 = "bobr%20kurwa%"; + + try std.testing.expectError(error.DecodeError, urlPercentDecode(&w.writer, s)); } /// Is the given character valid in URI percent encoding? diff --git a/src/os/windows.zig b/src/os/windows.zig index 1853f416269..e92a545374e 100644 --- a/src/os/windows.zig +++ b/src/os/windows.zig @@ -53,22 +53,22 @@ pub const exp = struct { hWritePipe: *windows.HANDLE, lpPipeAttributes: ?*const windows.SECURITY_ATTRIBUTES, nSize: windows.DWORD, - ) callconv(windows.WINAPI) windows.BOOL; + ) callconv(.winapi) windows.BOOL; pub extern "kernel32" fn CreatePseudoConsole( size: windows.COORD, hInput: windows.HANDLE, hOutput: windows.HANDLE, dwFlags: windows.DWORD, phPC: *HPCON, - ) callconv(windows.WINAPI) windows.HRESULT; - pub extern "kernel32" fn ResizePseudoConsole(hPC: HPCON, size: windows.COORD) callconv(windows.WINAPI) windows.HRESULT; - pub extern "kernel32" fn ClosePseudoConsole(hPC: HPCON) callconv(windows.WINAPI) void; + ) callconv(.winapi) windows.HRESULT; + pub extern "kernel32" fn ResizePseudoConsole(hPC: HPCON, size: windows.COORD) callconv(.winapi) windows.HRESULT; + pub extern "kernel32" fn ClosePseudoConsole(hPC: HPCON) callconv(.winapi) void; pub extern "kernel32" fn InitializeProcThreadAttributeList( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwAttributeCount: windows.DWORD, dwFlags: windows.DWORD, lpSize: *windows.SIZE_T, - ) callconv(windows.WINAPI) windows.BOOL; + ) callconv(.winapi) windows.BOOL; pub extern "kernel32" fn UpdateProcThreadAttribute( lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, dwFlags: windows.DWORD, @@ -77,7 +77,7 @@ pub const exp = struct { cbSize: windows.SIZE_T, lpPreviousValue: ?windows.PVOID, lpReturnSize: ?*windows.SIZE_T, - ) callconv(windows.WINAPI) windows.BOOL; + ) callconv(.winapi) windows.BOOL; pub extern "kernel32" fn PeekNamedPipe( hNamedPipe: windows.HANDLE, lpBuffer: ?windows.LPVOID, @@ -85,7 +85,7 @@ pub const exp = struct { lpBytesRead: ?*windows.DWORD, lpTotalBytesAvail: ?*windows.DWORD, lpBytesLeftThisMessage: ?*windows.DWORD, - ) callconv(windows.WINAPI) windows.BOOL; + ) callconv(.winapi) windows.BOOL; // Duplicated here because lpCommandLine is not marked optional in zig std pub extern "kernel32" fn CreateProcessW( lpApplicationName: ?windows.LPWSTR, @@ -98,7 +98,12 @@ pub const exp = struct { lpCurrentDirectory: ?windows.LPWSTR, lpStartupInfo: *windows.STARTUPINFOW, lpProcessInformation: *windows.PROCESS_INFORMATION, - ) callconv(windows.WINAPI) windows.BOOL; + ) callconv(.winapi) windows.BOOL; + /// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcomputernamea + pub extern "kernel32" fn GetComputerNameA( + lpBuffer: windows.LPSTR, + nSize: *windows.DWORD, + ) callconv(.winapi) windows.BOOL; }; pub const PROC_THREAD_ATTRIBUTE_NUMBER = 0x0000FFFF; diff --git a/src/renderer.zig b/src/renderer.zig index 9b5164e918f..747556847af 100644 --- a/src/renderer.zig +++ b/src/renderer.zig @@ -31,6 +31,7 @@ pub const ScreenSize = size.ScreenSize; pub const GridSize = size.GridSize; pub const Padding = size.Padding; pub const cursorStyle = cursor.style; +pub const lib = @import("lib/main.zig"); /// The implementation to use for the renderer. This is comptime chosen /// so that every build has exactly one renderer implementation. @@ -44,8 +45,12 @@ pub const Renderer = switch (build_config.renderer) { /// renderers even if some states aren't reachable so that our API users /// can use the same enum for all renderers. pub const Health = enum(c_int) { - healthy = 0, - unhealthy = 1, + healthy, + unhealthy, + + test "ghostty.h Health" { + try lib.checkGhosttyHEnum(Health, "GHOSTTY_RENDERER_HEALTH_"); + } }; test { diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index 6c7432d2100..a3ba15c2248 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -17,6 +17,7 @@ const shadertoy = @import("shadertoy.zig"); const mtl = @import("metal/api.zig"); const IOSurfaceLayer = @import("metal/IOSurfaceLayer.zig"); +const IOSurface = macos.iosurface.IOSurface; pub const GraphicsAPI = Metal; pub const Target = @import("metal/Target.zig"); @@ -61,6 +62,13 @@ max_texture_size: u32, /// We start an AutoreleasePool before `drawFrame` and end it afterwards. autorelease_pool: ?*objc.AutoreleasePool = null, +/// Keep a retained reference to the last presented IOSurface so we can +/// re-present it during resize/display callbacks without drawing a new frame. +/// +/// This prevents transient blank frames when CA requests a synchronous display +/// before the terminal has rebuilt its cell buffers for the new size. +last_surface: ?*IOSurface = null, + pub fn init(alloc: Allocator, opts: rendererpkg.Options) !Metal { comptime switch (builtin.os.tag) { .macos, .ios => {}, @@ -152,10 +160,12 @@ pub fn init(alloc: Allocator, opts: rendererpkg.Options) !Metal { .blending = opts.config.blending, .default_storage_mode = default_storage_mode, .max_texture_size = max_texture_size, + .last_surface = null, }; } pub fn deinit(self: *Metal) void { + if (self.last_surface) |s| s.release(); self.queue.release(); self.device.release(); self.layer.release(); @@ -251,6 +261,14 @@ pub fn initTarget(self: *const Metal, width: usize, height: usize) !Target { /// Present the provided target. pub inline fn present(self: *Metal, target: Target, sync: bool) !void { + // Most of the time we want top-left gravity to avoid stretching/jank. + self.layer.layer.setProperty("contentsGravity", macos.animation.kCAGravityTopLeft); + + // Track the last presented surface so `presentLastTarget` can re-present it. + if (self.last_surface) |s| s.release(); + target.surface.retain(); + self.last_surface = target.surface; + if (sync) { self.layer.setSurfaceSync(target.surface); } else { @@ -258,9 +276,24 @@ pub inline fn present(self: *Metal, target: Target, sync: bool) !void { } } -/// Present the last presented target again. (noop for Metal) +/// Present the last presented target again. pub inline fn presentLastTarget(self: *Metal) !void { - _ = self; + const surface = self.last_surface orelse return; + + // Keep top-left gravity during resize replay so stale surfaces never stretch. + // Newly exposed regions use the layer background until a correctly sized frame arrives. + self.layer.layer.setProperty("contentsGravity", macos.animation.kCAGravityTopLeft); + + // Prefer synchronous set on the main thread (matches the CA display callback + // path). If we're off-main-thread, use the async helper which marshals to the + // main queue to avoid visual artifacts. + const NSThread = objc.getClass("NSThread").?; + if (NSThread.msgSend(bool, "isMainThread", .{})) { + self.layer.setSurfaceSync(surface); + } else { + // During resize replay off the main thread, keep non-stretch sampling. + try self.layer.setSurfaceUnchecked(surface); + } } /// Returns the options to use when constructing buffers. diff --git a/src/renderer/Thread.zig b/src/renderer/Thread.zig index 5087213797d..8ce77acb533 100644 --- a/src/renderer/Thread.zig +++ b/src/renderer/Thread.zig @@ -360,11 +360,6 @@ fn drainMailbox(self: *Thread) !void { // Visibility affects our QoS class self.setQosClass(); - // If we became visible then we immediately trigger a draw. - // We don't need to update frame data because that should - // still be happening. - if (v) self.drawFrame(false); - // Notify the renderer so it can update any state. self.renderer.setVisible(v); diff --git a/src/renderer/cursor.zig b/src/renderer/cursor.zig index bfa92f31db3..33992bc5559 100644 --- a/src/renderer/cursor.zig +++ b/src/renderer/cursor.zig @@ -15,7 +15,7 @@ pub const Style = enum { lock, /// Create a cursor style from the terminal style request. - pub fn fromTerminal(term: terminal.CursorStyle) ?Style { + pub fn fromTerminal(term: terminal.CursorStyle) Style { return switch (term) { .bar => .bar, .block => .block, @@ -143,7 +143,7 @@ test "cursor: always block with preedit" { // If we're scrolled though, then we don't show the cursor. for (0..100) |_| try term.index(); - try term.scrollViewport(.{ .top = {} }); + term.scrollViewport(.{ .top = {} }); try state.update(alloc, &term); // In any bool state diff --git a/src/renderer/generic.zig b/src/renderer/generic.zig index 19c7b33751e..539faeb5996 100644 --- a/src/renderer/generic.zig +++ b/src/renderer/generic.zig @@ -43,6 +43,17 @@ const DisplayLink = switch (builtin.os.tag) { const log = std.log.scoped(.generic_renderer); +fn cmuxSurfaceBootstrapTraceEnabled() bool { + return std.posix.getenv("CMUX_SURFACE_BOOTSTRAP_DEBUG") != null or + std.posix.getenv("CMUX_PANE_STRIP_MOTION_SETUP") != null or + std.posix.getenv("CMUX_UI_TEST_PANE_STRIP_MOTION_SETUP") != null; +} + +fn cmuxSurfaceBootstrapTrace(comptime fmt: []const u8, args: anytype) void { + if (!cmuxSurfaceBootstrapTraceEnabled()) return; + std.debug.print("[CMUXRENDERER] " ++ fmt ++ "\n", args); +} + /// Create a renderer type with the provided graphics API wrapper. /// /// The graphics API wrapper must provide the interface outlined below. @@ -125,6 +136,12 @@ pub fn Renderer(comptime GraphicsAPI: type) type { scrollbar: terminal.Scrollbar, scrollbar_dirty: bool, + /// Tracks the last bottom-right pin of the screen to detect new output. + /// When the final line changes (node or y differs), new content was added. + /// Used for scroll-to-bottom on output feature. + last_bottom_node: ?usize, + last_bottom_y: terminal.size.CellCountInt, + /// The most recent viewport matches so that we can render search /// matches in the visible frame. This is provided asynchronously /// from the search thread so we have the dirty flag to also note @@ -146,6 +163,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { /// cells for the draw call. cells_rebuilt: bool = false, + /// The current GPU uniform values. uniforms: shaderpkg.Uniforms, @@ -196,6 +214,11 @@ pub fn Renderer(comptime GraphicsAPI: type) type { /// Health of the most recently completed frame. health: std.atomic.Value(Health) = .{ .raw = .healthy }, + /// True once we've successfully presented at least one frame. Used to + /// safely re-present the last target during synchronous resize callbacks + /// without risking an initial blank window. + has_presented: std.atomic.Value(bool) = .{ .raw = false }, + /// Our swap chain (multiple buffering) swap_chain: SwapChain, @@ -260,8 +283,11 @@ pub fn Renderer(comptime GraphicsAPI: type) type { var result: SwapChain = .{ .frames = undefined }; // Initialize all of our frame state. - for (&result.frames) |*frame| { - frame.* = try FrameState.init(api, custom_shaders); + for (&result.frames, 0..) |*frame, index| { + frame.* = FrameState.init(api, custom_shaders) catch |err| { + cmuxSurfaceBootstrapTrace("SwapChain.init frame={} failed err={}", .{ index, err }); + return err; + }; } return result; @@ -338,7 +364,10 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Uniform buffer contains exactly 1 uniform struct. The // uniform data will be undefined so this must be set before // a frame is drawn. - var uniforms = try UniformBuffer.init(api.uniformBufferOptions(), 1); + var uniforms = UniformBuffer.init(api.uniformBufferOptions(), 1) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init uniforms failed err={}", .{err}); + return err; + }; errdefer uniforms.deinit(); // Create GPU buffers for our cells. @@ -347,45 +376,66 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // too small, but they will be resized as needed. This is a bit // wasteful but since it's a one-time thing it's not really a // huge concern. - var cells = try CellTextBuffer.init(api.fgBufferOptions(), 1); + var cells = CellTextBuffer.init(api.fgBufferOptions(), 1) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init cells failed err={}", .{err}); + return err; + }; errdefer cells.deinit(); - var cells_bg = try CellBgBuffer.init(api.bgBufferOptions(), 1); + var cells_bg = CellBgBuffer.init(api.bgBufferOptions(), 1) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init cells_bg failed err={}", .{err}); + return err; + }; errdefer cells_bg.deinit(); // Create a GPU buffer for our background image info. - var bg_image_buffer = try BgImageBuffer.init( + var bg_image_buffer = BgImageBuffer.init( api.bgImageBufferOptions(), 1, - ); + ) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init bg_image_buffer failed err={}", .{err}); + return err; + }; errdefer bg_image_buffer.deinit(); // Initialize our textures for our font atlas. // // As with the buffers above, we start these off as small // as possible since they'll inevitably be resized anyway. - const grayscale = try api.initAtlasTexture(&.{ + const grayscale = api.initAtlasTexture(&.{ .data = undefined, .size = 1, .format = .grayscale, - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init grayscale atlas failed err={}", .{err}); + return err; + }; errdefer grayscale.deinit(); - const color = try api.initAtlasTexture(&.{ + const color = api.initAtlasTexture(&.{ .data = undefined, .size = 1, .format = .bgra, - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init color atlas failed err={}", .{err}); + return err; + }; errdefer color.deinit(); var custom_shader_state = if (custom_shaders) - try CustomShaderState.init(api) + CustomShaderState.init(api) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init custom shader state failed err={}", .{err}); + return err; + } else null; errdefer if (custom_shader_state) |*state| state.deinit(); // Initialize the target. Just as with the other resources, // start it off as small as we can since it'll be resized. - const target = try api.initTarget(1, 1); + const target = api.initTarget(1, 1) catch |err| { + cmuxSurfaceBootstrapTrace("FrameState.init target failed err={}", .{err}); + return err; + }; return .{ .uniforms = uniforms, @@ -563,6 +613,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { colorspace: configpkg.Config.WindowColorspace, blending: configpkg.Config.AlphaBlending, background_blur: configpkg.Config.BackgroundBlur, + scroll_to_bottom_on_output: bool, pub fn init( alloc_gpa: Allocator, @@ -636,6 +687,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { .colorspace = config.@"window-colorspace", .blending = config.@"alpha-blending", .background_blur = config.@"background-blur", + .scroll_to_bottom_on_output = config.@"scroll-to-bottom".output, .arena = arena, }; } @@ -648,26 +700,39 @@ pub fn Renderer(comptime GraphicsAPI: type) type { }; pub fn init(alloc: Allocator, options: renderer.Options) !Self { + cmuxSurfaceBootstrapTrace("Renderer.init begin", .{}); // Initialize our graphics API wrapper, this will prepare the // surface provided by the apprt and set up any API-specific // GPU resources. - var api = try GraphicsAPI.init(alloc, options); + var api = GraphicsAPI.init(alloc, options) catch |err| { + cmuxSurfaceBootstrapTrace("Renderer.init GraphicsAPI.init failed err={}", .{err}); + return err; + }; errdefer api.deinit(); + cmuxSurfaceBootstrapTrace("Renderer.init GraphicsAPI.init ok", .{}); const has_custom_shaders = options.config.custom_shaders.value.items.len > 0; // Prepare our swap chain - var swap_chain = try SwapChain.init( + var swap_chain = SwapChain.init( api, has_custom_shaders, - ); + ) catch |err| { + cmuxSurfaceBootstrapTrace("Renderer.init SwapChain.init failed err={}", .{err}); + return err; + }; errdefer swap_chain.deinit(); + cmuxSurfaceBootstrapTrace("Renderer.init SwapChain.init ok", .{}); // Create the font shaper. - var font_shaper = try font.Shaper.init(alloc, .{ + var font_shaper = font.Shaper.init(alloc, .{ .features = options.config.font_features.items, - }); + }) catch |err| { + cmuxSurfaceBootstrapTrace("Renderer.init font.Shaper.init failed err={}", .{err}); + return err; + }; errdefer font_shaper.deinit(); + cmuxSurfaceBootstrapTrace("Renderer.init font.Shaper.init ok", .{}); // Initialize all the data that requires a critical font section. const font_critical: struct { @@ -682,13 +747,24 @@ pub fn Renderer(comptime GraphicsAPI: type) type { }; const display_link: ?DisplayLink = switch (builtin.os.tag) { - .macos => if (options.config.vsync) - try macos.video.DisplayLink.createWithActiveCGDisplays() - else - null, + .macos => blk: { + if (!options.config.vsync) break :blk null; + break :blk macos.video.DisplayLink.createWithActiveCGDisplays() catch |err| { + log.warn( + "display link unavailable, falling back to timer-driven rendering err={}", + .{err} + ); + cmuxSurfaceBootstrapTrace( + "Renderer.init DisplayLink.create unavailable err={}, continuing without vsync", + .{err} + ); + break :blk null; + }; + }, else => null, }; errdefer if (display_link) |v| v.release(); + cmuxSurfaceBootstrapTrace("Renderer.init display_link ok", .{}); var result: Self = .{ .alloc = alloc, @@ -699,6 +775,8 @@ pub fn Renderer(comptime GraphicsAPI: type) type { .focused = true, .scrollbar = .zero, .scrollbar_dirty = false, + .last_bottom_node = null, + .last_bottom_y = 0, .search_matches = null, .search_selected_match = null, .search_matches_dirty = false, @@ -746,6 +824,9 @@ pub fn Renderer(comptime GraphicsAPI: type) type { .previous_cursor = @splat(0), .current_cursor_color = @splat(0), .previous_cursor_color = @splat(0), + .current_cursor_style = 0, + .previous_cursor_style = 0, + .cursor_visible = 0, .cursor_change_time = 0, .time_focus = 0, .focus = 1, // assume focused initially @@ -990,9 +1071,19 @@ pub fn Renderer(comptime GraphicsAPI: type) type { if (comptime DisplayLink == void) return; const display_link = self.display_link orelse return; log.info("updating display link display id={}", .{id}); + const was_running = display_link.isRunning(); display_link.setCurrentCGDisplay(id) catch |err| { log.warn("error setting display link display id err={}", .{err}); + return; }; + + // CVDisplayLink can silently "run" without ever delivering callbacks if it + // was started before a valid current display was set. Restarting it after + // we successfully set the display fixes the stuck-vsync-no-frames state. + if (was_running and self.focused) { + display_link.stop() catch {}; + display_link.start() catch {}; + } } /// True if our renderer has animations so that a higher frequency @@ -1166,6 +1257,26 @@ pub fn Renderer(comptime GraphicsAPI: type) type { return; } + // If scroll-to-bottom on output is enabled, check if the final line + // changed by comparing the bottom-right pin. If the node pointer or + // y offset changed, new content was added to the screen. + // Update this BEFORE we update our render state so we can + // draw the new scrolled data immediately. + if (self.config.scroll_to_bottom_on_output) scroll: { + const br = state.terminal.screens.active.pages.getBottomRight(.screen) orelse break :scroll; + + // If the pin hasn't changed, then don't scroll. + if (self.last_bottom_node == @intFromPtr(br.node) and + self.last_bottom_y == br.y) break :scroll; + + // Update tracked pin state for next frame + self.last_bottom_node = @intFromPtr(br.node); + self.last_bottom_y = br.y; + + // Scroll + state.terminal.scrollViewport(.bottom); + } + // Update our terminal state try self.terminal_state.update(self.alloc, state.terminal); @@ -1196,6 +1307,10 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // kitty state on every frame because any cell change can move // an image. if (self.images.kittyRequiresUpdate(state.terminal)) { + // We need to grab the draw mutex since this updates + // our image state that drawFrame uses. + self.draw_mutex.lock(); + defer self.draw_mutex.unlock(); self.images.kittyUpdate( self.alloc, state.terminal, @@ -1323,6 +1438,9 @@ pub fn Renderer(comptime GraphicsAPI: type) type { self.draw_mutex.lock(); defer self.draw_mutex.unlock(); + _ = self.terminal_state.rows; + _ = self.terminal_state.cols; + // Build our GPU cells self.rebuildCells( critical.preedit, @@ -1435,6 +1553,40 @@ pub fn Renderer(comptime GraphicsAPI: type) type { self.size.screen.width != surface_size.width or self.size.screen.height != surface_size.height; + // On macOS, CoreAnimation can synchronously request a display during bounds changes. + // If we resize our render target and present a freshly cleared surface before the IO + // thread delivers the new terminal state/cell buffers, we can show a single-frame + // blank flash. To avoid this, satisfy the synchronous display by re-presenting the + // last completed frame and let the normal render loop catch up on the next tick. + if (sync and size_changed and self.has_presented.load(.monotonic)) { + try self.api.presentLastTarget(); + return; + } + + // During resize/layout transitions, the platform can trigger draws before the IO + // thread has delivered the corresponding terminal resize (and thus before updateFrame + // has rebuilt GPU cell buffers for the new grid). If we draw in that window we can + // render nothing but background (visually blank) because the projection/padding math + // uses a stale `cells.size` that doesn't match the new screen size. + // + // Detect this by computing the expected grid for the current surface size and + // comparing it to the currently rebuilt cell buffer grid. If they don't match, keep + // the last presented frame on-screen until the new cells arrive. + if (size_changed) { + const expected_grid = (renderer.Size{ + .screen = .{ .width = surface_size.width, .height = surface_size.height }, + .cell = self.size.cell, + .padding = self.size.padding, + }).grid(); + + if (expected_grid.columns != self.cells.size.columns or + expected_grid.rows != self.cells.size.rows) + { + try self.api.presentLastTarget(); + return; + } + } + // Conditions under which we need to draw the frame, otherwise we // don't need to since the previous frame should be identical. const needs_redraw = @@ -1702,6 +1854,11 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Always release our semaphore self.swap_chain.releaseFrame(); + + if (health == .healthy) { + // Track that we have a last good frame to re-present during sync resize callbacks. + self.has_presented.store(true, .monotonic); + } } /// Call this any time the background image path changes. @@ -1977,11 +2134,12 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Only update when terminal state is dirty. if (self.terminal_state.dirty == .false) return; + const uniforms: *shadertoy.Uniforms = &self.custom_shader_uniforms; const colors: *const terminal.RenderState.Colors = &self.terminal_state.colors; // 256-color palette for (colors.palette, 0..) |color, i| { - self.custom_shader_uniforms.palette[i] = .{ + uniforms.palette[i] = .{ @as(f32, @floatFromInt(color.r)) / 255.0, @as(f32, @floatFromInt(color.g)) / 255.0, @as(f32, @floatFromInt(color.b)) / 255.0, @@ -1990,7 +2148,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { } // Background color - self.custom_shader_uniforms.background_color = .{ + uniforms.background_color = .{ @as(f32, @floatFromInt(colors.background.r)) / 255.0, @as(f32, @floatFromInt(colors.background.g)) / 255.0, @as(f32, @floatFromInt(colors.background.b)) / 255.0, @@ -1998,7 +2156,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { }; // Foreground color - self.custom_shader_uniforms.foreground_color = .{ + uniforms.foreground_color = .{ @as(f32, @floatFromInt(colors.foreground.r)) / 255.0, @as(f32, @floatFromInt(colors.foreground.g)) / 255.0, @as(f32, @floatFromInt(colors.foreground.b)) / 255.0, @@ -2007,7 +2165,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Cursor color if (colors.cursor) |cursor_color| { - self.custom_shader_uniforms.cursor_color = .{ + uniforms.cursor_color = .{ @as(f32, @floatFromInt(cursor_color.r)) / 255.0, @as(f32, @floatFromInt(cursor_color.g)) / 255.0, @as(f32, @floatFromInt(cursor_color.b)) / 255.0, @@ -2021,7 +2179,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Cursor text color if (self.config.cursor_text) |cursor_text| { - self.custom_shader_uniforms.cursor_text = .{ + uniforms.cursor_text = .{ @as(f32, @floatFromInt(cursor_text.color.r)) / 255.0, @as(f32, @floatFromInt(cursor_text.color.g)) / 255.0, @as(f32, @floatFromInt(cursor_text.color.b)) / 255.0, @@ -2031,7 +2189,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Selection background color if (self.config.selection_background) |selection_bg| { - self.custom_shader_uniforms.selection_background_color = .{ + uniforms.selection_background_color = .{ @as(f32, @floatFromInt(selection_bg.color.r)) / 255.0, @as(f32, @floatFromInt(selection_bg.color.g)) / 255.0, @as(f32, @floatFromInt(selection_bg.color.b)) / 255.0, @@ -2041,13 +2199,21 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // Selection foreground color if (self.config.selection_foreground) |selection_fg| { - self.custom_shader_uniforms.selection_foreground_color = .{ + uniforms.selection_foreground_color = .{ @as(f32, @floatFromInt(selection_fg.color.r)) / 255.0, @as(f32, @floatFromInt(selection_fg.color.g)) / 255.0, @as(f32, @floatFromInt(selection_fg.color.b)) / 255.0, 1.0, }; } + + // Cursor visibility + uniforms.cursor_visible = @intFromBool(self.terminal_state.cursor.visible); + + // Cursor style + const cursor_style: renderer.CursorStyle = .fromTerminal(self.terminal_state.cursor.visual_style); + uniforms.previous_cursor_style = uniforms.current_cursor_style; + uniforms.current_cursor_style = @as(i32, @intFromEnum(cursor_style)); } /// Update per-frame custom shader uniforms. @@ -2057,7 +2223,7 @@ pub fn Renderer(comptime GraphicsAPI: type) type { // We only need to do this if we have custom shaders. if (!self.has_custom_shaders) return; - const uniforms = &self.custom_shader_uniforms; + const uniforms: *shadertoy.Uniforms = &self.custom_shader_uniforms; const now = try std.time.Instant.now(); defer self.last_frame_time = now; @@ -2091,7 +2257,6 @@ pub fn Renderer(comptime GraphicsAPI: type) type { 0, }; - // Update custom cursor uniforms, if we have a cursor. if (self.cells.getCursorGlyph()) |cursor| { const cursor_width: f32 = @floatFromInt(cursor.glyph_size[0]); const cursor_height: f32 = @floatFromInt(cursor.glyph_size[1]); diff --git a/src/renderer/image.zig b/src/renderer/image.zig index 85f3a01ed72..c43d27981d2 100644 --- a/src/renderer/image.zig +++ b/src/renderer/image.zig @@ -844,7 +844,7 @@ pub const Image = union(enum) { /// Converts the image data to a format that can be uploaded to the GPU. /// If the data is already in a format that can be uploaded, this is a /// no-op. - pub fn convert(self: *Image, alloc: Allocator) wuffs.Error!void { + fn convert(self: *Image, alloc: Allocator) wuffs.Error!void { const p = self.getPendingPointer().?; // As things stand, we currently convert all images to RGBA before // uploading to the GPU. This just makes things easier. In the future @@ -867,7 +867,7 @@ pub const Image = union(enum) { /// Prepare the pending image data for upload to the GPU. /// This doesn't need GPU access so is safe to call any time. - pub fn prepForUpload(self: *Image, alloc: Allocator) wuffs.Error!void { + fn prepForUpload(self: *Image, alloc: Allocator) wuffs.Error!void { assert(self.isPending()); try self.convert(alloc); } diff --git a/src/renderer/metal/IOSurfaceLayer.zig b/src/renderer/metal/IOSurfaceLayer.zig index 34fbfbed544..93bc99b2db8 100644 --- a/src/renderer/metal/IOSurfaceLayer.zig +++ b/src/renderer/metal/IOSurfaceLayer.zig @@ -77,6 +77,30 @@ pub inline fn setSurface(self: *IOSurfaceLayer, surface: *IOSurface) !void { } } +/// Sets the layer's `contents` to the provided IOSurface without checking size. +/// +/// This is intended for "re-present last frame" paths during resize where we want +/// CoreAnimation to scale the last good surface to cover new bounds (i.e. avoid +/// a transient blank flash) even if the surface dimensions don't match the layer. +pub inline fn setSurfaceUnchecked(self: *IOSurfaceLayer, surface: *IOSurface) !void { + surface.retain(); + + var block = SetSurfaceUncheckedBlock.init(.{ + .layer = self.layer.value, + .surface = surface, + }, &setSurfaceUncheckedCallback); + + const NSThread = objc.getClass("NSThread").?; + if (NSThread.msgSend(bool, "isMainThread", .{})) { + setSurfaceUncheckedCallback(&block); + } else { + macos.dispatch.dispatch_async( + @ptrCast(macos.dispatch.queue.getMain()), + @ptrCast(&block), + ); + } +} + /// Sets the layer's `contents` to the provided IOSurface. /// /// Does not ensure this happens on the main thread. @@ -89,6 +113,11 @@ const SetSurfaceBlock = objc.Block(struct { surface: *IOSurface, }, .{}, void); +const SetSurfaceUncheckedBlock = objc.Block(struct { + layer: objc.c.id, + surface: *IOSurface, +}, .{}, void); + fn setSurfaceCallback( block: *const SetSurfaceBlock.Context, ) callconv(.c) void { @@ -118,6 +147,16 @@ fn setSurfaceCallback( layer.setProperty("contents", surface); } +fn setSurfaceUncheckedCallback( + block: *const SetSurfaceUncheckedBlock.Context, +) callconv(.c) void { + const layer = objc.Object.fromId(block.layer); + const surface: *IOSurface = block.surface; + defer surface.release(); + + layer.setProperty("contents", surface); +} + pub const DisplayCallback = ?*align(8) const fn (?*anyopaque) void; pub fn setDisplayCallback( diff --git a/src/renderer/shaders/shadertoy_prefix.glsl b/src/renderer/shaders/shadertoy_prefix.glsl index 661bd233dfc..4b6d091b853 100644 --- a/src/renderer/shaders/shadertoy_prefix.glsl +++ b/src/renderer/shaders/shadertoy_prefix.glsl @@ -15,6 +15,9 @@ layout(binding = 1, std140) uniform Globals { uniform vec4 iPreviousCursor; uniform vec4 iCurrentCursorColor; uniform vec4 iPreviousCursorColor; + uniform int iCurrentCursorStyle; + uniform int iPreviousCursorStyle; + uniform int iCursorVisible; uniform float iTimeCursorChange; uniform float iTimeFocus; uniform int iFocus; @@ -27,6 +30,12 @@ layout(binding = 1, std140) uniform Globals { uniform vec3 iSelectionBackgroundColor; }; +#define CURSORSTYLE_BLOCK 0 +#define CURSORSTYLE_BLOCK_HOLLOW 1 +#define CURSORSTYLE_BAR 2 +#define CURSORSTYLE_UNDERLINE 3 +#define CURSORSTYLE_LOCK 4 + layout(binding = 0) uniform sampler2D iChannel0; // These are unused currently by Ghostty: diff --git a/src/renderer/shadertoy.zig b/src/renderer/shadertoy.zig index 7d0ad4b0a31..556c282938c 100644 --- a/src/renderer/shadertoy.zig +++ b/src/renderer/shadertoy.zig @@ -24,6 +24,9 @@ pub const Uniforms = extern struct { previous_cursor: [4]f32 align(16), current_cursor_color: [4]f32 align(16), previous_cursor_color: [4]f32 align(16), + current_cursor_style: i32 align(4), + previous_cursor_style: i32 align(4), + cursor_visible: i32 align(4), cursor_change_time: f32 align(4), time_focus: f32 align(4), focus: i32 align(4), diff --git a/src/shell-integration/bash/ghostty.bash b/src/shell-integration/bash/ghostty.bash index 49d8de4504c..a369e8f7533 100644 --- a/src/shell-integration/bash/ghostty.bash +++ b/src/shell-integration/bash/ghostty.bash @@ -268,12 +268,15 @@ if (( BASH_VERSINFO[0] > 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 4) ) # Use function substitution in 5.3+. Otherwise, use command substitution. # Any output (including escape sequences) goes to the terminal. - if (( BASH_VERSINFO[0] > 5 || (BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3) )); then - # shellcheck disable=SC2016 - builtin readonly __ghostty_ps0='${ __ghostty_preexec_hook; }' - else - # shellcheck disable=SC2016 - builtin readonly __ghostty_ps0='$(__ghostty_preexec_hook >/dev/tty)' + # Only define if not already set (allows re-sourcing). + if [[ -z "${__ghostty_ps0+x}" ]]; then + if (( BASH_VERSINFO[0] > 5 || (BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3) )); then + # shellcheck disable=SC2016 + builtin readonly __ghostty_ps0='${ __ghostty_preexec_hook; }' + else + # shellcheck disable=SC2016 + builtin readonly __ghostty_ps0='$(__ghostty_preexec_hook >/dev/tty)' + fi fi __ghostty_hook() { @@ -285,19 +288,19 @@ if (( BASH_VERSINFO[0] > 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 4) ) } # Append our hook to PROMPT_COMMAND, preserving its existing type. + # shellcheck disable=SC2128,SC2178,SC2179 if [[ ";${PROMPT_COMMAND[*]:-};" != *";__ghostty_hook;"* ]]; then if [[ -z "${PROMPT_COMMAND[*]}" ]]; then if (( BASH_VERSINFO[0] > 5 || (BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 1) )); then PROMPT_COMMAND=(__ghostty_hook) else - # shellcheck disable=SC2178 PROMPT_COMMAND="__ghostty_hook" fi elif [[ $(builtin declare -p PROMPT_COMMAND 2>/dev/null) == "declare -a "* ]]; then PROMPT_COMMAND+=(__ghostty_hook) else - # shellcheck disable=SC2179 - PROMPT_COMMAND+="; __ghostty_hook" + [[ "${PROMPT_COMMAND}" =~ \;[[:space:]]*$ ]] || PROMPT_COMMAND+=";" + PROMPT_COMMAND+=" __ghostty_hook" fi fi else diff --git a/src/shell-integration/elvish/lib/ghostty-integration.elv b/src/shell-integration/elvish/lib/ghostty-integration.elv index 776aab6760d..87fd0a90211 100644 --- a/src/shell-integration/elvish/lib/ghostty-integration.elv +++ b/src/shell-integration/elvish/lib/ghostty-integration.elv @@ -11,15 +11,16 @@ # List of enabled shell integration features var features = [(str:split ',' $E:GHOSTTY_SHELL_FEATURES)] - # helper used by `mark-*` functions + # State tracking for semantic prompt sequences + # Values: 'prompt-start', 'pre-exec', 'post-exec' fn set-prompt-state {|new| set-env __ghostty_prompt_state $new } fn mark-prompt-start { - if (not-eq prompt-start (constantly $E:__ghostty_prompt_state)) { - printf "\e]133;D\a" + if (not-eq $E:__ghostty_prompt_state 'prompt-start') { + printf "\e]133;D;aid="$pid"\a" } set-prompt-state 'prompt-start' - printf "\e]133;A\a" + printf "\e]133;A;aid="$pid"\a" } fn mark-output-start {|_| @@ -44,9 +45,15 @@ } } - printf "\e]133;D;"$exit-status"\a" + printf "\e]133;D;"$exit-status";aid="$pid"\a" } + # NOTE: OSC 133;B (end of prompt, start of input) cannot be reliably + # implemented at the script level in Elvish. The prompt function's output is + # escaped, and writing to /dev/tty has timing issues because Elvish renders + # its prompts on a background thread. Full semantic prompt support requires a + # native implementation: https://github.com/elves/elvish/pull/1917 + fn sudo-with-terminfo {|@args| var sudoedit = $false for arg $args { diff --git a/src/shell-integration/zsh/ghostty-integration b/src/shell-integration/zsh/ghostty-integration index 8cd3dde7a16..7442546f8bd 100644 --- a/src/shell-integration/zsh/ghostty-integration +++ b/src/shell-integration/zsh/ghostty-integration @@ -141,10 +141,16 @@ _ghostty_deferred_init() { # - False negative (with prompt_subst): PS1='$mark1' [[ $PS1 == *$mark1* ]] || PS1=${mark1}${PS1} [[ $PS1 == *$markB* ]] || PS1=${PS1}${markB} - # Handle multiline prompts by marking continuation lines as - # secondary by replacing newlines with being prefixed - # with k=s - if [[ $PS1 == *$'\n'* ]]; then + # Handle multiline prompts by marking newline-separated + # continuation lines with k=s (mark2). We skip the newline + # immediately after mark1 to avoid introducing a double + # newline due to OSC 133;A's fresh-line behavior. + if [[ $PS1 == ${mark1}$'\n'* ]]; then + builtin local rest=${PS1#${mark1}$'\n'} + if [[ $rest == *$'\n'* ]]; then + PS1=${mark1}$'\n'${rest//$'\n'/$'\n'${mark2}} + fi + elif [[ $PS1 == *$'\n'* ]]; then PS1=${PS1//$'\n'/$'\n'${mark2}} fi @@ -239,6 +245,19 @@ _ghostty_deferred_init() { builtin print -rnu $_ghostty_fd \$'\\e[0 q'" fi + # Emit semantic prompt markers at line-init if PS1 doesn't contain our + # marks. This ensures the terminal sees prompt markers even if another + # plugin (like zinit or oh-my-posh) regenerated PS1 after our precmd ran. + # We use 133;P instead of 133;A to avoid fresh-line behavior which would + # disrupt the display since the prompt has already been drawn. We also + # emit 133;B to mark the input area, which is needed for click-to-move. + (( $+functions[_ghostty_zle_line_init] )) || _ghostty_zle_line_init() { builtin true; } + functions[_ghostty_zle_line_init]=" + if [[ \$PS1 != *$'%{\\e]133;A'* ]]; then + builtin print -nu \$_ghostty_fd '\\e]133;P;k=i\\a\\e]133;B\\a' + fi + "${functions[_ghostty_zle_line_init]} + # Add Ghostty binary to PATH if the path feature is enabled if [[ "$GHOSTTY_SHELL_FEATURES" == *"path"* ]] && [[ -n "$GHOSTTY_BIN_DIR" ]]; then if [[ ":$PATH:" != *":$GHOSTTY_BIN_DIR:"* ]]; then @@ -249,7 +268,7 @@ _ghostty_deferred_init() { # Sudo if [[ "$GHOSTTY_SHELL_FEATURES" == *"sudo"* ]] && [[ -n "$TERMINFO" ]]; then # Wrap `sudo` command to ensure Ghostty terminfo is preserved - sudo() { + function sudo() { builtin local sudo_has_sudoedit_flags="no" for arg in "$@"; do # Check if argument is '-e' or '--edit' (sudoedit flags) @@ -272,7 +291,7 @@ _ghostty_deferred_init() { # SSH Integration if [[ "$GHOSTTY_SHELL_FEATURES" == *ssh-* ]]; then - ssh() { + function ssh() { emulate -L zsh setopt local_options no_glob_subst @@ -315,7 +334,7 @@ _ghostty_deferred_init() { ssh_cpath_dir=$(mktemp -d "/tmp/ghostty-ssh-$ssh_user.XXXXXX" 2>/dev/null) || ssh_cpath_dir="/tmp/ghostty-ssh-$ssh_user.$$" ssh_cpath="$ssh_cpath_dir/socket" - if print "$ssh_terminfo" | command ssh "${ssh_opts[@]}" -o ControlMaster=yes -o ControlPath="$ssh_cpath" -o ControlPersist=60s "$@" ' + if builtin print -r "$ssh_terminfo" | command ssh "${ssh_opts[@]}" -o ControlMaster=yes -o ControlPath="$ssh_cpath" -o ControlPersist=60s "$@" ' infocmp xterm-ghostty >/dev/null 2>&1 && exit 0 command -v tic >/dev/null 2>&1 || exit 1 mkdir -p ~/.terminfo 2>/dev/null && tic -x - 2>/dev/null && exit 0 diff --git a/src/terminal/PageList.zig b/src/terminal/PageList.zig index 71534d0aaea..b6d53beee1b 100644 --- a/src/terminal/PageList.zig +++ b/src/terminal/PageList.zig @@ -2154,7 +2154,16 @@ fn resizeWithoutReflowGrowCols( // Unlikely fast path: we have capacity in the page. This // is only true if we resized to less cols earlier. - if (page.capacity.cols >= cols) { + if (page.capacity.cols >= cols) fast: { + // If any row has a spacer head at the old last column, it will + // be invalid at the new (wider) size. Fall through to the slow + // path which handles spacer heads correctly via cloneRowFrom. + const rows = page.rows.ptr(page.memory)[0..page.size.rows]; + for (rows) |*row| { + const cells = page.getCells(row); + if (cells[old_cols - 1].wide == .spacer_head) break :fast; + } + page.size.cols = cols; return; } @@ -10487,6 +10496,78 @@ test "PageList resize (no reflow) more cols with spacer head" { } } +// Regression test for fuzz crash. When we shrink cols and then +// grow back, the page retains capacity from the original size so the grow +// takes the fast path (just bumps page.size.cols). If any row has a +// spacer_head at the old last column, that cell is no longer at the end +// of the wider row, violating page integrity. +test "PageList resize (no reflow) grow cols fast path with spacer head" { + const testing = std.testing; + const alloc = testing.allocator; + + var s = try init(alloc, 10, 3, 0); + defer s.deinit(); + + // Shrink to 5 cols. The page keeps capacity for 10 cols. + try s.resize(.{ .cols = 5, .reflow = false }); + try testing.expectEqual(@as(usize, 5), s.cols); + + // Place a spacer_head at the last column (col 4) on two rows + // to simulate a wide character that didn't fit at the right edge. + { + const page = &s.pages.first.?.data; + + // Row 0: 'x' at col 0..3, spacer_head at col 4, wrap = true + { + const rac = page.getRowAndCell(0, 0); + rac.cell.* = .{ + .content_tag = .codepoint, + .content = .{ .codepoint = 'x' }, + }; + } + { + const rac = page.getRowAndCell(4, 0); + rac.cell.* = .{ + .content_tag = .codepoint, + .content = .{ .codepoint = 0 }, + .wide = .spacer_head, + }; + rac.row.wrap = true; + } + + // Row 1: spacer_head at col 4, wrap = true + { + const rac = page.getRowAndCell(4, 1); + rac.cell.* = .{ + .content_tag = .codepoint, + .content = .{ .codepoint = 0 }, + .wide = .spacer_head, + }; + rac.row.wrap = true; + } + } + + // Grow back to 10 cols. This must not leave stale spacer_head + // cells at col 4 (which is no longer the last column). + try s.resize(.{ .cols = 10, .reflow = false }); + try testing.expectEqual(@as(usize, 10), s.cols); + + // Verify the old spacer_head positions are now narrow. + { + const page = &s.pages.first.?.data; + { + const rac = page.getRowAndCell(4, 0); + try testing.expectEqual(pagepkg.Cell.Wide.narrow, rac.cell.wide); + try testing.expect(!rac.row.wrap); + } + { + const rac = page.getRowAndCell(4, 1); + try testing.expectEqual(pagepkg.Cell.Wide.narrow, rac.cell.wide); + try testing.expect(!rac.row.wrap); + } + } +} + // This test is a bit convoluted so I want to explain: what we are trying // to verify here is that when we increase cols such that our rows per page // shrinks, we don't fragment our rows across many pages because this ends diff --git a/src/terminal/Parser.zig b/src/terminal/Parser.zig index 34a23787f04..88e7edf7c33 100644 --- a/src/terminal/Parser.zig +++ b/src/terminal/Parser.zig @@ -289,6 +289,8 @@ pub fn next(self: *Parser, c: u8) [3]?Action { break :osc_string null; }, .dcs_passthrough => dcs_hook: { + // Ignore too many parameters + if (self.params_idx >= MAX_PARAMS) break :dcs_hook null; // Finalize parameters if (self.param_acc_idx > 0) { self.params[self.params_idx] = self.param_acc; @@ -1070,3 +1072,28 @@ test "dcs: params" { try testing.expectEqual('p', hook.final); } } + +test "dcs: too many params" { + // Regression test for a crash found by fuzzing (afl). When a DCS + // sequence has more than MAX_PARAMS parameters and param_acc_idx > 0, + // entering dcs_passthrough wrote to params[params_idx] without a + // bounds check, causing an out-of-bounds access. + var p = init(); + _ = p.next(0x1B); // ESC + _ = p.next('P'); // DCS entry + + // Feed a digit then MAX_PARAMS semicolons to fill all param slots. + _ = p.next('6'); + for (0..MAX_PARAMS) |_| { + _ = p.next(';'); + } + // Feed another digit so param_acc_idx > 0 while params_idx == MAX_PARAMS. + _ = p.next('7'); + + // A final byte triggers entry to dcs_passthrough. The DCS should + // be dropped entirely, consistent with how CSI handles overflow. + const a = p.next('p'); + try testing.expect(a[0] == null); + try testing.expect(a[1] == null); + try testing.expect(a[2] == null); +} diff --git a/src/terminal/StringMap.zig b/src/terminal/StringMap.zig index f7d88d1c8cb..18dd7b19c11 100644 --- a/src/terminal/StringMap.zig +++ b/src/terminal/StringMap.zig @@ -11,6 +11,12 @@ const Screen = @import("Screen.zig"); const Pin = @import("PageList.zig").Pin; const Allocator = std.mem.Allocator; +// Retry budget for StringMap regex searches. +// +// Units are Oniguruma retry steps (internal backtracking/retry counter), +// not bytes/characters/time. +const oni_search_retry_limit = 100_000; + string: [:0]const u8, map: []Pin, @@ -44,11 +50,26 @@ pub const SearchIterator = struct { pub fn next(self: *SearchIterator) !?Match { if (self.offset >= self.map.string.len) return null; - var region = self.regex.search( + // Use per-search match params so we can bound regex retry steps + // (Oniguruma's internal backtracking work counter). + var match_param = try oni.MatchParam.init(); + defer match_param.deinit(); + try match_param.setRetryLimitInSearch(oni_search_retry_limit); + + var region = self.regex.searchWithParam( self.map.string[self.offset..], .{}, + &match_param, ) catch |err| switch (err) { - error.Mismatch => { + // Retry/stack-limit errors mean we hit our work budget and + // aborted matching. + // For iterator callers this is equivalent to "no further matches". + error.Mismatch, + error.RetryLimitInMatchOver, + error.RetryLimitInSearchOver, + error.MatchStackLimitOver, + error.SubexpCallLimitInSearchOver, + => { self.offset = self.map.string.len; return null; }, diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index 81c21d3b09b..706f235c732 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -329,12 +329,16 @@ pub fn print(self: *Terminal, c: u21) !void { @branchHint(.unlikely); // We need the previous cell to determine if we're at a grapheme // break or not. If we are NOT, then we are still combining the - // same grapheme. Otherwise, we can stay in this cell. + // same grapheme, and will be appending to prev.cell. Otherwise, we are + // in a new cell. const Prev = struct { cell: *Cell, left: size.CellCountInt }; - const prev: Prev = prev: { + var prev: Prev = prev: { const left: size.CellCountInt = left: { - // If we have wraparound, then we always use the prev col - if (self.modes.get(.wraparound)) break :left 1; + // If we have wraparound, then we use the prev col unless + // there's a pending wrap, in which case we use the current. + if (self.modes.get(.wraparound)) { + break :left @intFromBool(!self.screens.active.cursor.pending_wrap); + } // If we do not have wraparound, the logic is trickier. If // we're not on the last column, then we just use the previous @@ -380,6 +384,8 @@ pub fn print(self: *Terminal, c: u21) !void { // If we can NOT break, this means that "c" is part of a grapheme // with the previous char. if (!grapheme_break) { + var desired_wide: enum { no_change, wide, narrow } = .no_change; + // If this is an emoji variation selector then we need to modify // the cell width accordingly. VS16 makes the character wide and // VS15 makes it narrow. @@ -390,71 +396,138 @@ pub fn print(self: *Terminal, c: u21) !void { if (!prev_props.emoji_vs_base) return; switch (c) { - 0xFE0F => wide: { - if (prev.cell.wide == .wide) break :wide; - - // Move our cursor back to the previous. We'll move - // the cursor within this block to the proper location. - self.screens.active.cursorLeft(prev.left); - - // If we don't have space for the wide char, we need - // to insert spacers and wrap. Then we just print the wide - // char as normal. - if (self.screens.active.cursor.x == right_limit - 1) { - if (!self.modes.get(.wraparound)) return; + 0xFE0F => desired_wide = .wide, + 0xFE0E => desired_wide = .narrow, + else => unreachable, + } + } else if (!unicode.table.get(c).width_zero_in_grapheme) { + // If we have a code point that contributes to the width of a + // grapheme, it necessarily means that we're at least at width + // 2, since the first code point must be at least width 1 to + // start. (Note that Prepend code points could effectively mean + // the first code point should be width 0, but we don't handle + // that yet.) + desired_wide = .wide; + } + + switch (desired_wide) { + .wide => wide: { + if (prev.cell.wide == .wide) break :wide; + + // Move our cursor back to the previous. We'll move + // the cursor within this block to the proper location. + self.screens.active.cursorLeft(prev.left); + + // If we don't have space for the wide char, we need to + // insert spacers and wrap. We need special handling if the + // previous cell has grapheme data. + if (self.screens.active.cursor.x == right_limit - 1) { + if (!self.modes.get(.wraparound)) return; + + // This path can write a spacer_head before printWrap + // which can trigger integrity violations so mark + // the wrap first to keep the intermediary state valid + // if we're wrapping. + const row_wrap = right_limit == self.cols; + if (row_wrap) self.screens.active.cursor.page_row.wrap = true; + + const prev_cp = prev.cell.content.codepoint; + if (prev.cell.hasGrapheme()) { + // This is like printCell but without clearing the + // grapheme data from the cell, so we can move it + // later. + prev.cell.wide = if (row_wrap) .spacer_head else .narrow; + prev.cell.content.codepoint = 0; + + try self.printWrap(); + self.printCell(prev_cp, .wide); + + const new_pin = self.screens.active.cursor.page_pin.*; + const new_rac = new_pin.rowAndCell(); + + transfer_graphemes: { + var old_pin = self.screens.active.cursor.page_pin.up(1) orelse break :transfer_graphemes; + old_pin.x = right_limit - 1; + const old_rac = old_pin.rowAndCell(); + + if (new_pin.node == old_pin.node) { + new_pin.node.data.moveGrapheme(prev.cell, new_rac.cell); + prev.cell.content_tag = .codepoint; + new_rac.cell.content_tag = .codepoint_grapheme; + new_rac.row.grapheme = true; + } else { + const cps = old_pin.node.data.lookupGrapheme(old_rac.cell).?; + for (cps) |cp| { + try self.screens.active.appendGrapheme(new_rac.cell, cp); + } + old_pin.node.data.clearGrapheme(old_rac.cell); + } + + old_pin.node.data.updateRowGraphemeFlag(old_rac.row); + } + + // Point prev.cell to our new previous cell that + // we'll be appending graphemes to + prev.cell = new_rac.cell; + } else { self.printCell( 0, - if (right_limit == self.cols) .spacer_head else .narrow, + if (row_wrap) .spacer_head else .narrow, ); try self.printWrap(); + self.printCell(prev_cp, .wide); + + // Point prev.cell to our new previous cell that + // we'll be appending graphemes to + prev.cell = self.screens.active.cursor.page_cell; } + } else { + prev.cell.wide = .wide; + } - self.printCell(prev.cell.content.codepoint, .wide); + // Write our spacer, since prev.cell is now wide + self.screens.active.cursorRight(1); + self.printCell(0, .spacer_tail); - // Write our spacer + // Move the cursor again so we're beyond our spacer + if (self.screens.active.cursor.x == right_limit - 1) { + self.screens.active.cursor.pending_wrap = true; + } else { self.screens.active.cursorRight(1); - self.printCell(0, .spacer_tail); + } + }, - // Move the cursor again so we're beyond our spacer - if (self.screens.active.cursor.x == right_limit - 1) { - self.screens.active.cursor.pending_wrap = true; - } else { - self.screens.active.cursorRight(1); - } - }, - - 0xFE0E => narrow: { - // Prev cell is no longer wide - if (prev.cell.wide != .wide) break :narrow; - prev.cell.wide = .narrow; - - // Remove the wide spacer tail - const cell = self.screens.active.cursorCellLeft(prev.left - 1); - cell.wide = .narrow; - - // Back track the cursor so that we don't end up with - // an extra space after the character. Since xterm is - // not VS aware, it cannot be used as a reference for - // this behavior; but it does follow the principle of - // least surprise, and also matches the behavior that - // can be observed in Kitty, which is one of the only - // other VS aware terminals. - if (self.screens.active.cursor.x == right_limit - 1) { - // If we're already at the right edge, we stay - // here and set the pending wrap to false since - // when we pend a wrap, we only move our cursor once - // even for wide chars (tests verify). - self.screens.active.cursor.pending_wrap = false; - } else { - // Otherwise, move back. - self.screens.active.cursorLeft(1); - } + .narrow => narrow: { + // Prev cell is no longer wide + if (prev.cell.wide != .wide) break :narrow; + prev.cell.wide = .narrow; + + // Remove the wide spacer tail + const cell = self.screens.active.cursorCellLeft(prev.left - 1); + cell.wide = .narrow; - break :narrow; - }, + // Back track the cursor so that we don't end up with + // an extra space after the character. Since xterm is + // not VS aware, it cannot be used as a reference for + // this behavior; but it does follow the principle of + // least surprise, and also matches the behavior that + // can be observed in Kitty, which is one of the only + // other VS aware terminals. + if (self.screens.active.cursor.x == right_limit - 1) { + // If we're already at the right edge, we stay + // here and set the pending wrap to false since + // when we pend a wrap, we only move our cursor once + // even for wide chars (tests verify). + self.screens.active.cursor.pending_wrap = false; + } else { + // Otherwise, move back. + self.screens.active.cursorLeft(1); + } - else => unreachable, - } + break :narrow; + }, + + else => {}, } log.debug("c={X} grapheme attach to left={} primary_cp={X}", .{ @@ -562,7 +635,16 @@ pub fn print(self: *Terminal, c: u21) !void { // We only create a spacer head if we're at the real edge // of the screen. Otherwise, we clear the space with a narrow. // This allows soft wrapping to work correctly. - self.printCell(0, if (right_limit == self.cols) .spacer_head else .narrow); + if (right_limit == self.cols) { + // Special-case: we need to set wrap to true even + // though we call printWrap below because if there is + // a page resize during printCell then it'll fail + // integrity checks. + self.screens.active.cursor.page_row.wrap = true; + self.printCell(0, .spacer_head); + } else { + self.printCell(0, .narrow); + } try self.printWrap(); } @@ -647,9 +729,14 @@ fn printCell( self.screens.active.cursor.page_row, spacer_cell[0..1], ); + + // If we're near the left edge, a wide char may have + // wrapped from the previous row, leaving a spacer_head + // at the end of that row. Clear it so the previous row + // doesn't keep a stale spacer_head. if (self.screens.active.cursor.y > 0 and self.screens.active.cursor.x <= 1) { const head_cell = self.screens.active.cursorCellEndOfPrev(); - head_cell.wide = .narrow; + if (head_cell.wide == .spacer_head) head_cell.wide = .narrow; } }, @@ -668,9 +755,13 @@ fn printCell( self.screens.active.cursor.page_row, wide_cell[0..1], ); + // If we're near the left edge, a wide char may have + // wrapped from the previous row, leaving a spacer_head + // at the end of that row. Clear it so the previous row + // doesn't keep a stale spacer_head. if (self.screens.active.cursor.y > 0 and self.screens.active.cursor.x <= 1) { const head_cell = self.screens.active.cursorCellEndOfPrev(); - head_cell.wide = .narrow; + if (head_cell.wide == .spacer_head) head_cell.wide = .narrow; } }, @@ -1625,7 +1716,7 @@ pub const ScrollViewport = union(enum) { }; /// Scroll the viewport of the terminal grid. -pub fn scrollViewport(self: *Terminal, behavior: ScrollViewport) !void { +pub fn scrollViewport(self: *Terminal, behavior: ScrollViewport) void { self.screens.active.scroll(switch (behavior) { .top => .{ .top = {} }, .bottom => .{ .active = {} }, @@ -1880,6 +1971,7 @@ pub fn insertLines(self: *Terminal, count: usize) void { } } else { // Clear the cells for this row, it has been shifted. + self.rowWillBeShifted(&cur_p.node.data, cur_row); const page = &cur_p.node.data; const cells = page.getCells(cur_row); self.screens.active.clearCells( @@ -2067,6 +2159,7 @@ pub fn deleteLines(self: *Terminal, count: usize) void { } } else { // Clear the cells for this row, it's from out of bounds. + self.rowWillBeShifted(&cur_p.node.data, cur_row); const page = &cur_p.node.data; const cells = page.getCells(cur_row); self.screens.active.clearCells( @@ -2099,6 +2192,12 @@ pub fn insertBlanks(self: *Terminal, count: usize) void { // xterm does. self.screens.active.cursor.pending_wrap = false; + // If we're given a zero then we do nothing. The rest of this function + // assumes count > 0 and will crash if zero so return early. Note that + // this shouldn't be possible with real CSI sequences because the value + // is clamped to 1 min. + if (count == 0) return; + // If our cursor is outside the margins then do nothing. We DO reset // wrap state still so this must remain below the above logic. if (self.screens.active.cursor.x < self.scrolling_region.left or @@ -2127,6 +2226,18 @@ pub fn insertBlanks(self: *Terminal, count: usize) void { // Remaining cols from our cursor to the right margin. const rem = self.scrolling_region.right - self.screens.active.cursor.x + 1; + // If the cell at the right margin is wide, its spacer tail is + // outside the scroll region and would be orphaned by either the + // shift or the clear. Clean up both halves up front. + { + const right_cell: *Cell = @ptrCast(left + (rem - 1)); + if (right_cell.wide == .wide) self.screens.active.clearCells( + page, + self.screens.active.cursor.page_row, + @as([*]Cell, @ptrCast(right_cell))[0..2], + ); + } + // We can only insert blanks up to our remaining cols const adjusted_count = @min(count, rem); @@ -3247,6 +3358,44 @@ test "Terminal: print over wide char at 0,0" { try testing.expect(!t.isDirty(.{ .screen = .{ .x = 0, .y = 1 } })); } +test "Terminal: print over wide char at col 0 corrupts previous row" { + // Crash found by AFL++ fuzzer (afl-out/stream/default/crashes/id:000002). + // + // printCell, when overwriting a wide cell with a narrow cell at x<=1 + // and y>0, sets the last cell of the previous row to .narrow — even + // when that cell is a .spacer_tail rather than a .spacer_head. This + // orphans the .wide cell at cols-2. + const alloc = testing.allocator; + var t = try init(alloc, .{ .cols = 10, .rows = 3 }); + defer t.deinit(alloc); + + // Fill rows 0 and 1 with wide chars (5 per row on a 10-col terminal). + for (0..10) |_| try t.print(0x4E2D); + + // Move cursor to row 1, col 0 (on top of a wide char) and print a + // narrow character. This triggers printCell's .wide branch which + // corrupts row 0's last cell: col 9 changes from .spacer_tail to + // .narrow, orphaning the .wide at col 8. + t.setCursorPos(2, 1); + try t.print('A'); + + // Row 1, col 0 should be narrow (we just overwrote the wide char). + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 1 } }).?; + try testing.expectEqual(Cell.Wide.narrow, list_cell.cell.wide); + } + // Row 0, col 8 should still be .wide (the last wide char on the row). + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 8, .y = 0 } }).?; + try testing.expectEqual(Cell.Wide.wide, list_cell.cell.wide); + } + // Row 0, col 9 must remain .spacer_tail to pair with the .wide at col 8. + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 9, .y = 0 } }).?; + try testing.expectEqual(Cell.Wide.spacer_tail, list_cell.cell.wide); + } +} + test "Terminal: print over wide spacer tail" { var t = try init(testing.allocator, .{ .rows = 5, .cols = 5 }); defer t.deinit(testing.allocator); @@ -3834,19 +3983,23 @@ test "Terminal: print invalid VS15 in emoji ZWJ sequence" { } test "Terminal: VS15 to make narrow character with pending wrap" { - var t = try init(testing.allocator, .{ .rows = 5, .cols = 2 }); + var t = try init(testing.allocator, .{ .rows = 5, .cols = 4 }); defer t.deinit(testing.allocator); // Enable grapheme clustering t.modes.set(.grapheme_cluster, true); + try testing.expect(t.modes.get(.wraparound)); + + try t.print(0x1F34B); // Lemon, width=2 try t.print(0x2614); // Umbrella with rain drops, width=2 try testing.expect(t.isDirty(.{ .screen = .{ .x = 0, .y = 0 } })); t.clearDirty(); - // We only move one because we're in a pending wrap state. + // We only move to the end of the line because we're in a pending wrap + // state. try testing.expectEqual(@as(usize, 0), t.screens.active.cursor.y); - try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.x); + try testing.expectEqual(@as(usize, 3), t.screens.active.cursor.x); try testing.expect(t.screens.active.cursor.pending_wrap); try t.print(0xFE0E); // VS15 to make narrow @@ -3855,17 +4008,17 @@ test "Terminal: VS15 to make narrow character with pending wrap" { // VS15 should clear the pending wrap state try testing.expectEqual(@as(usize, 0), t.screens.active.cursor.y); - try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.x); + try testing.expectEqual(@as(usize, 3), t.screens.active.cursor.x); try testing.expect(!t.screens.active.cursor.pending_wrap); { const str = try t.plainString(testing.allocator); defer testing.allocator.free(str); - try testing.expectEqualStrings("☔︎", str); + try testing.expectEqualStrings("ðŸ‹â˜”︎", str); } { - const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 0 } }).?; + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 2, .y = 0 } }).?; const cell = list_cell.cell; try testing.expectEqual(@as(u21, 0x2614), cell.content.codepoint); try testing.expect(cell.hasGrapheme()); @@ -3873,6 +4026,154 @@ test "Terminal: VS15 to make narrow character with pending wrap" { const cps = list_cell.node.data.lookupGrapheme(cell).?; try testing.expectEqual(@as(usize, 1), cps.len); } + + // VS15 should not affect the previous grapheme + { + const lemon_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 0 } }).?.cell; + try testing.expectEqual(@as(u21, 0x1F34B), lemon_cell.content.codepoint); + try testing.expectEqual(Cell.Wide.wide, lemon_cell.wide); + const spacer_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 0 } }).?.cell; + try testing.expectEqual(@as(u21, 0), spacer_cell.content.codepoint); + try testing.expectEqual(Cell.Wide.spacer_tail, spacer_cell.wide); + } +} + +test "Terminal: VS16 to make wide character on next line" { + var t = try init(testing.allocator, .{ .rows = 5, .cols = 3 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + t.cursorRight(2); + try t.print('#'); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(t.screens.active.cursor.pending_wrap); + try testing.expect(t.isDirty(.{ .screen = .{ .x = 2, .y = 0 } })); + t.clearDirty(); + + try t.print(0xFE0F); // VS16 to make wide + + try testing.expect(t.isDirty(.{ .screen = .{ .x = 2, .y = 0 } })); + t.clearDirty(); + try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(!t.screens.active.cursor.pending_wrap); + + { + // Previous cell turns into spacer_head + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 2, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expect(!cell.hasGrapheme()); + try testing.expectEqual(Cell.Wide.spacer_head, cell.wide); + } + { + // '#' cell is wide + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, '#'), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{0xFE0F}, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + } + { + // spacer_tail + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expect(!cell.hasGrapheme()); + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + } +} + +test "Terminal: VS16 to make wide character on next line with hyperlink" { + // Regression test for the crash fixed in print's grapheme `.wide` path: + // writing a spacer_head at the screen edge before row.wrap was set. + var t = try init(testing.allocator, .{ .rows = 5, .cols = 3 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering and activate a hyperlink so printCell + // calls cursorSetHyperlink (which runs page integrity checks). + t.modes.set(.grapheme_cluster, true); + try t.screens.active.startHyperlink("http://example.com", null); + + t.cursorRight(2); + try t.print('#'); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(t.screens.active.cursor.pending_wrap); + + // Without the fix, this panicked with UnwrappedSpacerHead. + try t.print(0xFE0F); // VS16 to make wide + + try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(!t.screens.active.cursor.pending_wrap); + + { + // Previous cell turns into spacer_head and remains hyperlinked. + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 2, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expectEqual(Cell.Wide.spacer_head, cell.wide); + try testing.expect(cell.hyperlink); + try testing.expect(list_cell.row.wrap); + } + { + // '#' cell is now wide and still hyperlinked. + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, '#'), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{0xFE0F}, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + try testing.expect(cell.hyperlink); + } + { + // spacer_tail inherits hyperlink as part of the same grapheme cell. + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + try testing.expect(cell.hyperlink); + } +} + +test "Terminal: VS16 to make wide character with pending wrap" { + var t = try init(testing.allocator, .{ .rows = 5, .cols = 3 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + t.cursorRight(1); + try t.print('#'); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(!t.screens.active.cursor.pending_wrap); + + try t.print(0xFE0F); // VS16 to make wide + + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expectEqual(@as(usize, 0), t.screens.active.cursor.y); + try testing.expect(t.screens.active.cursor.pending_wrap); + + { + // '#' cell is wide + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, '#'), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{0xFE0F}, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + } + { + // spacer_tail + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 2, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expect(!cell.hasGrapheme()); + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + } } test "Terminal: VS16 to make wide character with mode 2027" { @@ -4013,6 +4314,173 @@ test "Terminal: print invalid VS16 with second char" { } } +test "Terminal: print grapheme oÌ€ (o with nonspacing mark) should be narrow" { + var t = try init(testing.allocator, .{ .rows = 5, .cols = 5 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + try t.print('o'); + try t.print(0x0300); // combining grave accent + + // We should have 1 cell taken up. + try testing.expectEqual(@as(usize, 0), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.x); + + // Assert various properties about our screen to verify + // we have all expected cells. + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 'o'), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{0x0300}, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.narrow, cell.wide); + } +} + +test "Terminal: print Devanagari grapheme should be wide" { + var t = try init(testing.allocator, .{ .rows = 5, .cols = 5 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + // कà¥â€à¤· + try t.print(0x0915); + try t.print(0x094D); + try t.print(0x200D); + try t.print(0x0937); + + // We should have 2 cells taken up. It is one character but "wide". + try testing.expectEqual(@as(usize, 0), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + + // Assert various properties about our screen to verify + // we have all expected cells. + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0x0915), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{ 0x094D, 0x200D, 0x0937 }, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + } + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + } +} + +test "Terminal: print Devanagari grapheme should be wide on next line" { + var t = try init(testing.allocator, .{ .rows = 5, .cols = 3 }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + t.cursorRight(2); + + // कà¥â€à¤· + try t.print(0x0915); + try t.print(0x094D); + try t.print(0x200D); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(t.screens.active.cursor.pending_wrap); + + // This one increases the width to wide + try t.print(0x0937); + + // We should have 2 cells taken up. It is one character but "wide". + try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(!t.screens.active.cursor.pending_wrap); + + { + // Previous cell turns into spacer_head + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 2, .y = 0 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expect(!cell.hasGrapheme()); + try testing.expectEqual(Cell.Wide.spacer_head, cell.wide); + } + { + // Devanagari grapheme is wide + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0x0915), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{ 0x094D, 0x200D, 0x0937 }, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + } + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + } +} + +test "Terminal: print Devanagari grapheme should be wide on next page" { + const rows = pagepkg.std_capacity.rows; + const cols = pagepkg.std_capacity.cols; + var t = try init(testing.allocator, .{ .rows = rows, .cols = cols }); + defer t.deinit(testing.allocator); + + // Enable grapheme clustering + t.modes.set(.grapheme_cluster, true); + + t.cursorDown(rows - 1); + + for (rows..t.screens.active.pages.pages.first.?.data.capacity.rows) |_| { + try t.index(); + } + + t.cursorRight(cols - 1); + + try testing.expectEqual(cols - 1, t.screens.active.cursor.x); + try testing.expectEqual(rows - 1, t.screens.active.cursor.y); + + // कà¥â€à¤· + try t.print(0x0915); + try t.print(0x094D); + try t.print(0x200D); + try testing.expectEqual(cols - 1, t.screens.active.cursor.x); + try testing.expect(t.screens.active.cursor.pending_wrap); + + // This one increases the width to wide + try t.print(0x0937); + + // We should have 2 cells taken up. It is one character but "wide". + try testing.expectEqual(rows - 1, t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + try testing.expect(!t.screens.active.cursor.pending_wrap); + + { + // Previous cell turns into spacer_head + const list_cell = t.screens.active.pages.getCell(.{ .active = .{ .x = cols - 1, .y = rows - 2 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0), cell.content.codepoint); + try testing.expect(!cell.hasGrapheme()); + try testing.expectEqual(Cell.Wide.spacer_head, cell.wide); + } + { + // Devanagari grapheme is wide + const list_cell = t.screens.active.pages.getCell(.{ .active = .{ .x = 0, .y = rows - 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(@as(u21, 0x0915), cell.content.codepoint); + try testing.expect(cell.hasGrapheme()); + try testing.expectEqualSlices(u21, &.{ 0x094D, 0x200D, 0x0937 }, list_cell.node.data.lookupGrapheme(cell).?); + try testing.expectEqual(Cell.Wide.wide, cell.wide); + } + { + const list_cell = t.screens.active.pages.getCell(.{ .active = .{ .x = 1, .y = rows - 1 } }).?; + const cell = list_cell.cell; + try testing.expectEqual(Cell.Wide.spacer_tail, cell.wide); + } +} + test "Terminal: print invalid VS16 with second char (combining)" { var t = try init(testing.allocator, .{ .cols = 80, .rows = 80 }); defer t.deinit(testing.allocator); @@ -4772,6 +5240,50 @@ test "Terminal: overwrite hyperlink" { try testing.expect(t.isDirty(.{ .screen = .{ .x = 0, .y = 0 } })); } +// Printing a wide char at the right edge with an active hyperlink causes +// printCell to write a spacer_head before printWrap sets the row wrap +// flag. The integrity check inside setHyperlink (or increaseCapacity) +// sees the unwrapped spacer head and panics. Found via fuzzing. +test "Terminal: print wide char at right edge with hyperlink" { + var t = try init(testing.allocator, .{ .cols = 10, .rows = 5 }); + defer t.deinit(testing.allocator); + + try t.screens.active.startHyperlink("http://example.com", null); + + // Move cursor to the last column (1-indexed) + t.setCursorPos(1, 10); + + // Print a wide character; this will call printCell(0, .spacer_head) + // at the right edge before calling printWrap, triggering the + // integrity violation. + try t.print(0x4E2D); // U+4E2D '中' + + // Cursor wraps to row 2, after the wide char + spacer tail + try testing.expectEqual(@as(usize, 1), t.screens.active.cursor.y); + try testing.expectEqual(@as(usize, 2), t.screens.active.cursor.x); + + // Row 0, col 9: spacer head with hyperlink + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 9, .y = 0 } }).?; + try testing.expectEqual(Cell.Wide.spacer_head, list_cell.cell.wide); + try testing.expect(list_cell.cell.hyperlink); + try testing.expect(list_cell.row.wrap); + } + // Row 1, col 0: the wide char with hyperlink + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 0, .y = 1 } }).?; + try testing.expectEqual(@as(u21, 0x4E2D), list_cell.cell.content.codepoint); + try testing.expectEqual(Cell.Wide.wide, list_cell.cell.wide); + try testing.expect(list_cell.cell.hyperlink); + } + // Row 1, col 1: spacer tail with hyperlink + { + const list_cell = t.screens.active.pages.getCell(.{ .screen = .{ .x = 1, .y = 1 } }).?; + try testing.expectEqual(Cell.Wide.spacer_tail, list_cell.cell.wide); + try testing.expect(list_cell.cell.hyperlink); + } +} + test "Terminal: linefeed and carriage return" { var t = try init(testing.allocator, .{ .cols = 80, .rows = 80 }); defer t.deinit(testing.allocator); @@ -9075,6 +9587,25 @@ test "Terminal: DECALN resets graphemes with protected mode" { } } +test "Terminal: insertBlanks zero" { + const alloc = testing.allocator; + var t = try init(alloc, .{ .cols = 5, .rows = 2 }); + defer t.deinit(alloc); + + try t.print('A'); + try t.print('B'); + try t.print('C'); + t.setCursorPos(1, 1); + + t.insertBlanks(0); + + { + const str = try t.plainString(testing.allocator); + defer testing.allocator.free(str); + try testing.expectEqualStrings("ABC", str); + } +} + test "Terminal: insertBlanks" { // NOTE: this is not verified with conformance tests, so these // tests might actually be verifying wrong behavior. @@ -9466,6 +9997,77 @@ test "Terminal: insertBlanks pushes hyperlink off end completely" { } } +test "Terminal: insertBlanks wide char straddling right margin" { + // Crash found by AFL++ fuzzer. + // + // When a wide character straddles the right scroll margin (head at the + // margin, spacer_tail just beyond it), insertBlanks shifts the wide head + // away via swapCells but leaves the orphaned spacer_tail in place, + // causing a page integrity violation. + const alloc = testing.allocator; + var t = try init(alloc, .{ .cols = 10, .rows = 5 }); + defer t.deinit(alloc); + + // Fill row: A B C D æ©‹ _ _ _ _ _ + // Positions: 0 1 2 3 4W 5T 6 7 8 9 + t.setCursorPos(1, 1); + for ("ABCD") |c| try t.print(c); + try t.print('æ©‹'); // wide char: head at 4, spacer_tail at 5 + + // Set right margin so the wide head is AT the boundary and the + // spacer_tail is just outside it. + t.scrolling_region.right = 4; + + // Position cursor at x=2 (1-indexed col 3) and insert one blank. + // This triggers the swap loop which displaces the wide head at + // position 4 without clearing the spacer_tail at position 5. + t.setCursorPos(1, 3); + t.insertBlanks(1); + + { + const str = try t.plainString(testing.allocator); + defer testing.allocator.free(str); + try testing.expectEqualStrings("AB CD", str); + } +} + +test "Terminal: insertBlanks wide char spacer_tail orphaned beyond right margin" { + // Regression test for AFL++ crash. + // + // When insertBlanks clears the entire region from cursor to the right + // margin (scroll_amount == 0), a wide character whose head is AT the + // right margin gets cleared but its spacer_tail just beyond the margin + // is left behind, causing a page integrity violation: + // "spacer tail not following wide" + const alloc = testing.allocator; + var t = try init(alloc, .{ .cols = 10, .rows = 5 }); + defer t.deinit(alloc); + + // Fill cols 0–9 with wide chars: 中中中中中 + // Positions: 0W 1T 2W 3T 4W 5T 6W 7T 8W 9T + for (0..5) |_| try t.print(0x4E2D); + + // Set left/right margins so that the last wide char (cols 8–9) + // straddles the boundary: head at col 8 (inside), tail at col 9 (outside). + t.modes.set(.enable_left_and_right_margin, true); + t.setLeftAndRightMargin(1, 9); // 1-indexed: left=0, right=8 + + // Cursor is now at (0, 0) after DECSLRM. Print a narrow char to + // advance cursor to col 1. + try t.print('a'); + + // ICH 8: insert 8 blanks at cursor x=1. + // rem = right(8) - x(1) + 1 = 8, adjusted_count = 8, scroll_amount = 0. + // The code clears cols 1–8 without noticing the spacer_tail at col 9. + t.insertBlanks(8); + + { + const str = try t.plainString(testing.allocator); + defer testing.allocator.free(str); + try testing.expectEqualStrings("a", str); + } +} + test "Terminal: insert mode with space" { const alloc = testing.allocator; var t = try init(alloc, .{ .cols = 10, .rows = 2 }); @@ -12429,3 +13031,32 @@ test "Terminal: mode 1049 alt screen plain" { try testing.expectEqualStrings("", str); } } + +// Reproduces a crash found by AFL++ fuzzer (afl-out/stream/default/crashes/ +// id:000007,sig:06,src:004522). The crash is a page integrity violation +// "spacer tail not following wide" triggered during scrollUp -> deleteLines +// -> clearCells. When deleteLines count >= scroll region height, all rows +// are cleared (no shifting), so rowWillBeShifted is never called and wide +// characters straddling the right margin boundary leave orphaned spacer_tails. +test "Terminal: deleteLines wide char at right margin with full clear" { + const alloc = testing.allocator; + var t = try init(alloc, .{ .cols = 80, .rows = 24 }); + defer t.deinit(alloc); + + // Place a wide character at col 39 (1-indexed) on several rows. + // The wide cell lands at col 38 (0-indexed) with spacer_tail at col 39. + t.setCursorPos(10, 39); + try t.print(0x4E2D); // '中' + + // Set left/right scroll margins so scrolling_region.right = 38. + // clearCells will clear cells[4..39], which includes the wide cell + // at col 38 but NOT the spacer_tail at col 39. + t.modes.set(.enable_left_and_right_margin, true); + t.setLeftAndRightMargin(5, 39); + + // scrollUp with count >= region height causes deleteLines to clear + // ALL rows without any shifting, so rowWillBeShifted is never called + // and the orphaned spacer_tail at col 39 triggers a page integrity + // violation in clearCells. + try t.scrollUp(t.rows); +} diff --git a/src/terminal/color.zig b/src/terminal/color.zig index 483d65e28c5..3b806f8b837 100644 --- a/src/terminal/color.zig +++ b/src/terminal/color.zig @@ -90,14 +90,31 @@ pub fn generate256Color( skip: PaletteMask, bg: RGB, fg: RGB, + harmonious: bool, ) Palette { // Convert the background, foreground, and 8 base theme colors into // CIELAB space so that all interpolation is perceptually uniform. - const bg_lab: LAB = .fromRgb(bg); - const fg_lab: LAB = .fromRgb(fg); const base8_lab: [8]LAB = base8: { - var base8: [8]LAB = undefined; - for (0..8) |i| base8[i] = .fromRgb(base[i]); + var base8: [8]LAB = .{ + .fromRgb(bg), + LAB.fromRgb(base[1]), + LAB.fromRgb(base[2]), + LAB.fromRgb(base[3]), + LAB.fromRgb(base[4]), + LAB.fromRgb(base[5]), + LAB.fromRgb(base[6]), + .fromRgb(fg), + }; + + // For light themes (where the foreground is darker than the + // background), the cube's dark-to-light orientation is inverted + // relative to the base color mapping. When `harmonious` is false, + // swap bg and fg so the cube still runs from black (16) to + // white (231). + const is_light_theme = base8[7].l < base8[0].l; + const invert = is_light_theme and !harmonious; + if (invert) std.mem.swap(LAB, &base8[0], &base8[7]); + break :base8 base8; }; @@ -115,10 +132,10 @@ pub fn generate256Color( for (0..6) |ri| { // R-axis corners: blend base colors along the red dimension. const tr = @as(f32, @floatFromInt(ri)) / 5.0; - const c0: LAB = .lerp(tr, bg_lab, base8_lab[1]); + const c0: LAB = .lerp(tr, base8_lab[0], base8_lab[1]); const c1: LAB = .lerp(tr, base8_lab[2], base8_lab[3]); const c2: LAB = .lerp(tr, base8_lab[4], base8_lab[5]); - const c3: LAB = .lerp(tr, base8_lab[6], fg_lab); + const c3: LAB = .lerp(tr, base8_lab[6], base8_lab[7]); for (0..6) |gi| { // G-axis edges: blend the R-interpolated corners along green. const tg = @as(f32, @floatFromInt(gi)) / 5.0; @@ -147,7 +164,7 @@ pub fn generate256Color( for (0..24) |i| { const t = @as(f32, @floatFromInt(i + 1)) / 25.0; if (!skip.isSet(idx)) { - const c: LAB = .lerp(t, bg_lab, fg_lab); + const c: LAB = .lerp(t, base8_lab[0], base8_lab[7]); result[idx] = c.toRgb(); } idx += 1; @@ -926,7 +943,7 @@ test "generate256Color: base16 preserved" { const bg = RGB{ .r = 0, .g = 0, .b = 0 }; const fg = RGB{ .r = 255, .g = 255, .b = 255 }; - const palette = generate256Color(default, .initEmpty(), bg, fg); + const palette = generate256Color(default, .initEmpty(), bg, fg, false); // The first 16 colors (base16) must remain unchanged. for (0..16) |i| { @@ -939,7 +956,7 @@ test "generate256Color: cube corners match base colors" { const bg = RGB{ .r = 0, .g = 0, .b = 0 }; const fg = RGB{ .r = 255, .g = 255, .b = 255 }; - const palette = generate256Color(default, .initEmpty(), bg, fg); + const palette = generate256Color(default, .initEmpty(), bg, fg, false); // Index 16 is cube (0,0,0) which should equal bg. try testing.expectEqual(bg, palette[16]); @@ -948,12 +965,43 @@ test "generate256Color: cube corners match base colors" { try testing.expectEqual(fg, palette[231]); } +test "generate256Color: cube corners black/white with harmonious=false" { + const testing = std.testing; + + const black = RGB{ .r = 0, .g = 0, .b = 0 }; + const white = RGB{ .r = 255, .g = 255, .b = 255 }; + + // Dark theme: bg=black, fg=white. + const dark = generate256Color(default, .initEmpty(), black, white, false); + try testing.expectEqual(black, dark[16]); + try testing.expectEqual(white, dark[231]); + + // Light theme: bg=white, fg=black. The bg/red swap ensures + // the cube still runs from black (16) to white (231). + const light = generate256Color(default, .initEmpty(), white, black, false); + try testing.expectEqual(black, light[16]); + try testing.expectEqual(white, light[231]); +} + +test "generate256Color: light theme cube corners with harmonious=true" { + const testing = std.testing; + + const white = RGB{ .r = 255, .g = 255, .b = 255 }; + const black = RGB{ .r = 0, .g = 0, .b = 0 }; + + // harmonious=true skips the bg/fg swap, so the cube preserves the + // original orientation: (0,0,0)=bg=white, (5,5,5)=fg=black. + const palette = generate256Color(default, .initEmpty(), white, black, true); + try testing.expectEqual(white, palette[16]); + try testing.expectEqual(black, palette[231]); +} + test "generate256Color: grayscale ramp monotonic luminance" { const testing = std.testing; const bg = RGB{ .r = 0, .g = 0, .b = 0 }; const fg = RGB{ .r = 255, .g = 255, .b = 255 }; - const palette = generate256Color(default, .initEmpty(), bg, fg); + const palette = generate256Color(default, .initEmpty(), bg, fg, false); // The grayscale ramp (232–255) should have monotonically increasing // luminance from near-black to near-white. @@ -977,7 +1025,7 @@ test "generate256Color: skip mask preserves original colors" { skip.set(100); skip.set(240); - const palette = generate256Color(default, skip, bg, fg); + const palette = generate256Color(default, skip, bg, fg, false); try testing.expectEqual(default[20], palette[20]); try testing.expectEqual(default[100], palette[100]); try testing.expectEqual(default[240], palette[240]); @@ -986,6 +1034,73 @@ test "generate256Color: skip mask preserves original colors" { try testing.expect(!palette[21].eql(default[21])); } +test "generate256Color: dark theme harmonious has no effect" { + const testing = std.testing; + + // For a dark theme (fg lighter than bg), harmonious should not change + // the output because the inversion is only relevant for light themes. + const bg = RGB{ .r = 0, .g = 0, .b = 0 }; + const fg = RGB{ .r = 255, .g = 255, .b = 255 }; + const normal = generate256Color(default, .initEmpty(), bg, fg, false); + const harmonious = generate256Color(default, .initEmpty(), bg, fg, true); + + for (16..256) |i| { + try testing.expectEqual(normal[i], harmonious[i]); + } +} + +test "generate256Color: light theme harmonious skips inversion" { + const testing = std.testing; + + // For a light theme (fg darker than bg), harmonious=true skips the + // bg/red swap, producing different cube colors than harmonious=false. + const bg = RGB{ .r = 255, .g = 255, .b = 255 }; + const fg = RGB{ .r = 0, .g = 0, .b = 0 }; + const inverted = generate256Color(default, .initEmpty(), bg, fg, false); + const harmonious = generate256Color(default, .initEmpty(), bg, fg, true); + + // Cube origin (0,0,0) at index 16: without harmonious, bg and red are + // swapped so it becomes the red base; with harmonious it stays as bg. + try testing.expectEqual(bg, harmonious[16]); + try testing.expect(!inverted[16].eql(bg)); + + // At least some cube colors should differ between the two modes. + var differ: usize = 0; + for (16..232) |i| { + if (!inverted[i].eql(harmonious[i])) differ += 1; + } + try testing.expect(differ > 0); +} + +test "generate256Color: light theme harmonious grayscale ramp" { + const testing = std.testing; + + const bg = RGB{ .r = 255, .g = 255, .b = 255 }; + const fg = RGB{ .r = 0, .g = 0, .b = 0 }; + + // harmonious=false swaps bg/fg, so the ramp runs black→white (increasing). + { + const palette = generate256Color(default, .initEmpty(), bg, fg, false); + var prev_lum: f64 = 0.0; + for (232..256) |i| { + const lum = palette[i].luminance(); + try testing.expect(lum >= prev_lum); + prev_lum = lum; + } + } + + // harmonious=true keeps original order, so the ramp runs white→black (decreasing). + { + const palette = generate256Color(default, .initEmpty(), bg, fg, true); + var prev_lum: f64 = 1.0; + for (232..256) |i| { + const lum = palette[i].luminance(); + try testing.expect(lum <= prev_lum); + prev_lum = lum; + } + } +} + test "LAB.toRgb" { const testing = std.testing; diff --git a/src/terminal/mouse_shape.zig b/src/terminal/mouse_shape.zig index 1e178c7eee4..b5c6ac4d1a6 100644 --- a/src/terminal/mouse_shape.zig +++ b/src/terminal/mouse_shape.zig @@ -1,5 +1,6 @@ const std = @import("std"); const build_options = @import("terminal_options"); +const lib = @import("../lib/main.zig"); /// The possible cursor shapes. Not all app runtimes support these shapes. /// The shapes are always based on the W3C supported cursor styles so we @@ -63,6 +64,10 @@ pub const MouseShape = enum(c_int) { .none => void, }; }; + + test "ghostty.h MouseShape" { + try lib.checkGhosttyHEnum(MouseShape, "GHOSTTY_MOUSE_SHAPE_"); + } }; const string_map = std.StaticStringMap(MouseShape).initComptime(.{ @@ -131,3 +136,7 @@ test "cursor shape from string" { const testing = std.testing; try testing.expectEqual(MouseShape.default, MouseShape.fromString("default").?); } + +test { + _ = std.testing.refAllDeclsRecursive(@This()); +} diff --git a/src/terminal/osc.zig b/src/terminal/osc.zig index 43824ce01ba..4fedee38d5b 100644 --- a/src/terminal/osc.zig +++ b/src/terminal/osc.zig @@ -15,6 +15,7 @@ const LibEnum = @import("../lib/enum.zig").Enum; const kitty_color = @import("kitty/color.zig"); const parsers = @import("osc/parsers.zig"); const encoding = @import("osc/encoding.zig"); +const lib = @import("../lib/main.zig"); pub const color = parsers.color; pub const semantic_prompt = parsers.semantic_prompt; @@ -90,7 +91,7 @@ pub const Command = union(Key) { /// https://sw.kovidgoyal.net/kitty/color-stack/#id1 kitty_color_protocol: kitty_color.OSC, - /// Show a desktop notification (OSC 9 or OSC 777) + /// Show a desktop notification (OSC 9, OSC 99, or OSC 777) show_desktop_notification: struct { title: [:0]const u8, body: [:0]const u8, @@ -155,6 +156,10 @@ pub const Command = union(Key) { kitty_clipboard_protocol: KittyClipboardProtocol, + /// OSC 3008. Hierarchical context signalling (UAPI spec). + /// https://uapi-group.org/specifications/specs/osc_context/ + context_signal: parsers.context_signal.Command, + pub const SemanticPrompt = parsers.semantic_prompt.Command; pub const KittyClipboardProtocol = parsers.kitty_clipboard_protocol.OSC; @@ -187,6 +192,7 @@ pub const Command = union(Key) { "conemu_comment", "kitty_text_sizing", "kitty_clipboard_protocol", + "context_signal", }, ); @@ -197,6 +203,10 @@ pub const Command = union(Key) { @"error", indeterminate, pause, + + test "ghostty.h Command.ProgressReport.State" { + try lib.checkGhosttyHEnum(State, "GHOSTTY_PROGRESS_STATE_"); + } }; state: State, @@ -226,7 +236,6 @@ pub const Command = union(Key) { 8 => 64, else => unreachable, }); - // @compileLog(@sizeOf(Command)); } }; @@ -281,6 +290,27 @@ pub const Parser = struct { /// Maximum size of a "normal" OSC. pub const MAX_BUF = 2048; + pub const KittyNotificationPending = struct { + active: bool = false, + id_len: usize = 0, + title_len: usize = 0, + body_len: usize = 0, + id: [64]u8 = undefined, + title: [MAX_BUF]u8 = undefined, + body: [MAX_BUF]u8 = undefined, + + pub fn reset(self: *KittyNotificationPending) void { + self.active = false; + self.id_len = 0; + self.title_len = 0; + self.body_len = 0; + } + + pub fn idSlice(self: *const KittyNotificationPending) []const u8 { + return self.id[0..self.id_len]; + } + }; + /// Optional allocator used to accept data longer than MAX_BUF. /// This only applies to some commands (e.g. OSC 52) that can /// reasonably exceed MAX_BUF. @@ -301,6 +331,9 @@ pub const Parser = struct { /// The command that is the result of parsing. command: Command, + /// Partial kitty notification state (OSC 99). + kitty_notification_pending: KittyNotificationPending = .{}, + pub const State = enum { start, invalid, @@ -311,12 +344,16 @@ pub const Parser = struct { @"0", @"1", @"2", + @"3", @"4", @"5", @"6", @"7", @"8", @"9", + @"30", + @"300", + @"3008", @"10", @"11", @"12", @@ -333,6 +370,7 @@ pub const Parser = struct { @"55", @"66", @"77", + @"99", @"104", @"110", @"111", @@ -411,6 +449,7 @@ pub const Parser = struct { .show_desktop_notification, .kitty_text_sizing, .kitty_clipboard_protocol, + .context_signal, => {}, } @@ -488,6 +527,7 @@ pub const Parser = struct { '0' => self.state = .@"0", '1' => self.state = .@"1", '2' => self.state = .@"2", + '3' => self.state = .@"3", '4' => self.state = .@"4", '5' => self.state = .@"5", '6' => self.state = .@"6", @@ -497,6 +537,26 @@ pub const Parser = struct { else => self.state = .invalid, }, + .@"3" => switch (c) { + '0' => self.state = .@"30", + else => self.state = .invalid, + }, + + .@"30" => switch (c) { + '0' => self.state = .@"300", + else => self.state = .invalid, + }, + + .@"300" => switch (c) { + '8' => self.state = .@"3008", + else => self.state = .invalid, + }, + + .@"3008" => switch (c) { + ';' => self.writeToFixed(), + else => self.state = .invalid, + }, + .@"1" => switch (c) { ';' => self.writeToFixed(), '0' => self.state = .@"10", @@ -605,6 +665,12 @@ pub const Parser = struct { else => self.state = .invalid, }, + .@"9" => switch (c) { + ';' => self.writeToFixed(), + '9' => self.state = .@"99", + else => self.state = .invalid, + }, + .@"77" => switch (c) { '7' => self.state = .@"777", else => self.state = .invalid, @@ -638,7 +704,7 @@ pub const Parser = struct { .@"22", .@"777", .@"8", - .@"9", + .@"99", => switch (c) { ';' => self.writeToFixed(), else => self.state = .invalid, @@ -696,6 +762,8 @@ pub const Parser = struct { .@"9" => parsers.osc9.parse(self, terminator_ch), + .@"99" => parsers.kitty_notification.parse(self, terminator_ch), + .@"21" => parsers.kitty_color.parse(self, terminator_ch), .@"22" => parsers.mouse_shape.parse(self, terminator_ch), @@ -704,6 +772,13 @@ pub const Parser = struct { .@"55" => null, + .@"3", + .@"30", + .@"300", + => null, + + .@"3008" => parsers.context_signal.parse(self, terminator_ch), + .@"6" => null, .@"66" => parsers.kitty_text_sizing.parse(self, terminator_ch), diff --git a/src/terminal/osc/parsers.zig b/src/terminal/osc/parsers.zig index 764de28aa93..94fee5bfe5f 100644 --- a/src/terminal/osc/parsers.zig +++ b/src/terminal/osc/parsers.zig @@ -1,6 +1,7 @@ const std = @import("std"); pub const change_window_icon = @import("parsers/change_window_icon.zig"); +pub const context_signal = @import("parsers/context_signal.zig"); pub const change_window_title = @import("parsers/change_window_title.zig"); pub const clipboard_operation = @import("parsers/clipboard_operation.zig"); pub const color = @import("parsers/color.zig"); @@ -8,6 +9,7 @@ pub const hyperlink = @import("parsers/hyperlink.zig"); pub const iterm2 = @import("parsers/iterm2.zig"); pub const kitty_clipboard_protocol = @import("parsers/kitty_clipboard_protocol.zig"); pub const kitty_color = @import("parsers/kitty_color.zig"); +pub const kitty_notification = @import("parsers/kitty_notification.zig"); pub const kitty_text_sizing = @import("parsers/kitty_text_sizing.zig"); pub const mouse_shape = @import("parsers/mouse_shape.zig"); pub const osc9 = @import("parsers/osc9.zig"); diff --git a/src/terminal/osc/parsers/context_signal.zig b/src/terminal/osc/parsers/context_signal.zig new file mode 100644 index 00000000000..ff82af392db --- /dev/null +++ b/src/terminal/osc/parsers/context_signal.zig @@ -0,0 +1,539 @@ +//! OSC 3008: Hierarchical Context Signalling (UAPI spec) +//! Specification: https://uapi-group.org/specifications/specs/osc_context/ +//! +//! OSC 3008 allows programs to signal context changes to the terminal emulator. +//! Each context has an identifier and metadata fields. Contexts are hierarchical +//! and form a stack. + +const std = @import("std"); +const Parser = @import("../../osc.zig").Parser; +const OSCCommand = @import("../../osc.zig").Command; + +const log = std.log.scoped(.osc_context_signal); + +/// Maximum length of a context identifier (per spec). +const max_context_id_len = 64; + +/// A single OSC 3008 context signal command. +pub const Command = struct { + action: Action, + /// The context identifier. Must be 1-64 characters in the 32..126 byte range. + id: []const u8, + /// Raw unparsed metadata fields after the context ID. + /// Fields are semicolon-separated key=value pairs. + /// Parsed lazily via `readOption`. + metadata: []const u8, + + pub const Action = enum { + /// OSC 3008;start= — initiates, updates, or returns to a context. + start, + /// OSC 3008;end= — terminates a context. + end, + }; + + /// Read a metadata field value from the raw fields string. + /// Returns null if the field is not present or malformed. + pub fn readOption( + self: Command, + comptime option: Field, + ) option.Type() { + return option.read(self.metadata); + } +}; + +/// Context types defined by the specification. +pub const ContextType = enum { + boot, + container, + vm, + elevate, + chpriv, + subcontext, + remote, + shell, + command, + app, + service, + session, + + pub fn parse(value: []const u8) ?ContextType { + return std.meta.stringToEnum(ContextType, value); + } +}; + +/// Exit status for the `exit` end-sequence field. +pub const ExitStatus = enum { + success, + failure, + crash, + interrupt, + + pub fn parse(value: []const u8) ?ExitStatus { + return std.meta.stringToEnum(ExitStatus, value); + } +}; + +/// Metadata fields that can appear in OSC 3008 sequences. +/// Fields are read lazily from the raw string using the `read` method. +pub const Field = enum { + // Start sequence fields + type, + user, + hostname, + machineid, + bootid, + pid, + pidfdid, + comm, + cwd, + cmdline, + vm, + container, + targetuser, + targethost, + sessionid, + + // End sequence fields + exit, + status, + signal, + + pub fn Type(comptime self: Field) type { + return switch (self) { + .type => ?ContextType, + .exit => ?ExitStatus, + .pid, .pidfdid => ?u64, + .status => ?u64, + // All other fields are string values + .user, + .hostname, + .machineid, + .bootid, + .comm, + .cwd, + .cmdline, + .vm, + .container, + .targetuser, + .targethost, + .sessionid, + .signal, + => ?[]const u8, + }; + } + + fn key(comptime self: Field) []const u8 { + return @tagName(self); + } + + /// Read the field value from the raw fields string. + /// + /// The raw fields string contains semicolon-separated key=value pairs + /// e.g. "type=container;user=lennart;hostname=zeta". + /// + /// Unknown or malformed fields are ignored per the specification. + pub fn read( + comptime self: Field, + raw: []const u8, + ) self.Type() { + var it = std.mem.splitScalar(u8, raw, ';'); + while (it.next()) |full| { + // Parse key=value + const value = value: { + if (std.mem.indexOfScalar( + u8, + full, + '=', + )) |eql_idx| { + if (std.mem.eql( + u8, + full[0..eql_idx], + self.key(), + )) { + break :value full[eql_idx + 1 ..]; + } + } + + continue; + }; + + return switch (self) { + .type => .parse(value), + .exit => .parse(value), + .pid, .pidfdid, .status => value: { + for (value) |c| { + if (c < '0' or c > '9') break :value null; + } + break :value std.fmt.parseInt( + u64, + value, + 10, + ) catch null; + }, + // String fields + .user, + .hostname, + .machineid, + .bootid, + .comm, + .cwd, + .cmdline, + .vm, + .container, + .targetuser, + .targethost, + .sessionid, + .signal, + => if (value.len > 0) value else null, + }; + } + + // Not found + return null; + } +}; + +/// Parse OSC 3008: hierarchical context signalling. +/// +/// Expected data format (after "3008;" prefix has been consumed by the state machine): +/// start=[;=]* +/// end=[;=]* +pub fn parse(parser: *Parser, _: ?u8) ?*OSCCommand { + const writer = parser.writer orelse { + parser.state = .invalid; + return null; + }; + const data = writer.buffered(); + if (data.len == 0) { + parser.state = .invalid; + return null; + } + + // Determine the action (start= or end=) + const action: Command.Action = action: { + if (std.mem.startsWith(u8, data, "start=")) break :action .start; + if (std.mem.startsWith(u8, data, "end=")) break :action .end; + + log.warn("OSC 3008: expected 'start=' or 'end=' prefix, got: {s}", .{ + data[0..@min(data.len, 10)], + }); + parser.state = .invalid; + return null; + }; + + // Skip past the "start=" or "end=" prefix + const prefix_len: usize = switch (action) { + .start => "start=".len, + .end => "end=".len, + }; + const rest = data[prefix_len..]; + + if (rest.len == 0) { + log.warn("OSC 3008: missing context ID", .{}); + parser.state = .invalid; + return null; + } + + // Extract the context ID (up to the first semicolon or end of data) + const id_end = std.mem.indexOfScalar(u8, rest, ';') orelse rest.len; + const id = rest[0..id_end]; + + // Validate context ID length (1-64 chars per spec) + if (id.len == 0 or id.len > max_context_id_len) { + log.warn("OSC 3008: context ID length {d} out of range (1-{d})", .{ + id.len, + max_context_id_len, + }); + parser.state = .invalid; + return null; + } + + // Validate context ID characters (32..126 byte range per spec) + for (id) |c| { + if (c < 0x20 or c > 0x7e) { + log.warn("OSC 3008: invalid character 0x{x:0>2} in context ID", .{c}); + parser.state = .invalid; + return null; + } + } + + // Extract raw metadata fields (everything after the ID) + const metadata = if (id_end < rest.len) rest[id_end + 1 ..] else ""; + + parser.command = .{ + .context_signal = .{ + .action = action, + .id = id, + .metadata = metadata, + }, + }; + + return &parser.command; +} + +// ============================================================================ +// Tests +// ============================================================================ + +test "OSC 3008: basic start command" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=abc123"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .start); + try testing.expectEqualStrings("abc123", cmd.context_signal.id); + try testing.expectEqualStrings("", cmd.context_signal.metadata); +} + +test "OSC 3008: basic end command" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;end=abc123"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .end); + try testing.expectEqualStrings("abc123", cmd.context_signal.id); + try testing.expectEqualStrings("", cmd.context_signal.metadata); +} + +test "OSC 3008: start with metadata fields" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=bed86fab93af4328bbed0a1224af6d40;type=container;user=lennart;hostname=zeta"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .start); + try testing.expectEqualStrings("bed86fab93af4328bbed0a1224af6d40", cmd.context_signal.id); + + // Read individual fields + try testing.expect(cmd.context_signal.readOption(.type).? == .container); + try testing.expectEqualStrings("lennart", cmd.context_signal.readOption(.user).?); + try testing.expectEqualStrings("zeta", cmd.context_signal.readOption(.hostname).?); +} + +test "OSC 3008: start with all common fields" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=myctx;type=shell;user=root;hostname=myhost;machineid=3deb5353d3ba43d08201c136a47ead7b;bootid=d4a3d0fdf2e24fdea6d971ce73f4fbf2;pid=1062862;pidfdid=1063162;comm=bash"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.readOption(.type).? == .shell); + try testing.expectEqualStrings("root", cmd.context_signal.readOption(.user).?); + try testing.expectEqualStrings("myhost", cmd.context_signal.readOption(.hostname).?); + try testing.expectEqualStrings("3deb5353d3ba43d08201c136a47ead7b", cmd.context_signal.readOption(.machineid).?); + try testing.expectEqualStrings("d4a3d0fdf2e24fdea6d971ce73f4fbf2", cmd.context_signal.readOption(.bootid).?); + try testing.expectEqual(@as(u64, 1062862), cmd.context_signal.readOption(.pid).?); + try testing.expectEqual(@as(u64, 1063162), cmd.context_signal.readOption(.pidfdid).?); + try testing.expectEqualStrings("bash", cmd.context_signal.readOption(.comm).?); +} + +test "OSC 3008: end with exit metadata" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;end=myctx;exit=success;status=0"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .end); + try testing.expectEqualStrings("myctx", cmd.context_signal.id); + try testing.expect(cmd.context_signal.readOption(.exit).? == .success); + try testing.expectEqual(@as(u64, 0), cmd.context_signal.readOption(.status).?); +} + +test "OSC 3008: end with failure exit" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;end=myctx;exit=failure;status=1;signal=SIGKILL"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.readOption(.exit).? == .failure); + try testing.expectEqual(@as(u64, 1), cmd.context_signal.readOption(.status).?); + try testing.expectEqualStrings("SIGKILL", cmd.context_signal.readOption(.signal).?); +} + +test "OSC 3008: unknown fields are ignored" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=myctx;type=shell;unknownfield=value;user=root"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.readOption(.type).? == .shell); + try testing.expectEqualStrings("root", cmd.context_signal.readOption(.user).?); +} + +test "OSC 3008: missing field returns null" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=myctx;user=lennart"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.readOption(.type) == null); + try testing.expect(cmd.context_signal.readOption(.hostname) == null); + try testing.expect(cmd.context_signal.readOption(.pid) == null); +} + +test "OSC 3008: invalid prefix" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;bogus=abc123"; + for (input) |ch| p.next(ch); + try testing.expect(p.end(null) == null); +} + +test "OSC 3008: empty data" { + const testing = std.testing; + + // Can't really produce empty data after "3008;" because the state machine + // won't write a writer for that case, but we test the edge case where + // only "start=" is present with no ID. + var p: Parser = .init(null); + const input = "3008;start="; + for (input) |ch| p.next(ch); + try testing.expect(p.end(null) == null); +} + +test "OSC 3008: max length context ID" { + const testing = std.testing; + + var p: Parser = .init(null); + const id = "a" ** 64; + const input = "3008;start=" ++ id; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expectEqualStrings(id, cmd.context_signal.id); +} + +test "OSC 3008: over-length context ID" { + const testing = std.testing; + + var p: Parser = .init(null); + const id = "a" ** 65; + const input = "3008;start=" ++ id; + for (input) |ch| p.next(ch); + try testing.expect(p.end(null) == null); +} + +test "OSC 3008: context type enum coverage" { + const testing = std.testing; + + const types = [_]struct { str: []const u8, expected: ContextType }{ + .{ .str = "boot", .expected = .boot }, + .{ .str = "container", .expected = .container }, + .{ .str = "vm", .expected = .vm }, + .{ .str = "elevate", .expected = .elevate }, + .{ .str = "chpriv", .expected = .chpriv }, + .{ .str = "subcontext", .expected = .subcontext }, + .{ .str = "remote", .expected = .remote }, + .{ .str = "shell", .expected = .shell }, + .{ .str = "command", .expected = .command }, + .{ .str = "app", .expected = .app }, + .{ .str = "service", .expected = .service }, + .{ .str = "session", .expected = .session }, + }; + + for (types) |t| { + try testing.expectEqual(t.expected, ContextType.parse(t.str).?); + } + + try testing.expect(ContextType.parse("invalid") == null); +} + +test "OSC 3008: exit status enum coverage" { + const testing = std.testing; + + try testing.expect(ExitStatus.parse("success").? == .success); + try testing.expect(ExitStatus.parse("failure").? == .failure); + try testing.expect(ExitStatus.parse("crash").? == .crash); + try testing.expect(ExitStatus.parse("interrupt").? == .interrupt); + try testing.expect(ExitStatus.parse("invalid") == null); +} + +test "OSC 3008: spec example - container start" { + const testing = std.testing; + + // From the spec: a new container "foobar" invoked by user "lennart" on host "zeta" + var p: Parser = .init(null); + const input = "3008;start=bed86fab93af4328bbed0a1224af6d40;type=container;user=lennart;hostname=zeta;machineid=3deb5353d3ba43d08201c136a47ead7b;bootid=d4a3d0fdf2e24fdea6d971ce73f4fbf2;pid=1062862;pidfdid=1063162;comm=systemd-nspawn;container=foobar"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .start); + try testing.expectEqualStrings("bed86fab93af4328bbed0a1224af6d40", cmd.context_signal.id); + try testing.expect(cmd.context_signal.readOption(.type).? == .container); + try testing.expectEqualStrings("lennart", cmd.context_signal.readOption(.user).?); + try testing.expectEqualStrings("zeta", cmd.context_signal.readOption(.hostname).?); + try testing.expectEqualStrings("systemd-nspawn", cmd.context_signal.readOption(.comm).?); + try testing.expectEqualStrings("foobar", cmd.context_signal.readOption(.container).?); + try testing.expectEqual(@as(u64, 1062862), cmd.context_signal.readOption(.pid).?); +} + +test "OSC 3008: spec example - context end" { + const testing = std.testing; + + // From the spec: context end + var p: Parser = .init(null); + const input = "3008;end=bed86fab93af4328bbed0a1224af6d40"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .end); + try testing.expectEqualStrings("bed86fab93af4328bbed0a1224af6d40", cmd.context_signal.id); +} + +test "OSC 3008: cwd and cmdline fields" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=myctx;type=command;cwd=/home/user;cmdline=ls -la"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expectEqualStrings("/home/user", cmd.context_signal.readOption(.cwd).?); + try testing.expectEqualStrings("ls -la", cmd.context_signal.readOption(.cmdline).?); +} + +test "OSC 3008: start command with no fields" { + const testing = std.testing; + + var p: Parser = .init(null); + const input = "3008;start=simpleid"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .context_signal); + try testing.expect(cmd.context_signal.action == .start); + try testing.expectEqualStrings("simpleid", cmd.context_signal.id); + try testing.expect(cmd.context_signal.readOption(.type) == null); + try testing.expect(cmd.context_signal.readOption(.user) == null); + try testing.expect(cmd.context_signal.readOption(.exit) == null); +} diff --git a/src/terminal/osc/parsers/kitty_notification.zig b/src/terminal/osc/parsers/kitty_notification.zig new file mode 100644 index 00000000000..47b26c8ccae --- /dev/null +++ b/src/terminal/osc/parsers/kitty_notification.zig @@ -0,0 +1,229 @@ +const std = @import("std"); + +const Parser = @import("../../osc.zig").Parser; +const Command = @import("../../osc.zig").Command; +const encoding = @import("../encoding.zig"); + +const log = std.log.scoped(.osc_kitty_notification); + +const PayloadKind = enum { + title, + body, + ignore, +}; + +pub fn parse(parser: *Parser, _: ?u8) ?*Command { + const writer = parser.writer orelse { + parser.state = .invalid; + return null; + }; + + // Ensure sentinel termination. + writer.writeByte(0) catch { + parser.state = .invalid; + return null; + }; + + var data = writer.buffered(); + if (data.len == 0) { + parser.state = .invalid; + return null; + } + + // Drop sentinel. + data = data[0 .. data.len - 1]; + + const meta_end = std.mem.indexOfScalar(u8, data, ';') orelse { + parser.state = .invalid; + return null; + }; + + const meta = data[0..meta_end]; + const payload = data[meta_end + 1 ..]; + + var payload_kind: PayloadKind = .title; + var done = true; + var base64 = false; + var id: ?[]const u8 = null; + + if (meta.len > 0) { + var it = std.mem.splitScalar(u8, meta, ':'); + while (it.next()) |part| { + if (part.len == 0) continue; + const eq = std.mem.indexOfScalar(u8, part, '=') orelse continue; + if (eq == 0) continue; + const key = part[0]; + const value = part[eq + 1 ..]; + switch (key) { + 'p' => payload_kind = parsePayloadKind(value), + 'd' => done = parseBool(value, true), + 'e' => base64 = parseBool(value, false), + 'i' => { + if (isValidId(value)) id = value; + }, + else => {}, + } + } + } + + if (payload_kind == .ignore) { + return null; + } + + var payload_bytes: []u8 = payload; + if (base64) { + const decoder = std.base64.standard.Decoder; + const decoded_len = decoder.calcSizeForSlice(payload_bytes) catch { + parser.state = .invalid; + return null; + }; + if (decoded_len > payload_bytes.len) { + parser.state = .invalid; + return null; + } + _ = decoder.decode(payload_bytes[0..decoded_len], payload_bytes) catch { + parser.state = .invalid; + return null; + }; + payload_bytes = payload_bytes[0..decoded_len]; + } + + if (!encoding.isSafeUtf8(payload_bytes)) { + parser.state = .invalid; + return null; + } + + const pending = &parser.kitty_notification_pending; + + if (id) |value| { + if (!pending.active or !std.mem.eql(u8, pending.idSlice(), value)) { + pending.reset(); + pending.active = true; + pending.id_len = @min(value.len, pending.id.len); + @memcpy(pending.id[0..pending.id_len], value[0..pending.id_len]); + } + } else { + pending.reset(); + pending.active = true; + } + + if (!appendPayload(pending, payload_kind, payload_bytes)) { + parser.state = .invalid; + return null; + } + + if (!done) { + return null; + } + + if (pending.title_len == 0 and pending.body_len == 0) { + pending.reset(); + return null; + } + + pending.title[pending.title_len] = 0; + pending.body[pending.body_len] = 0; + + var title: [:0]const u8 = pending.title[0..pending.title_len :0]; + var body: [:0]const u8 = pending.body[0..pending.body_len :0]; + + if (pending.title_len == 0 and pending.body_len > 0) { + title = pending.body[0..pending.body_len :0]; + body = ""; + } + + parser.command = .{ + .show_desktop_notification = .{ + .title = title, + .body = body, + }, + }; + + // Clear lengths for next notification but keep buffers intact for command slices. + pending.reset(); + return &parser.command; +} + +fn parsePayloadKind(value: []const u8) PayloadKind { + if (std.mem.eql(u8, value, "title")) return .title; + if (std.mem.eql(u8, value, "body")) return .body; + if (std.mem.eql(u8, value, "close")) return .ignore; + if (std.mem.eql(u8, value, "alive")) return .ignore; + return .ignore; +} + +fn parseBool(value: []const u8, default: bool) bool { + if (value.len == 0) return default; + return switch (value[0]) { + '0' => false, + '1' => true, + else => default, + }; +} + +fn isValidId(value: []const u8) bool { + if (value.len == 0) return false; + for (value) |c| { + if (std.ascii.isAlphanumeric(c)) continue; + switch (c) { + '-', '_', '+', '.', ':' => continue, + else => return false, + } + } + return true; +} + +fn appendPayload( + pending: *Parser.KittyNotificationPending, + kind: PayloadKind, + payload: []const u8, +) bool { + switch (kind) { + .title => return appendBuffer(&pending.title, &pending.title_len, payload), + .body => return appendBuffer(&pending.body, &pending.body_len, payload), + .ignore => return true, + } +} + +fn appendBuffer(buffer: *[Parser.MAX_BUF]u8, len: *usize, payload: []const u8) bool { + if (payload.len == 0) return true; + if (len.* + payload.len >= buffer.len) { + log.warn("kitty notification payload too large (len={d})", .{payload.len}); + return false; + } + @memcpy(buffer[len.* .. len.* + payload.len], payload); + len.* += payload.len; + return true; +} + +test "OSC 99: kitty notification with title only" { + const testing = std.testing; + + var p: Parser = .init(null); + + const input = "99;;Hello Kitty"; + for (input) |ch| p.next(ch); + + const cmd = p.end('\x1b').?.*; + try testing.expect(cmd == .show_desktop_notification); + try testing.expectEqualStrings("Hello Kitty", cmd.show_desktop_notification.title); + try testing.expectEqualStrings("", cmd.show_desktop_notification.body); +} + +test "OSC 99: kitty notification with title and body chunks" { + const testing = std.testing; + + var p: Parser = .init(null); + + const title = "99;i=abc:d=0:p=title;Kitty Title"; + for (title) |ch| p.next(ch); + try testing.expect(p.end('\x1b') == null); + + const body = "99;i=abc:p=body;Kitty Body"; + for (body) |ch| p.next(ch); + + const cmd = p.end('\x1b').?.*; + try testing.expect(cmd == .show_desktop_notification); + try testing.expectEqualStrings("Kitty Title", cmd.show_desktop_notification.title); + try testing.expectEqualStrings("Kitty Body", cmd.show_desktop_notification.body); +} diff --git a/src/terminal/osc/parsers/semantic_prompt.zig b/src/terminal/osc/parsers/semantic_prompt.zig index c2872b28d78..d3a117515b8 100644 --- a/src/terminal/osc/parsers/semantic_prompt.zig +++ b/src/terminal/osc/parsers/semantic_prompt.zig @@ -1,7 +1,9 @@ //! https://gitlab.freedesktop.org/Per_Bothner/specifications/blob/master/proposals/semantic-prompts.md const std = @import("std"); + const Parser = @import("../../osc.zig").Parser; const OSCCommand = @import("../../osc.zig").Command; +const string_encoding = @import("../../../os/string_encoding.zig"); const log = std.log.scoped(.osc_semantic_prompt); @@ -40,6 +42,20 @@ pub const Command = struct { ) ?option.Type() { return option.read(self.options_unvalidated); } + + /// Write the decoded command line (if any) to the writer. If an error + /// occurs garbage may have been written to the writer. + pub fn writeCommandLine(self: Command, writer: *std.Io.Writer) (std.Io.Writer.Error || error{DecodeError})!void { + if (self.readOption(.cmdline)) |command_line| { + try string_encoding.printfQDecode(writer, command_line); + return; + } + if (self.readOption(.cmdline_url)) |command_line| { + try string_encoding.urlPercentDecode(writer, command_line); + return; + } + return; + } }; pub const Option = enum { @@ -47,6 +63,8 @@ pub const Option = enum { cl, prompt_kind, err, + cmdline, + cmdline_url, // https://sw.kovidgoyal.net/kitty/shell-integration/#notes-for-shell-developers // Kitty supports a "redraw" option for prompt_start. This is extended @@ -83,6 +101,8 @@ pub const Option = enum { .redraw => Redraw, .special_key => bool, .click_events => bool, + .cmdline => []const u8, + .cmdline_url => []const u8, .exit_code => i32, }; } @@ -96,6 +116,8 @@ pub const Option = enum { .redraw => "redraw", .special_key => "special_key", .click_events => "click_events", + .cmdline => "cmdline", + .cmdline_url => "cmdline_url", // special case, handled before ever calling key .exit_code => unreachable, @@ -181,6 +203,8 @@ pub const Option = enum { '1' => true, else => null, } else null, + .cmdline => value, + .cmdline_url => value, // Handled above .exit_code => unreachable, }; @@ -389,6 +413,280 @@ test "OSC 133: end_input_start_output with options" { try testing.expectEqualStrings("foo", cmd.semantic_prompt.readOption(.aid).?); } +test "OSC 133: end_input_start_output with cmdline" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline=echo bobr kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline 3" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline=echo bobr\\nkurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr\nkurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline 4" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline=$'echo bobr kurwa'"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline 5" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline='echo bobr kurwa'"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline 6" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline='echo bobr kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline 7" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline=$'echo bobr kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline 8" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline=$'"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline 9" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline="; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline_url 1" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline_url 2" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr%20kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline_url 3" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr%3bkurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr;kurwa", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline_url 4" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr%3kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline_url 5" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr%kurwa"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline_url 6" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr kurwa%20"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + + try cmd.semantic_prompt.writeCommandLine(&w.writer); + try testing.expectEqualStrings("echo bobr kurwa ", w.written()); +} + +test "OSC 133: end_input_start_output with cmdline_url 7" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr kurwa%2"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + +test "OSC 133: end_input_start_output with cmdline_url 8" { + const testing = std.testing; + + var w: std.Io.Writer.Allocating = .init(testing.allocator); + defer w.deinit(); + + var p: Parser = .init(null); + const input = "133;C;cmdline_url=echo bobr kurwa%"; + for (input) |ch| p.next(ch); + + const cmd = p.end(null).?.*; + try testing.expect(cmd == .semantic_prompt); + try testing.expect(cmd.semantic_prompt.action == .end_input_start_output); + try testing.expectError(error.DecodeError, cmd.semantic_prompt.writeCommandLine(&w.writer)); +} + test "OSC 133: fresh_line" { const testing = std.testing; diff --git a/src/terminal/page.zig b/src/terminal/page.zig index 61507dc75e6..3e7ca9ac331 100644 --- a/src/terminal/page.zig +++ b/src/terminal/page.zig @@ -1556,7 +1556,7 @@ pub const Page = struct { /// WARNING: This will NOT change the content_tag on the cells because /// there are scenarios where we want to move graphemes without changing /// the content tag. Callers beware but assertIntegrity should catch this. - inline fn moveGrapheme(self: *Page, src: *Cell, dst: *Cell) void { + pub inline fn moveGrapheme(self: *Page, src: *Cell, dst: *Cell) void { if (build_options.slow_runtime_safety) { assert(src.hasGrapheme()); assert(!dst.hasGrapheme()); diff --git a/src/terminal/render.zig b/src/terminal/render.zig index 9d75fe4b7c6..2332866acb3 100644 --- a/src/terminal/render.zig +++ b/src/terminal/render.zig @@ -1092,7 +1092,7 @@ test "cursor state out of viewport" { try testing.expectEqual(1, state.cursor.viewport.?.y); // Scroll the viewport - try t.scrollViewport(.top); + t.scrollViewport(.top); try state.update(alloc, &t); // Set a style on the cursor diff --git a/src/terminal/search/viewport.zig b/src/terminal/search/viewport.zig index 76deebcec4d..f5e6c86012b 100644 --- a/src/terminal/search/viewport.zig +++ b/src/terminal/search/viewport.zig @@ -358,7 +358,7 @@ test "history search, no active area" { try testing.expect(t.screens.active.pages.pages.first != t.screens.active.pages.pages.last); try s.nextSlice("Buzz\r\nFizz"); - try t.scrollViewport(.top); + t.scrollViewport(.top); var search: ViewportSearch = try .init(alloc, "Fizz"); defer search.deinit(); diff --git a/src/terminal/sgr.zig b/src/terminal/sgr.zig index 6fd4f1e7920..314d6068688 100644 --- a/src/terminal/sgr.zig +++ b/src/terminal/sgr.zig @@ -249,7 +249,16 @@ pub const Parser = struct { // Colons are fairly rare in the wild. @branchHint(.unlikely); - assert(slice.len >= 2); + // A trailing colon with no following sub-param + // (e.g. "ESC[58:4:m") leaves the colon separator + // bit set on the last param without adding another + // entry, so we can see param 4 with a colon but + // nothing after it. + if (slice.len < 2) { + @branchHint(.cold); + break :underline; + } + if (self.isColon()) { // Invalid/unknown SGRs are just not very likely. @branchHint(.cold); @@ -1068,3 +1077,30 @@ test "sgr: kakoune input issue underline, fg, and bg" { try testing.expect(p.next() == null); } + +// Fuzz crash: afl-out/stream/default/crashes/id:000021 +// Input "ESC [ 5 8 : 4 : m" produces params [58, 4] with colon +// separator bits set at indices 0 and 1. The trailing colon causes +// the second iteration to see param 4 (underline) with a colon, +// triggering assert(slice.len >= 2) with slice.len == 1. +test "sgr: underline colon with trailing separator and short slice" { + var p: Parser = .{ + .params = &[_]u16{ 58, 4 }, + .params_sep = sep: { + var list = SepList.initEmpty(); + list.set(0); + list.set(1); + break :sep list; + }, + }; + + // 58:4 is not a valid underline color (sub-param 4 is not 2 or 5), + // so it falls through as unknown. + try testing.expect(p.next().? == .unknown); + + // Param 4 with a trailing colon but no sub-param is malformed, + // so it also falls through as unknown rather than panicking. + try testing.expect(p.next().? == .unknown); + + try testing.expect(p.next() == null); +} diff --git a/src/terminal/stream.zig b/src/terminal/stream.zig index 60840d84bdf..e89c73e6664 100644 --- a/src/terminal/stream.zig +++ b/src/terminal/stream.zig @@ -1188,7 +1188,10 @@ pub fn Stream(comptime Handler: type) type { return; }, - 1 => if (input.intermediates[0] == '?' and input.params[0] == 5) { + 1 => if (input.intermediates[0] == '?' and + input.params.len == 1 and + input.params[0] == 5) + { try self.handler.vt(.tab_reset, {}); } else log.warn("invalid cursor tabulation control: {f}", .{input}), @@ -1335,7 +1338,10 @@ pub fn Stream(comptime Handler: type) type { 'g' => switch (input.intermediates.len) { 0 => { const mode: csi.TabClear = switch (input.params.len) { - 1 => @enumFromInt(input.params[0]), + 1 => std.meta.intToEnum(csi.TabClear, input.params[0]) catch { + log.warn("invalid tab clear mode: {}", .{input.params[0]}); + return; + }, else => { log.warn("invalid tab clear command: {f}", .{input}); return; @@ -1891,7 +1897,7 @@ pub fn Stream(comptime Handler: type) type { '@' => switch (input.intermediates.len) { 0 => try self.handler.vt(.insert_blanks, switch (input.params.len) { 0 => 1, - 1 => input.params[0], + 1 => @max(1, input.params[0]), else => { @branchHint(.unlikely); log.warn("invalid ICH command: {f}", .{input}); @@ -2048,6 +2054,7 @@ pub fn Stream(comptime Handler: type) type { .conemu_run_process, .kitty_text_sizing, .kitty_clipboard_protocol, + .context_signal, => { log.debug("unimplemented OSC callback: {}", .{cmd}); }, @@ -2962,6 +2969,28 @@ test "stream: insert characters" { try testing.expect(!s.handler.called); } +test "stream: insert characters explicit zero clamps to 1" { + const H = struct { + const Self = @This(); + value: ?usize = null, + + pub fn vt( + self: *Self, + comptime action: anytype, + value: anytype, + ) !void { + switch (action) { + .insert_blanks => self.value = value, + else => {}, + } + } + }; + + var s: Stream(H) = .init(.{}); + for ("\x1B[0@") |c| try s.next(c); + try testing.expectEqual(@as(usize, 1), s.handler.value.?); +} + test "stream: SCOSC" { const H = struct { const Self = @This(); @@ -3388,3 +3417,29 @@ test "stream: SGR with 17+ parameters for underline color" { try s.nextSlice("\x1b[4:3;38;2;51;51;51;48;2;170;170;170;58;2;255;97;136;0m"); try testing.expect(s.handler.called); } + +test "stream: tab clear with overflowing param" { + // Regression test for a fuzz crash: CSI with a parameter value that + // saturates to 65535 (u16 max) causes @enumFromInt to panic when + // converting to TabClear (enum(u8)). + const H = struct { + called: bool = false, + + pub fn vt( + self: *@This(), + comptime action: Action.Tag, + value: Action.Value(action), + ) !void { + _ = value; + switch (action) { + .tab_clear_current, .tab_clear_all => self.called = true, + else => {}, + } + } + }; + + var s: Stream(H) = .init(.{}); + // This is the exact input from the fuzz crash (minus the mode byte): + // CSI with a huge numeric param that saturates to 65535, followed by 'g'. + try s.nextSlice("\x1b[388888888888888888888888888888888888g\x1b[0m"); +} diff --git a/src/terminal/stream_readonly.zig b/src/terminal/stream_readonly.zig index eca13bf0698..5b97bebfa2d 100644 --- a/src/terminal/stream_readonly.zig +++ b/src/terminal/stream_readonly.zig @@ -988,3 +988,19 @@ test "semantic prompt end_prompt_start_input_terminate_eol clears on linefeed" { try s.nextSlice("\n"); try testing.expectEqual(.output, t.screens.active.cursor.semantic_content); } + +test "stream: CSI W with intermediate but no params" { + // Regression test from AFL++ crash. CSI ? W without + // parameters caused an out-of-bounds access on input.params[0]. + var t: Terminal = try .init(testing.allocator, .{ + .cols = 80, + .rows = 24, + .max_scrollback = 100, + }); + defer t.deinit(testing.allocator); + + var s: Stream = .initAlloc(testing.allocator, .init(&t)); + defer s.deinit(); + + try s.nextSlice("\x1b[?W"); +} diff --git a/src/terminfo/ghostty.zig b/src/terminfo/ghostty.zig index 6451836e789..ca579147f59 100644 --- a/src/terminfo/ghostty.zig +++ b/src/terminfo/ghostty.zig @@ -220,7 +220,7 @@ pub const ghostty: Source = .{ .{ .name = "setaf", .value = .{ .string = "\\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m" } }, .{ .name = "setrgbb", .value = .{ .string = "\\E[48:2:%p1%d:%p2%d:%p3%dm" } }, .{ .name = "setrgbf", .value = .{ .string = "\\E[38:2:%p1%d:%p2%d:%p3%dm" } }, - .{ .name = "sgr", .value = .{ .string = "%?%p9%t\\E(0%e\\E(B%;\\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m" } }, + .{ .name = "sgr", .value = .{ .string = "%?%p9%t\\E(0%e\\E(B%;\\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m" } }, .{ .name = "sgr0", .value = .{ .string = "\\E(B\\E[m" } }, .{ .name = "sitm", .value = .{ .string = "\\E[3m" } }, .{ .name = "smacs", .value = .{ .string = "\\E(0" } }, diff --git a/src/termio/Termio.zig b/src/termio/Termio.zig index dee58dc22ed..dcd0d8cf7ff 100644 --- a/src/termio/Termio.zig +++ b/src/termio/Termio.zig @@ -184,12 +184,7 @@ pub const DerivedConfig = struct { break :generate; } - break :palette terminalpkg.color.generate256Color( - config.palette.value, - config.palette.mask, - config.background.toTerminalRGB(), - config.foreground.toTerminalRGB(), - ); + break :palette terminalpkg.color.generate256Color(config.palette.value, config.palette.mask, config.background.toTerminalRGB(), config.foreground.toTerminalRGB(), config.@"palette-harmonious"); } break :palette config.palette.value; @@ -641,10 +636,13 @@ pub fn clearScreen(self: *Termio, td: *ThreadData, history: bool) !void { } /// Scroll the viewport -pub fn scrollViewport(self: *Termio, scroll: terminalpkg.Terminal.ScrollViewport) !void { +pub fn scrollViewport( + self: *Termio, + scroll: terminalpkg.Terminal.ScrollViewport, +) void { self.renderer_state.mutex.lock(); defer self.renderer_state.mutex.unlock(); - try self.terminal.scrollViewport(scroll); + self.terminal.scrollViewport(scroll); } /// Jump the viewport to the prompt. diff --git a/src/termio/Thread.zig b/src/termio/Thread.zig index 6aa5e1c26d5..ce4c1f4af84 100644 --- a/src/termio/Thread.zig +++ b/src/termio/Thread.zig @@ -321,7 +321,7 @@ fn drainMailbox( .resize => |v| self.handleResize(cb, v), .size_report => |v| try io.sizeReport(data, v), .clear_screen => |v| try io.clearScreen(data, v.history), - .scroll_viewport => |v| try io.scrollViewport(v), + .scroll_viewport => |v| io.scrollViewport(v), .selection_scroll => |v| { if (v) { self.startScrollTimer(cb); diff --git a/src/termio/stream_handler.zig b/src/termio/stream_handler.zig index bc3edd185c6..8c1b5b8abd3 100644 --- a/src/termio/stream_handler.zig +++ b/src/termio/stream_handler.zig @@ -232,7 +232,7 @@ pub const StreamHandler = struct { .erase_display_below => self.terminal.eraseDisplay(.below, value), .erase_display_above => self.terminal.eraseDisplay(.above, value), .erase_display_complete => { - try self.terminal.scrollViewport(.{ .bottom = {} }); + self.terminal.scrollViewport(.{ .bottom = {} }); self.terminal.eraseDisplay(.complete, value); }, .erase_display_scrollback => self.terminal.eraseDisplay(.scrollback, value), diff --git a/src/unicode/props.zig b/src/unicode/props.zig index a6615e56ec7..2653f0cc654 100644 --- a/src/unicode/props.zig +++ b/src/unicode/props.zig @@ -13,6 +13,10 @@ pub const Properties = packed struct { /// becomes a 2-em dash). width: u2 = 0, + /// Whether the code point does not contribute to the width of a grapheme + /// cluster (not used for single code point cells). + width_zero_in_grapheme: bool = false, + /// Grapheme break property. grapheme_break: uucode.x.types.GraphemeBreakNoControl = .other, @@ -22,6 +26,7 @@ pub const Properties = packed struct { // Needed for lut.Generator pub fn eql(a: Properties, b: Properties) bool { return a.width == b.width and + a.width_zero_in_grapheme == b.width_zero_in_grapheme and a.grapheme_break == b.grapheme_break and a.emoji_vs_base == b.emoji_vs_base; } @@ -34,11 +39,13 @@ pub const Properties = packed struct { try writer.print( \\.{{ \\ .width= {}, + \\ .width_zero_in_grapheme= {}, \\ .grapheme_break= .{s}, \\ .emoji_vs_base= {}, \\}} , .{ self.width, + self.width_zero_in_grapheme, @tagName(self.grapheme_break), self.emoji_vs_base, }); diff --git a/src/unicode/props_uucode.zig b/src/unicode/props_uucode.zig index d876bf4ac3c..527a757edc3 100644 --- a/src/unicode/props_uucode.zig +++ b/src/unicode/props_uucode.zig @@ -8,12 +8,14 @@ const Properties = @import("props.zig").Properties; pub fn get(cp: u21) Properties { if (cp > uucode.config.max_code_point) return .{ .width = 1, + .width_zero_in_grapheme = true, .grapheme_break = .other, .emoji_vs_base = false, }; return .{ .width = uucode.get(.width, cp), + .width_zero_in_grapheme = uucode.get(.wcwidth_zero_in_grapheme, cp), .grapheme_break = uucode.get(.grapheme_break_no_control, cp), .emoji_vs_base = uucode.get(.is_emoji_vs_base, cp), }; diff --git a/test/Dockerfile b/test/Dockerfile deleted file mode 100644 index 910df5d913c..00000000000 --- a/test/Dockerfile +++ /dev/null @@ -1,66 +0,0 @@ -#-------------------------------------------------------------------- -# Alacritty since it has no build in Ubuntu -#-------------------------------------------------------------------- -FROM rust AS alacritty - -RUN apt-get update && apt-get install -y \ - cmake pkg-config libfreetype6-dev libfontconfig1-dev \ - libxcb-xfixes0-dev python3 git - -RUN git clone https://github.com/alacritty/alacritty.git /tmp/alacritty - -WORKDIR /tmp/alacritty - -RUN git checkout tags/$(git describe --tags $(git rev-list --tags --max-count=1)) - -RUN RUSTFLAGS='-C link-arg=-s' cargo build --release - -#-------------------------------------------------------------------- -# Wraptest -#-------------------------------------------------------------------- -FROM ubuntu:22.04 AS wraptest - -RUN apt-get update && apt-get install -y \ - build-essential git - -RUN git clone https://github.com/mattiase/wraptest.git /tmp/wraptest - -WORKDIR /tmp/wraptest - -RUN gcc -o wraptest wraptest.c - -#-------------------------------------------------------------------- -# Main Runner -#-------------------------------------------------------------------- -# Note: we used to use Alpine, but we need to use an OS that is more -# glibc friendly because on Linux we still require glibc (active todo to -# support musl). -FROM ubuntu:22.04 - -# Base deps -RUN apt-get update && apt-get install -y \ - fonts-inconsolata \ - i3 \ - imagemagick \ - libgl1-mesa-dev \ - libxcursor1 \ - patchelf \ - software-properties-common \ - xdotool \ - xvfb \ - vttest - -# Terminals -RUN apt-get install -y \ - xterm - -RUN rm -rf /var/lib/apt/lists/* - -COPY --from=alacritty /tmp/alacritty/target/release/alacritty /usr/bin/alacritty -COPY --from=wraptest /tmp/wraptest/wraptest /usr/bin/wraptest - -COPY ./run.sh /entrypoint.sh - -COPY ./ghostty /usr/bin/ghostty - -ENTRYPOINT ["/bin/bash"] diff --git a/test/README.md b/test/README.md index 8b59aa06264..2ce7c2ae9aa 100644 --- a/test/README.md +++ b/test/README.md @@ -1,40 +1,4 @@ -# Acceptance Testing +# Test Utilities -This directory contains an acceptance test suite for ghostty. This works -by running the terminal emulator within a windowing environment, capturing a -screenshot, and comparing results. We use this to visually verify that -all rendering conforms to what we expect. - -This test suite can also execute alternate terminal emulators so that we -can easily compare outputs between them. - -## Running a Single Test - -To run a single test, use the `run-host.sh` script. This must be executed -from this directory. Example: - -```shell-session -$ ./run-host.sh --exec xterm --case /src/cases/vttest/launch.sh -``` - -The `--case` flag uses `/src` as the root for this directory. - -The `--update` flag can be used to update the screenshot in place. This -should be used to gather a new screenshot. If you want to compare to the old -screenshot, copy the old one or use git to revert. - -## Running the Full Suite - -**Warning:** This can take a long time and isn't recommended. The CI -environment automatically runs the full test suite and is the recommended -approach. - -To run the full test suite against all terminal emulators, use the -`run-all.sh` script. This optionally takes an `--exec` parameter to run -the full test suite against only a single terminal emulator. - -## Modifying the `ghostty` Binary - -This test suite expects the `ghostty` binary to be in _this directory_. -You can manually copy it into place. Each time you modify the binary, you -must rebuild the Docker image. +This directory contains anything related to testing Ghostty that doesn't +fit within the standard Zig testing framework alongside the source. diff --git a/test/cases/vttest/1_1.sh b/test/cases/vttest/1_1.sh deleted file mode 100755 index daf02f41185..00000000000 --- a/test/cases/vttest/1_1.sh +++ /dev/null @@ -1,7 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return -} diff --git a/test/cases/vttest/1_1.sh.alacritty.png b/test/cases/vttest/1_1.sh.alacritty.png deleted file mode 100644 index 0be3ead8fb6..00000000000 Binary files a/test/cases/vttest/1_1.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_1.sh.ghostty.png b/test/cases/vttest/1_1.sh.ghostty.png deleted file mode 100644 index 7afe135ece5..00000000000 Binary files a/test/cases/vttest/1_1.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_1.sh.xterm.png b/test/cases/vttest/1_1.sh.xterm.png deleted file mode 100644 index 3253846ad8c..00000000000 Binary files a/test/cases/vttest/1_1.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/1_2.sh b/test/cases/vttest/1_2.sh deleted file mode 100644 index d55a6587b43..00000000000 --- a/test/cases/vttest/1_2.sh +++ /dev/null @@ -1,9 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return - sleep 0.5 - xdotool key Return -} diff --git a/test/cases/vttest/1_2.sh.alacritty.png b/test/cases/vttest/1_2.sh.alacritty.png deleted file mode 100644 index 47d289ea528..00000000000 Binary files a/test/cases/vttest/1_2.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_2.sh.ghostty.png b/test/cases/vttest/1_2.sh.ghostty.png deleted file mode 100644 index ed43c7e448b..00000000000 Binary files a/test/cases/vttest/1_2.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_2.sh.xterm.png b/test/cases/vttest/1_2.sh.xterm.png deleted file mode 100644 index 97437fe7ebf..00000000000 Binary files a/test/cases/vttest/1_2.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/1_3.sh b/test/cases/vttest/1_3.sh deleted file mode 100644 index 16689a43ca7..00000000000 --- a/test/cases/vttest/1_3.sh +++ /dev/null @@ -1,11 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return -} diff --git a/test/cases/vttest/1_3.sh.alacritty.png b/test/cases/vttest/1_3.sh.alacritty.png deleted file mode 100644 index 88a0ee52750..00000000000 Binary files a/test/cases/vttest/1_3.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_3.sh.ghostty.png b/test/cases/vttest/1_3.sh.ghostty.png deleted file mode 100644 index 871b944de2c..00000000000 Binary files a/test/cases/vttest/1_3.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_3.sh.xterm.png b/test/cases/vttest/1_3.sh.xterm.png deleted file mode 100644 index d0da962a9c3..00000000000 Binary files a/test/cases/vttest/1_3.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/1_4.sh b/test/cases/vttest/1_4.sh deleted file mode 100644 index 7bc12063683..00000000000 --- a/test/cases/vttest/1_4.sh +++ /dev/null @@ -1,13 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return -} diff --git a/test/cases/vttest/1_4.sh.alacritty.png b/test/cases/vttest/1_4.sh.alacritty.png deleted file mode 100644 index b829aed4e1e..00000000000 Binary files a/test/cases/vttest/1_4.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_4.sh.ghostty.png b/test/cases/vttest/1_4.sh.ghostty.png deleted file mode 100644 index f7a67c23fab..00000000000 Binary files a/test/cases/vttest/1_4.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_4.sh.xterm.png b/test/cases/vttest/1_4.sh.xterm.png deleted file mode 100644 index 4219498608a..00000000000 Binary files a/test/cases/vttest/1_4.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/1_5.sh b/test/cases/vttest/1_5.sh deleted file mode 100644 index 0a840300e35..00000000000 --- a/test/cases/vttest/1_5.sh +++ /dev/null @@ -1,15 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return -} diff --git a/test/cases/vttest/1_5.sh.alacritty.png b/test/cases/vttest/1_5.sh.alacritty.png deleted file mode 100644 index cdbd5874383..00000000000 Binary files a/test/cases/vttest/1_5.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_5.sh.ghostty.png b/test/cases/vttest/1_5.sh.ghostty.png deleted file mode 100644 index c04f47d97bb..00000000000 Binary files a/test/cases/vttest/1_5.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_5.sh.xterm.png b/test/cases/vttest/1_5.sh.xterm.png deleted file mode 100644 index 3453ac9239a..00000000000 Binary files a/test/cases/vttest/1_5.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/1_6.sh b/test/cases/vttest/1_6.sh deleted file mode 100644 index 9249c9bdfda..00000000000 --- a/test/cases/vttest/1_6.sh +++ /dev/null @@ -1,17 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return - sleep 1 - xdotool type "1" - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return - sleep 0.5 - xdotool key Return -} diff --git a/test/cases/vttest/1_6.sh.alacritty.png b/test/cases/vttest/1_6.sh.alacritty.png deleted file mode 100644 index 08cdbd52aed..00000000000 Binary files a/test/cases/vttest/1_6.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/1_6.sh.ghostty.png b/test/cases/vttest/1_6.sh.ghostty.png deleted file mode 100644 index 672b8eb25d1..00000000000 Binary files a/test/cases/vttest/1_6.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/1_6.sh.xterm.png b/test/cases/vttest/1_6.sh.xterm.png deleted file mode 100644 index 43bdcb09ef3..00000000000 Binary files a/test/cases/vttest/1_6.sh.xterm.png and /dev/null differ diff --git a/test/cases/vttest/launch.sh b/test/cases/vttest/launch.sh deleted file mode 100644 index 5cda9b08726..00000000000 --- a/test/cases/vttest/launch.sh +++ /dev/null @@ -1,4 +0,0 @@ -function test_do { - xdotool type "vttest" - xdotool key Return -} diff --git a/test/cases/vttest/launch.sh.alacritty.png b/test/cases/vttest/launch.sh.alacritty.png deleted file mode 100644 index 5575a255151..00000000000 Binary files a/test/cases/vttest/launch.sh.alacritty.png and /dev/null differ diff --git a/test/cases/vttest/launch.sh.ghostty.png b/test/cases/vttest/launch.sh.ghostty.png deleted file mode 100644 index 283b20daf4a..00000000000 Binary files a/test/cases/vttest/launch.sh.ghostty.png and /dev/null differ diff --git a/test/cases/vttest/launch.sh.xterm.png b/test/cases/vttest/launch.sh.xterm.png deleted file mode 100644 index 399e7089b88..00000000000 Binary files a/test/cases/vttest/launch.sh.xterm.png and /dev/null differ diff --git a/test/cases/wraptest.sh b/test/cases/wraptest.sh deleted file mode 100644 index 60fc36c22d6..00000000000 --- a/test/cases/wraptest.sh +++ /dev/null @@ -1,4 +0,0 @@ -function test_do { - xdotool type "wraptest" - xdotool key Return -} diff --git a/test/cases/wraptest.sh.alacritty.png b/test/cases/wraptest.sh.alacritty.png deleted file mode 100644 index cc6001140db..00000000000 Binary files a/test/cases/wraptest.sh.alacritty.png and /dev/null differ diff --git a/test/cases/wraptest.sh.ghostty.png b/test/cases/wraptest.sh.ghostty.png deleted file mode 100644 index fff26df9ad5..00000000000 Binary files a/test/cases/wraptest.sh.ghostty.png and /dev/null differ diff --git a/test/cases/wraptest.sh.xterm.png b/test/cases/wraptest.sh.xterm.png deleted file mode 100644 index 267d207b491..00000000000 Binary files a/test/cases/wraptest.sh.xterm.png and /dev/null differ diff --git a/test/fuzz-libghostty/.afl-tmin-temp-37266 b/test/fuzz-libghostty/.afl-tmin-temp-37266 new file mode 100644 index 00000000000..e209f019af5 Binary files /dev/null and b/test/fuzz-libghostty/.afl-tmin-temp-37266 differ diff --git a/test/fuzz-libghostty/.gitattributes b/test/fuzz-libghostty/.gitattributes new file mode 100644 index 00000000000..c5a2308397a --- /dev/null +++ b/test/fuzz-libghostty/.gitattributes @@ -0,0 +1,9 @@ +# Hand-written seed corpus: binary files, track as-is +corpus/parser-initial/** binary +corpus/stream-initial/** binary + +# Generated/minimized corpora: binary, mark as generated +corpus/parser-cmin/** binary linguist-generated=true +corpus/parser-min/** binary linguist-generated=true +corpus/stream-cmin/** binary linguist-generated=true +corpus/stream-min/** binary linguist-generated=true diff --git a/test/fuzz-libghostty/.gitignore b/test/fuzz-libghostty/.gitignore new file mode 100644 index 00000000000..08db7a09bbb --- /dev/null +++ b/test/fuzz-libghostty/.gitignore @@ -0,0 +1,9 @@ +# Build artifacts +.zig-cache/ +zig-out/ + +# AFL++ outputs +afl-out/ + +# Corpus trace files +corpus/**/.traces/ diff --git a/test/fuzz-libghostty/AGENTS.md b/test/fuzz-libghostty/AGENTS.md new file mode 100644 index 00000000000..8088e227270 --- /dev/null +++ b/test/fuzz-libghostty/AGENTS.md @@ -0,0 +1,48 @@ +# AFL++ Fuzzer for Libghostty + +- Build all fuzzer with `zig build` +- The list of available fuzzers is in `build.zig` (search for `fuzzers`). +- Run a specific fuzzer with `zig build run-` (e.g. `zig build run-parser`) +- Corpus directories follow the naming convention `corpus/-` + (e.g. `corpus/parser-initial`, `corpus/stream-cmin`). +- Do NOT run `afl-tmin` unless explicitly requested — it is very slow. +- After running `afl-cmin`, run `corpus/sanitize-filenames.sh` + before committing to replace colons with underscores (colons are invalid + on Windows NTFS). + +## Important: stdin-based input + +The instrumented binaries (`afl.c` harness) read fuzz input from **stdin**, +not from a file argument. This affects how you invoke AFL++ tools: + +- **`afl-fuzz`**: Uses shared-memory fuzzing automatically; `@@` works + because AFL writes directly to shared memory, bypassing file I/O. +- **`afl-showmap`**: Must pipe input via stdin, **not** `@@`: + + ```sh + cat testcase | afl-showmap -o map.txt -- zig-out/bin/fuzz-stream + ``` + +- **`afl-cmin`**: Do **not** use `@@`. Requires `AFL_NO_FORKSRV=1` with + the bash version due to a bug in the Python `afl-cmin` (AFL++ 4.35c): + + ```sh + AFL_NO_FORKSRV=1 /opt/homebrew/Cellar/afl++/4.35c/libexec/afl-cmin.bash \ + -i afl-out/fuzz-stream/default/queue -o corpus/stream-cmin \ + -- zig-out/bin/fuzz-stream + ``` + +If you pass `@@` or a filename argument, `afl-showmap`/`afl-cmin` +will see only ~4 tuples (the C main paths) and produce useless results. + +## Replaying crashes + +Use `replay-crashes.nu` (Nushell) to list or replay AFL++ crash files. + +- **List all crash files:** `nu replay-crashes.nu --list` +- **JSON output (for structured processing):** `nu replay-crashes.nu --json` + Returns an array of objects with `fuzzer`, `file`, `binary`, and `replay_cmd`. +- **Filter by fuzzer:** `nu replay-crashes.nu --list --fuzzer stream` +- **Replay all crashes:** `nu replay-crashes.nu` + Pipes each crash file into its fuzzer binary via stdin and exits non-zero + if any crashes still reproduce. diff --git a/test/fuzz-libghostty/README.md b/test/fuzz-libghostty/README.md new file mode 100644 index 00000000000..509e2e6c5f8 --- /dev/null +++ b/test/fuzz-libghostty/README.md @@ -0,0 +1,133 @@ +# AFL++ Fuzzer for Libghostty + +This directory contains [AFL++](https://aflplus.plus/) fuzzing harnesses for +libghostty-vt (Zig module). + +## Fuzz Targets + +| Target | Binary | Description | +| -------- | ------------- | ------------------------------------------------------- | +| `osc` | `fuzz-osc` | OSC parser with allocator (`osc.Parser.next` + `end`) | +| `parser` | `fuzz-parser` | VT parser only (`Parser.next` byte-at-a-time) | +| `stream` | `fuzz-stream` | Full terminal stream (`nextSlice` + `next` via handler) | + +The osc target directly fuzzes the `osc.Parser` with an allocator enabled, +exercising the allocating writer code paths for large payloads. The first +byte selects the terminator variant (BEL, ST, or missing). Seeds cover OSC +52, 66, 133, 3008, 1337, and 5522. + +The stream target creates a small `Terminal` and exercises the readonly +`Stream` handler, covering printing, CSI dispatch, OSC, DCS, SGR, cursor +movement, scrolling regions, and more. The first byte of each input selects +between the slice path (SIMD fast-path) and the scalar path. + +## Prerequisites + +Install AFL++ so that `afl-cc` and `afl-fuzz` are on your `PATH`. + +- **macOS (Homebrew):** `brew install aflplusplus` +- **Linux:** build from source or use your distro's package (e.g. + `apt install afl++` on Debian/Ubuntu). + +## Building + +From this directory (`test/fuzz-libghostty`): + +```sh +zig build +``` + +This compiles Zig static libraries for each fuzz target, emits LLVM bitcode, +then links each with `afl.c` using `afl-cc` to produce instrumented binaries +at `zig-out/bin/fuzz-osc`, `zig-out/bin/fuzz-parser`, and `zig-out/bin/fuzz-stream`. + +## Running the Fuzzer + +Each target has its own run step: + +```sh +zig build run-osc # Run the OSC parser fuzzer +zig build run-parser # Run the VT parser fuzzer +zig build run-stream # Run the VT stream fuzzer +``` + +Or invoke `afl-fuzz` directly: + +```sh +afl-fuzz -i corpus/stream-initial -o afl-out/stream -- zig-out/bin/fuzz-stream @@ +``` + +The fuzzer runs indefinitely. Let it run for as long as you like; meaningful +coverage is usually reached within a few hours, but longer runs can find +deeper bugs. Press `ctrl+c` to stop the fuzzer when you're done. + +## Finding Crashes and Hangs + +After (or during) a run, results are written to `afl-out//default/`: + +``` +afl-out/stream/default/ +├── crashes/ # Inputs that triggered crashes +├── hangs/ # Inputs that triggered hangs/timeouts +└── queue/ # All interesting inputs (the evolved corpus) +``` + +Each file in `crashes/` or `hangs/` is a raw byte file that triggered the +issue. The filename encodes metadata about how it was found (e.g. +`id:000000,sig:06,...`). + +## Reproducing a Crash + +Replay any crashing input by piping it into the harness: + +```sh +cat afl-out/stream/default/crashes/ | zig-out/bin/fuzz-stream +``` + +## Corpus Management + +After a fuzzing run, the queue in `afl-out//default/queue/` typically +contains many redundant inputs. Use `afl-cmin` to find the smallest +subset that preserves full edge coverage, and `afl-tmin` to shrink +individual test cases. + +> **Important:** The instrumented binary reads input from **stdin**, not +> from file arguments. Do **not** use `@@` with `afl-cmin`, `afl-tmin`, +> or `afl-showmap` — it will cause them to see only the C harness +> coverage (~4 tuples) instead of the Zig VT parser coverage. + +### Corpus minimization (`afl-cmin`) + +Reduce the evolved queue to a minimal set covering all discovered edges: + +```sh +AFL_NO_FORKSRV=1 afl-cmin.bash \ + -i afl-out/stream/default/queue \ + -o corpus/stream-cmin \ + -- zig-out/bin/fuzz-stream +``` + +`AFL_NO_FORKSRV=1` is required because the Python `afl-cmin` wrapper has +a bug in AFL++ 4.35c. Use the `afl-cmin.bash` script instead (typically +found in AFL++'s `libexec` directory). + +### Windows compatibility + +AFL++ output filenames contain colons (e.g., `id:000024,time:0,...`), which +are invalid on Windows (NTFS). After running `afl-cmin`, +rename the output files to replace colons with underscores before committing: + +```sh +./corpus/sanitize-filenames.sh +``` + +### Corpus directories + +| Directory | Contents | +| ------------------------ | ----------------------------------------------- | +| `corpus/osc-initial/` | Hand-written seed inputs for osc-parser | +| `corpus/osc-cmin/` | Output of `afl-cmin` (edge-deduplicated corpus) | +| `corpus/parser-initial/` | Hand-written seed inputs for vt-parser | +| `corpus/parser-cmin/` | Output of `afl-cmin` (edge-deduplicated corpus) | +| `corpus/stream-initial/` | Hand-written seed inputs for vt-stream | +| `corpus/stream-cmin/` | Output of `afl-cmin` (edge-deduplicated corpus) | diff --git a/test/fuzz-libghostty/build.zig b/test/fuzz-libghostty/build.zig new file mode 100644 index 00000000000..ec73c39c9e9 --- /dev/null +++ b/test/fuzz-libghostty/build.zig @@ -0,0 +1,73 @@ +const std = @import("std"); +const afl = @import("afl"); + +/// Possible fuzz targets. Each fuzz target is implemented in +/// src/fuzz_.zig and has an initial corpus in corpus/-initial. +const Fuzzer = struct { + name: []const u8, + + pub fn source(comptime self: Fuzzer) []const u8 { + return "src/fuzz_" ++ self.name ++ ".zig"; + } + + pub fn corpus(comptime self: Fuzzer) []const u8 { + // Change this suffix to use cmin vs initial corpus + return "corpus/" ++ self.name ++ "-cmin"; + } +}; + +const fuzzers: []const Fuzzer = &.{ + .{ .name = "osc" }, + .{ .name = "parser" }, + .{ .name = "stream" }, +}; + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const ghostty_dep = b.lazyDependency("ghostty", .{ + .simd = false, + }); + + inline for (fuzzers) |fuzzer| { + const run_step = b.step( + b.fmt("run-{s}", .{fuzzer.name}), + b.fmt("Run {s} with afl-fuzz", .{fuzzer.name}), + ); + + const lib_mod = b.createModule(.{ + .root_source_file = b.path(fuzzer.source()), + .target = target, + .optimize = optimize, + }); + if (ghostty_dep) |dep| { + lib_mod.addImport( + "ghostty-vt", + dep.module("ghostty-vt"), + ); + } + + const lib = b.addLibrary(.{ + .name = fuzzer.name, + .root_module = lib_mod, + }); + lib.root_module.stack_check = false; + lib.root_module.fuzz = true; + + const exe = afl.addInstrumentedExe(b, lib); + const run = afl.addFuzzerRun( + b, + exe, + b.path(fuzzer.corpus()), + b.path(b.fmt("afl-out/{s}", .{fuzzer.name})), + ); + run_step.dependOn(&run.step); + + const exe_install = b.addInstallBinFile( + exe, + "fuzz-" ++ fuzzer.name, + ); + b.getInstallStep().dependOn(&exe_install.step); + } +} diff --git a/test/fuzz-libghostty/build.zig.zon b/test/fuzz-libghostty/build.zig.zon new file mode 100644 index 00000000000..9fa2f65c11a --- /dev/null +++ b/test/fuzz-libghostty/build.zig.zon @@ -0,0 +1,15 @@ +.{ + .name = .fuzz_libghostty, + .version = "0.0.0", + .fingerprint = 0x2cb2c498237c5d43, + .minimum_zig_version = "0.15.1", + .dependencies = .{ + .ghostty = .{ .path = "../../" }, + .afl = .{ .path = "../../pkg/afl++" }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/test/fuzz-libghostty/corpus/osc-cmin/01-osc52-clip-set-bel b/test/fuzz-libghostty/corpus/osc-cmin/01-osc52-clip-set-bel new file mode 100644 index 00000000000..6dd0a8bffd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/01-osc52-clip-set-bel differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/02-osc52-clip-query-st b/test/fuzz-libghostty/corpus/osc-cmin/02-osc52-clip-query-st new file mode 100644 index 00000000000..c030ffd1926 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/02-osc52-clip-query-st @@ -0,0 +1 @@ +52;c;? \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/03-osc52-clip-clear-null b/test/fuzz-libghostty/corpus/osc-cmin/03-osc52-clip-clear-null new file mode 100644 index 00000000000..a358175f0bc --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/03-osc52-clip-clear-null @@ -0,0 +1 @@ +52;c; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/04-osc52-large-payload b/test/fuzz-libghostty/corpus/osc-cmin/04-osc52-large-payload new file mode 100644 index 00000000000..f364da4beb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/04-osc52-large-payload differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/05-osc52-invalid-b64 b/test/fuzz-libghostty/corpus/osc-cmin/05-osc52-invalid-b64 new file mode 100644 index 00000000000..843cfe69ce1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/05-osc52-invalid-b64 differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/06-osc66-text-sizing b/test/fuzz-libghostty/corpus/osc-cmin/06-osc66-text-sizing new file mode 100644 index 00000000000..85400b16ca3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/06-osc66-text-sizing differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/07-osc66-empty b/test/fuzz-libghostty/corpus/osc-cmin/07-osc66-empty new file mode 100644 index 00000000000..3a30c732946 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/07-osc66-empty @@ -0,0 +1 @@ +66; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/08-osc133-prompt-start b/test/fuzz-libghostty/corpus/osc-cmin/08-osc133-prompt-start new file mode 100644 index 00000000000..c8f5e2dac43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/08-osc133-prompt-start differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/09-osc133-cmd-start b/test/fuzz-libghostty/corpus/osc-cmin/09-osc133-cmd-start new file mode 100644 index 00000000000..aca6c3ce40e --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/09-osc133-cmd-start @@ -0,0 +1 @@ +133;C \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/10-osc133-cmd-end b/test/fuzz-libghostty/corpus/osc-cmin/10-osc133-cmd-end new file mode 100644 index 00000000000..cc9891f8996 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/10-osc133-cmd-end @@ -0,0 +1 @@ +133;D;0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/11-osc133-invalid b/test/fuzz-libghostty/corpus/osc-cmin/11-osc133-invalid new file mode 100644 index 00000000000..059a65a2621 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/11-osc133-invalid differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/12-osc3008-context b/test/fuzz-libghostty/corpus/osc-cmin/12-osc3008-context new file mode 100644 index 00000000000..1508b4625dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/12-osc3008-context differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/13-osc3008-empty b/test/fuzz-libghostty/corpus/osc-cmin/13-osc3008-empty new file mode 100644 index 00000000000..7bf81819665 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/13-osc3008-empty @@ -0,0 +1 @@ +3008; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/14-osc1337-file-inline b/test/fuzz-libghostty/corpus/osc-cmin/14-osc1337-file-inline new file mode 100644 index 00000000000..9e2da3740c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/14-osc1337-file-inline differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/15-osc1337-invalid b/test/fuzz-libghostty/corpus/osc-cmin/15-osc1337-invalid new file mode 100644 index 00000000000..5bbb9a4126a --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/15-osc1337-invalid @@ -0,0 +1 @@ +1337;badcmd \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/16-osc5522-clip b/test/fuzz-libghostty/corpus/osc-cmin/16-osc5522-clip new file mode 100644 index 00000000000..77fd6c24dfb Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/16-osc5522-clip differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/17-osc5522-empty b/test/fuzz-libghostty/corpus/osc-cmin/17-osc5522-empty new file mode 100644 index 00000000000..2132395fb13 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-cmin/17-osc5522-empty @@ -0,0 +1 @@ +5522; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-cmin/18-osc52-truncated b/test/fuzz-libghostty/corpus/osc-cmin/18-osc52-truncated new file mode 100644 index 00000000000..069210bfe48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/18-osc52-truncated differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/19-single-byte b/test/fuzz-libghostty/corpus/osc-cmin/19-single-byte new file mode 100644 index 00000000000..f76dd238ade Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/19-single-byte differ diff --git a/test/fuzz-libghostty/corpus/osc-cmin/20-invalid-osc-num b/test/fuzz-libghostty/corpus/osc-cmin/20-invalid-osc-num new file mode 100644 index 00000000000..54994a61d54 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-cmin/20-invalid-osc-num differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/01-osc52-clip-set-bel b/test/fuzz-libghostty/corpus/osc-initial/01-osc52-clip-set-bel new file mode 100644 index 00000000000..6dd0a8bffd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/01-osc52-clip-set-bel differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/02-osc52-clip-query-st b/test/fuzz-libghostty/corpus/osc-initial/02-osc52-clip-query-st new file mode 100644 index 00000000000..c030ffd1926 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/02-osc52-clip-query-st @@ -0,0 +1 @@ +52;c;? \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/03-osc52-clip-clear-null b/test/fuzz-libghostty/corpus/osc-initial/03-osc52-clip-clear-null new file mode 100644 index 00000000000..a358175f0bc --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/03-osc52-clip-clear-null @@ -0,0 +1 @@ +52;c; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/04-osc52-large-payload b/test/fuzz-libghostty/corpus/osc-initial/04-osc52-large-payload new file mode 100644 index 00000000000..f364da4beb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/04-osc52-large-payload differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/05-osc52-invalid-b64 b/test/fuzz-libghostty/corpus/osc-initial/05-osc52-invalid-b64 new file mode 100644 index 00000000000..843cfe69ce1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/05-osc52-invalid-b64 differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/06-osc66-text-sizing b/test/fuzz-libghostty/corpus/osc-initial/06-osc66-text-sizing new file mode 100644 index 00000000000..85400b16ca3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/06-osc66-text-sizing differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/07-osc66-empty b/test/fuzz-libghostty/corpus/osc-initial/07-osc66-empty new file mode 100644 index 00000000000..3a30c732946 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/07-osc66-empty @@ -0,0 +1 @@ +66; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/08-osc133-prompt-start b/test/fuzz-libghostty/corpus/osc-initial/08-osc133-prompt-start new file mode 100644 index 00000000000..c8f5e2dac43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/08-osc133-prompt-start differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/09-osc133-cmd-start b/test/fuzz-libghostty/corpus/osc-initial/09-osc133-cmd-start new file mode 100644 index 00000000000..aca6c3ce40e --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/09-osc133-cmd-start @@ -0,0 +1 @@ +133;C \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/10-osc133-cmd-end b/test/fuzz-libghostty/corpus/osc-initial/10-osc133-cmd-end new file mode 100644 index 00000000000..cc9891f8996 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/10-osc133-cmd-end @@ -0,0 +1 @@ +133;D;0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/11-osc133-invalid b/test/fuzz-libghostty/corpus/osc-initial/11-osc133-invalid new file mode 100644 index 00000000000..059a65a2621 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/11-osc133-invalid differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/12-osc3008-context b/test/fuzz-libghostty/corpus/osc-initial/12-osc3008-context new file mode 100644 index 00000000000..1508b4625dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/12-osc3008-context differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/13-osc3008-empty b/test/fuzz-libghostty/corpus/osc-initial/13-osc3008-empty new file mode 100644 index 00000000000..7bf81819665 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/13-osc3008-empty @@ -0,0 +1 @@ +3008; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/14-osc1337-file-inline b/test/fuzz-libghostty/corpus/osc-initial/14-osc1337-file-inline new file mode 100644 index 00000000000..9e2da3740c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/14-osc1337-file-inline differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/15-osc1337-invalid b/test/fuzz-libghostty/corpus/osc-initial/15-osc1337-invalid new file mode 100644 index 00000000000..5bbb9a4126a --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/15-osc1337-invalid @@ -0,0 +1 @@ +1337;badcmd \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/16-osc5522-clip b/test/fuzz-libghostty/corpus/osc-initial/16-osc5522-clip new file mode 100644 index 00000000000..77fd6c24dfb Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/16-osc5522-clip differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/17-osc5522-empty b/test/fuzz-libghostty/corpus/osc-initial/17-osc5522-empty new file mode 100644 index 00000000000..2132395fb13 --- /dev/null +++ b/test/fuzz-libghostty/corpus/osc-initial/17-osc5522-empty @@ -0,0 +1 @@ +5522; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/osc-initial/18-osc52-truncated b/test/fuzz-libghostty/corpus/osc-initial/18-osc52-truncated new file mode 100644 index 00000000000..069210bfe48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/18-osc52-truncated differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/19-single-byte b/test/fuzz-libghostty/corpus/osc-initial/19-single-byte new file mode 100644 index 00000000000..f76dd238ade Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/19-single-byte differ diff --git a/test/fuzz-libghostty/corpus/osc-initial/20-invalid-osc-num b/test/fuzz-libghostty/corpus/osc-initial/20-invalid-osc-num new file mode 100644 index 00000000000..54994a61d54 Binary files /dev/null and b/test/fuzz-libghostty/corpus/osc-initial/20-invalid-osc-num differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000000,time_0,execs_0,orig_id_000019,time_0,execs_0,orig_20-csi-intermediate b/test/fuzz-libghostty/corpus/parser-cmin/id_000000,time_0,execs_0,orig_id_000019,time_0,execs_0,orig_20-csi-intermediate new file mode 100644 index 00000000000..1d287620e19 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000000,time_0,execs_0,orig_id_000019,time_0,execs_0,orig_20-csi-intermediate @@ -0,0 +1 @@ +[61"p \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000001,time_0,execs_0,orig_id_000041,time_0,execs_0,orig_42-incomplete-esc b/test/fuzz-libghostty/corpus/parser-cmin/id_000001,time_0,execs_0,orig_id_000041,time_0,execs_0,orig_42-incomplete-esc new file mode 100644 index 00000000000..7b71c6e6797 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000001,time_0,execs_0,orig_id_000041,time_0,execs_0,orig_42-incomplete-esc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000002,time_0,execs_0,orig_id_000046,time_0,execs_0,orig_48-csi-da2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000002,time_0,execs_0,orig_id_000046,time_0,execs_0,orig_48-csi-da2 new file mode 100644 index 00000000000..d6f954e9e57 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000002,time_0,execs_0,orig_id_000046,time_0,execs_0,orig_48-csi-da2 @@ -0,0 +1 @@ +[>c \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000003,time_0,execs_0,orig_id_000052,src_000003,time_16,execs_687,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000003,time_0,execs_0,orig_id_000052,src_000003,time_16,execs_687,op_havoc,rep_4 new file mode 100644 index 00000000000..b7c6c90639d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000003,time_0,execs_0,orig_id_000052,src_000003,time_16,execs_687,op_havoc,rep_4 @@ -0,0 +1 @@ +@/ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000006,time_0,execs_0,orig_id_000076,src_000003,time_32,execs_1079,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000006,time_0,execs_0,orig_id_000076,src_000003,time_32,execs_1079,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..fa1661a4840 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000006,time_0,execs_0,orig_id_000076,src_000003,time_32,execs_1079,op_havoc,rep_15,+cov @@ -0,0 +1 @@ +😀🎉dow ¤¤¤¢¤VVVVUV[4:0{ÿ¤ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000008,time_0,execs_0,orig_id_000088,src_000003,time_41,execs_1431,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/parser-cmin/id_000008,time_0,execs_0,orig_id_000088,src_000003,time_41,execs_1431,op_havoc,rep_14 new file mode 100644 index 00000000000..9a3b57005b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000008,time_0,execs_0,orig_id_000088,src_000003,time_41,execs_1431,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000009,time_0,execs_0,orig_id_000142,src_000003,time_117,execs_4908,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000009,time_0,execs_0,orig_id_000142,src_000003,time_117,execs_4908,op_havoc,rep_10 new file mode 100644 index 00000000000..1b6d9a143f9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000009,time_0,execs_0,orig_id_000142,src_000003,time_117,execs_4908,op_havoc,rep_10 @@ -0,0 +1 @@ +do¤¢¤VVVVUV[4:{ÿ¤>0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000011,time_0,execs_0,orig_id_000230,src_000003,time_438,execs_23832,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000011,time_0,execs_0,orig_id_000230,src_000003,time_438,execs_23832,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..3a659136553 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000011,time_0,execs_0,orig_id_000230,src_000003,time_438,execs_23832,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000012,time_0,execs_0,orig_id_000267,src_000003,time_583,execs_33560,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/parser-cmin/id_000012,time_0,execs_0,orig_id_000267,src_000003,time_583,execs_33560,op_havoc,rep_14 new file mode 100644 index 00000000000..e164ea38e5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000012,time_0,execs_0,orig_id_000267,src_000003,time_583,execs_33560,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000019,time_0,execs_0,orig_id_000397,src_000251,time_1282,execs_83907,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000019,time_0,execs_0,orig_id_000397,src_000251,time_1282,execs_83907,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..06c34bc3cd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000019,time_0,execs_0,orig_id_000397,src_000251,time_1282,execs_83907,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000021,time_0,execs_0,orig_id_000402,src_000251,time_1349,execs_88810,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000021,time_0,execs_0,orig_id_000402,src_000251,time_1349,execs_88810,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..1ec560614d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000021,time_0,execs_0,orig_id_000402,src_000251,time_1349,execs_88810,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000025,time_0,execs_0,orig_id_000441,src_000386,time_1636,execs_108369,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/parser-cmin/id_000025,time_0,execs_0,orig_id_000441,src_000386,time_1636,execs_108369,op_havoc,rep_15 new file mode 100644 index 00000000000..ea223985c00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000025,time_0,execs_0,orig_id_000441,src_000386,time_1636,execs_108369,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000028,time_0,execs_0,orig_id_000467,src_000386,time_1733,execs_115697,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000028,time_0,execs_0,orig_id_000467,src_000386,time_1733,execs_115697,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..27c92c5c081 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000028,time_0,execs_0,orig_id_000467,src_000386,time_1733,execs_115697,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000029,time_0,execs_0,orig_id_000475,src_000386,time_1779,execs_119324,op_havoc,rep_11,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000029,time_0,execs_0,orig_id_000475,src_000386,time_1779,execs_119324,op_havoc,rep_11,+cov new file mode 100644 index 00000000000..e420671a5ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000029,time_0,execs_0,orig_id_000475,src_000386,time_1779,execs_119324,op_havoc,rep_11,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000030,time_0,execs_0,orig_id_000483,src_000466,time_1838,execs_121940,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000030,time_0,execs_0,orig_id_000483,src_000466,time_1838,execs_121940,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..a156cb8f8a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000030,time_0,execs_0,orig_id_000483,src_000466,time_1838,execs_121940,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000032,time_0,execs_0,orig_id_000486,src_000466,time_1847,execs_122604,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000032,time_0,execs_0,orig_id_000486,src_000466,time_1847,execs_122604,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..565401a8e0a Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000032,time_0,execs_0,orig_id_000486,src_000466,time_1847,execs_122604,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000033,time_0,execs_0,orig_id_000490,src_000466,time_1870,execs_124365,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000033,time_0,execs_0,orig_id_000490,src_000466,time_1870,execs_124365,op_havoc,rep_3 new file mode 100644 index 00000000000..3e7811b6b61 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000033,time_0,execs_0,orig_id_000490,src_000466,time_1870,execs_124365,op_havoc,rep_3 @@ -0,0 +1 @@ +ÿ]93kAÚ]N6Úžžžžžžt]15Q]118]116@]119;Ÿ]++++q;3;15Q]118]116f5N@]119;ŸW5;6;ÿ( \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000034,time_0,execs_0,orig_id_000519,src_000437,time_2125,execs_140688,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000034,time_0,execs_0,orig_id_000519,src_000437,time_2125,execs_140688,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..e038759d4ef --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000034,time_0,execs_0,orig_id_000519,src_000437,time_2125,execs_140688,op_havoc,rep_3,+cov @@ -0,0 +1 @@ +í]äi5N@]112;p];pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000039,time_0,execs_0,orig_id_000550,src_000494,time_2350,execs_155247,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000039,time_0,execs_0,orig_id_000550,src_000494,time_2350,execs_155247,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..7da04340fb8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000039,time_0,execs_0,orig_id_000550,src_000494,time_2350,execs_155247,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000042,time_0,execs_0,orig_id_000573,src_000494,time_2487,execs_164820,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000042,time_0,execs_0,orig_id_000573,src_000494,time_2487,execs_164820,op_havoc,rep_13 new file mode 100644 index 00000000000..2bb32623bb1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000042,time_0,execs_0,orig_id_000573,src_000494,time_2487,execs_164820,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000043,time_0,execs_0,orig_id_000595,src_000494,time_2674,execs_174563,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000043,time_0,execs_0,orig_id_000595,src_000494,time_2674,execs_174563,op_havoc,rep_13 new file mode 100644 index 00000000000..24d534161e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000043,time_0,execs_0,orig_id_000595,src_000494,time_2674,execs_174563,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000044,time_0,execs_0,orig_id_000597,src_000494,time_2720,execs_177479,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000044,time_0,execs_0,orig_id_000597,src_000494,time_2720,execs_177479,op_havoc,rep_7 new file mode 100644 index 00000000000..e94589c23e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000044,time_0,execs_0,orig_id_000597,src_000494,time_2720,execs_177479,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000048,time_0,execs_0,orig_id_000618,src_000494,time_2975,execs_194733,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000048,time_0,execs_0,orig_id_000618,src_000494,time_2975,execs_194733,op_havoc,rep_10 new file mode 100644 index 00000000000..28e59258a4f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000048,time_0,execs_0,orig_id_000618,src_000494,time_2975,execs_194733,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000051,time_0,execs_0,orig_id_000635,src_000283,time_3226,execs_209131,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000051,time_0,execs_0,orig_id_000635,src_000283,time_3226,execs_209131,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..d305b726bc9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000051,time_0,execs_0,orig_id_000635,src_000283,time_3226,execs_209131,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000052,time_0,execs_0,orig_id_000637,src_000283,time_3242,execs_210298,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/parser-cmin/id_000052,time_0,execs_0,orig_id_000637,src_000283,time_3242,execs_210298,op_havoc,rep_16 new file mode 100644 index 00000000000..fad19538d0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000052,time_0,execs_0,orig_id_000637,src_000283,time_3242,execs_210298,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000053,time_0,execs_0,orig_id_000641,src_000283,time_3279,execs_212708,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/parser-cmin/id_000053,time_0,execs_0,orig_id_000641,src_000283,time_3279,execs_212708,op_havoc,rep_16 new file mode 100644 index 00000000000..a3086836cc4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000053,time_0,execs_0,orig_id_000641,src_000283,time_3279,execs_212708,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000056,time_0,execs_0,orig_id_000654,src_000467,time_3424,execs_221173,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000056,time_0,execs_0,orig_id_000654,src_000467,time_3424,execs_221173,op_havoc,rep_2 new file mode 100644 index 00000000000..d11fe7ce54d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000056,time_0,execs_0,orig_id_000654,src_000467,time_3424,execs_221173,op_havoc,rep_2 @@ -0,0 +1 @@ +ÿ]9[]114;p]9;;;plm5@l10'e]1;i[]114;p]9;;;plm5@ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000058,time_0,execs_0,orig_id_000663,src_000349,time_3514,execs_225827,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000058,time_0,execs_0,orig_id_000663,src_000349,time_3514,execs_225827,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..af9cff5eab0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000058,time_0,execs_0,orig_id_000663,src_000349,time_3514,execs_225827,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000060,time_0,execs_0,orig_id_000668,src_000349,time_3620,execs_233166,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000060,time_0,execs_0,orig_id_000668,src_000349,time_3620,execs_233166,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..be53c292e4a --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000060,time_0,execs_0,orig_id_000668,src_000349,time_3620,execs_233166,op_havoc,rep_4,+cov @@ -0,0 +1 @@ + ÿÿÿÿÿÿñ]9>ìý]8]9;1;44444444444444444444444444444À@N@llttä;V[4]1p4:3m^ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000061,time_0,execs_0,orig_id_000670,src_000304,time_3648,execs_235138,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/parser-cmin/id_000061,time_0,execs_0,orig_id_000670,src_000304,time_3648,execs_235138,op_havoc,rep_11 new file mode 100644 index 00000000000..6adfcf79bc0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000061,time_0,execs_0,orig_id_000670,src_000304,time_3648,execs_235138,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000064,time_0,execs_0,orig_id_000706,src_000522,time_3970,execs_252869,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000064,time_0,execs_0,orig_id_000706,src_000522,time_3970,execs_252869,op_havoc,rep_7 new file mode 100644 index 00000000000..b941decdcd3 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000064,time_0,execs_0,orig_id_000706,src_000522,time_3970,execs_252869,op_havoc,rep_7 @@ -0,0 +1 @@ +;6]66;;]à€ëÚ]1331e'í;6]66;;]à€ëÚ]1331eÁ66¶Äjf;oÿÿ4];6]66ÁÁ66½Äjf:pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000067,time_0,execs_0,orig_id_000728,src_000332,time_4454,execs_282164,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/parser-cmin/id_000067,time_0,execs_0,orig_id_000728,src_000332,time_4454,execs_282164,op_havoc,rep_12 new file mode 100644 index 00000000000..9fca125dbc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000067,time_0,execs_0,orig_id_000728,src_000332,time_4454,execs_282164,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000068,time_0,execs_0,orig_id_000729,src_000332,time_4456,execs_282289,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/parser-cmin/id_000068,time_0,execs_0,orig_id_000729,src_000332,time_4456,execs_282289,op_havoc,rep_11 new file mode 100644 index 00000000000..cfc61cff516 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000068,time_0,execs_0,orig_id_000729,src_000332,time_4456,execs_282289,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000069,time_0,execs_0,orig_id_000732,src_000343,time_4466,execs_282965,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000069,time_0,execs_0,orig_id_000732,src_000343,time_4466,execs_282965,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..917caa61a39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000069,time_0,execs_0,orig_id_000732,src_000343,time_4466,execs_282965,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000070,time_0,execs_0,orig_id_000735,src_000343,time_4480,execs_283970,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/parser-cmin/id_000070,time_0,execs_0,orig_id_000735,src_000343,time_4480,execs_283970,op_havoc,rep_9 new file mode 100644 index 00000000000..d38048004a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000070,time_0,execs_0,orig_id_000735,src_000343,time_4480,execs_283970,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000072,time_0,execs_0,orig_id_000740,src_000343,time_4541,execs_286701,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000072,time_0,execs_0,orig_id_000740,src_000343,time_4541,execs_286701,op_havoc,rep_10 new file mode 100644 index 00000000000..d4050a30d9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000072,time_0,execs_0,orig_id_000740,src_000343,time_4541,execs_286701,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000073,time_0,execs_0,orig_id_000748,src_000343,time_4637,execs_290209,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000073,time_0,execs_0,orig_id_000748,src_000343,time_4637,execs_290209,op_havoc,rep_7 new file mode 100644 index 00000000000..649ba2590c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000073,time_0,execs_0,orig_id_000748,src_000343,time_4637,execs_290209,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000076,time_0,execs_0,orig_id_000755,src_000343,time_4700,execs_294596,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000076,time_0,execs_0,orig_id_000755,src_000343,time_4700,execs_294596,op_havoc,rep_13 new file mode 100644 index 00000000000..9827c9e8b4f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000076,time_0,execs_0,orig_id_000755,src_000343,time_4700,execs_294596,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000079,time_0,execs_0,orig_id_000759,src_000528,time_4746,execs_296283,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000079,time_0,execs_0,orig_id_000759,src_000528,time_4746,execs_296283,op_havoc,rep_10 new file mode 100644 index 00000000000..1806a7fdab7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000079,time_0,execs_0,orig_id_000759,src_000528,time_4746,execs_296283,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000080,time_0,execs_0,orig_id_000761,src_000528,time_4756,execs_297052,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/parser-cmin/id_000080,time_0,execs_0,orig_id_000761,src_000528,time_4756,execs_297052,op_havoc,rep_9 new file mode 100644 index 00000000000..3a3d57a541c --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000080,time_0,execs_0,orig_id_000761,src_000528,time_4756,execs_297052,op_havoc,rep_9 @@ -0,0 +1 @@ +í]9;€]6666¶Äifí]9;7i]9;$]6666¶Ä]6666¶Äifí]9;7üifí]9;7üÿÿf;pÿ$]6666¶ÿ5ó]( \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000084,time_0,execs_0,orig_id_000773,src_000528,time_4876,execs_305285,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/parser-cmin/id_000084,time_0,execs_0,orig_id_000773,src_000528,time_4876,execs_305285,op_havoc,rep_15 new file mode 100644 index 00000000000..e638d4f90e6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000084,time_0,execs_0,orig_id_000773,src_000528,time_4876,execs_305285,op_havoc,rep_15 @@ -0,0 +1 @@ +í]9:8]ÄiN18]]9:8]ÄiN18]111;e]1;i]8;i[N1]111;e]12ï8]1115€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000085,time_0,execs_0,orig_id_000778,src_000760,time_4953,execs_310152,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000085,time_0,execs_0,orig_id_000778,src_000760,time_4953,execs_310152,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..c8735984e1b --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000085,time_0,execs_0,orig_id_000778,src_000760,time_4953,execs_310152,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +í]9;@]6Ní]9;:]6N]9;4;1;8; ;2;;;]6Ní]9 166¶ÄÄifí]9;8/ÿÿif;pÿÿ4ÿ;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000087,time_0,execs_0,orig_id_000784,src_000760,time_4972,execs_311541,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000087,time_0,execs_0,orig_id_000784,src_000760,time_4972,execs_311541,op_havoc,rep_2 new file mode 100644 index 00000000000..d4a99f82733 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000087,time_0,execs_0,orig_id_000784,src_000760,time_4972,execs_311541,op_havoc,rep_2 @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;2;166¶ÄÄifí]9;/ÿÿif;pÿÿ4ÿ;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000088,time_0,execs_0,orig_id_000786,src_000760,time_4984,execs_312452,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000088,time_0,execs_0,orig_id_000786,src_000760,time_4984,execs_312452,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..083510e977d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000088,time_0,execs_0,orig_id_000786,src_000760,time_4984,execs_312452,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;0;8; ;2;;;]6Ní]9 166¶ÄÄifí]998/ÿÿif;pÿÿ4ÿ;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000089,time_0,execs_0,orig_id_000790,src_000760,time_5115,execs_321534,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000089,time_0,execs_0,orig_id_000790,src_000760,time_5115,execs_321534,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..e19b8608890 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000089,time_0,execs_0,orig_id_000790,src_000760,time_5115,execs_321534,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +í]9;11]66;;];6]66;:]6Ní]9;í]9 166¶ÄÄifí]9;8/ÿÿNí]9 166¶ÄÄifí]9;8/pÿÿ4ÿ;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000092,time_0,execs_0,orig_id_000803,src_000663,time_5755,execs_363337,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000092,time_0,execs_0,orig_id_000803,src_000663,time_5755,execs_363337,op_havoc,rep_4 new file mode 100644 index 00000000000..669d6bd71a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000092,time_0,execs_0,orig_id_000803,src_000663,time_5755,execs_363337,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000093,time_0,execs_0,orig_id_000806,src_000786,time_5870,execs_371238,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000093,time_0,execs_0,orig_id_000806,src_000786,time_5870,execs_371238,op_havoc,rep_1 new file mode 100644 index 00000000000..7e941cebd29 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000093,time_0,execs_0,orig_id_000806,src_000786,time_5870,execs_371238,op_havoc,rep_1 @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;0;86N]9;4;0;8; ;2;;;]6;]6Ní]9 166¶ÄÄifí]998/ÿÿif;pÿÿ4ÿ;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000094,time_0,execs_0,orig_id_000807,src_000486,time_5878,execs_371847,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000094,time_0,execs_0,orig_id_000807,src_000486,time_5878,execs_371847,op_havoc,rep_2 new file mode 100644 index 00000000000..e000bab5341 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000094,time_0,execs_0,orig_id_000807,src_000486,time_5878,execs_371847,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000096,time_0,execs_0,orig_id_000817,src_000505,time_5967,execs_378028,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/parser-cmin/id_000096,time_0,execs_0,orig_id_000817,src_000505,time_5967,execs_378028,op_havoc,rep_14 new file mode 100644 index 00000000000..181dafc4255 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000096,time_0,execs_0,orig_id_000817,src_000505,time_5967,execs_378028,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000098,time_0,execs_0,orig_id_000825,src_000674,time_6143,execs_388763,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000098,time_0,execs_0,orig_id_000825,src_000674,time_6143,execs_388763,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..b94498ea838 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000098,time_0,execs_0,orig_id_000825,src_000674,time_6143,execs_388763,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +í;6]66;;U1e'ÁºÁÁ66¶Äjf;pÿÿ4];6]66;;]1e'ñº¿Á66¶Äjf;pÿÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000100,time_0,execs_0,orig_id_000832,src_000479,time_6298,execs_397416,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000100,time_0,execs_0,orig_id_000832,src_000479,time_6298,execs_397416,op_havoc,rep_10 new file mode 100644 index 00000000000..0ab4cf293a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000100,time_0,execs_0,orig_id_000832,src_000479,time_6298,execs_397416,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000101,time_0,execs_0,orig_id_000833,src_000483,time_6311,execs_398331,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000101,time_0,execs_0,orig_id_000833,src_000483,time_6311,execs_398331,op_havoc,rep_4 new file mode 100644 index 00000000000..018ad794128 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000101,time_0,execs_0,orig_id_000833,src_000483,time_6311,execs_398331,op_havoc,rep_4 @@ -0,0 +1 @@ +ÿpÿ]118]115;]118]115;]118]115;6;ÿ'í \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000102,time_0,execs_0,orig_id_000834,src_000825,time_6320,execs_399009,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000102,time_0,execs_0,orig_id_000834,src_000825,time_6320,execs_399009,op_havoc,rep_1 new file mode 100644 index 00000000000..deb6891d210 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000102,time_0,execs_0,orig_id_000834,src_000825,time_6320,execs_399009,op_havoc,rep_1 @@ -0,0 +1 @@ +í;6]66;;U1Á;pÿÿ4];6]66;;]1e'ñº¿Á66Á66¶Äjf;pÿÿ4];6]66;;]1e'ñº¶Äjf;p4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000104,time_0,execs_0,orig_id_000838,src_000489,time_6361,execs_402084,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000104,time_0,execs_0,orig_id_000838,src_000489,time_6361,execs_402084,op_havoc,rep_5 new file mode 100644 index 00000000000..89085cdf62c --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000104,time_0,execs_0,orig_id_000838,src_000489,time_6361,execs_402084,op_havoc,rep_5 @@ -0,0 +1 @@ +ÿ;Ÿ]++++q;3]110;20::9:::17E]11Ú]N6Ú]15Q]118]110;:::17E]++q;3]110;20:;W5;6; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000106,time_0,execs_0,orig_id_000843,src_000787,time_6409,execs_405622,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000106,time_0,execs_0,orig_id_000843,src_000787,time_6409,execs_405622,op_havoc,rep_4 new file mode 100644 index 00000000000..c68c51d0f53 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000106,time_0,execs_0,orig_id_000843,src_000787,time_6409,execs_405622,op_havoc,rep_4 @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;2;_________9;:]6Ní]]9;9;N]9;4;2;_____ÄÄifí]9;:]ÿÿif;pÿÿ4ÿ;pÿÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000107,time_0,execs_0,orig_id_000849,src_000598,time_6489,execs_409093,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000107,time_0,execs_0,orig_id_000849,src_000598,time_6489,execs_409093,op_havoc,rep_2 new file mode 100644 index 00000000000..29b4ed513fc Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000107,time_0,execs_0,orig_id_000849,src_000598,time_6489,execs_409093,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000108,time_0,execs_0,orig_id_000850,src_000598,time_6493,execs_409277,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000108,time_0,execs_0,orig_id_000850,src_000598,time_6493,execs_409277,op_havoc,rep_2 new file mode 100644 index 00000000000..774d593af92 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000108,time_0,execs_0,orig_id_000850,src_000598,time_6493,execs_409277,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000110,time_0,execs_0,orig_id_000856,src_000801,time_6563,execs_412611,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000110,time_0,execs_0,orig_id_000856,src_000801,time_6563,execs_412611,op_havoc,rep_6 new file mode 100644 index 00000000000..e13dc5e7e1f --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000110,time_0,execs_0,orig_id_000856,src_000801,time_6563,execs_412611,op_havoc,rep_6 @@ -0,0 +1 @@ +ÿÿ¼]ÿñ]9;10;33ÿ;316]ÿñ]9;10;3ÿÿ1+*8¼¼¼¼¼¼]ÿñ]9;10;33ÿ;3V[4]1p4:3’ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000113,time_0,execs_0,orig_id_000871,src_000668,time_6850,execs_431000,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000113,time_0,execs_0,orig_id_000871,src_000668,time_6850,execs_431000,op_havoc,rep_8 new file mode 100644 index 00000000000..3ae4e26fb2f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000113,time_0,execs_0,orig_id_000871,src_000668,time_6850,execs_431000,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000114,time_0,execs_0,orig_id_000890,src_000713,time_7213,execs_449216,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000114,time_0,execs_0,orig_id_000890,src_000713,time_7213,execs_449216,op_havoc,rep_5 new file mode 100644 index 00000000000..cd3d1e861b7 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000114,time_0,execs_0,orig_id_000890,src_000713,time_7213,execs_449216,op_havoc,rep_5 @@ -0,0 +1 @@ +í;6]6618]111;e]1;i8]111;e]1;i[W]1¶]=18]111;ef;pÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000115,time_0,execs_0,orig_id_000893,src_000713,time_7731,execs_478635,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000115,time_0,execs_0,orig_id_000893,src_000713,time_7731,execs_478635,op_havoc,rep_8 new file mode 100644 index 00000000000..456c44cfb60 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000115,time_0,execs_0,orig_id_000893,src_000713,time_7731,execs_478635,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000116,time_0,execs_0,orig_id_000895,src_000713,time_7840,execs_484337,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000116,time_0,execs_0,orig_id_000895,src_000713,time_7840,execs_484337,op_havoc,rep_6 new file mode 100644 index 00000000000..f1cdc2de01c Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000116,time_0,execs_0,orig_id_000895,src_000713,time_7840,execs_484337,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000118,time_0,execs_0,orig_id_000904,src_000776,time_8152,execs_496424,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000118,time_0,execs_0,orig_id_000904,src_000776,time_8152,execs_496424,op_havoc,rep_4 new file mode 100644 index 00000000000..586f02c07dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000118,time_0,execs_0,orig_id_000904,src_000776,time_8152,execs_496424,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000120,time_0,execs_0,orig_id_000924,src_000852,time_8407,execs_506437,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000120,time_0,execs_0,orig_id_000924,src_000852,time_8407,execs_506437,op_havoc,rep_4 new file mode 100644 index 00000000000..75d1b9152ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000120,time_0,execs_0,orig_id_000924,src_000852,time_8407,execs_506437,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000121,time_0,execs_0,orig_id_000932,src_000858,time_8661,execs_518309,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000121,time_0,execs_0,orig_id_000932,src_000858,time_8661,execs_518309,op_havoc,rep_2 new file mode 100644 index 00000000000..7e390fdc3d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000121,time_0,execs_0,orig_id_000932,src_000858,time_8661,execs_518309,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000122,time_0,execs_0,orig_id_000938,src_000918,time_8987,execs_523673,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000122,time_0,execs_0,orig_id_000938,src_000918,time_8987,execs_523673,op_havoc,rep_3 new file mode 100644 index 00000000000..eade4940d66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000122,time_0,execs_0,orig_id_000938,src_000918,time_8987,execs_523673,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000123,time_0,execs_0,orig_id_000940,src_000935,time_9023,execs_524829,op_quick,pos_55,val_+13,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000123,time_0,execs_0,orig_id_000940,src_000935,time_9023,execs_524829,op_quick,pos_55,val_+13,+cov new file mode 100644 index 00000000000..6a1b25671db Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000123,time_0,execs_0,orig_id_000940,src_000935,time_9023,execs_524829,op_quick,pos_55,val_+13,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000124,time_0,execs_0,orig_id_000948,src_000750,time_9248,execs_536041,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000124,time_0,execs_0,orig_id_000948,src_000750,time_9248,execs_536041,op_havoc,rep_4 new file mode 100644 index 00000000000..be638988361 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000124,time_0,execs_0,orig_id_000948,src_000750,time_9248,execs_536041,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000127,time_0,execs_0,orig_id_000958,src_000025,time_9462,execs_548368,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000127,time_0,execs_0,orig_id_000958,src_000025,time_9462,execs_548368,op_havoc,rep_3 new file mode 100644 index 00000000000..fb606e1f518 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000127,time_0,execs_0,orig_id_000958,src_000025,time_9462,execs_548368,op_havoc,rep_3 @@ -0,0 +1 @@ +]4;1b:ff/00]4;rgb:ff/00]4;1;rgb:gf/00/0/00 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000128,time_0,execs_0,orig_id_000963,src_000786,time_9564,execs_554503,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000128,time_0,execs_0,orig_id_000963,src_000786,time_9564,execs_554503,op_havoc,rep_3 new file mode 100644 index 00000000000..b14510696d0 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000128,time_0,execs_0,orig_id_000963,src_000786,time_9564,execs_554503,op_havoc,rep_3 @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;0;8;:]6øN]9;4;0;8; ;2;;;]6N]6N]9;4;0;8; ;2;;;]6Nÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000130,time_0,execs_0,orig_id_000968,src_000745,time_9818,execs_564242,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000130,time_0,execs_0,orig_id_000968,src_000745,time_9818,execs_564242,op_havoc,rep_1 new file mode 100644 index 00000000000..01b045a7a7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000130,time_0,execs_0,orig_id_000968,src_000745,time_9818,execs_564242,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000131,time_0,execs_0,orig_id_000973,src_000644,time_9946,execs_568981,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000131,time_0,execs_0,orig_id_000973,src_000644,time_9946,execs_568981,op_havoc,rep_4 new file mode 100644 index 00000000000..a6373dbd321 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000131,time_0,execs_0,orig_id_000973,src_000644,time_9946,execs_568981,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000134,time_0,execs_0,orig_id_000997,src_000993,time_10314,execs_588057,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000134,time_0,execs_0,orig_id_000997,src_000993,time_10314,execs_588057,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..47c054b69e9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000134,time_0,execs_0,orig_id_000997,src_000993,time_10314,execs_588057,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +ÿ]9Ap]777;1lÚ^3€ëÚ]1337;]119#############;Ÿ]Ú]N6Ú]15Q]jp]777;1J]119;3;p]777;1]]119;Ÿ]ÚWF;6ì;pL]7]9lÚ^3€ëÚ]1337;ÿ( \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000135,time_0,execs_0,orig_id_001011,src_000996,time_10644,execs_602415,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000135,time_0,execs_0,orig_id_001011,src_000996,time_10644,execs_602415,op_havoc,rep_13 new file mode 100644 index 00000000000..09282d4fb14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000135,time_0,execs_0,orig_id_001011,src_000996,time_10644,execs_602415,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000136,time_0,execs_0,orig_id_001018,src_000999,time_10877,execs_614488,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000136,time_0,execs_0,orig_id_001018,src_000999,time_10877,execs_614488,op_havoc,rep_2 new file mode 100644 index 00000000000..efa8be29972 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000136,time_0,execs_0,orig_id_001018,src_000999,time_10877,execs_614488,op_havoc,rep_2 @@ -0,0 +1 @@ +ÿ]3kA3;pp]777;1]]119;Ÿ]444444444444444444444Ú]N6Ú]15Q]jp]777;1J]119;3;[3;€ëÚ]1337;SN@]Ÿ]+++pp]777;1]]119;ÚWF;6ì;pL]7]9lÚ^3€ëÚ]1337;SN@]Ÿ]++++q&3;ÿ( \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000137,time_0,execs_0,orig_id_001021,src_000513,time_10999,execs_620766,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000137,time_0,execs_0,orig_id_001021,src_000513,time_10999,execs_620766,op_havoc,rep_4 new file mode 100644 index 00000000000..3d41012f4b9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000137,time_0,execs_0,orig_id_001021,src_000513,time_10999,execs_620766,op_havoc,rep_4 @@ -0,0 +1 @@ +í4U9]4p]409]4p]96¶Äi09]19]]4]14;09]4p];Äi09]19]4]14;09]4p];Äi09]19]4]14;09]4p];09]409]4p]9;0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000138,time_0,execs_0,orig_id_001022,src_000747,time_11071,execs_622447,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/parser-cmin/id_000138,time_0,execs_0,orig_id_001022,src_000747,time_11071,execs_622447,op_havoc,rep_11 new file mode 100644 index 00000000000..577e2ef4eb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000138,time_0,execs_0,orig_id_001022,src_000747,time_11071,execs_622447,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000139,time_0,execs_0,orig_id_001030,src_000935,time_11350,execs_638785,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000139,time_0,execs_0,orig_id_001030,src_000935,time_11350,execs_638785,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..e71f5d102d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000139,time_0,execs_0,orig_id_001030,src_000935,time_11350,execs_638785,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000140,time_0,execs_0,orig_id_001034,src_000935,time_11461,execs_643845,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000140,time_0,execs_0,orig_id_001034,src_000935,time_11461,execs_643845,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..08b84f228e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000140,time_0,execs_0,orig_id_001034,src_000935,time_11461,execs_643845,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000141,time_0,execs_0,orig_id_001035,src_000935,time_11564,execs_649718,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000141,time_0,execs_0,orig_id_001035,src_000935,time_11564,execs_649718,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..b5f2838a78f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000141,time_0,execs_0,orig_id_001035,src_000935,time_11564,execs_649718,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000142,time_0,execs_0,orig_id_001037,src_000935,time_11722,execs_656296,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000142,time_0,execs_0,orig_id_001037,src_000935,time_11722,execs_656296,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..b357ff1dc58 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000142,time_0,execs_0,orig_id_001037,src_000935,time_11722,execs_656296,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000144,time_0,execs_0,orig_id_001040,src_000935,time_11948,execs_668213,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000144,time_0,execs_0,orig_id_001040,src_000935,time_11948,execs_668213,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..918180284ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000144,time_0,execs_0,orig_id_001040,src_000935,time_11948,execs_668213,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000145,time_0,execs_0,orig_id_001041,src_001029,time_12062,execs_674669,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000145,time_0,execs_0,orig_id_001041,src_001029,time_12062,execs_674669,op_havoc,rep_6 new file mode 100644 index 00000000000..87b5efa37ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000145,time_0,execs_0,orig_id_001041,src_001029,time_12062,execs_674669,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000148,time_0,execs_0,orig_id_001046,src_001035,time_12189,execs_681786,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000148,time_0,execs_0,orig_id_001046,src_001035,time_12189,execs_681786,op_havoc,rep_6 new file mode 100644 index 00000000000..eebec876a24 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000148,time_0,execs_0,orig_id_001046,src_001035,time_12189,execs_681786,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000149,time_0,execs_0,orig_id_001051,src_001035,time_12365,execs_691040,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000149,time_0,execs_0,orig_id_001051,src_001035,time_12365,execs_691040,op_havoc,rep_2 new file mode 100644 index 00000000000..88df0833ce6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000149,time_0,execs_0,orig_id_001051,src_001035,time_12365,execs_691040,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000150,time_0,execs_0,orig_id_001064,src_001047,time_13081,execs_732679,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000150,time_0,execs_0,orig_id_001064,src_001047,time_13081,execs_732679,op_havoc,rep_2 new file mode 100644 index 00000000000..d6b72e5ed6f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000150,time_0,execs_0,orig_id_001064,src_001047,time_13081,execs_732679,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000152,time_0,execs_0,orig_id_001066,src_001038,time_13112,execs_734584,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/parser-cmin/id_000152,time_0,execs_0,orig_id_001066,src_001038,time_13112,execs_734584,op_havoc,rep_12 new file mode 100644 index 00000000000..544f4f90ff5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000152,time_0,execs_0,orig_id_001066,src_001038,time_13112,execs_734584,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000153,time_0,execs_0,orig_id_001073,src_001039,time_13271,execs_743974,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000153,time_0,execs_0,orig_id_001073,src_001039,time_13271,execs_743974,op_havoc,rep_3 new file mode 100644 index 00000000000..9e55608ff35 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000153,time_0,execs_0,orig_id_001073,src_001039,time_13271,execs_743974,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000154,time_0,execs_0,orig_id_001075,src_001039,time_13273,execs_744091,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000154,time_0,execs_0,orig_id_001075,src_001039,time_13273,execs_744091,op_havoc,rep_3 new file mode 100644 index 00000000000..d9affa8e0c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000154,time_0,execs_0,orig_id_001075,src_001039,time_13273,execs_744091,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000155,time_0,execs_0,orig_id_001077,src_001039,time_13281,execs_744619,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000155,time_0,execs_0,orig_id_001077,src_001039,time_13281,execs_744619,op_havoc,rep_5 new file mode 100644 index 00000000000..667caa678e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000155,time_0,execs_0,orig_id_001077,src_001039,time_13281,execs_744619,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000156,time_0,execs_0,orig_id_001079,src_001039,time_13297,execs_745612,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000156,time_0,execs_0,orig_id_001079,src_001039,time_13297,execs_745612,op_havoc,rep_10 new file mode 100644 index 00000000000..fb8f9d7f912 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000156,time_0,execs_0,orig_id_001079,src_001039,time_13297,execs_745612,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000157,time_0,execs_0,orig_id_001085,src_001039,time_13687,execs_768227,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/parser-cmin/id_000157,time_0,execs_0,orig_id_001085,src_001039,time_13687,execs_768227,op_havoc,rep_9 new file mode 100644 index 00000000000..8109e8e0869 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000157,time_0,execs_0,orig_id_001085,src_001039,time_13687,execs_768227,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000160,time_0,execs_0,orig_id_001089,src_001039,time_13953,execs_780880,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000160,time_0,execs_0,orig_id_001089,src_001039,time_13953,execs_780880,op_havoc,rep_8 new file mode 100644 index 00000000000..3e35dcf2eff Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000160,time_0,execs_0,orig_id_001089,src_001039,time_13953,execs_780880,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000161,time_0,execs_0,orig_id_001090,src_001039,time_13958,execs_781166,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000161,time_0,execs_0,orig_id_001090,src_001039,time_13958,execs_781166,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..1b4a5e71e6d Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000161,time_0,execs_0,orig_id_001090,src_001039,time_13958,execs_781166,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000162,time_0,execs_0,orig_id_001091,src_001040,time_13984,execs_782672,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/parser-cmin/id_000162,time_0,execs_0,orig_id_001091,src_001040,time_13984,execs_782672,op_havoc,rep_9 new file mode 100644 index 00000000000..db20f5f3824 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000162,time_0,execs_0,orig_id_001091,src_001040,time_13984,execs_782672,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000163,time_0,execs_0,orig_id_001092,src_001040,time_13989,execs_782974,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/parser-cmin/id_000163,time_0,execs_0,orig_id_001092,src_001040,time_13989,execs_782974,op_havoc,rep_12 new file mode 100644 index 00000000000..5d1ab6dc6f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000163,time_0,execs_0,orig_id_001092,src_001040,time_13989,execs_782974,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000164,time_0,execs_0,orig_id_001093,src_001043,time_14028,execs_785240,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000164,time_0,execs_0,orig_id_001093,src_001043,time_14028,execs_785240,op_havoc,rep_2 new file mode 100644 index 00000000000..0327528e109 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000164,time_0,execs_0,orig_id_001093,src_001043,time_14028,execs_785240,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000165,time_0,execs_0,orig_id_001104,src_001054,time_14322,execs_797595,op_flip1,pos_56 b/test/fuzz-libghostty/corpus/parser-cmin/id_000165,time_0,execs_0,orig_id_001104,src_001054,time_14322,execs_797595,op_flip1,pos_56 new file mode 100644 index 00000000000..31d1bd668dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000165,time_0,execs_0,orig_id_001104,src_001054,time_14322,execs_797595,op_flip1,pos_56 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000166,time_0,execs_0,orig_id_001105,src_001054,time_14323,execs_797635,op_arith8,pos_56,val_-10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000166,time_0,execs_0,orig_id_001105,src_001054,time_14323,execs_797635,op_arith8,pos_56,val_-10 new file mode 100644 index 00000000000..3964c09b3fc Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000166,time_0,execs_0,orig_id_001105,src_001054,time_14323,execs_797635,op_arith8,pos_56,val_-10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000168,time_0,execs_0,orig_id_001121,src_001057,time_15156,execs_840369,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000168,time_0,execs_0,orig_id_001121,src_001057,time_15156,execs_840369,op_havoc,rep_10 new file mode 100644 index 00000000000..05d8142163e Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000168,time_0,execs_0,orig_id_001121,src_001057,time_15156,execs_840369,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000169,time_0,execs_0,orig_id_001122,src_001057,time_15205,execs_842961,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/parser-cmin/id_000169,time_0,execs_0,orig_id_001122,src_001057,time_15205,execs_842961,op_havoc,rep_12 new file mode 100644 index 00000000000..d1d3050d735 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000169,time_0,execs_0,orig_id_001122,src_001057,time_15205,execs_842961,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000172,time_0,execs_0,orig_id_001127,src_001067,time_15803,execs_876446,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000172,time_0,execs_0,orig_id_001127,src_001067,time_15803,execs_876446,op_havoc,rep_4 new file mode 100644 index 00000000000..999e394eb86 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000172,time_0,execs_0,orig_id_001127,src_001067,time_15803,execs_876446,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000173,time_0,execs_0,orig_id_001135,src_001089,time_16150,execs_888561,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000173,time_0,execs_0,orig_id_001135,src_001089,time_16150,execs_888561,op_havoc,rep_7 new file mode 100644 index 00000000000..2f676f35747 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000173,time_0,execs_0,orig_id_001135,src_001089,time_16150,execs_888561,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000174,time_0,execs_0,orig_id_001145,src_001095,time_16378,execs_900695,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000174,time_0,execs_0,orig_id_001145,src_001095,time_16378,execs_900695,op_havoc,rep_2 new file mode 100644 index 00000000000..ab8aa8d8dc8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000174,time_0,execs_0,orig_id_001145,src_001095,time_16378,execs_900695,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000175,time_0,execs_0,orig_id_001150,src_001131,time_16545,execs_910456,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000175,time_0,execs_0,orig_id_001150,src_001131,time_16545,execs_910456,op_havoc,rep_4 new file mode 100644 index 00000000000..a0c5892b5db Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000175,time_0,execs_0,orig_id_001150,src_001131,time_16545,execs_910456,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000176,time_0,execs_0,orig_id_001156,src_001147,time_16642,execs_915961,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000176,time_0,execs_0,orig_id_001156,src_001147,time_16642,execs_915961,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..a558e38b94b Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000176,time_0,execs_0,orig_id_001156,src_001147,time_16642,execs_915961,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000177,time_0,execs_0,orig_id_001158,src_001153,time_16772,execs_921758,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000177,time_0,execs_0,orig_id_001158,src_001153,time_16772,execs_921758,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..06cdc655194 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000177,time_0,execs_0,orig_id_001158,src_001153,time_16772,execs_921758,op_havoc,rep_3,+cov @@ -0,0 +1 @@ +í,;6L;;¸jŽL;Ú]3008]300800kA:ŸŸŸ;;;¸jL;Ú]300Ç]3008;;;;;6]ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000178,time_0,execs_0,orig_id_001161,src_001153,time_16787,execs_922717,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000178,time_0,execs_0,orig_id_001161,src_001153,time_16787,execs_922717,op_havoc,rep_5 new file mode 100644 index 00000000000..385d2185d21 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000178,time_0,execs_0,orig_id_001161,src_001153,time_16787,execs_922717,op_havoc,rep_5 @@ -0,0 +1 @@ +í,;6t]66¸jŽL;Ú]?008]3008;;;¸jŽL;Ú]3008]3008;;600kA:ŸŸŸ;;;¸jŽL;Ú]3008]3008;;;;;;6L;ÚÚ]3008]3008;;]3008]3008;;;;;;6]ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000180,time_0,execs_0,orig_id_001164,src_001153,time_16874,execs_927864,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/parser-cmin/id_000180,time_0,execs_0,orig_id_001164,src_001153,time_16874,execs_927864,op_havoc,rep_15 new file mode 100644 index 00000000000..7f794ad20dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000180,time_0,execs_0,orig_id_001164,src_001153,time_16874,execs_927864,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000181,time_0,execs_0,orig_id_001170,src_001126,time_16984,execs_931548,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000181,time_0,execs_0,orig_id_001170,src_001126,time_16984,execs_931548,op_havoc,rep_5 new file mode 100644 index 00000000000..49a33fe4cde Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000181,time_0,execs_0,orig_id_001170,src_001126,time_16984,execs_931548,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000182,time_0,execs_0,orig_id_001171,src_001126,time_16996,execs_932070,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000182,time_0,execs_0,orig_id_001171,src_001126,time_16996,execs_932070,op_havoc,rep_5 new file mode 100644 index 00000000000..8f057a0c039 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000182,time_0,execs_0,orig_id_001171,src_001126,time_16996,execs_932070,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000184,time_0,execs_0,orig_id_001177,src_001132,time_17154,execs_940412,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000184,time_0,execs_0,orig_id_001177,src_001132,time_17154,execs_940412,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..7934d8f45eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000184,time_0,execs_0,orig_id_001177,src_001132,time_17154,execs_940412,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000185,time_0,execs_0,orig_id_001182,src_001132,time_17323,execs_947544,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/parser-cmin/id_000185,time_0,execs_0,orig_id_001182,src_001132,time_17323,execs_947544,op_havoc,rep_16 new file mode 100644 index 00000000000..e8609a2c35b Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000185,time_0,execs_0,orig_id_001182,src_001132,time_17323,execs_947544,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000186,time_0,execs_0,orig_id_001186,src_000672,time_17432,execs_951794,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000186,time_0,execs_0,orig_id_001186,src_000672,time_17432,execs_951794,op_havoc,rep_4 new file mode 100644 index 00000000000..5dcb476ac88 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000186,time_0,execs_0,orig_id_001186,src_000672,time_17432,execs_951794,op_havoc,rep_4 @@ -0,0 +1 @@ +í;6]6;6]66;;]1e'âºÁÁ66¶Äj;;6]66;;âºÁÁ6]66;;]1e'âºÁÁ6f;SN@ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000187,time_0,execs_0,orig_id_001187,src_001177,time_17461,execs_953323,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000187,time_0,execs_0,orig_id_001187,src_001177,time_17461,execs_953323,op_havoc,rep_1 new file mode 100644 index 00000000000..e9c641c2987 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000187,time_0,execs_0,orig_id_001187,src_001177,time_17461,execs_953323,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000188,time_0,execs_0,orig_id_001188,src_000494,time_17507,execs_954513,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/parser-cmin/id_000188,time_0,execs_0,orig_id_001188,src_000494,time_17507,execs_954513,op_havoc,rep_14 new file mode 100644 index 00000000000..a5a8413cdc1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000188,time_0,execs_0,orig_id_001188,src_000494,time_17507,execs_954513,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000189,time_0,execs_0,orig_id_001193,src_000116,time_17554,execs_957415,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000189,time_0,execs_0,orig_id_001193,src_000116,time_17554,execs_957415,op_havoc,rep_8 new file mode 100644 index 00000000000..d5e58c82cb4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000189,time_0,execs_0,orig_id_001193,src_000116,time_17554,execs_957415,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000190,time_0,execs_0,orig_id_001196,src_000487,time_17582,execs_959165,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000190,time_0,execs_0,orig_id_001196,src_000487,time_17582,execs_959165,op_havoc,rep_3 new file mode 100644 index 00000000000..06d625a260d Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000190,time_0,execs_0,orig_id_001196,src_000487,time_17582,execs_959165,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000192,time_0,execs_0,orig_id_001202,src_000475,time_17954,execs_977838,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/parser-cmin/id_000192,time_0,execs_0,orig_id_001202,src_000475,time_17954,execs_977838,op_havoc,rep_10 new file mode 100644 index 00000000000..d549f2eccd5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000192,time_0,execs_0,orig_id_001202,src_000475,time_17954,execs_977838,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000194,time_0,execs_0,orig_id_001204,src_001079,time_18050,execs_980237,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000194,time_0,execs_0,orig_id_001204,src_001079,time_18050,execs_980237,op_havoc,rep_1 new file mode 100644 index 00000000000..bb00cdff449 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000194,time_0,execs_0,orig_id_001204,src_001079,time_18050,execs_980237,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000196,time_0,execs_0,orig_id_001220,src_001064,time_18650,execs_1011542,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000196,time_0,execs_0,orig_id_001220,src_001064,time_18650,execs_1011542,op_havoc,rep_4 new file mode 100644 index 00000000000..45662b5dbde Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000196,time_0,execs_0,orig_id_001220,src_001064,time_18650,execs_1011542,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000197,time_0,execs_0,orig_id_001221,src_000759,time_18701,execs_1014813,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000197,time_0,execs_0,orig_id_001221,src_000759,time_18701,execs_1014813,op_havoc,rep_2 new file mode 100644 index 00000000000..99760be7bb2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000197,time_0,execs_0,orig_id_001221,src_000759,time_18701,execs_1014813,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000198,time_0,execs_0,orig_id_001226,src_000823,time_18907,execs_1025455,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/parser-cmin/id_000198,time_0,execs_0,orig_id_001226,src_000823,time_18907,execs_1025455,op_havoc,rep_9 new file mode 100644 index 00000000000..59a6c400182 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000198,time_0,execs_0,orig_id_001226,src_000823,time_18907,execs_1025455,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000200,time_0,execs_0,orig_id_001233,src_000826,time_19201,execs_1038964,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000200,time_0,execs_0,orig_id_001233,src_000826,time_19201,execs_1038964,op_havoc,rep_4 new file mode 100644 index 00000000000..d948e0bb541 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000200,time_0,execs_0,orig_id_001233,src_000826,time_19201,execs_1038964,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000202,time_0,execs_0,orig_id_001245,src_001121,time_20168,execs_1082110,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000202,time_0,execs_0,orig_id_001245,src_001121,time_20168,execs_1082110,op_havoc,rep_2 new file mode 100644 index 00000000000..28593244b80 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000202,time_0,execs_0,orig_id_001245,src_001121,time_20168,execs_1082110,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000203,time_0,execs_0,orig_id_001247,src_001092,time_20226,execs_1085802,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000203,time_0,execs_0,orig_id_001247,src_001092,time_20226,execs_1085802,op_havoc,rep_1 new file mode 100644 index 00000000000..fed6a23052e Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000203,time_0,execs_0,orig_id_001247,src_001092,time_20226,execs_1085802,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000205,time_0,execs_0,orig_id_001253,src_001158,time_20358,execs_1091943,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000205,time_0,execs_0,orig_id_001253,src_001158,time_20358,execs_1091943,op_havoc,rep_7 new file mode 100644 index 00000000000..6940aa384a6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000205,time_0,execs_0,orig_id_001253,src_001158,time_20358,execs_1091943,op_havoc,rep_7 @@ -0,0 +1 @@ +í,;60Ç]3008;30080Ç]3008;ââââââââââ]3008ÿÿÿA:ŸŸŸ;;;¸jL;Ç]300Ç]3008;;;;;6] \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000207,time_0,execs_0,orig_id_001256,src_000951,time_20541,execs_1102118,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000207,time_0,execs_0,orig_id_001256,src_000951,time_20541,execs_1102118,op_havoc,rep_1 new file mode 100644 index 00000000000..1914a799579 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000207,time_0,execs_0,orig_id_001256,src_000951,time_20541,execs_1102118,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000208,time_0,execs_0,orig_id_001257,src_001253,time_20569,execs_1103254,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000208,time_0,execs_0,orig_id_001257,src_001253,time_20569,execs_1103254,op_havoc,rep_1 new file mode 100644 index 00000000000..b98345d192e --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000208,time_0,execs_0,orig_id_001257,src_001253,time_20569,execs_1103254,op_havoc,rep_1 @@ -0,0 +1 @@ +í,;60Ç]3008;30]3008;âââ]3008;30080Ç]3008;âââ]3008ÿÿÿA:ŸŸŸ;;;¸jL;Ç]300Ç]3008;;;;;6] \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000209,time_0,execs_0,orig_id_001258,src_001171,time_20583,execs_1104237,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000209,time_0,execs_0,orig_id_001258,src_001171,time_20583,execs_1104237,op_havoc,rep_6 new file mode 100644 index 00000000000..84818024fc2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000209,time_0,execs_0,orig_id_001258,src_001171,time_20583,execs_1104237,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000211,time_0,execs_0,orig_id_001270,src_000840,time_20792,execs_1116867,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000211,time_0,execs_0,orig_id_001270,src_000840,time_20792,execs_1116867,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..6ad75013150 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000211,time_0,execs_0,orig_id_001270,src_000840,time_20792,execs_1116867,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000213,time_0,execs_0,orig_id_001278,src_001266,time_20982,execs_1128131,op_quick,pos_31,val_+2,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000213,time_0,execs_0,orig_id_001278,src_001266,time_20982,execs_1128131,op_quick,pos_31,val_+2,+cov new file mode 100644 index 00000000000..b86b300ef28 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000213,time_0,execs_0,orig_id_001278,src_001266,time_20982,execs_1128131,op_quick,pos_31,val_+2,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000214,time_0,execs_0,orig_id_001280,src_001266,time_20984,execs_1128259,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000214,time_0,execs_0,orig_id_001280,src_001266,time_20984,execs_1128259,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..ae5330f992f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000214,time_0,execs_0,orig_id_001280,src_001266,time_20984,execs_1128259,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000216,time_0,execs_0,orig_id_001283,src_001266,time_20992,execs_1128832,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000216,time_0,execs_0,orig_id_001283,src_001266,time_20992,execs_1128832,op_havoc,rep_6 new file mode 100644 index 00000000000..f1e10a8e642 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000216,time_0,execs_0,orig_id_001283,src_001266,time_20992,execs_1128832,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000217,time_0,execs_0,orig_id_001287,src_001266,time_21016,execs_1130450,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000217,time_0,execs_0,orig_id_001287,src_001266,time_21016,execs_1130450,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..c27ecc3e673 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000217,time_0,execs_0,orig_id_001287,src_001266,time_21016,execs_1130450,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000218,time_0,execs_0,orig_id_001288,src_001266,time_21022,execs_1130891,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000218,time_0,execs_0,orig_id_001288,src_001266,time_21022,execs_1130891,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..7a2558cf596 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000218,time_0,execs_0,orig_id_001288,src_001266,time_21022,execs_1130891,op_havoc,rep_6,+cov @@ -0,0 +1 @@ +ÿ]93kA[]Ÿ]++ðf]133;L;W3]]1a]117[3NfSN@]Ÿ]++++q;3ÄB@]119;Ÿ]++++q;of]133;2;W5;6;ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000222,time_0,execs_0,orig_id_001299,src_001274,time_21251,execs_1144234,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000222,time_0,execs_0,orig_id_001299,src_001274,time_21251,execs_1144234,op_havoc,rep_4 new file mode 100644 index 00000000000..bcda2bfb971 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000222,time_0,execs_0,orig_id_001299,src_001274,time_21251,execs_1144234,op_havoc,rep_4 @@ -0,0 +1 @@ +ÿ]93kA[]Ÿ]++++q;of]133;C;W3;p]133;C;W3;pÚ3]]8]N6Ú]15Q]118]117[8]N6Ú]15Q]118]117[3^@;Ÿ]++++q;of]133;3;W5;6;ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000223,time_0,execs_0,orig_id_001301,src_001288,time_21262,execs_1144962,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000223,time_0,execs_0,orig_id_001301,src_001288,time_21262,execs_1144962,op_havoc,rep_13 new file mode 100644 index 00000000000..07a7f5f6ff1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000223,time_0,execs_0,orig_id_001301,src_001288,time_21262,execs_1144962,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000224,time_0,execs_0,orig_id_001303,src_001288,time_21283,execs_1146351,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/parser-cmin/id_000224,time_0,execs_0,orig_id_001303,src_001288,time_21283,execs_1146351,op_havoc,rep_15 new file mode 100644 index 00000000000..c2c5c942eb1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000224,time_0,execs_0,orig_id_001303,src_001288,time_21283,execs_1146351,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000225,time_0,execs_0,orig_id_001310,src_001282,time_21407,execs_1154604,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000225,time_0,execs_0,orig_id_001310,src_001282,time_21407,execs_1154604,op_havoc,rep_8 new file mode 100644 index 00000000000..30dd7871b76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000225,time_0,execs_0,orig_id_001310,src_001282,time_21407,execs_1154604,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000227,time_0,execs_0,orig_id_001315,src_001298,time_21461,execs_1158417,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000227,time_0,execs_0,orig_id_001315,src_001298,time_21461,execs_1158417,op_havoc,rep_4 new file mode 100644 index 00000000000..2645e2f4d24 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000227,time_0,execs_0,orig_id_001315,src_001298,time_21461,execs_1158417,op_havoc,rep_4 @@ -0,0 +1 @@ +ÿ]93k33;W3:pÞÞÞÞÚ]N6Ú]]133;DôWÿ15Q]118]117]N6Ú]]133;DôWÿ@]119;Ÿ]++++q;of]133;Dô[34@]119;Ÿ]++++q;oW \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000228,time_0,execs_0,orig_id_001320,src_001307,time_21547,execs_1162879,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000228,time_0,execs_0,orig_id_001320,src_001307,time_21547,execs_1162879,op_havoc,rep_2 new file mode 100644 index 00000000000..e3558299e71 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000228,time_0,execs_0,orig_id_001320,src_001307,time_21547,execs_1162879,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000229,time_0,execs_0,orig_id_001336,src_001042,time_22081,execs_1188126,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000229,time_0,execs_0,orig_id_001336,src_001042,time_22081,execs_1188126,op_havoc,rep_5 new file mode 100644 index 00000000000..cc6dc4c1a1f Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000229,time_0,execs_0,orig_id_001336,src_001042,time_22081,execs_1188126,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000231,time_0,execs_0,orig_id_001344,src_001303,time_22465,execs_1204666,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000231,time_0,execs_0,orig_id_001344,src_001303,time_22465,execs_1204666,op_havoc,rep_2 new file mode 100644 index 00000000000..acdc84365d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000231,time_0,execs_0,orig_id_001344,src_001303,time_22465,execs_1204666,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000232,time_0,execs_0,orig_id_001345,src_000400,time_22494,execs_1206524,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/parser-cmin/id_000232,time_0,execs_0,orig_id_001345,src_000400,time_22494,execs_1206524,op_havoc,rep_14 new file mode 100644 index 00000000000..2d5c01160a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000232,time_0,execs_0,orig_id_001345,src_000400,time_22494,execs_1206524,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000233,time_0,execs_0,orig_id_001357,src_000871,time_23027,execs_1233651,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000233,time_0,execs_0,orig_id_001357,src_000871,time_23027,execs_1233651,op_havoc,rep_7 new file mode 100644 index 00000000000..25b163de477 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000233,time_0,execs_0,orig_id_001357,src_000871,time_23027,execs_1233651,op_havoc,rep_7 @@ -0,0 +1 @@ + ÿÿFFFF]]]]1;4444444FFFFFFFFFFFFFFFñ]9>ìý]8]]]]]]]]]]]]]]]]]]]]]]]]]9]8]9;1;444444;Vÿ:3]8]9;1;44444444444[4]1Ô4:3]8]9;1;444444444444m^ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000235,time_0,execs_0,orig_id_001360,src_001304,time_23327,execs_1245772,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000235,time_0,execs_0,orig_id_001360,src_001304,time_23327,execs_1245772,op_havoc,rep_2 new file mode 100644 index 00000000000..e66c74da4df Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000235,time_0,execs_0,orig_id_001360,src_001304,time_23327,execs_1245772,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000236,time_0,execs_0,orig_id_001362,src_001301,time_23372,execs_1249024,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000236,time_0,execs_0,orig_id_001362,src_001301,time_23372,execs_1249024,op_havoc,rep_5 new file mode 100644 index 00000000000..39964557eb4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000236,time_0,execs_0,orig_id_001362,src_001301,time_23372,execs_1249024,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000238,time_0,execs_0,orig_id_001369,src_000525,time_23498,execs_1255598,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000238,time_0,execs_0,orig_id_001369,src_000525,time_23498,execs_1255598,op_havoc,rep_6 new file mode 100644 index 00000000000..e3d0de8355e --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000238,time_0,execs_0,orig_id_001369,src_000525,time_23498,execs_1255598,op_havoc,rep_6 @@ -0,0 +1 @@ +íÄi6666¶]9;6;pf666666¶]6;p€ÿÄif6ÿ]9;6;pÿ666ÿ]9;6;p€ÿ4ÿ€ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000239,time_0,execs_0,orig_id_001372,src_000766,time_23690,execs_1260463,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000239,time_0,execs_0,orig_id_001372,src_000766,time_23690,execs_1260463,op_havoc,rep_6 new file mode 100644 index 00000000000..b2d88602442 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000239,time_0,execs_0,orig_id_001372,src_000766,time_23690,execs_1260463,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000244,time_0,execs_0,orig_id_001380,src_000834,time_23967,execs_1274583,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000244,time_0,execs_0,orig_id_001380,src_000834,time_23967,execs_1274583,op_havoc,rep_5 new file mode 100644 index 00000000000..b8d2e42a2b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000244,time_0,execs_0,orig_id_001380,src_000834,time_23967,execs_1274583,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000245,time_0,execs_0,orig_id_001384,src_001086,time_24325,execs_1290762,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/parser-cmin/id_000245,time_0,execs_0,orig_id_001384,src_001086,time_24325,execs_1290762,op_havoc,rep_4 new file mode 100644 index 00000000000..5b050b988ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000245,time_0,execs_0,orig_id_001384,src_001086,time_24325,execs_1290762,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000246,time_0,execs_0,orig_id_001385,src_001220,time_24370,execs_1292958,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000246,time_0,execs_0,orig_id_001385,src_001220,time_24370,execs_1292958,op_havoc,rep_3 new file mode 100644 index 00000000000..ee239662d33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000246,time_0,execs_0,orig_id_001385,src_001220,time_24370,execs_1292958,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000248,time_0,execs_0,orig_id_001399,src_001377,time_25091,execs_1325464,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000248,time_0,execs_0,orig_id_001399,src_001377,time_25091,execs_1325464,op_havoc,rep_3 new file mode 100644 index 00000000000..3bf0920511f --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000248,time_0,execs_0,orig_id_001399,src_001377,time_25091,execs_1325464,op_havoc,rep_3 @@ -0,0 +1 @@ +ííííííííííííoN]]9;4;2;88888888888888888888oN]9;4;2;88888888888888888889;4;N]9;4;2;88888888888888888888]9;4;2;88888888888888888888fí89;g/+]7;;/ifí]9;7üiiN]9; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000250,time_0,execs_0,orig_id_001403,src_001112,time_25362,execs_1337189,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000250,time_0,execs_0,orig_id_001403,src_001112,time_25362,execs_1337189,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..7e82854de06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000250,time_0,execs_0,orig_id_001403,src_001112,time_25362,execs_1337189,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000254,time_0,execs_0,orig_id_001412,src_000827,time_25676,execs_1351136,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000254,time_0,execs_0,orig_id_001412,src_000827,time_25676,execs_1351136,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..4cbd13e9dd9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000254,time_0,execs_0,orig_id_001412,src_000827,time_25676,execs_1351136,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000255,time_0,execs_0,orig_id_001414,src_001156,time_25717,execs_1352394,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000255,time_0,execs_0,orig_id_001414,src_001156,time_25717,execs_1352394,op_havoc,rep_2 new file mode 100644 index 00000000000..67cb8c01a84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000255,time_0,execs_0,orig_id_001414,src_001156,time_25717,execs_1352394,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000258,time_0,execs_0,orig_id_001427,src_001404,time_26306,execs_1380859,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/parser-cmin/id_000258,time_0,execs_0,orig_id_001427,src_001404,time_26306,execs_1380859,op_havoc,rep_7 new file mode 100644 index 00000000000..0c2506dbfd8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000258,time_0,execs_0,orig_id_001427,src_001404,time_26306,execs_1380859,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000259,time_0,execs_0,orig_id_001429,src_001299,time_26419,execs_1385816,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000259,time_0,execs_0,orig_id_001429,src_001299,time_26419,execs_1385816,op_havoc,rep_5 new file mode 100644 index 00000000000..6735a0c2459 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000259,time_0,execs_0,orig_id_001429,src_001299,time_26419,execs_1385816,op_havoc,rep_5 @@ -0,0 +1 @@ +ÿ]93kA[]Ÿ]++++q;of]133;C;W3;p]1Q]133;C;W3;pÚ3]]8]N6Ú]15Q]118]117[8]N6Ú]1Q]133;C;W3;pÚ3]]15Q]118]117[3^@;š]+++˜˜˜˜˜˜˜˜;of]133;3;W5;6;ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000260,time_0,execs_0,orig_id_001430,src_001299,time_26420,execs_1385918,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000260,time_0,execs_0,orig_id_001430,src_001299,time_26420,execs_1385918,op_havoc,rep_5 new file mode 100644 index 00000000000..44d73070d56 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000260,time_0,execs_0,orig_id_001430,src_001299,time_26420,execs_1385918,op_havoc,rep_5 @@ -0,0 +1 @@ +ÿ]93kA[]Ÿ]++*+q;of]133;C;W3;p]133;C;W3;p]133;C;W3;p]133;C;Ú]15Q]11ú7]117[8]N6Ú]15Q]118]117[3^@;Ÿ]++++q;of]1339;1;22222ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000261,time_0,execs_0,orig_id_001434,src_001292,time_26836,execs_1408747,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/parser-cmin/id_000261,time_0,execs_0,orig_id_001434,src_001292,time_26836,execs_1408747,op_havoc,rep_3 new file mode 100644 index 00000000000..9f30423a56c Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000261,time_0,execs_0,orig_id_001434,src_001292,time_26836,execs_1408747,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000262,time_0,execs_0,orig_id_001436,src_000932,time_27107,execs_1419527,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000262,time_0,execs_0,orig_id_001436,src_000932,time_27107,execs_1419527,op_havoc,rep_1 new file mode 100644 index 00000000000..99b34f3ca00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000262,time_0,execs_0,orig_id_001436,src_000932,time_27107,execs_1419527,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000263,time_0,execs_0,orig_id_001437,src_000843,time_27155,execs_1420891,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000263,time_0,execs_0,orig_id_001437,src_000843,time_27155,execs_1420891,op_havoc,rep_2 new file mode 100644 index 00000000000..3410e0e2798 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000263,time_0,execs_0,orig_id_001437,src_000843,time_27155,execs_1420891,op_havoc,rep_2 @@ -0,0 +1 @@ +í]9;:]6Ní]9;:]6N]9;4;2;___è9;:]6Ní]]9;9;N]9;4;2;_____ÄÄifíNí]]9;9;N]9;4;2;_____ÄÄi]9;:]ÿÿif;pÿÿ4ÿ;p \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000264,time_0,execs_0,orig_id_001438,src_000843,time_27159,execs_1421138,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000264,time_0,execs_0,orig_id_001438,src_000843,time_27159,execs_1421138,op_havoc,rep_2 new file mode 100644 index 00000000000..d14b228527b --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000264,time_0,execs_0,orig_id_001438,src_000843,time_27159,execs_1421138,op_havoc,rep_2 @@ -0,0 +1 @@ +í]9;:]6N]9;4;2;____]6NN]9;4;2;__:]6N]9;4;2;_________9;:]6Ní]]9;9;N]9;4;2;_____ÄÄifí]9;:]ÿÿif;pÿÿ4ÿ;pÿÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000265,time_0,execs_0,orig_id_001439,src_001360,time_27266,execs_1426400,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000265,time_0,execs_0,orig_id_001439,src_001360,time_27266,execs_1426400,op_havoc,rep_6 new file mode 100644 index 00000000000..7537e0568e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000265,time_0,execs_0,orig_id_001439,src_001360,time_27266,execs_1426400,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000266,time_0,execs_0,orig_id_001440,src_000904,time_27366,execs_1431167,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000266,time_0,execs_0,orig_id_001440,src_000904,time_27366,execs_1431167,op_havoc,rep_8 new file mode 100644 index 00000000000..983204b14cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000266,time_0,execs_0,orig_id_001440,src_000904,time_27366,execs_1431167,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000267,time_0,execs_0,orig_id_001445,src_001278,time_27612,execs_1440693,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/parser-cmin/id_000267,time_0,execs_0,orig_id_001445,src_001278,time_27612,execs_1440693,op_havoc,rep_13 new file mode 100644 index 00000000000..d5c68282357 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000267,time_0,execs_0,orig_id_001445,src_001278,time_27612,execs_1440693,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000268,time_0,execs_0,orig_id_001446,src_000893,time_27705,execs_1442296,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/parser-cmin/id_000268,time_0,execs_0,orig_id_001446,src_000893,time_27705,execs_1442296,op_havoc,rep_5 new file mode 100644 index 00000000000..1697443c428 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000268,time_0,execs_0,orig_id_001446,src_000893,time_27705,execs_1442296,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000269,time_0,execs_0,orig_id_001451,src_000706,time_27846,execs_1449163,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000269,time_0,execs_0,orig_id_001451,src_000706,time_27846,execs_1449163,op_havoc,rep_1 new file mode 100644 index 00000000000..b826c78211d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000269,time_0,execs_0,orig_id_001451,src_000706,time_27846,execs_1449163,op_havoc,rep_1 @@ -0,0 +1 @@ +;6]66;;]à€ëÚ]1331e'í;6]66;;]à€ëÚ]1331eÁ66¶Äjf;o];6]6]66;;]à€ëÚ:pÿÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000270,time_0,execs_0,orig_id_001453,src_000584,time_27871,execs_1450836,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/parser-cmin/id_000270,time_0,execs_0,orig_id_001453,src_000584,time_27871,execs_1450836,op_havoc,rep_8 new file mode 100644 index 00000000000..48b39f76474 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000270,time_0,execs_0,orig_id_001453,src_000584,time_27871,execs_1450836,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000271,time_0,execs_0,orig_id_001457,src_001150,time_28055,execs_1458890,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/parser-cmin/id_000271,time_0,execs_0,orig_id_001457,src_001150,time_28055,execs_1458890,op_havoc,rep_2 new file mode 100644 index 00000000000..349be8d99f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000271,time_0,execs_0,orig_id_001457,src_001150,time_28055,execs_1458890,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000274,time_0,execs_0,orig_id_001460,src_000456,time_28333,execs_1469865,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/parser-cmin/id_000274,time_0,execs_0,orig_id_001460,src_000456,time_28333,execs_1469865,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..cda701eea64 Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000274,time_0,execs_0,orig_id_001460,src_000456,time_28333,execs_1469865,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000275,time_0,execs_0,orig_id_001462,src_001436,time_28460,execs_1475054,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/parser-cmin/id_000275,time_0,execs_0,orig_id_001462,src_001436,time_28460,execs_1475054,op_havoc,rep_1 new file mode 100644 index 00000000000..8684d4109cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/parser-cmin/id_000275,time_0,execs_0,orig_id_001462,src_001436,time_28460,execs_1475054,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/parser-cmin/id_000277,time_0,execs_0,orig_id_001473,src_001418,time_30006,execs_1544821,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/parser-cmin/id_000277,time_0,execs_0,orig_id_001473,src_001418,time_30006,execs_1544821,op_havoc,rep_6 new file mode 100644 index 00000000000..94e2f647cbe --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-cmin/id_000277,time_0,execs_0,orig_id_001473,src_001418,time_30006,execs_1544821,op_havoc,rep_6 @@ -0,0 +1 @@ +í;6]6v];6]66;;1e'ïº;;1e'ïºÿÿ]]1eÿ4];:5ÿÿ]1];!]66;;]1e'ñºdÄjÁÄ;:5];6]66;;]1e'ïºÿÿ]6jf \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/07-esc-index b/test/fuzz-libghostty/corpus/parser-initial/07-esc-index new file mode 100644 index 00000000000..21ec445218b --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/07-esc-index @@ -0,0 +1 @@ +DM \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/08-esc-ris b/test/fuzz-libghostty/corpus/parser-initial/08-esc-ris new file mode 100644 index 00000000000..c10be5482cd --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/08-esc-ris @@ -0,0 +1 @@ +c \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/09-csi-cursor-move b/test/fuzz-libghostty/corpus/parser-initial/09-csi-cursor-move new file mode 100644 index 00000000000..da43d8b32ff --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/09-csi-cursor-move @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/10-csi-cup b/test/fuzz-libghostty/corpus/parser-initial/10-csi-cup new file mode 100644 index 00000000000..f2f6cf3aadc --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/10-csi-cup @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/11-csi-ed b/test/fuzz-libghostty/corpus/parser-initial/11-csi-ed new file mode 100644 index 00000000000..c97699cac6b --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/11-csi-ed @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/12-csi-el b/test/fuzz-libghostty/corpus/parser-initial/12-csi-el new file mode 100644 index 00000000000..d2e06ee40fb --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/12-csi-el @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/13-csi-sgr-basic b/test/fuzz-libghostty/corpus/parser-initial/13-csi-sgr-basic new file mode 100644 index 00000000000..4b39f8fecda --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/13-csi-sgr-basic @@ -0,0 +1 @@ +Red Bold \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/14-csi-sgr-256 b/test/fuzz-libghostty/corpus/parser-initial/14-csi-sgr-256 new file mode 100644 index 00000000000..9633f9a24d8 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/14-csi-sgr-256 @@ -0,0 +1 @@ +color \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/15-csi-sgr-rgb b/test/fuzz-libghostty/corpus/parser-initial/15-csi-sgr-rgb new file mode 100644 index 00000000000..a9eceb50821 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/15-csi-sgr-rgb @@ -0,0 +1 @@ +truecolor \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/16-csi-decset b/test/fuzz-libghostty/corpus/parser-initial/16-csi-decset new file mode 100644 index 00000000000..28f03d9b3a4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/16-csi-decset @@ -0,0 +1 @@ +[?1049h[?1049l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/17-csi-dsr b/test/fuzz-libghostty/corpus/parser-initial/17-csi-dsr new file mode 100644 index 00000000000..6ba17f28bc7 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/17-csi-dsr @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/18-csi-decstbm b/test/fuzz-libghostty/corpus/parser-initial/18-csi-decstbm new file mode 100644 index 00000000000..69e991bdd87 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/18-csi-decstbm @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/19-csi-insert-delete-lines b/test/fuzz-libghostty/corpus/parser-initial/19-csi-insert-delete-lines new file mode 100644 index 00000000000..47faf6f08c9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/19-csi-insert-delete-lines @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/20-csi-intermediate b/test/fuzz-libghostty/corpus/parser-initial/20-csi-intermediate new file mode 100644 index 00000000000..1d287620e19 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/20-csi-intermediate @@ -0,0 +1 @@ +[61"p \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/21-osc-title-bel b/test/fuzz-libghostty/corpus/parser-initial/21-osc-title-bel new file mode 100644 index 00000000000..c27743fb34f --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/21-osc-title-bel @@ -0,0 +1 @@ +]0;My Window Title \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/22-osc-title-st b/test/fuzz-libghostty/corpus/parser-initial/22-osc-title-st new file mode 100644 index 00000000000..ca9e76fe338 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/22-osc-title-st @@ -0,0 +1 @@ +]0;Title\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/23-osc-icon b/test/fuzz-libghostty/corpus/parser-initial/23-osc-icon new file mode 100644 index 00000000000..691abd3c807 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/23-osc-icon @@ -0,0 +1 @@ +]1;icon \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/24-osc-clipboard b/test/fuzz-libghostty/corpus/parser-initial/24-osc-clipboard new file mode 100644 index 00000000000..163e35eea4c --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/24-osc-clipboard @@ -0,0 +1 @@ +]52;c;SGVsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/25-osc-hyperlink b/test/fuzz-libghostty/corpus/parser-initial/25-osc-hyperlink new file mode 100644 index 00000000000..ed3a58a5841 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/25-osc-hyperlink @@ -0,0 +1 @@ +]8;;https://example.comlink]8;; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/26-osc-color b/test/fuzz-libghostty/corpus/parser-initial/26-osc-color new file mode 100644 index 00000000000..262537563e4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/26-osc-color @@ -0,0 +1 @@ +]4;1;rgb:ff/00/00 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/27-osc-fg b/test/fuzz-libghostty/corpus/parser-initial/27-osc-fg new file mode 100644 index 00000000000..cd9cfb7b4d2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/27-osc-fg @@ -0,0 +1 @@ +]10;rgb:ff/ff/ff \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/28-dcs-xtgettcap b/test/fuzz-libghostty/corpus/parser-initial/28-dcs-xtgettcap new file mode 100644 index 00000000000..f4a2338049e --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/28-dcs-xtgettcap @@ -0,0 +1 @@ +P+q544e\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/29-dcs-decrqss b/test/fuzz-libghostty/corpus/parser-initial/29-dcs-decrqss new file mode 100644 index 00000000000..9f49b718fa1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/29-dcs-decrqss @@ -0,0 +1 @@ +P\$qm\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/30-dcs-tmux b/test/fuzz-libghostty/corpus/parser-initial/30-dcs-tmux new file mode 100644 index 00000000000..8977d5f693d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/30-dcs-tmux @@ -0,0 +1 @@ +P1000p\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/31-c1-dcs b/test/fuzz-libghostty/corpus/parser-initial/31-c1-dcs new file mode 100644 index 00000000000..c6c207579b2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/31-c1-dcs @@ -0,0 +1 @@ +testœ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/32-c1-csi b/test/fuzz-libghostty/corpus/parser-initial/32-c1-csi new file mode 100644 index 00000000000..6f542bbfd02 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/32-c1-csi @@ -0,0 +1 @@ +›m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/33-c1-osc b/test/fuzz-libghostty/corpus/parser-initial/33-c1-osc new file mode 100644 index 00000000000..4a18dcacc74 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/33-c1-osc @@ -0,0 +1 @@ +testœ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/34-utf8-2byte b/test/fuzz-libghostty/corpus/parser-initial/34-utf8-2byte new file mode 100644 index 00000000000..197d1e5124d --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/34-utf8-2byte @@ -0,0 +1 @@ +éàü \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/35-utf8-3byte b/test/fuzz-libghostty/corpus/parser-initial/35-utf8-3byte new file mode 100644 index 00000000000..367ab4d05c0 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/35-utf8-3byte @@ -0,0 +1 @@ +–— \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/36-utf8-4byte-emoji b/test/fuzz-libghostty/corpus/parser-initial/36-utf8-4byte-emoji new file mode 100644 index 00000000000..e4e7bd66415 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/36-utf8-4byte-emoji @@ -0,0 +1 @@ +😀🎉 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/37-mixed-text-csi b/test/fuzz-libghostty/corpus/parser-initial/37-mixed-text-csi new file mode 100644 index 00000000000..d9873f0b058 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/37-mixed-text-csi @@ -0,0 +1 @@ +beforeredafter \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/38-mixed-osc-csi b/test/fuzz-libghostty/corpus/parser-initial/38-mixed-osc-csi new file mode 100644 index 00000000000..1aade808474 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/38-mixed-osc-csi @@ -0,0 +1 @@ +]0;title \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/39-csi-many-params b/test/fuzz-libghostty/corpus/parser-initial/39-csi-many-params new file mode 100644 index 00000000000..206cba7a214 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/39-csi-many-params @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/40-csi-subparams b/test/fuzz-libghostty/corpus/parser-initial/40-csi-subparams new file mode 100644 index 00000000000..5cbe91ab8f2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/40-csi-subparams @@ -0,0 +1 @@ +[4:3m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/41-incomplete-csi b/test/fuzz-libghostty/corpus/parser-initial/41-incomplete-csi new file mode 100644 index 00000000000..15bc306e22b --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/41-incomplete-csi @@ -0,0 +1 @@ +[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/42-incomplete-esc b/test/fuzz-libghostty/corpus/parser-initial/42-incomplete-esc new file mode 100644 index 00000000000..7b71c6e6797 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/42-incomplete-esc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/43-incomplete-osc b/test/fuzz-libghostty/corpus/parser-initial/43-incomplete-osc new file mode 100644 index 00000000000..82ff48f094e --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/43-incomplete-osc @@ -0,0 +1 @@ +]0;partial \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/44-empty b/test/fuzz-libghostty/corpus/parser-initial/44-empty new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/fuzz-libghostty/corpus/parser-initial/45-esc-misc b/test/fuzz-libghostty/corpus/parser-initial/45-esc-misc new file mode 100644 index 00000000000..8fc79faa974 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/45-esc-misc @@ -0,0 +1 @@ +ABC \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/46-line-drawing b/test/fuzz-libghostty/corpus/parser-initial/46-line-drawing new file mode 100644 index 00000000000..592d5e2a1eb --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/46-line-drawing @@ -0,0 +1 @@ +(0lqqk(B \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/47-csi-cursor-hide-show b/test/fuzz-libghostty/corpus/parser-initial/47-csi-cursor-hide-show new file mode 100644 index 00000000000..b7bd07522bc --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/47-csi-cursor-hide-show @@ -0,0 +1 @@ +[?25l[?25h \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/48-csi-da2 b/test/fuzz-libghostty/corpus/parser-initial/48-csi-da2 new file mode 100644 index 00000000000..d6f954e9e57 --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/48-csi-da2 @@ -0,0 +1 @@ +[>c \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/49-csi-sgr-all b/test/fuzz-libghostty/corpus/parser-initial/49-csi-sgr-all new file mode 100644 index 00000000000..18b829f14ff --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/49-csi-sgr-all @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/parser-initial/50-apc b/test/fuzz-libghostty/corpus/parser-initial/50-apc new file mode 100644 index 00000000000..6fdfa5937df --- /dev/null +++ b/test/fuzz-libghostty/corpus/parser-initial/50-apc @@ -0,0 +1 @@ +_application\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/sanitize-filenames.sh b/test/fuzz-libghostty/corpus/sanitize-filenames.sh new file mode 100755 index 00000000000..0033607971b --- /dev/null +++ b/test/fuzz-libghostty/corpus/sanitize-filenames.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# Rename AFL++ output files to replace colons with underscores. +# Colons are invalid on Windows (NTFS). +# +# Usage: ./sanitize-filenames.sh [directory ...] +# Defaults to parser-cmin and parser-min in the same directory as this script. + +cd "$(dirname "$0")" || exit 1 + +if [ $# -gt 0 ]; then + set -- "$@" +else + set -- parser-cmin stream-cmin +fi + +for dir in "$@"; do + [ -d "$dir" ] || continue + for f in "$dir"/*; do + [ -f "$f" ] || continue + newname=$(echo "$f" | tr ':' '_') + [ "$f" != "$newname" ] && mv "$f" "$newname" + done +done diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000009,time_0,execs_0,orig_id_000022,time_0,execs_0,orig_23-empty b/test/fuzz-libghostty/corpus/stream-cmin/id_000009,time_0,execs_0,orig_id_000022,time_0,execs_0,orig_23-empty new file mode 100644 index 00000000000..f76dd238ade Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000009,time_0,execs_0,orig_id_000022,time_0,execs_0,orig_23-empty differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000024,time_0,execs_0,orig_id_000122,src_000000,time_241,execs_1430,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000024,time_0,execs_0,orig_id_000122,src_000000,time_241,execs_1430,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..b3394ebfa49 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000024,time_0,execs_0,orig_id_000122,src_000000,time_241,execs_1430,op_havoc,rep_7,+cov @@ -0,0 +1 @@ +!M \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000028,time_0,execs_0,orig_id_000136,src_000000,time_271,execs_1587,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000028,time_0,execs_0,orig_id_000136,src_000000,time_271,execs_1587,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..8c7e5a667f1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000028,time_0,execs_0,orig_id_000136,src_000000,time_271,execs_1587,op_havoc,rep_4,+cov @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000035,time_0,execs_0,orig_id_000162,src_000000,time_336,execs_1972,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000035,time_0,execs_0,orig_id_000162,src_000000,time_336,execs_1972,op_havoc,rep_8 new file mode 100644 index 00000000000..1a9e76e5284 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000035,time_0,execs_0,orig_id_000162,src_000000,time_336,execs_1972,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000041,time_0,execs_0,orig_id_000189,src_000000,time_402,execs_2347,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000041,time_0,execs_0,orig_id_000189,src_000000,time_402,execs_2347,op_havoc,rep_8 new file mode 100644 index 00000000000..bb18ecf3df8 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000041,time_0,execs_0,orig_id_000189,src_000000,time_402,execs_2347,op_havoc,rep_8 @@ -0,0 +1 @@ +ÿrl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000049,time_0,execs_0,orig_id_000220,src_000000,time_499,execs_2916,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000049,time_0,execs_0,orig_id_000220,src_000000,time_499,execs_2916,op_havoc,rep_2 new file mode 100644 index 00000000000..d8578386fce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000049,time_0,execs_0,orig_id_000220,src_000000,time_499,execs_2916,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000057,time_0,execs_0,orig_id_000246,src_000000,time_581,execs_3427,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000057,time_0,execs_0,orig_id_000246,src_000000,time_581,execs_3427,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..de1064d35ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000057,time_0,execs_0,orig_id_000246,src_000000,time_581,execs_3427,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000073,time_0,execs_0,orig_id_000300,src_000000,time_784,execs_4509,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000073,time_0,execs_0,orig_id_000300,src_000000,time_784,execs_4509,op_havoc,rep_4 new file mode 100644 index 00000000000..802f8f25ac3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000073,time_0,execs_0,orig_id_000300,src_000000,time_784,execs_4509,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000078,time_0,execs_0,orig_id_000316,src_000000,time_862,execs_4926,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000078,time_0,execs_0,orig_id_000316,src_000000,time_862,execs_4926,op_havoc,rep_7 new file mode 100644 index 00000000000..7596f4327b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000078,time_0,execs_0,orig_id_000316,src_000000,time_862,execs_4926,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000091,time_0,execs_0,orig_id_000344,src_000000,time_1023,execs_5788,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000091,time_0,execs_0,orig_id_000344,src_000000,time_1023,execs_5788,op_havoc,rep_8 new file mode 100644 index 00000000000..87b31570bc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000091,time_0,execs_0,orig_id_000344,src_000000,time_1023,execs_5788,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000099,time_0,execs_0,orig_id_000367,src_000000,time_1164,execs_6565,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000099,time_0,execs_0,orig_id_000367,src_000000,time_1164,execs_6565,op_havoc,rep_7 new file mode 100644 index 00000000000..de80e3b53dd --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000099,time_0,execs_0,orig_id_000367,src_000000,time_1164,execs_6565,op_havoc,rep_7 @@ -0,0 +1 @@ +Ql‘e € !ll‘e e € !ll‘e € ! € ! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000102,time_0,execs_0,orig_id_000372,src_000000,time_1206,execs_6828,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000102,time_0,execs_0,orig_id_000372,src_000000,time_1206,execs_6828,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..5541bd86750 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000102,time_0,execs_0,orig_id_000372,src_000000,time_1206,execs_6828,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000106,time_0,execs_0,orig_id_000377,src_000000,time_1237,execs_6981,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000106,time_0,execs_0,orig_id_000377,src_000000,time_1237,execs_6981,op_havoc,rep_3 new file mode 100644 index 00000000000..54f03d891b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000106,time_0,execs_0,orig_id_000377,src_000000,time_1237,execs_6981,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000123,time_0,execs_0,orig_id_000409,src_000000,time_1387,execs_7839,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000123,time_0,execs_0,orig_id_000409,src_000000,time_1387,execs_7839,op_havoc,rep_5 new file mode 100644 index 00000000000..974968bf344 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000123,time_0,execs_0,orig_id_000409,src_000000,time_1387,execs_7839,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000125,time_0,execs_0,orig_id_000413,src_000000,time_1409,execs_7976,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000125,time_0,execs_0,orig_id_000413,src_000000,time_1409,execs_7976,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..f07430d467b --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000125,time_0,execs_0,orig_id_000413,src_000000,time_1409,execs_7976,op_havoc,rep_6,+cov @@ -0,0 +1 @@ +ÃG \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000131,time_0,execs_0,orig_id_000424,src_000000,time_1518,execs_8604,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000131,time_0,execs_0,orig_id_000424,src_000000,time_1518,execs_8604,op_havoc,rep_8 new file mode 100644 index 00000000000..b072079e002 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000131,time_0,execs_0,orig_id_000424,src_000000,time_1518,execs_8604,op_havoc,rep_8 @@ -0,0 +1 @@ +ÿÿÿ.! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000134,time_0,execs_0,orig_id_000431,src_000000,time_1576,execs_8979,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000134,time_0,execs_0,orig_id_000431,src_000000,time_1576,execs_8979,op_havoc,rep_8 new file mode 100644 index 00000000000..7870cc42253 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000134,time_0,execs_0,orig_id_000431,src_000000,time_1576,execs_8979,op_havoc,rep_8 @@ -0,0 +1 @@ +uuuòd!@rld6 diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000136,time_0,execs_0,orig_id_000435,src_000000,time_1622,execs_9285,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000136,time_0,execs_0,orig_id_000435,src_000000,time_1622,execs_9285,op_havoc,rep_7 new file mode 100644 index 00000000000..8b3552ff9fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000136,time_0,execs_0,orig_id_000435,src_000000,time_1622,execs_9285,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000144,time_0,execs_0,orig_id_000460,src_000000,time_1822,execs_10378,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000144,time_0,execs_0,orig_id_000460,src_000000,time_1822,execs_10378,op_havoc,rep_2 new file mode 100644 index 00000000000..d667f2328b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000144,time_0,execs_0,orig_id_000460,src_000000,time_1822,execs_10378,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000174,time_0,execs_0,orig_id_000512,src_000000,time_2237,execs_12741,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000174,time_0,execs_0,orig_id_000512,src_000000,time_2237,execs_12741,op_havoc,rep_6 new file mode 100644 index 00000000000..0b1f1f129b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000174,time_0,execs_0,orig_id_000512,src_000000,time_2237,execs_12741,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000199,time_0,execs_0,orig_id_000562,src_000000,time_2800,execs_16052,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000199,time_0,execs_0,orig_id_000562,src_000000,time_2800,execs_16052,op_havoc,rep_5 new file mode 100644 index 00000000000..c5828e04c44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000199,time_0,execs_0,orig_id_000562,src_000000,time_2800,execs_16052,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000209,time_0,execs_0,orig_id_000576,src_000000,time_2967,execs_17035,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000209,time_0,execs_0,orig_id_000576,src_000000,time_2967,execs_17035,op_havoc,rep_7 new file mode 100644 index 00000000000..6e28fc86773 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000209,time_0,execs_0,orig_id_000576,src_000000,time_2967,execs_17035,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000216,time_0,execs_0,orig_id_000586,src_000000,time_3074,execs_17601,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000216,time_0,execs_0,orig_id_000586,src_000000,time_3074,execs_17601,op_havoc,rep_4 new file mode 100644 index 00000000000..7516fa0284e --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000216,time_0,execs_0,orig_id_000586,src_000000,time_3074,execs_17601,op_havoc,rep_4 @@ -0,0 +1 @@ +oàààHelloàHell \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000219,time_0,execs_0,orig_id_000591,src_000000,time_3168,execs_18145,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000219,time_0,execs_0,orig_id_000591,src_000000,time_3168,execs_18145,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..2b02bf8ce40 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000219,time_0,execs_0,orig_id_000591,src_000000,time_3168,execs_18145,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000221,time_0,execs_0,orig_id_000594,src_000000,time_3206,execs_18299,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000221,time_0,execs_0,orig_id_000594,src_000000,time_3206,execs_18299,op_havoc,rep_2 new file mode 100644 index 00000000000..c4dce1defe3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000221,time_0,execs_0,orig_id_000594,src_000000,time_3206,execs_18299,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000222,time_0,execs_0,orig_id_000598,src_000000,time_3227,execs_18422,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000222,time_0,execs_0,orig_id_000598,src_000000,time_3227,execs_18422,op_havoc,rep_4 new file mode 100644 index 00000000000..b83214ac660 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000222,time_0,execs_0,orig_id_000598,src_000000,time_3227,execs_18422,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000224,time_0,execs_0,orig_id_000602,src_000000,time_3313,execs_18902,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000224,time_0,execs_0,orig_id_000602,src_000000,time_3313,execs_18902,op_havoc,rep_7 new file mode 100644 index 00000000000..876838f07b8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000224,time_0,execs_0,orig_id_000602,src_000000,time_3313,execs_18902,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000230,time_0,execs_0,orig_id_000612,src_000000,time_3458,execs_19737,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000230,time_0,execs_0,orig_id_000612,src_000000,time_3458,execs_19737,op_havoc,rep_2 new file mode 100644 index 00000000000..b8be38c1dfb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000230,time_0,execs_0,orig_id_000612,src_000000,time_3458,execs_19737,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000233,time_0,execs_0,orig_id_000616,src_000000,time_3540,execs_20231,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000233,time_0,execs_0,orig_id_000616,src_000000,time_3540,execs_20231,op_havoc,rep_7 new file mode 100644 index 00000000000..e8e51a5719a --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000233,time_0,execs_0,orig_id_000616,src_000000,time_3540,execs_20231,op_havoc,rep_7 @@ -0,0 +1,2 @@ + ê + ñ Heorlñ $ 2eorl|o, WHeld! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000248,time_0,execs_0,orig_id_000640,src_000000,time_3799,execs_21733,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000248,time_0,execs_0,orig_id_000640,src_000000,time_3799,execs_21733,op_havoc,rep_8 new file mode 100644 index 00000000000..abe099eeaf0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000248,time_0,execs_0,orig_id_000640,src_000000,time_3799,execs_21733,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000251,time_0,execs_0,orig_id_000643,src_000000,time_3824,execs_21884,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000251,time_0,execs_0,orig_id_000643,src_000000,time_3824,execs_21884,op_havoc,rep_4 new file mode 100644 index 00000000000..d559a7b5e30 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000251,time_0,execs_0,orig_id_000643,src_000000,time_3824,execs_21884,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000252,time_0,execs_0,orig_id_000645,src_000000,time_3858,execs_22088,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000252,time_0,execs_0,orig_id_000645,src_000000,time_3858,execs_22088,op_havoc,rep_5 new file mode 100644 index 00000000000..8c24c979663 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000252,time_0,execs_0,orig_id_000645,src_000000,time_3858,execs_22088,op_havoc,rep_5 @@ -0,0 +1,2 @@ + Wnrld! +Pnrld! önrld! öP Wo,P Wo, \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000257,time_0,execs_0,orig_id_000658,src_000000,time_4064,execs_23305,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000257,time_0,execs_0,orig_id_000658,src_000000,time_4064,execs_23305,op_havoc,rep_7 new file mode 100644 index 00000000000..e20d27220f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000257,time_0,execs_0,orig_id_000658,src_000000,time_4064,execs_23305,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000260,time_0,execs_0,orig_id_000661,src_000000,time_4094,execs_23489,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000260,time_0,execs_0,orig_id_000661,src_000000,time_4094,execs_23489,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..b28129d89da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000260,time_0,execs_0,orig_id_000661,src_000000,time_4094,execs_23489,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000261,time_0,execs_0,orig_id_000665,src_000000,time_4199,execs_24156,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000261,time_0,execs_0,orig_id_000665,src_000000,time_4199,execs_24156,op_havoc,rep_8 new file mode 100644 index 00000000000..d50b0a9cdd3 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000261,time_0,execs_0,orig_id_000665,src_000000,time_4199,execs_24156,op_havoc,rep_8 @@ -0,0 +1 @@ +ÿello W þ Hello, W€ÿld \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000264,time_0,execs_0,orig_id_000671,src_000000,time_4263,execs_24541,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000264,time_0,execs_0,orig_id_000671,src_000000,time_4263,execs_24541,op_havoc,rep_8 new file mode 100644 index 00000000000..0b951ad34cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000264,time_0,execs_0,orig_id_000671,src_000000,time_4263,execs_24541,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000268,time_0,execs_0,orig_id_000681,src_000000,time_4390,execs_25292,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000268,time_0,execs_0,orig_id_000681,src_000000,time_4390,execs_25292,op_havoc,rep_8 new file mode 100644 index 00000000000..ea48c312f10 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000268,time_0,execs_0,orig_id_000681,src_000000,time_4390,execs_25292,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000270,time_0,execs_0,orig_id_000683,src_000000,time_4462,execs_25768,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000270,time_0,execs_0,orig_id_000683,src_000000,time_4462,execs_25768,op_havoc,rep_8 new file mode 100644 index 00000000000..90efb5ad6b8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000270,time_0,execs_0,orig_id_000683,src_000000,time_4462,execs_25768,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000273,time_0,execs_0,orig_id_000689,src_000000,time_4543,execs_26274,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000273,time_0,execs_0,orig_id_000689,src_000000,time_4543,execs_26274,op_havoc,rep_8 new file mode 100644 index 00000000000..443776e4ed4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000273,time_0,execs_0,orig_id_000689,src_000000,time_4543,execs_26274,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000276,time_0,execs_0,orig_id_000692,src_000000,time_4551,execs_26320,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000276,time_0,execs_0,orig_id_000692,src_000000,time_4551,execs_26320,op_havoc,rep_8 new file mode 100644 index 00000000000..21936911e3b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000276,time_0,execs_0,orig_id_000692,src_000000,time_4551,execs_26320,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000279,time_0,execs_0,orig_id_000696,src_000000,time_4587,execs_26524,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000279,time_0,execs_0,orig_id_000696,src_000000,time_4587,execs_26524,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..cd30a0e5305 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000279,time_0,execs_0,orig_id_000696,src_000000,time_4587,execs_26524,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000283,time_0,execs_0,orig_id_000701,src_000000,time_4617,execs_26714,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000283,time_0,execs_0,orig_id_000701,src_000000,time_4617,execs_26714,op_havoc,rep_3 new file mode 100644 index 00000000000..e1ffed5efb0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000283,time_0,execs_0,orig_id_000701,src_000000,time_4617,execs_26714,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000290,time_0,execs_0,orig_id_000717,src_000000,time_4937,execs_28561,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000290,time_0,execs_0,orig_id_000717,src_000000,time_4937,execs_28561,op_havoc,rep_8 new file mode 100644 index 00000000000..d3ec16d6bd2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000290,time_0,execs_0,orig_id_000717,src_000000,time_4937,execs_28561,op_havoc,rep_8 @@ -0,0 +1 @@ + diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000293,time_0,execs_0,orig_id_000721,src_000000,time_5009,execs_28977,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000293,time_0,execs_0,orig_id_000721,src_000000,time_5009,execs_28977,op_havoc,rep_8 new file mode 100644 index 00000000000..f54c88bb9b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000293,time_0,execs_0,orig_id_000721,src_000000,time_5009,execs_28977,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000295,time_0,execs_0,orig_id_000725,src_000000,time_5030,execs_29095,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000295,time_0,execs_0,orig_id_000725,src_000000,time_5030,execs_29095,op_havoc,rep_7 new file mode 100644 index 00000000000..38ee24500a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000295,time_0,execs_0,orig_id_000725,src_000000,time_5030,execs_29095,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000296,time_0,execs_0,orig_id_000726,src_000000,time_5108,execs_29580,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000296,time_0,execs_0,orig_id_000726,src_000000,time_5108,execs_29580,op_havoc,rep_8 new file mode 100644 index 00000000000..086774ecfab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000296,time_0,execs_0,orig_id_000726,src_000000,time_5108,execs_29580,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000300,time_0,execs_0,orig_id_000731,src_000000,time_5194,execs_30058,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000300,time_0,execs_0,orig_id_000731,src_000000,time_5194,execs_30058,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..0a18c7aa744 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000300,time_0,execs_0,orig_id_000731,src_000000,time_5194,execs_30058,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000304,time_0,execs_0,orig_id_000738,src_000000,time_5317,execs_30808,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000304,time_0,execs_0,orig_id_000738,src_000000,time_5317,execs_30808,op_havoc,rep_8 new file mode 100644 index 00000000000..cf8b5b856d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000304,time_0,execs_0,orig_id_000738,src_000000,time_5317,execs_30808,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000311,time_0,execs_0,orig_id_000747,src_000000,time_5443,execs_31605,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000311,time_0,execs_0,orig_id_000747,src_000000,time_5443,execs_31605,op_havoc,rep_7 new file mode 100644 index 00000000000..e5dfee4c393 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000311,time_0,execs_0,orig_id_000747,src_000000,time_5443,execs_31605,op_havoc,rep_7 @@ -0,0 +1,2 @@ +ld!ÿrl +o, WoU [1[;1[; ì ld!ld diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000314,time_0,execs_0,orig_id_000750,src_000000,time_5480,execs_31830,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000314,time_0,execs_0,orig_id_000750,src_000000,time_5480,execs_31830,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..6b6ee407edf --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000314,time_0,execs_0,orig_id_000750,src_000000,time_5480,execs_31830,op_havoc,rep_6,+cov @@ -0,0 +1 @@ +0d!m[58:-, Wll!orll! eld[! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000317,time_0,execs_0,orig_id_000753,src_000000,time_5532,execs_32159,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000317,time_0,execs_0,orig_id_000753,src_000000,time_5532,execs_32159,op_havoc,rep_7 new file mode 100644 index 00000000000..fd04c63fed1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000317,time_0,execs_0,orig_id_000753,src_000000,time_5532,execs_32159,op_havoc,rep_7 @@ -0,0 +1,4 @@ + ÿ +ÿ ®®®®®®®®®®®®®®®®®®®® ®®®®®®®®® + + ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000318,time_0,execs_0,orig_id_000754,src_000000,time_5536,execs_32185,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000318,time_0,execs_0,orig_id_000754,src_000000,time_5536,execs_32185,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..a07bf409728 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000318,time_0,execs_0,orig_id_000754,src_000000,time_5536,execs_32185,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000325,time_0,execs_0,orig_id_000762,src_000000,time_5689,execs_33145,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000325,time_0,execs_0,orig_id_000762,src_000000,time_5689,execs_33145,op_havoc,rep_7 new file mode 100644 index 00000000000..1d175af256a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000325,time_0,execs_0,orig_id_000762,src_000000,time_5689,execs_33145,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000327,time_0,execs_0,orig_id_000764,src_000000,time_5736,execs_33431,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000327,time_0,execs_0,orig_id_000764,src_000000,time_5736,execs_33431,op_havoc,rep_8 new file mode 100644 index 00000000000..b6a3a53fece Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000327,time_0,execs_0,orig_id_000764,src_000000,time_5736,execs_33431,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000332,time_0,execs_0,orig_id_000769,src_000000,time_5810,execs_33845,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000332,time_0,execs_0,orig_id_000769,src_000000,time_5810,execs_33845,op_havoc,rep_8 new file mode 100644 index 00000000000..ddb1755cfa2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000332,time_0,execs_0,orig_id_000769,src_000000,time_5810,execs_33845,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000336,time_0,execs_0,orig_id_000776,src_000000,time_5914,execs_34427,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000336,time_0,execs_0,orig_id_000776,src_000000,time_5914,execs_34427,op_havoc,rep_8 new file mode 100644 index 00000000000..c6e4dead21f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000336,time_0,execs_0,orig_id_000776,src_000000,time_5914,execs_34427,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000340,time_0,execs_0,orig_id_000780,src_000000,time_6016,execs_34904,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000340,time_0,execs_0,orig_id_000780,src_000000,time_6016,execs_34904,op_havoc,rep_2 new file mode 100644 index 00000000000..2ae1b5ec26c --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000340,time_0,execs_0,orig_id_000780,src_000000,time_6016,execs_34904,op_havoc,rep_2 @@ -0,0 +1 @@ +[[ttyel/]8M[ttyel/]8 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000349,time_0,execs_0,orig_id_000792,src_000000,time_6222,execs_36037,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000349,time_0,execs_0,orig_id_000792,src_000000,time_6222,execs_36037,op_havoc,rep_4 new file mode 100644 index 00000000000..29ba91c992d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000349,time_0,execs_0,orig_id_000792,src_000000,time_6222,execs_36037,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000352,time_0,execs_0,orig_id_000795,src_000000,time_6256,execs_36234,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000352,time_0,execs_0,orig_id_000795,src_000000,time_6256,execs_36234,op_havoc,rep_7 new file mode 100644 index 00000000000..525c5b96b96 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000352,time_0,execs_0,orig_id_000795,src_000000,time_6256,execs_36234,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000353,time_0,execs_0,orig_id_000797,src_000000,time_6295,execs_36462,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000353,time_0,execs_0,orig_id_000797,src_000000,time_6295,execs_36462,op_havoc,rep_8 new file mode 100644 index 00000000000..5a451c67a59 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000353,time_0,execs_0,orig_id_000797,src_000000,time_6295,execs_36462,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000356,time_0,execs_0,orig_id_000800,src_000000,time_6314,execs_36570,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000356,time_0,execs_0,orig_id_000800,src_000000,time_6314,execs_36570,op_havoc,rep_5 new file mode 100644 index 00000000000..6c9a3327f3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000356,time_0,execs_0,orig_id_000800,src_000000,time_6314,execs_36570,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000359,time_0,execs_0,orig_id_000803,src_000000,time_6356,execs_36809,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000359,time_0,execs_0,orig_id_000803,src_000000,time_6356,execs_36809,op_havoc,rep_8 new file mode 100644 index 00000000000..dd086245ab1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000359,time_0,execs_0,orig_id_000803,src_000000,time_6356,execs_36809,op_havoc,rep_8 @@ -0,0 +1 @@ +‚ìéÒÒÒÒÒÒÒÒÒÒÒÒÒÕÒÒÒÒÒÒÒÒÒÒÒld! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000360,time_0,execs_0,orig_id_000804,src_000000,time_6369,execs_36885,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000360,time_0,execs_0,orig_id_000804,src_000000,time_6369,execs_36885,op_havoc,rep_7 new file mode 100644 index 00000000000..6be2b70e380 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000360,time_0,execs_0,orig_id_000804,src_000000,time_6369,execs_36885,op_havoc,rep_7 @@ -0,0 +1 @@ +ÿK, WHHHHHòd!HòN! Celorld! CeloelloêÐ, WHHHHHòd! Celorld! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000362,time_0,execs_0,orig_id_000806,src_000000,time_6408,execs_37132,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000362,time_0,execs_0,orig_id_000806,src_000000,time_6408,execs_37132,op_havoc,rep_6 new file mode 100644 index 00000000000..2708dd71d23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000362,time_0,execs_0,orig_id_000806,src_000000,time_6408,execs_37132,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000364,time_0,execs_0,orig_id_000808,src_000000,time_6463,execs_37479,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000364,time_0,execs_0,orig_id_000808,src_000000,time_6463,execs_37479,op_havoc,rep_3 new file mode 100644 index 00000000000..afd44813644 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000364,time_0,execs_0,orig_id_000808,src_000000,time_6463,execs_37479,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000367,time_0,execs_0,orig_id_000812,src_000000,time_6544,execs_37933,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000367,time_0,execs_0,orig_id_000812,src_000000,time_6544,execs_37933,op_havoc,rep_6 new file mode 100644 index 00000000000..d90340f7070 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000367,time_0,execs_0,orig_id_000812,src_000000,time_6544,execs_37933,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000368,time_0,execs_0,orig_id_000813,src_000000,time_6566,execs_38039,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000368,time_0,execs_0,orig_id_000813,src_000000,time_6566,execs_38039,op_havoc,rep_4 new file mode 100644 index 00000000000..f325cc459e9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000368,time_0,execs_0,orig_id_000813,src_000000,time_6566,execs_38039,op_havoc,rep_4 @@ -0,0 +1 @@ +Hello, Hello, WWorld! ó \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000374,time_0,execs_0,orig_id_000819,src_000000,time_6683,execs_38648,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000374,time_0,execs_0,orig_id_000819,src_000000,time_6683,execs_38648,op_havoc,rep_8 new file mode 100644 index 00000000000..e93ac5d423e --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000374,time_0,execs_0,orig_id_000819,src_000000,time_6683,execs_38648,op_havoc,rep_8 @@ -0,0 +1 @@ +or[58: \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000378,time_0,execs_0,orig_id_000823,src_000000,time_6778,execs_39164,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000378,time_0,execs_0,orig_id_000823,src_000000,time_6778,execs_39164,op_havoc,rep_8 new file mode 100644 index 00000000000..f5f08e1bc32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000378,time_0,execs_0,orig_id_000823,src_000000,time_6778,execs_39164,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000379,time_0,execs_0,orig_id_000824,src_000000,time_6790,execs_39240,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000379,time_0,execs_0,orig_id_000824,src_000000,time_6790,execs_39240,op_havoc,rep_8 new file mode 100644 index 00000000000..0116a3a0d87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000379,time_0,execs_0,orig_id_000824,src_000000,time_6790,execs_39240,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000382,time_0,execs_0,orig_id_000827,src_000000,time_6880,execs_39784,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000382,time_0,execs_0,orig_id_000827,src_000000,time_6880,execs_39784,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..fcd55c25bdf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000382,time_0,execs_0,orig_id_000827,src_000000,time_6880,execs_39784,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000386,time_0,execs_0,orig_id_000832,src_000000,time_7002,execs_40426,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000386,time_0,execs_0,orig_id_000832,src_000000,time_7002,execs_40426,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..0e05537ac14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000386,time_0,execs_0,orig_id_000832,src_000000,time_7002,execs_40426,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000390,time_0,execs_0,orig_id_000837,src_000000,time_7101,execs_41037,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000390,time_0,execs_0,orig_id_000837,src_000000,time_7101,execs_41037,op_havoc,rep_3 new file mode 100644 index 00000000000..963b72304b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000390,time_0,execs_0,orig_id_000837,src_000000,time_7101,execs_41037,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000392,time_0,execs_0,orig_id_000839,src_000000,time_7132,execs_41222,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000392,time_0,execs_0,orig_id_000839,src_000000,time_7132,execs_41222,op_havoc,rep_6 new file mode 100644 index 00000000000..e3ea4024936 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000392,time_0,execs_0,orig_id_000839,src_000000,time_7132,execs_41222,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000397,time_0,execs_0,orig_id_000846,src_000000,time_7243,execs_41867,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000397,time_0,execs_0,orig_id_000846,src_000000,time_7243,execs_41867,op_havoc,rep_8 new file mode 100644 index 00000000000..d234948a964 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000397,time_0,execs_0,orig_id_000846,src_000000,time_7243,execs_41867,op_havoc,rep_8 @@ -0,0 +1 @@ +[[[ñ Ž $ [[ñ Ž $ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000400,time_0,execs_0,orig_id_000852,src_000000,time_7362,execs_42541,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000400,time_0,execs_0,orig_id_000852,src_000000,time_7362,execs_42541,op_havoc,rep_7 new file mode 100644 index 00000000000..253af532a84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000400,time_0,execs_0,orig_id_000852,src_000000,time_7362,execs_42541,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000406,time_0,execs_0,orig_id_000859,src_000000,time_7542,execs_43688,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000406,time_0,execs_0,orig_id_000859,src_000000,time_7542,execs_43688,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..f9b51a2f699 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000406,time_0,execs_0,orig_id_000859,src_000000,time_7542,execs_43688,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000411,time_0,execs_0,orig_id_000865,src_000000,time_7600,execs_44042,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000411,time_0,execs_0,orig_id_000865,src_000000,time_7600,execs_44042,op_havoc,rep_7 new file mode 100644 index 00000000000..d349193dc76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000411,time_0,execs_0,orig_id_000865,src_000000,time_7600,execs_44042,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000414,time_0,execs_0,orig_id_000868,src_000000,time_7638,execs_44259,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000414,time_0,execs_0,orig_id_000868,src_000000,time_7638,execs_44259,op_havoc,rep_2 new file mode 100644 index 00000000000..162fb4dc4f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000414,time_0,execs_0,orig_id_000868,src_000000,time_7638,execs_44259,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000417,time_0,execs_0,orig_id_000871,src_000000,time_7694,execs_44604,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000417,time_0,execs_0,orig_id_000871,src_000000,time_7694,execs_44604,op_havoc,rep_6 new file mode 100644 index 00000000000..6e4957cdce9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000417,time_0,execs_0,orig_id_000871,src_000000,time_7694,execs_44604,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000418,time_0,execs_0,orig_id_000872,src_000000,time_7751,execs_44966,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000418,time_0,execs_0,orig_id_000872,src_000000,time_7751,execs_44966,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..8fab81dbe95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000418,time_0,execs_0,orig_id_000872,src_000000,time_7751,execs_44966,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000427,time_0,execs_0,orig_id_000882,src_000000,time_7913,execs_45801,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000427,time_0,execs_0,orig_id_000882,src_000000,time_7913,execs_45801,op_havoc,rep_7 new file mode 100644 index 00000000000..e6980e95302 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000427,time_0,execs_0,orig_id_000882,src_000000,time_7913,execs_45801,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000428,time_0,execs_0,orig_id_000883,src_000000,time_7917,execs_45823,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000428,time_0,execs_0,orig_id_000883,src_000000,time_7917,execs_45823,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..cc4ae69f249 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000428,time_0,execs_0,orig_id_000883,src_000000,time_7917,execs_45823,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000429,time_0,execs_0,orig_id_000884,src_000000,time_7937,execs_45948,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000429,time_0,execs_0,orig_id_000884,src_000000,time_7937,execs_45948,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..b39fcc9586d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000429,time_0,execs_0,orig_id_000884,src_000000,time_7937,execs_45948,op_havoc,rep_7,+cov @@ -0,0 +1,2 @@ +EEžE +LCDdCD \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000430,time_0,execs_0,orig_id_000885,src_000000,time_8026,execs_46481,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000430,time_0,execs_0,orig_id_000885,src_000000,time_8026,execs_46481,op_havoc,rep_6 new file mode 100644 index 00000000000..f440f5201a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000430,time_0,execs_0,orig_id_000885,src_000000,time_8026,execs_46481,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000432,time_0,execs_0,orig_id_000887,src_000000,time_8043,execs_46582,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000432,time_0,execs_0,orig_id_000887,src_000000,time_8043,execs_46582,op_havoc,rep_7 new file mode 100644 index 00000000000..22de8bf7037 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000432,time_0,execs_0,orig_id_000887,src_000000,time_8043,execs_46582,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000439,time_0,execs_0,orig_id_000894,src_000000,time_8285,execs_48002,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000439,time_0,execs_0,orig_id_000894,src_000000,time_8285,execs_48002,op_havoc,rep_8 new file mode 100644 index 00000000000..43d05c92fd1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000439,time_0,execs_0,orig_id_000894,src_000000,time_8285,execs_48002,op_havoc,rep_8 @@ -0,0 +1 @@ +ÿÿootpEl  \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000441,time_0,execs_0,orig_id_000896,src_000000,time_8320,execs_48223,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000441,time_0,execs_0,orig_id_000896,src_000000,time_8320,execs_48223,op_havoc,rep_2 new file mode 100644 index 00000000000..83be7eb19b7 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000441,time_0,execs_0,orig_id_000896,src_000000,time_8320,execs_48223,op_havoc,rep_2 @@ -0,0 +1 @@ +€Helloìì‚ìì, World! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000444,time_0,execs_0,orig_id_000899,src_000000,time_8336,execs_48315,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000444,time_0,execs_0,orig_id_000899,src_000000,time_8336,execs_48315,op_havoc,rep_7 new file mode 100644 index 00000000000..625ab0eb706 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000444,time_0,execs_0,orig_id_000899,src_000000,time_8336,execs_48315,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000446,time_0,execs_0,orig_id_000902,src_000000,time_8376,execs_48575,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000446,time_0,execs_0,orig_id_000902,src_000000,time_8376,execs_48575,op_havoc,rep_8 new file mode 100644 index 00000000000..07fea003018 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000446,time_0,execs_0,orig_id_000902,src_000000,time_8376,execs_48575,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000447,time_0,execs_0,orig_id_000903,src_000000,time_8388,execs_48646,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000447,time_0,execs_0,orig_id_000903,src_000000,time_8388,execs_48646,op_havoc,rep_4 new file mode 100644 index 00000000000..afb073a8c9e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000447,time_0,execs_0,orig_id_000903,src_000000,time_8388,execs_48646,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000452,time_0,execs_0,orig_id_000909,src_000000,time_8555,execs_49654,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000452,time_0,execs_0,orig_id_000909,src_000000,time_8555,execs_49654,op_havoc,rep_6 new file mode 100644 index 00000000000..5f03793a321 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000452,time_0,execs_0,orig_id_000909,src_000000,time_8555,execs_49654,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000453,time_0,execs_0,orig_id_000910,src_000000,time_8562,execs_49687,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000453,time_0,execs_0,orig_id_000910,src_000000,time_8562,execs_49687,op_havoc,rep_1 new file mode 100644 index 00000000000..ffcf70ccf83 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000453,time_0,execs_0,orig_id_000910,src_000000,time_8562,execs_49687,op_havoc,rep_1 @@ -0,0 +1 @@ +DMDMlÿDMlÿlÿD \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000466,time_0,execs_0,orig_id_000926,src_000000,time_9015,execs_52375,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000466,time_0,execs_0,orig_id_000926,src_000000,time_9015,execs_52375,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..6f63d22012f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000466,time_0,execs_0,orig_id_000926,src_000000,time_9015,execs_52375,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000467,time_0,execs_0,orig_id_000927,src_000000,time_9025,execs_52430,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000467,time_0,execs_0,orig_id_000927,src_000000,time_9025,execs_52430,op_havoc,rep_8 new file mode 100644 index 00000000000..8b25367060b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000467,time_0,execs_0,orig_id_000927,src_000000,time_9025,execs_52430,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000472,time_0,execs_0,orig_id_000934,src_000000,time_9228,execs_53628,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000472,time_0,execs_0,orig_id_000934,src_000000,time_9228,execs_53628,op_havoc,rep_7 new file mode 100644 index 00000000000..e8cc3277387 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000472,time_0,execs_0,orig_id_000934,src_000000,time_9228,execs_53628,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000475,time_0,execs_0,orig_id_000937,src_000000,time_9272,execs_53815,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000475,time_0,execs_0,orig_id_000937,src_000000,time_9272,execs_53815,op_havoc,rep_8 new file mode 100644 index 00000000000..674a6fbedad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000475,time_0,execs_0,orig_id_000937,src_000000,time_9272,execs_53815,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000477,time_0,execs_0,orig_id_000939,src_000000,time_9285,execs_53875,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000477,time_0,execs_0,orig_id_000939,src_000000,time_9285,execs_53875,op_havoc,rep_6 new file mode 100644 index 00000000000..00dc356c633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000477,time_0,execs_0,orig_id_000939,src_000000,time_9285,execs_53875,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000481,time_0,execs_0,orig_id_000943,src_000000,time_9373,execs_54372,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000481,time_0,execs_0,orig_id_000943,src_000000,time_9373,execs_54372,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..c65ad47e21f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000481,time_0,execs_0,orig_id_000943,src_000000,time_9373,execs_54372,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000487,time_0,execs_0,orig_id_000950,src_000000,time_9525,execs_55281,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000487,time_0,execs_0,orig_id_000950,src_000000,time_9525,execs_55281,op_havoc,rep_6 new file mode 100644 index 00000000000..fa6fbafa604 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000487,time_0,execs_0,orig_id_000950,src_000000,time_9525,execs_55281,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000488,time_0,execs_0,orig_id_000952,src_000000,time_9547,execs_55362,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000488,time_0,execs_0,orig_id_000952,src_000000,time_9547,execs_55362,op_havoc,rep_8 new file mode 100644 index 00000000000..38eba988e4f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000488,time_0,execs_0,orig_id_000952,src_000000,time_9547,execs_55362,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000490,time_0,execs_0,orig_id_000954,src_000000,time_9562,execs_55451,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000490,time_0,execs_0,orig_id_000954,src_000000,time_9562,execs_55451,op_havoc,rep_4 new file mode 100644 index 00000000000..296cd86a376 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000490,time_0,execs_0,orig_id_000954,src_000000,time_9562,execs_55451,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000494,time_0,execs_0,orig_id_000958,src_000000,time_9724,execs_56460,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000494,time_0,execs_0,orig_id_000958,src_000000,time_9724,execs_56460,op_havoc,rep_3 new file mode 100644 index 00000000000..5a09f36ce28 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000494,time_0,execs_0,orig_id_000958,src_000000,time_9724,execs_56460,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000497,time_0,execs_0,orig_id_000961,src_000000,time_9831,execs_57096,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000497,time_0,execs_0,orig_id_000961,src_000000,time_9831,execs_57096,op_havoc,rep_4 new file mode 100644 index 00000000000..5618789ade7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000497,time_0,execs_0,orig_id_000961,src_000000,time_9831,execs_57096,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000504,time_0,execs_0,orig_id_000968,src_000000,time_9979,execs_57956,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000504,time_0,execs_0,orig_id_000968,src_000000,time_9979,execs_57956,op_havoc,rep_2 new file mode 100644 index 00000000000..f7314ac09cd --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000504,time_0,execs_0,orig_id_000968,src_000000,time_9979,execs_57956,op_havoc,rep_2 @@ -0,0 +1 @@ +;HC›ZZZZZZZZZZZ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000505,time_0,execs_0,orig_id_000969,src_000000,time_10003,execs_58103,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000505,time_0,execs_0,orig_id_000969,src_000000,time_10003,execs_58103,op_havoc,rep_5 new file mode 100644 index 00000000000..1a843aad7ee --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000505,time_0,execs_0,orig_id_000969,src_000000,time_10003,execs_58103,op_havoc,rep_5 @@ -0,0 +1 @@ +,0H0Hh[?104}, Wofo,0H0Hh[?104}, Wofoo[31¶¶¶¶o[31¶¶¶¶ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000506,time_0,execs_0,orig_id_000971,src_000003,time_10045,execs_58301,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000506,time_0,execs_0,orig_id_000971,src_000003,time_10045,execs_58301,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..b981516e345 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000506,time_0,execs_0,orig_id_000971,src_000003,time_10045,execs_58301,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000513,time_0,execs_0,orig_id_000981,src_000003,time_10169,execs_58657,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000513,time_0,execs_0,orig_id_000981,src_000003,time_10169,execs_58657,op_havoc,rep_3 new file mode 100644 index 00000000000..9c4bf231f25 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000513,time_0,execs_0,orig_id_000981,src_000003,time_10169,execs_58657,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000514,time_0,execs_0,orig_id_000984,src_000003,time_10190,execs_58715,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000514,time_0,execs_0,orig_id_000984,src_000003,time_10190,execs_58715,op_havoc,rep_8 new file mode 100644 index 00000000000..1248cbd0f17 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000514,time_0,execs_0,orig_id_000984,src_000003,time_10190,execs_58715,op_havoc,rep_8 @@ -0,0 +1 @@ +[2Jÿ[ÿÿJÿ[ð- W‘rlèð- W‘rlè*Hl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000521,time_0,execs_0,orig_id_000994,src_000003,time_10324,execs_59164,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000521,time_0,execs_0,orig_id_000994,src_000003,time_10324,execs_59164,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..5a38b35cefe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000521,time_0,execs_0,orig_id_000994,src_000003,time_10324,execs_59164,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000526,time_0,execs_0,orig_id_000999,src_000003,time_10342,execs_59238,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000526,time_0,execs_0,orig_id_000999,src_000003,time_10342,execs_59238,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..e86358608df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000526,time_0,execs_0,orig_id_000999,src_000003,time_10342,execs_59238,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000528,time_0,execs_0,orig_id_001002,src_000003,time_10381,execs_59394,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000528,time_0,execs_0,orig_id_001002,src_000003,time_10381,execs_59394,op_havoc,rep_4 new file mode 100644 index 00000000000..a7df9df220e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000528,time_0,execs_0,orig_id_001002,src_000003,time_10381,execs_59394,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000529,time_0,execs_0,orig_id_001003,src_000003,time_10384,execs_59407,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000529,time_0,execs_0,orig_id_001003,src_000003,time_10384,execs_59407,op_havoc,rep_4 new file mode 100644 index 00000000000..c28c81d1efc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000529,time_0,execs_0,orig_id_001003,src_000003,time_10384,execs_59407,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000530,time_0,execs_0,orig_id_001004,src_000003,time_10395,execs_59428,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000530,time_0,execs_0,orig_id_001004,src_000003,time_10395,execs_59428,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..5bf33fbd5b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000530,time_0,execs_0,orig_id_001004,src_000003,time_10395,execs_59428,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000531,time_0,execs_0,orig_id_001005,src_000003,time_10398,execs_59438,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000531,time_0,execs_0,orig_id_001005,src_000003,time_10398,execs_59438,op_havoc,rep_8 new file mode 100644 index 00000000000..0af7fa377c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000531,time_0,execs_0,orig_id_001005,src_000003,time_10398,execs_59438,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000534,time_0,execs_0,orig_id_001009,src_000003,time_10464,execs_59654,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000534,time_0,execs_0,orig_id_001009,src_000003,time_10464,execs_59654,op_havoc,rep_4 new file mode 100644 index 00000000000..dd4082bd3d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000534,time_0,execs_0,orig_id_001009,src_000003,time_10464,execs_59654,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000537,time_0,execs_0,orig_id_001012,src_000003,time_10526,execs_59900,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000537,time_0,execs_0,orig_id_001012,src_000003,time_10526,execs_59900,op_havoc,rep_3 new file mode 100644 index 00000000000..029ead3b3c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000537,time_0,execs_0,orig_id_001012,src_000003,time_10526,execs_59900,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000542,time_0,execs_0,orig_id_001018,src_000003,time_10605,execs_60173,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000542,time_0,execs_0,orig_id_001018,src_000003,time_10605,execs_60173,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..06316b1630d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000542,time_0,execs_0,orig_id_001018,src_000003,time_10605,execs_60173,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000543,time_0,execs_0,orig_id_001019,src_000003,time_10607,execs_60181,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000543,time_0,execs_0,orig_id_001019,src_000003,time_10607,execs_60181,op_havoc,rep_4 new file mode 100644 index 00000000000..05c2503aeb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000543,time_0,execs_0,orig_id_001019,src_000003,time_10607,execs_60181,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000547,time_0,execs_0,orig_id_001024,src_000003,time_10665,execs_60351,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000547,time_0,execs_0,orig_id_001024,src_000003,time_10665,execs_60351,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..869f8159749 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000547,time_0,execs_0,orig_id_001024,src_000003,time_10665,execs_60351,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000549,time_0,execs_0,orig_id_001027,src_000003,time_10715,execs_60535,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000549,time_0,execs_0,orig_id_001027,src_000003,time_10715,execs_60535,op_havoc,rep_1 new file mode 100644 index 00000000000..1c7e9f2ed1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000549,time_0,execs_0,orig_id_001027,src_000003,time_10715,execs_60535,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000551,time_0,execs_0,orig_id_001030,src_000003,time_10766,execs_60732,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000551,time_0,execs_0,orig_id_001030,src_000003,time_10766,execs_60732,op_havoc,rep_8 new file mode 100644 index 00000000000..23f5cdca345 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000551,time_0,execs_0,orig_id_001030,src_000003,time_10766,execs_60732,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000552,time_0,execs_0,orig_id_001031,src_000003,time_10776,execs_60760,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000552,time_0,execs_0,orig_id_001031,src_000003,time_10776,execs_60760,op_havoc,rep_7 new file mode 100644 index 00000000000..d3722e9389d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000552,time_0,execs_0,orig_id_001031,src_000003,time_10776,execs_60760,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000557,time_0,execs_0,orig_id_001037,src_000003,time_10849,execs_61018,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000557,time_0,execs_0,orig_id_001037,src_000003,time_10849,execs_61018,op_havoc,rep_7 new file mode 100644 index 00000000000..b39c58dcfea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000557,time_0,execs_0,orig_id_001037,src_000003,time_10849,execs_61018,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000564,time_0,execs_0,orig_id_001044,src_000003,time_10962,execs_61344,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000564,time_0,execs_0,orig_id_001044,src_000003,time_10962,execs_61344,op_havoc,rep_7 new file mode 100644 index 00000000000..f3f4d3c6cc9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000564,time_0,execs_0,orig_id_001044,src_000003,time_10962,execs_61344,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000569,time_0,execs_0,orig_id_001049,src_000003,time_11030,execs_61533,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000569,time_0,execs_0,orig_id_001049,src_000003,time_11030,execs_61533,op_havoc,rep_8 new file mode 100644 index 00000000000..bf2b9b0b213 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000569,time_0,execs_0,orig_id_001049,src_000003,time_11030,execs_61533,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000575,time_0,execs_0,orig_id_001058,src_000003,time_11167,execs_62010,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000575,time_0,execs_0,orig_id_001058,src_000003,time_11167,execs_62010,op_havoc,rep_8 new file mode 100644 index 00000000000..bc7a7dcfb0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000575,time_0,execs_0,orig_id_001058,src_000003,time_11167,execs_62010,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000587,time_0,execs_0,orig_id_001071,src_000003,time_11388,execs_62754,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000587,time_0,execs_0,orig_id_001071,src_000003,time_11388,execs_62754,op_havoc,rep_7 new file mode 100644 index 00000000000..a2f66bd7830 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000587,time_0,execs_0,orig_id_001071,src_000003,time_11388,execs_62754,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000594,time_0,execs_0,orig_id_001078,src_000003,time_11534,execs_63238,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000594,time_0,execs_0,orig_id_001078,src_000003,time_11534,execs_63238,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..8e7d18677aa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000594,time_0,execs_0,orig_id_001078,src_000003,time_11534,execs_63238,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000595,time_0,execs_0,orig_id_001079,src_000003,time_11551,execs_63305,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000595,time_0,execs_0,orig_id_001079,src_000003,time_11551,execs_63305,op_havoc,rep_3 new file mode 100644 index 00000000000..8be08954426 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000595,time_0,execs_0,orig_id_001079,src_000003,time_11551,execs_63305,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000597,time_0,execs_0,orig_id_001081,src_000003,time_11606,execs_63495,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000597,time_0,execs_0,orig_id_001081,src_000003,time_11606,execs_63495,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..70595bf3f43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000597,time_0,execs_0,orig_id_001081,src_000003,time_11606,execs_63495,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000600,time_0,execs_0,orig_id_001084,src_000003,time_11660,execs_63700,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000600,time_0,execs_0,orig_id_001084,src_000003,time_11660,execs_63700,op_havoc,rep_3 new file mode 100644 index 00000000000..1105994bd6f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000600,time_0,execs_0,orig_id_001084,src_000003,time_11660,execs_63700,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000604,time_0,execs_0,orig_id_001088,src_000003,time_11722,execs_63902,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000604,time_0,execs_0,orig_id_001088,src_000003,time_11722,execs_63902,op_havoc,rep_8 new file mode 100644 index 00000000000..711e44bc785 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000604,time_0,execs_0,orig_id_001088,src_000003,time_11722,execs_63902,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000605,time_0,execs_0,orig_id_001089,src_000003,time_11740,execs_63964,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000605,time_0,execs_0,orig_id_001089,src_000003,time_11740,execs_63964,op_havoc,rep_3 new file mode 100644 index 00000000000..6ac8d941171 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000605,time_0,execs_0,orig_id_001089,src_000003,time_11740,execs_63964,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000607,time_0,execs_0,orig_id_001091,src_000003,time_11797,execs_64164,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000607,time_0,execs_0,orig_id_001091,src_000003,time_11797,execs_64164,op_havoc,rep_8 new file mode 100644 index 00000000000..492acb13e88 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000607,time_0,execs_0,orig_id_001091,src_000003,time_11797,execs_64164,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000608,time_0,execs_0,orig_id_001092,src_000003,time_11842,execs_64327,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000608,time_0,execs_0,orig_id_001092,src_000003,time_11842,execs_64327,op_havoc,rep_3 new file mode 100644 index 00000000000..26aaf1846d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000608,time_0,execs_0,orig_id_001092,src_000003,time_11842,execs_64327,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000609,time_0,execs_0,orig_id_001093,src_000003,time_11863,execs_64399,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000609,time_0,execs_0,orig_id_001093,src_000003,time_11863,execs_64399,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..1b92d8e2e57 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000609,time_0,execs_0,orig_id_001093,src_000003,time_11863,execs_64399,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000613,time_0,execs_0,orig_id_001097,src_000003,time_11912,execs_64575,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000613,time_0,execs_0,orig_id_001097,src_000003,time_11912,execs_64575,op_havoc,rep_6 new file mode 100644 index 00000000000..9615ada9072 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000613,time_0,execs_0,orig_id_001097,src_000003,time_11912,execs_64575,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000617,time_0,execs_0,orig_id_001101,src_000003,time_11966,execs_64760,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000617,time_0,execs_0,orig_id_001101,src_000003,time_11966,execs_64760,op_havoc,rep_6 new file mode 100644 index 00000000000..b4e8d14593f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000617,time_0,execs_0,orig_id_001101,src_000003,time_11966,execs_64760,op_havoc,rep_6 @@ -0,0 +1 @@ +ÿÿÿorûÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ*CDZ3mhvllo[[Hline \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000618,time_0,execs_0,orig_id_001102,src_000003,time_11970,execs_64779,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000618,time_0,execs_0,orig_id_001102,src_000003,time_11970,execs_64779,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..875fdc516a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000618,time_0,execs_0,orig_id_001102,src_000003,time_11970,execs_64779,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000628,time_0,execs_0,orig_id_001112,src_000003,time_12141,execs_65369,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000628,time_0,execs_0,orig_id_001112,src_000003,time_12141,execs_65369,op_havoc,rep_5 new file mode 100644 index 00000000000..c29f462600b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000628,time_0,execs_0,orig_id_001112,src_000003,time_12141,execs_65369,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000631,time_0,execs_0,orig_id_001115,src_000003,time_12218,execs_65587,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_000631,time_0,execs_0,orig_id_001115,src_000003,time_12218,execs_65587,op_havoc,rep_6 new file mode 100644 index 00000000000..fefb6a27479 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000631,time_0,execs_0,orig_id_001115,src_000003,time_12218,execs_65587,op_havoc,rep_6 @@ -0,0 +1 @@ +[mH[mHq \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000634,time_0,execs_0,orig_id_001118,src_000003,time_12234,execs_65636,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_000634,time_0,execs_0,orig_id_001118,src_000003,time_12234,execs_65636,op_havoc,rep_3 new file mode 100644 index 00000000000..794872c237b --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000634,time_0,execs_0,orig_id_001118,src_000003,time_12234,execs_65636,op_havoc,rep_3 @@ -0,0 +1 @@ +VJline \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000637,time_0,execs_0,orig_id_001121,src_000003,time_12288,execs_65821,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_000637,time_0,execs_0,orig_id_001121,src_000003,time_12288,execs_65821,op_havoc,rep_5 new file mode 100644 index 00000000000..7d0d90d74d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000637,time_0,execs_0,orig_id_001121,src_000003,time_12288,execs_65821,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000642,time_0,execs_0,orig_id_001126,src_000003,time_12377,execs_66096,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000642,time_0,execs_0,orig_id_001126,src_000003,time_12377,execs_66096,op_havoc,rep_4 new file mode 100644 index 00000000000..b866d31fba1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000642,time_0,execs_0,orig_id_001126,src_000003,time_12377,execs_66096,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000647,time_0,execs_0,orig_id_001131,src_000003,time_12433,execs_66295,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_000647,time_0,execs_0,orig_id_001131,src_000003,time_12433,execs_66295,op_havoc,rep_8 new file mode 100644 index 00000000000..d2d699b3b91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000647,time_0,execs_0,orig_id_001131,src_000003,time_12433,execs_66295,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000652,time_0,execs_0,orig_id_001136,src_000003,time_12585,execs_66819,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_000652,time_0,execs_0,orig_id_001136,src_000003,time_12585,execs_66819,op_havoc,rep_4 new file mode 100644 index 00000000000..9e9e921fafe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000652,time_0,execs_0,orig_id_001136,src_000003,time_12585,execs_66819,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000654,time_0,execs_0,orig_id_001138,src_000003,time_12649,execs_67048,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_000654,time_0,execs_0,orig_id_001138,src_000003,time_12649,execs_67048,op_havoc,rep_7 new file mode 100644 index 00000000000..aed7dbc882c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000654,time_0,execs_0,orig_id_001138,src_000003,time_12649,execs_67048,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000657,src_000000,time_63,execs_4855,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000657,src_000000,time_63,execs_4855,op_havoc,rep_2 new file mode 100644 index 00000000000..4834427b43a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000657,src_000000,time_63,execs_4855,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000659,src_000000,time_70,execs_4889,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000659,src_000000,time_70,execs_4889,op_havoc,rep_2 new file mode 100644 index 00000000000..725d12d2ea5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000659,src_000000,time_70,execs_4889,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000667,src_000000,time_218,execs_5870,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000667,src_000000,time_218,execs_5870,op_havoc,rep_2 new file mode 100644 index 00000000000..cce20892477 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000667,src_000000,time_218,execs_5870,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000668,src_000000,time_236,execs_5996,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000668,src_000000,time_236,execs_5996,op_havoc,rep_2 new file mode 100644 index 00000000000..543dde0dfe7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000668,src_000000,time_236,execs_5996,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000669,src_000000,time_240,execs_6022,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000669,src_000000,time_240,execs_6022,op_havoc,rep_2 new file mode 100644 index 00000000000..d0235f93cf5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000669,src_000000,time_240,execs_6022,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000671,src_000000,time_248,execs_6073,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000671,src_000000,time_248,execs_6073,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..fbe80936bc8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000671,src_000000,time_248,execs_6073,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000672,src_000000,time_250,execs_6082,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000672,src_000000,time_250,execs_6082,op_havoc,rep_2 new file mode 100644 index 00000000000..5a86b969f33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000672,src_000000,time_250,execs_6082,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000677,src_000000,time_339,execs_6674,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000677,src_000000,time_339,execs_6674,op_havoc,rep_2 new file mode 100644 index 00000000000..6edf191b08e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000677,src_000000,time_339,execs_6674,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000683,src_000000,time_493,execs_7783,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000683,src_000000,time_493,execs_7783,op_havoc,rep_2 new file mode 100644 index 00000000000..d82616dc518 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000683,src_000000,time_493,execs_7783,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000690,src_000000,time_624,execs_8693,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000690,src_000000,time_624,execs_8693,op_havoc,rep_1 new file mode 100644 index 00000000000..f5a34a02b34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000690,src_000000,time_624,execs_8693,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000692,src_000000,time_696,execs_9212,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000692,src_000000,time_696,execs_9212,op_havoc,rep_2 new file mode 100644 index 00000000000..fb4069f79e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000692,src_000000,time_696,execs_9212,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000694,src_000000,time_756,execs_9633,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000694,src_000000,time_756,execs_9633,op_havoc,rep_1 new file mode 100644 index 00000000000..a615e8a7f9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000694,src_000000,time_756,execs_9633,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000697,src_000000,time_872,execs_10465,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000697,src_000000,time_872,execs_10465,op_havoc,rep_2 new file mode 100644 index 00000000000..c77d5a34659 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000697,src_000000,time_872,execs_10465,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000698,src_000000,time_919,execs_10798,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000698,src_000000,time_919,execs_10798,op_havoc,rep_2 new file mode 100644 index 00000000000..2503223996f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000698,src_000000,time_919,execs_10798,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000699,src_000000,time_922,execs_10816,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000699,src_000000,time_922,execs_10816,op_havoc,rep_2 new file mode 100644 index 00000000000..63c94f36f93 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000699,src_000000,time_922,execs_10816,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000709,src_000000,time_1564,execs_15621,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000709,src_000000,time_1564,execs_15621,op_havoc,rep_2 new file mode 100644 index 00000000000..4de9e9886ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000709,src_000000,time_1564,execs_15621,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000710,src_000000,time_1652,execs_16287,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000710,src_000000,time_1652,execs_16287,op_havoc,rep_2 new file mode 100644 index 00000000000..1e527d0423b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000710,src_000000,time_1652,execs_16287,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000712,src_000000,time_1787,execs_17309,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000712,src_000000,time_1787,execs_17309,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..67958d9e2e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000712,src_000000,time_1787,execs_17309,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000714,src_000002,time_1869,execs_17906,op_quick,pos_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000714,src_000002,time_1869,execs_17906,op_quick,pos_9,+cov new file mode 100644 index 00000000000..79aeecdeaf8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000714,src_000002,time_1869,execs_17906,op_quick,pos_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000734,src_000002,time_1943,execs_18363,op_arith8,pos_17,val_+10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000734,src_000002,time_1943,execs_18363,op_arith8,pos_17,val_+10,+cov new file mode 100644 index 00000000000..a21365bc4da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000734,src_000002,time_1943,execs_18363,op_arith8,pos_17,val_+10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000741,src_000002,time_2057,execs_19128,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000741,src_000002,time_2057,execs_19128,op_havoc,rep_1 new file mode 100644 index 00000000000..90c863d4fab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000741,src_000002,time_2057,execs_19128,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000754,src_000002,time_2124,execs_19559,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000754,src_000002,time_2124,execs_19559,op_havoc,rep_1 new file mode 100644 index 00000000000..4ade6bd256d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000754,src_000002,time_2124,execs_19559,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000756,src_000002,time_2134,execs_19581,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000756,src_000002,time_2134,execs_19581,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..2facc76272b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000756,src_000002,time_2134,execs_19581,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000761,src_000002,time_2155,execs_19700,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000761,src_000002,time_2155,execs_19700,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..cabff826590 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000761,src_000002,time_2155,execs_19700,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000763,src_000002,time_2175,execs_19846,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000763,src_000002,time_2175,execs_19846,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..27ba1636896 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000763,src_000002,time_2175,execs_19846,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000770,src_000002,time_2209,execs_20060,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000770,src_000002,time_2209,execs_20060,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..f5d70898055 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000770,src_000002,time_2209,execs_20060,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000771,src_000002,time_2214,execs_20096,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000771,src_000002,time_2214,execs_20096,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..d471e7aa408 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000771,src_000002,time_2214,execs_20096,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000774,src_000002,time_2230,execs_20193,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000774,src_000002,time_2230,execs_20193,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..6588df38fa7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000774,src_000002,time_2230,execs_20193,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000786,src_000002,time_2325,execs_20759,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000786,src_000002,time_2325,execs_20759,op_havoc,rep_1 new file mode 100644 index 00000000000..5d766530f56 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000786,src_000002,time_2325,execs_20759,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000787,src_000002,time_2335,execs_20827,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000787,src_000002,time_2335,execs_20827,op_havoc,rep_2 new file mode 100644 index 00000000000..e761bd491fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000787,src_000002,time_2335,execs_20827,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000788,src_000002,time_2366,execs_21052,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000788,src_000002,time_2366,execs_21052,op_havoc,rep_2 new file mode 100644 index 00000000000..97cfb6bd32d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000788,src_000002,time_2366,execs_21052,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000791,src_000002,time_2384,execs_21178,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000791,src_000002,time_2384,execs_21178,op_havoc,rep_1 new file mode 100644 index 00000000000..12426736f9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000791,src_000002,time_2384,execs_21178,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000795,src_000002,time_2427,execs_21464,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000795,src_000002,time_2427,execs_21464,op_havoc,rep_2 new file mode 100644 index 00000000000..7f985d4fe53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000795,src_000002,time_2427,execs_21464,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000798,src_000002,time_2458,execs_21676,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000798,src_000002,time_2458,execs_21676,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..dd3043d1cf6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000798,src_000002,time_2458,execs_21676,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000809,src_000002,time_2597,execs_22602,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000809,src_000002,time_2597,execs_22602,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..3fbbae87e4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000809,src_000002,time_2597,execs_22602,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000810,src_000002,time_2607,execs_22665,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000810,src_000002,time_2607,execs_22665,op_havoc,rep_2 new file mode 100644 index 00000000000..acb4979505b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000810,src_000002,time_2607,execs_22665,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000812,src_000002,time_2631,execs_22785,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000812,src_000002,time_2631,execs_22785,op_havoc,rep_2 new file mode 100644 index 00000000000..1d06de46ac4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000812,src_000002,time_2631,execs_22785,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000815,src_000002,time_2658,execs_22902,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000815,src_000002,time_2658,execs_22902,op_havoc,rep_2 new file mode 100644 index 00000000000..7b667a1a219 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000815,src_000002,time_2658,execs_22902,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000820,src_000002,time_2743,execs_23483,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000820,src_000002,time_2743,execs_23483,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..5895ed21c7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000820,src_000002,time_2743,execs_23483,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000824,src_000002,time_2780,execs_23727,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000824,src_000002,time_2780,execs_23727,op_havoc,rep_2 new file mode 100644 index 00000000000..e4ab0b6ab63 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000824,src_000002,time_2780,execs_23727,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000825,src_000002,time_2783,execs_23745,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000825,src_000002,time_2783,execs_23745,op_havoc,rep_2 new file mode 100644 index 00000000000..d03bf8034e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000825,src_000002,time_2783,execs_23745,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000826,src_000002,time_2800,execs_23866,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000826,src_000002,time_2800,execs_23866,op_havoc,rep_2 new file mode 100644 index 00000000000..eaf70d10d70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000826,src_000002,time_2800,execs_23866,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000833,src_000002,time_2951,execs_24946,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000833,src_000002,time_2951,execs_24946,op_havoc,rep_2 new file mode 100644 index 00000000000..27c8c8022a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000833,src_000002,time_2951,execs_24946,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000836,src_000002,time_2984,execs_25171,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000836,src_000002,time_2984,execs_25171,op_havoc,rep_2 new file mode 100644 index 00000000000..446c3a5fcea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000836,src_000002,time_2984,execs_25171,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000837,src_000002,time_3055,execs_25709,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000837,src_000002,time_3055,execs_25709,op_havoc,rep_2 new file mode 100644 index 00000000000..96cdf5cc2f0 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_000837,src_000002,time_3055,execs_25709,op_havoc,rep_2 @@ -0,0 +1 @@ +[38;5;1:::::::::::::::::::::::::n bg \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000838,src_000002,time_3086,execs_25937,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000838,src_000002,time_3086,execs_25937,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..c828407a87f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000838,src_000002,time_3086,execs_25937,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000855,src_000002,time_3365,execs_27742,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000855,src_000002,time_3365,execs_27742,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..383150fee8a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000855,src_000002,time_3365,execs_27742,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000858,src_000002,time_3422,execs_28008,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000858,src_000002,time_3422,execs_28008,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ad075757796 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000858,src_000002,time_3422,execs_28008,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000860,src_000002,time_3517,execs_28704,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000860,src_000002,time_3517,execs_28704,op_havoc,rep_1 new file mode 100644 index 00000000000..1669858933b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000860,src_000002,time_3517,execs_28704,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000861,src_000002,time_3534,execs_28837,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000861,src_000002,time_3534,execs_28837,op_havoc,rep_2 new file mode 100644 index 00000000000..14415acaa2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000861,src_000002,time_3534,execs_28837,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000864,src_000002,time_3552,execs_28950,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000864,src_000002,time_3552,execs_28950,op_havoc,rep_2 new file mode 100644 index 00000000000..8e02f32bde2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000864,src_000002,time_3552,execs_28950,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000867,src_000002,time_3647,execs_29650,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000867,src_000002,time_3647,execs_29650,op_havoc,rep_2 new file mode 100644 index 00000000000..4ac1bb96e27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000867,src_000002,time_3647,execs_29650,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000872,src_000002,time_3761,execs_30452,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000872,src_000002,time_3761,execs_30452,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a2a01b99668 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000872,src_000002,time_3761,execs_30452,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000875,src_000002,time_3802,execs_30758,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000875,src_000002,time_3802,execs_30758,op_havoc,rep_2 new file mode 100644 index 00000000000..61c3324625c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000875,src_000002,time_3802,execs_30758,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000877,src_000002,time_3837,execs_30994,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000877,src_000002,time_3837,execs_30994,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..c8bbd6f45e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000877,src_000002,time_3837,execs_30994,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000885,src_000002,time_3920,execs_31354,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000885,src_000002,time_3920,execs_31354,op_havoc,rep_1 new file mode 100644 index 00000000000..9a26cfc4506 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000885,src_000002,time_3920,execs_31354,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000886,src_000002,time_3958,execs_31644,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000886,src_000002,time_3958,execs_31644,op_havoc,rep_2 new file mode 100644 index 00000000000..c5871366cf3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000886,src_000002,time_3958,execs_31644,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000887,src_000002,time_3972,execs_31738,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000887,src_000002,time_3972,execs_31738,op_havoc,rep_2 new file mode 100644 index 00000000000..aba1329af78 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000887,src_000002,time_3972,execs_31738,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000889,src_000002,time_3983,execs_31816,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000889,src_000002,time_3983,execs_31816,op_havoc,rep_2 new file mode 100644 index 00000000000..5ab3ff973e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000889,src_000002,time_3983,execs_31816,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000891,src_000002,time_4067,execs_32451,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000891,src_000002,time_4067,execs_32451,op_havoc,rep_2 new file mode 100644 index 00000000000..ef1af535295 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000891,src_000002,time_4067,execs_32451,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000892,src_000002,time_4071,execs_32481,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000892,src_000002,time_4071,execs_32481,op_havoc,rep_2 new file mode 100644 index 00000000000..faa50bef6c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000892,src_000002,time_4071,execs_32481,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000893,src_000002,time_4101,execs_32684,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000893,src_000002,time_4101,execs_32684,op_havoc,rep_2 new file mode 100644 index 00000000000..06ee5b6a267 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000893,src_000002,time_4101,execs_32684,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000899,src_000002,time_4170,execs_33066,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000899,src_000002,time_4170,execs_33066,op_havoc,rep_2 new file mode 100644 index 00000000000..c2b5aa10a15 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000899,src_000002,time_4170,execs_33066,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000900,src_000002,time_4183,execs_33157,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000900,src_000002,time_4183,execs_33157,op_havoc,rep_2 new file mode 100644 index 00000000000..12f676a39fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000900,src_000002,time_4183,execs_33157,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000910,src_000002,time_4629,execs_36374,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000910,src_000002,time_4629,execs_36374,op_havoc,rep_2 new file mode 100644 index 00000000000..9aa9a7ecf7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000910,src_000002,time_4629,execs_36374,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000911,src_000002,time_4641,execs_36454,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000911,src_000002,time_4641,execs_36454,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..409056e3310 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000911,src_000002,time_4641,execs_36454,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000921,src_000002,time_4803,execs_37560,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000921,src_000002,time_4803,execs_37560,op_havoc,rep_1 new file mode 100644 index 00000000000..80e43c7e78b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000921,src_000002,time_4803,execs_37560,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000931,src_000002,time_5235,execs_40565,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000931,src_000002,time_5235,execs_40565,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..c5e9ce517f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000931,src_000002,time_5235,execs_40565,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000932,src_000002,time_5277,execs_40881,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000932,src_000002,time_5277,execs_40881,op_havoc,rep_1 new file mode 100644 index 00000000000..579ddd1cc5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000932,src_000002,time_5277,execs_40881,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000938,src_000002,time_5479,execs_42255,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000938,src_000002,time_5479,execs_42255,op_havoc,rep_2 new file mode 100644 index 00000000000..952f2ce0450 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000938,src_000002,time_5479,execs_42255,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000949,src_000002,time_5931,execs_45299,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000949,src_000002,time_5931,execs_45299,op_havoc,rep_2 new file mode 100644 index 00000000000..c9f30499029 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000949,src_000002,time_5931,execs_45299,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000950,src_000002,time_5976,execs_45536,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000950,src_000002,time_5976,execs_45536,op_havoc,rep_1 new file mode 100644 index 00000000000..92d921b8e1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000950,src_000002,time_5976,execs_45536,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000951,src_000002,time_5979,execs_45557,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000951,src_000002,time_5979,execs_45557,op_havoc,rep_2 new file mode 100644 index 00000000000..e52b7966dae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000951,src_000002,time_5979,execs_45557,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000952,src_000002,time_6144,execs_46736,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000952,src_000002,time_6144,execs_46736,op_havoc,rep_2 new file mode 100644 index 00000000000..a1de1f4f85f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000952,src_000002,time_6144,execs_46736,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000953,src_000002,time_6161,execs_46850,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000953,src_000002,time_6161,execs_46850,op_havoc,rep_2 new file mode 100644 index 00000000000..b5b098f201c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000953,src_000002,time_6161,execs_46850,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000954,src_000002,time_6245,execs_47481,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000954,src_000002,time_6245,execs_47481,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..105f1088d71 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000954,src_000002,time_6245,execs_47481,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000956,src_000002,time_6361,execs_48280,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000956,src_000002,time_6361,execs_48280,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..c8e3c3f209b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000956,src_000002,time_6361,execs_48280,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000962,src_000002,time_6647,execs_50390,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000962,src_000002,time_6647,execs_50390,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..be76f34c85b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000962,src_000002,time_6647,execs_50390,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000966,src_000002,time_6749,execs_51048,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000966,src_000002,time_6749,execs_51048,op_havoc,rep_2 new file mode 100644 index 00000000000..97fcb14b897 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000966,src_000002,time_6749,execs_51048,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000967,src_000002,time_6787,execs_51327,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000967,src_000002,time_6787,execs_51327,op_havoc,rep_2 new file mode 100644 index 00000000000..224ae01764f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000967,src_000002,time_6787,execs_51327,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000968,src_000002,time_6820,execs_51515,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000968,src_000002,time_6820,execs_51515,op_havoc,rep_2 new file mode 100644 index 00000000000..62f62fd0c1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000968,src_000002,time_6820,execs_51515,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000969,src_000002,time_6908,execs_52148,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000969,src_000002,time_6908,execs_52148,op_havoc,rep_2 new file mode 100644 index 00000000000..0916efca310 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000969,src_000002,time_6908,execs_52148,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000973,src_000002,time_7031,execs_52855,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000973,src_000002,time_7031,execs_52855,op_havoc,rep_2 new file mode 100644 index 00000000000..91d8cae3c21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000973,src_000002,time_7031,execs_52855,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000980,src_000002,time_7618,execs_57130,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_000980,src_000002,time_7618,execs_57130,op_havoc,rep_1 new file mode 100644 index 00000000000..276b26deb5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000980,src_000002,time_7618,execs_57130,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000984,src_000002,time_7761,execs_58175,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000984,src_000002,time_7761,execs_58175,op_havoc,rep_2 new file mode 100644 index 00000000000..eca53b88bcb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000984,src_000002,time_7761,execs_58175,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000985,src_000002,time_7969,execs_59703,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000985,src_000002,time_7969,execs_59703,op_havoc,rep_2 new file mode 100644 index 00000000000..ef49eb83507 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000985,src_000002,time_7969,execs_59703,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000986,src_000002,time_7981,execs_59784,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000986,src_000002,time_7981,execs_59784,op_havoc,rep_2 new file mode 100644 index 00000000000..738fc0eb467 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000986,src_000002,time_7981,execs_59784,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000989,src_000002,time_8032,execs_60137,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000989,src_000002,time_8032,execs_60137,op_havoc,rep_2 new file mode 100644 index 00000000000..fbf7deb8461 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000989,src_000002,time_8032,execs_60137,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000991,src_000002,time_8101,execs_60591,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_000991,src_000002,time_8101,execs_60591,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..9023851e542 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000991,src_000002,time_8101,execs_60591,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000994,src_000002,time_8376,execs_62422,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000994,src_000002,time_8376,execs_62422,op_havoc,rep_2 new file mode 100644 index 00000000000..8492cf04344 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000994,src_000002,time_8376,execs_62422,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_000995,src_000002,time_8432,execs_62816,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_000995,src_000002,time_8432,execs_62816,op_havoc,rep_2 new file mode 100644 index 00000000000..85e6a7f9140 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_000995,src_000002,time_8432,execs_62816,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001004,src_000002,time_8965,execs_66361,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001004,src_000002,time_8965,execs_66361,op_havoc,rep_2 new file mode 100644 index 00000000000..ad434c47693 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001004,src_000002,time_8965,execs_66361,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001005,src_000002,time_9223,execs_67995,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001005,src_000002,time_9223,execs_67995,op_havoc,rep_2 new file mode 100644 index 00000000000..5a1a3934bae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001005,src_000002,time_9223,execs_67995,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001007,src_000002,time_9472,execs_69588,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001007,src_000002,time_9472,execs_69588,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..e68ffcf1ebf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001007,src_000002,time_9472,execs_69588,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001009,src_000002,time_9528,execs_69959,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_001009,src_000002,time_9528,execs_69959,op_havoc,rep_1 new file mode 100644 index 00000000000..14cecc5e6a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001009,src_000002,time_9528,execs_69959,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001050,src_000003,time_10277,execs_73597,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001050,src_000003,time_10277,execs_73597,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..e99bc6c58ca Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001050,src_000003,time_10277,execs_73597,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001051,src_000003,time_10281,execs_73617,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001051,src_000003,time_10281,execs_73617,op_havoc,rep_14 new file mode 100644 index 00000000000..6bced9427bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001051,src_000003,time_10281,execs_73617,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001053,src_000003,time_10295,execs_73665,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001053,src_000003,time_10295,execs_73665,op_havoc,rep_10 new file mode 100644 index 00000000000..972f4b4aeb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001053,src_000003,time_10295,execs_73665,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001054,src_000003,time_10309,execs_73703,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001054,src_000003,time_10309,execs_73703,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..b880f75140e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001054,src_000003,time_10309,execs_73703,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001055,src_000003,time_10316,execs_73728,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001055,src_000003,time_10316,execs_73728,op_havoc,rep_8 new file mode 100644 index 00000000000..510d90d3e33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001055,src_000003,time_10316,execs_73728,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001062,src_000003,time_10365,execs_73893,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001062,src_000003,time_10365,execs_73893,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..cd90fd95bc9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001062,src_000003,time_10365,execs_73893,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001064,src_000003,time_10382,execs_73921,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001064,src_000003,time_10382,execs_73921,op_havoc,rep_3 new file mode 100644 index 00000000000..4d241825922 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001064,src_000003,time_10382,execs_73921,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001067,src_000003,time_10418,execs_74051,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001067,src_000003,time_10418,execs_74051,op_havoc,rep_14 new file mode 100644 index 00000000000..621719e41fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001067,src_000003,time_10418,execs_74051,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001070,src_000003,time_10445,execs_74163,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001070,src_000003,time_10445,execs_74163,op_havoc,rep_16 new file mode 100644 index 00000000000..24661fa755b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001070,src_000003,time_10445,execs_74163,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001073,src_000003,time_10476,execs_74295,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001073,src_000003,time_10476,execs_74295,op_havoc,rep_5 new file mode 100644 index 00000000000..df33a51e273 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001073,src_000003,time_10476,execs_74295,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001075,src_000003,time_10487,execs_74319,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001075,src_000003,time_10487,execs_74319,op_havoc,rep_2 new file mode 100644 index 00000000000..f68b3c1113e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001075,src_000003,time_10487,execs_74319,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001076,src_000003,time_10509,execs_74406,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001076,src_000003,time_10509,execs_74406,op_havoc,rep_7 new file mode 100644 index 00000000000..06778e6589c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001076,src_000003,time_10509,execs_74406,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001084,src_000003,time_10619,execs_74868,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001084,src_000003,time_10619,execs_74868,op_havoc,rep_6 new file mode 100644 index 00000000000..4efcd1bfd37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001084,src_000003,time_10619,execs_74868,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001085,src_000003,time_10632,execs_74926,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001085,src_000003,time_10632,execs_74926,op_havoc,rep_11 new file mode 100644 index 00000000000..12f13b5e5cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001085,src_000003,time_10632,execs_74926,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001087,src_000003,time_10660,execs_75044,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001087,src_000003,time_10660,execs_75044,op_havoc,rep_4 new file mode 100644 index 00000000000..500979d2c40 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001087,src_000003,time_10660,execs_75044,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001092,src_000003,time_10706,execs_75141,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001092,src_000003,time_10706,execs_75141,op_havoc,rep_7 new file mode 100644 index 00000000000..15c31d2572c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001092,src_000003,time_10706,execs_75141,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001094,src_000003,time_10734,execs_75237,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001094,src_000003,time_10734,execs_75237,op_havoc,rep_5 new file mode 100644 index 00000000000..b96d1280704 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001094,src_000003,time_10734,execs_75237,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001096,src_000003,time_10758,execs_75296,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001096,src_000003,time_10758,execs_75296,op_havoc,rep_10 new file mode 100644 index 00000000000..c31c4787087 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001096,src_000003,time_10758,execs_75296,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001098,src_000003,time_10782,execs_75389,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001098,src_000003,time_10782,execs_75389,op_havoc,rep_16 new file mode 100644 index 00000000000..0fec8da7d3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001098,src_000003,time_10782,execs_75389,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001108,src_000003,time_10883,execs_75783,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001108,src_000003,time_10883,execs_75783,op_havoc,rep_9 new file mode 100644 index 00000000000..1abf1405985 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001108,src_000003,time_10883,execs_75783,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001110,src_000003,time_10960,execs_76079,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001110,src_000003,time_10960,execs_76079,op_havoc,rep_16 new file mode 100644 index 00000000000..f133085f925 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001110,src_000003,time_10960,execs_76079,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001116,src_000003,time_11032,execs_76253,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001116,src_000003,time_11032,execs_76253,op_havoc,rep_11 new file mode 100644 index 00000000000..80fd2af76c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001116,src_000003,time_11032,execs_76253,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001117,src_000003,time_11040,execs_76276,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001117,src_000003,time_11040,execs_76276,op_havoc,rep_8 new file mode 100644 index 00000000000..638652be8e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001117,src_000003,time_11040,execs_76276,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001128,src_000003,time_11299,execs_77010,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001128,src_000003,time_11299,execs_77010,op_havoc,rep_8 new file mode 100644 index 00000000000..8642ae78d1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001128,src_000003,time_11299,execs_77010,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001129,src_000003,time_11317,execs_77084,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001129,src_000003,time_11317,execs_77084,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..b10635766dd --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001129,src_000003,time_11317,execs_77084,op_havoc,rep_15,+cov @@ -0,0 +1 @@ +@2+[?2l[?11211,1111111047h.[?25h[?1049~[?1047h.[?249l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001132,src_000003,time_11359,execs_77242,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001132,src_000003,time_11359,execs_77242,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..4749182d488 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001132,src_000003,time_11359,execs_77242,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001133,src_000003,time_11380,execs_77301,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001133,src_000003,time_11380,execs_77301,op_havoc,rep_14 new file mode 100644 index 00000000000..c9d033222b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001133,src_000003,time_11380,execs_77301,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001134,src_000003,time_11405,execs_77382,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001134,src_000003,time_11405,execs_77382,op_havoc,rep_4 new file mode 100644 index 00000000000..33c15d899d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001134,src_000003,time_11405,execs_77382,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001138,src_000003,time_11497,execs_77676,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001138,src_000003,time_11497,execs_77676,op_havoc,rep_8 new file mode 100644 index 00000000000..00e1ba4153c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001138,src_000003,time_11497,execs_77676,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001148,src_000003,time_11693,execs_78440,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001148,src_000003,time_11693,execs_78440,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..1b1cb463ffe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001148,src_000003,time_11693,execs_78440,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001149,src_000003,time_11709,execs_78502,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001149,src_000003,time_11709,execs_78502,op_havoc,rep_10 new file mode 100644 index 00000000000..6f34ba5ab4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001149,src_000003,time_11709,execs_78502,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001150,src_000003,time_11711,execs_78517,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001150,src_000003,time_11711,execs_78517,op_havoc,rep_13 new file mode 100644 index 00000000000..7332f1fab79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001150,src_000003,time_11711,execs_78517,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001151,src_000003,time_11714,execs_78530,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001151,src_000003,time_11714,execs_78530,op_havoc,rep_12 new file mode 100644 index 00000000000..d9f96a272bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001151,src_000003,time_11714,execs_78530,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001153,src_000003,time_11741,execs_78649,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001153,src_000003,time_11741,execs_78649,op_havoc,rep_16 new file mode 100644 index 00000000000..5fbf6ca55f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001153,src_000003,time_11741,execs_78649,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001154,src_000003,time_11750,execs_78686,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001154,src_000003,time_11750,execs_78686,op_havoc,rep_9 new file mode 100644 index 00000000000..3487d4dfde4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001154,src_000003,time_11750,execs_78686,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001155,src_000003,time_11760,execs_78730,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001155,src_000003,time_11760,execs_78730,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..be873c31299 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001155,src_000003,time_11760,execs_78730,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001156,src_000003,time_11775,execs_78783,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001156,src_000003,time_11775,execs_78783,op_havoc,rep_9 new file mode 100644 index 00000000000..eb9aee07e11 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001156,src_000003,time_11775,execs_78783,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001158,src_000003,time_11822,execs_78946,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001158,src_000003,time_11822,execs_78946,op_havoc,rep_11 new file mode 100644 index 00000000000..5ae40df1418 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001158,src_000003,time_11822,execs_78946,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001159,src_000003,time_11835,execs_79001,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001159,src_000003,time_11835,execs_79001,op_havoc,rep_16 new file mode 100644 index 00000000000..88e2b687243 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001159,src_000003,time_11835,execs_79001,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001161,src_000003,time_11863,execs_79099,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001161,src_000003,time_11863,execs_79099,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..99c42b7e8b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001161,src_000003,time_11863,execs_79099,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001164,src_000003,time_11924,execs_79365,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001164,src_000003,time_11924,execs_79365,op_havoc,rep_16 new file mode 100644 index 00000000000..c4a18545ad6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001164,src_000003,time_11924,execs_79365,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001167,src_000003,time_11947,execs_79471,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001167,src_000003,time_11947,execs_79471,op_havoc,rep_14 new file mode 100644 index 00000000000..9cf0a2bddef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001167,src_000003,time_11947,execs_79471,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001172,src_000003,time_12005,execs_79714,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001172,src_000003,time_12005,execs_79714,op_havoc,rep_9 new file mode 100644 index 00000000000..97407a91204 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001172,src_000003,time_12005,execs_79714,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001173,src_000003,time_12023,execs_79791,op_havoc,rep_11,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001173,src_000003,time_12023,execs_79791,op_havoc,rep_11,+cov new file mode 100644 index 00000000000..f0f14bb3804 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001173,src_000003,time_12023,execs_79791,op_havoc,rep_11,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001174,src_000003,time_12028,execs_79813,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001174,src_000003,time_12028,execs_79813,op_havoc,rep_12 new file mode 100644 index 00000000000..1c246d90a74 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001174,src_000003,time_12028,execs_79813,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001182,src_000003,time_12202,execs_80333,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001182,src_000003,time_12202,execs_80333,op_havoc,rep_16 new file mode 100644 index 00000000000..6f77a1540a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001182,src_000003,time_12202,execs_80333,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001183,src_000003,time_12205,execs_80346,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001183,src_000003,time_12205,execs_80346,op_havoc,rep_7 new file mode 100644 index 00000000000..e2a1864c474 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001183,src_000003,time_12205,execs_80346,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001188,src_000003,time_12448,execs_80779,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001188,src_000003,time_12448,execs_80779,op_havoc,rep_12 new file mode 100644 index 00000000000..8a40b32e3cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001188,src_000003,time_12448,execs_80779,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001189,src_000003,time_12552,execs_81235,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001189,src_000003,time_12552,execs_81235,op_havoc,rep_9 new file mode 100644 index 00000000000..f70f761a03a --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001189,src_000003,time_12552,execs_81235,op_havoc,rep_9 @@ -0,0 +1,2 @@ + ó + ó [?1D49l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001191,src_000003,time_12633,execs_81475,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001191,src_000003,time_12633,execs_81475,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..b5ab6d4ba48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001191,src_000003,time_12633,execs_81475,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001192,src_000003,time_12636,execs_81485,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001192,src_000003,time_12636,execs_81485,op_havoc,rep_4 new file mode 100644 index 00000000000..b228894591e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001192,src_000003,time_12636,execs_81485,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001193,src_000003,time_12672,execs_81588,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001193,src_000003,time_12672,execs_81588,op_havoc,rep_4 new file mode 100644 index 00000000000..e312b95b2a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001193,src_000003,time_12672,execs_81588,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001194,src_000003,time_12683,execs_81623,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001194,src_000003,time_12683,execs_81623,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..3e740d872f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001194,src_000003,time_12683,execs_81623,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001196,src_000003,time_12727,execs_81786,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001196,src_000003,time_12727,execs_81786,op_havoc,rep_11 new file mode 100644 index 00000000000..11d3c2c8b23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001196,src_000003,time_12727,execs_81786,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001197,src_000003,time_12731,execs_81801,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001197,src_000003,time_12731,execs_81801,op_havoc,rep_16 new file mode 100644 index 00000000000..bb70604daba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001197,src_000003,time_12731,execs_81801,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001201,src_000003,time_12786,execs_81983,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001201,src_000003,time_12786,execs_81983,op_havoc,rep_6 new file mode 100644 index 00000000000..0d89a5c3df3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001201,src_000003,time_12786,execs_81983,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001202,src_000003,time_12828,execs_82140,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001202,src_000003,time_12828,execs_82140,op_havoc,rep_14 new file mode 100644 index 00000000000..2878e598c7c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001202,src_000003,time_12828,execs_82140,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001204,src_000003,time_12874,execs_82319,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001204,src_000003,time_12874,execs_82319,op_havoc,rep_13 new file mode 100644 index 00000000000..0b9e76f1994 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001204,src_000003,time_12874,execs_82319,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001208,src_000003,time_12909,execs_82401,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001208,src_000003,time_12909,execs_82401,op_havoc,rep_11 new file mode 100644 index 00000000000..68d147a95d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001208,src_000003,time_12909,execs_82401,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001215,src_000003,time_13015,execs_82780,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001215,src_000003,time_13015,execs_82780,op_havoc,rep_15 new file mode 100644 index 00000000000..e414960df74 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001215,src_000003,time_13015,execs_82780,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001218,src_000003,time_13072,execs_83021,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001218,src_000003,time_13072,execs_83021,op_havoc,rep_13 new file mode 100644 index 00000000000..a421ebcc15a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001218,src_000003,time_13072,execs_83021,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001220,src_000003,time_13168,execs_83304,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001220,src_000003,time_13168,execs_83304,op_havoc,rep_15 new file mode 100644 index 00000000000..e56bad3fec2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001220,src_000003,time_13168,execs_83304,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001221,src_000003,time_13175,execs_83331,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001221,src_000003,time_13175,execs_83331,op_havoc,rep_13 new file mode 100644 index 00000000000..d87b8f0802d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001221,src_000003,time_13175,execs_83331,op_havoc,rep_13 @@ -0,0 +1 @@ +l[?104(48h[ñ25h49lh[?104(48h[ñ25h49l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001222,src_000003,time_13201,execs_83445,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001222,src_000003,time_13201,execs_83445,op_havoc,rep_15 new file mode 100644 index 00000000000..d2bf4e7baba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001222,src_000003,time_13201,execs_83445,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001224,src_000003,time_13212,execs_83472,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001224,src_000003,time_13212,execs_83472,op_havoc,rep_14 new file mode 100644 index 00000000000..ad03431a6cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001224,src_000003,time_13212,execs_83472,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001225,src_000003,time_13226,execs_83538,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001225,src_000003,time_13226,execs_83538,op_havoc,rep_14 new file mode 100644 index 00000000000..270d3ec7504 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001225,src_000003,time_13226,execs_83538,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001228,src_000003,time_13271,execs_83711,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001228,src_000003,time_13271,execs_83711,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..2bf833df7c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001228,src_000003,time_13271,execs_83711,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001230,src_000003,time_13300,execs_83823,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001230,src_000003,time_13300,execs_83823,op_havoc,rep_13 new file mode 100644 index 00000000000..1a36eabf9eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001230,src_000003,time_13300,execs_83823,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001236,src_000003,time_13407,execs_84192,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001236,src_000003,time_13407,execs_84192,op_havoc,rep_16 new file mode 100644 index 00000000000..9762996c171 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001236,src_000003,time_13407,execs_84192,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001240,src_000003,time_13484,execs_84499,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001240,src_000003,time_13484,execs_84499,op_havoc,rep_10 new file mode 100644 index 00000000000..51189bbd687 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001240,src_000003,time_13484,execs_84499,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001241,src_000003,time_13492,execs_84526,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001241,src_000003,time_13492,execs_84526,op_havoc,rep_12 new file mode 100644 index 00000000000..7aa5025297e --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001241,src_000003,time_13492,execs_84526,op_havoc,rep_12 @@ -0,0 +1 @@ +;19mrrrrrrrrr\rrr[ÿÿÿrsrrrrŠedrrrrrrrreAr\rrr[ÿÿÿrsrrrrŠedrrA[48;48; \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001245,src_000003,time_13563,execs_84725,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001245,src_000003,time_13563,execs_84725,op_havoc,rep_10 new file mode 100644 index 00000000000..69b3f970931 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001245,src_000003,time_13563,execs_84725,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001246,src_000003,time_13568,execs_84745,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001246,src_000003,time_13568,execs_84745,op_havoc,rep_16 new file mode 100644 index 00000000000..42afcc336fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001246,src_000003,time_13568,execs_84745,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001248,src_000003,time_13634,execs_84982,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001248,src_000003,time_13634,execs_84982,op_havoc,rep_3 new file mode 100644 index 00000000000..b56d52b61d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001248,src_000003,time_13634,execs_84982,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001250,src_000003,time_13706,execs_85197,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001250,src_000003,time_13706,execs_85197,op_havoc,rep_10 new file mode 100644 index 00000000000..c27618cf2a3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001250,src_000003,time_13706,execs_85197,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001252,src_000003,time_13735,execs_85322,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001252,src_000003,time_13735,execs_85322,op_havoc,rep_14 new file mode 100644 index 00000000000..046dbc1016f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001252,src_000003,time_13735,execs_85322,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001257,src_000003,time_13834,execs_85711,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001257,src_000003,time_13834,execs_85711,op_havoc,rep_10 new file mode 100644 index 00000000000..7b3631fb8f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001257,src_000003,time_13834,execs_85711,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001259,src_000003,time_13909,execs_86002,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001259,src_000003,time_13909,execs_86002,op_havoc,rep_10 new file mode 100644 index 00000000000..4371b000c9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001259,src_000003,time_13909,execs_86002,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001260,src_000003,time_13925,execs_86068,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001260,src_000003,time_13925,execs_86068,op_havoc,rep_15 new file mode 100644 index 00000000000..6c1742836be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001260,src_000003,time_13925,execs_86068,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001261,src_000003,time_13927,execs_86080,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001261,src_000003,time_13927,execs_86080,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..1b3ec9be5fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001261,src_000003,time_13927,execs_86080,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001271,src_000525,time_14227,execs_87420,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001271,src_000525,time_14227,execs_87420,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..7337843fc8a --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001271,src_000525,time_14227,execs_87420,op_havoc,rep_1,+cov @@ -0,0 +1 @@ +ABCD[ÿÿÿƒƒƒƒƒne25h 0wƒƒƒƒƒƒne25h[>1ÿsbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001274,src_000525,time_14460,execs_89044,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001274,src_000525,time_14460,execs_89044,op_havoc,rep_4 new file mode 100644 index 00000000000..83e73237a5c --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001274,src_000525,time_14460,execs_89044,op_havoc,rep_4 @@ -0,0 +1 @@ +ABCDCCD[ÿÿÿÿÿABCDCCD_ÿÿÿÿÿÿsbG8ÿsbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001279,src_000525,time_14689,execs_90496,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001279,src_000525,time_14689,execs_90496,op_havoc,rep_4 new file mode 100644 index 00000000000..654cd18b7d2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001279,src_000525,time_14689,execs_90496,op_havoc,rep_4 @@ -0,0 +1 @@ +ABCD[€ÿ ú H2K5;ÿÿsbG8F \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001281,src_000525,time_14898,execs_91913,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001281,src_000525,time_14898,execs_91913,op_havoc,rep_4 new file mode 100644 index 00000000000..d65ebe9aa37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001281,src_000525,time_14898,execs_91913,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001283,src_000525,time_15000,execs_92608,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001283,src_000525,time_15000,execs_92608,op_havoc,rep_4 new file mode 100644 index 00000000000..9cfdeb185f4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001283,src_000525,time_15000,execs_92608,op_havoc,rep_4 @@ -0,0 +1 @@ +A[6lAKBCDA[A[6J6JAKBCD[ÿÿÿÿsbG[ÿÿÿÿsbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001286,src_000525,time_15075,execs_93045,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001286,src_000525,time_15075,execs_93045,op_havoc,rep_2 new file mode 100644 index 00000000000..a03d9772d7c --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001286,src_000525,time_15075,execs_93045,op_havoc,rep_2 @@ -0,0 +1 @@ +ABCABCD[ÿÿÿ sD[ÿÿÿ sbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001290,src_000525,time_15445,execs_95662,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001290,src_000525,time_15445,execs_95662,op_havoc,rep_3 new file mode 100644 index 00000000000..fd3c52d9666 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001290,src_000525,time_15445,execs_95662,op_havoc,rep_3 @@ -0,0 +1 @@ +ABCD[?2H~[?102Hh[?104},D[?2Hh[?102Hh \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001291,src_000005,time_15628,execs_96862,op_quick,pos_6,val_+1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001291,src_000005,time_15628,execs_96862,op_quick,pos_6,val_+1,+cov new file mode 100644 index 00000000000..893af101bd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001291,src_000005,time_15628,execs_96862,op_quick,pos_6,val_+1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001294,src_000005,time_15698,execs_97277,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001294,src_000005,time_15698,execs_97277,op_havoc,rep_4 new file mode 100644 index 00000000000..48fe0dea503 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001294,src_000005,time_15698,execs_97277,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001298,src_000005,time_15739,execs_97471,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001298,src_000005,time_15739,execs_97471,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a03f21f3b72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001298,src_000005,time_15739,execs_97471,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001299,src_000005,time_15765,execs_97620,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001299,src_000005,time_15765,execs_97620,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..7a28b1d0ee0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001299,src_000005,time_15765,execs_97620,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001301,src_000005,time_15811,execs_97846,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001301,src_000005,time_15811,execs_97846,op_havoc,rep_3 new file mode 100644 index 00000000000..e2eb75c779b --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001301,src_000005,time_15811,execs_97846,op_havoc,rep_3 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001303,src_000005,time_15835,execs_97981,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001303,src_000005,time_15835,execs_97981,op_havoc,rep_2 new file mode 100644 index 00000000000..e48902d21d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001303,src_000005,time_15835,execs_97981,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001304,src_000005,time_15842,execs_98020,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001304,src_000005,time_15842,execs_98020,op_havoc,rep_2 new file mode 100644 index 00000000000..c5b71617256 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001304,src_000005,time_15842,execs_98020,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001310,src_000005,time_16012,execs_99026,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001310,src_000005,time_16012,execs_99026,op_havoc,rep_2 new file mode 100644 index 00000000000..c276419ad9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001310,src_000005,time_16012,execs_99026,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001314,src_000005,time_16072,execs_99396,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001314,src_000005,time_16072,execs_99396,op_havoc,rep_3 new file mode 100644 index 00000000000..d49fa161b59 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001314,src_000005,time_16072,execs_99396,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001318,src_000005,time_16194,execs_100216,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001318,src_000005,time_16194,execs_100216,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..cb17c08a46d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001318,src_000005,time_16194,execs_100216,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001321,src_000005,time_16252,execs_100583,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001321,src_000005,time_16252,execs_100583,op_havoc,rep_2 new file mode 100644 index 00000000000..91ab86614a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001321,src_000005,time_16252,execs_100583,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001322,src_000005,time_16268,execs_100658,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001322,src_000005,time_16268,execs_100658,op_havoc,rep_3 new file mode 100644 index 00000000000..246fafd0d94 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001322,src_000005,time_16268,execs_100658,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001325,src_000005,time_16399,execs_101509,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001325,src_000005,time_16399,execs_101509,op_havoc,rep_4 new file mode 100644 index 00000000000..f1aab6323a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001325,src_000005,time_16399,execs_101509,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001326,src_000005,time_16436,execs_101760,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001326,src_000005,time_16436,execs_101760,op_havoc,rep_3 new file mode 100644 index 00000000000..a7c4ecd3a27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001326,src_000005,time_16436,execs_101760,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001328,src_000005,time_16527,execs_102372,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001328,src_000005,time_16527,execs_102372,op_havoc,rep_4 new file mode 100644 index 00000000000..a91d4fb65ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001328,src_000005,time_16527,execs_102372,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001330,src_000005,time_16584,execs_102617,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001330,src_000005,time_16584,execs_102617,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..be38211cf84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001330,src_000005,time_16584,execs_102617,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001331,src_000005,time_16667,execs_103190,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001331,src_000005,time_16667,execs_103190,op_havoc,rep_4 new file mode 100644 index 00000000000..6dcba05fde1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001331,src_000005,time_16667,execs_103190,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001334,src_000005,time_16799,execs_104017,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001334,src_000005,time_16799,execs_104017,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..45abb3515dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001334,src_000005,time_16799,execs_104017,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001340,src_000005,time_16970,execs_105135,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001340,src_000005,time_16970,execs_105135,op_havoc,rep_3 new file mode 100644 index 00000000000..835ae3f9de3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001340,src_000005,time_16970,execs_105135,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001341,src_000005,time_17004,execs_105379,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001341,src_000005,time_17004,execs_105379,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..38e39412bb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001341,src_000005,time_17004,execs_105379,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001342,src_000005,time_17147,execs_106350,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001342,src_000005,time_17147,execs_106350,op_havoc,rep_3 new file mode 100644 index 00000000000..f12f534008d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001342,src_000005,time_17147,execs_106350,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001344,src_000005,time_17200,execs_106681,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001344,src_000005,time_17200,execs_106681,op_havoc,rep_3 new file mode 100644 index 00000000000..396067732a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001344,src_000005,time_17200,execs_106681,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001349,src_000005,time_17462,execs_108324,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001349,src_000005,time_17462,execs_108324,op_havoc,rep_3 new file mode 100644 index 00000000000..5e2879f3800 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001349,src_000005,time_17462,execs_108324,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001350,src_000005,time_17491,execs_108514,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001350,src_000005,time_17491,execs_108514,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..a71da1e090c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001350,src_000005,time_17491,execs_108514,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001351,src_000005,time_17647,execs_109540,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001351,src_000005,time_17647,execs_109540,op_havoc,rep_4 new file mode 100644 index 00000000000..9b81124b9ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001351,src_000005,time_17647,execs_109540,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001352,src_000005,time_17780,execs_110366,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001352,src_000005,time_17780,execs_110366,op_havoc,rep_3 new file mode 100644 index 00000000000..c0a22374420 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001352,src_000005,time_17780,execs_110366,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001356,src_000005,time_18067,execs_112184,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001356,src_000005,time_18067,execs_112184,op_havoc,rep_4 new file mode 100644 index 00000000000..02cc2fad36a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001356,src_000005,time_18067,execs_112184,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001357,src_000005,time_18227,execs_113202,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001357,src_000005,time_18227,execs_113202,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..48f13f0b6d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001357,src_000005,time_18227,execs_113202,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001360,src_000005,time_18430,execs_114530,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001360,src_000005,time_18430,execs_114530,op_havoc,rep_4 new file mode 100644 index 00000000000..5c25972b279 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001360,src_000005,time_18430,execs_114530,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001362,src_000005,time_18503,execs_115040,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001362,src_000005,time_18503,execs_115040,op_havoc,rep_4 new file mode 100644 index 00000000000..d933a8045bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001362,src_000005,time_18503,execs_115040,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001363,src_000005,time_18549,execs_115303,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001363,src_000005,time_18549,execs_115303,op_havoc,rep_4 new file mode 100644 index 00000000000..bdb52b47462 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001363,src_000005,time_18549,execs_115303,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001364,src_000005,time_18590,execs_115609,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001364,src_000005,time_18590,execs_115609,op_havoc,rep_4 new file mode 100644 index 00000000000..3eaa1aec666 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001364,src_000005,time_18590,execs_115609,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001366,src_000005,time_18752,execs_116690,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001366,src_000005,time_18752,execs_116690,op_havoc,rep_4 new file mode 100644 index 00000000000..b1fa1848a46 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001366,src_000005,time_18752,execs_116690,op_havoc,rep_4 @@ -0,0 +1 @@ + [1;2;3;4;5;6;7;€Helloììè‚6m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001367,src_000005,time_18757,execs_116720,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001367,src_000005,time_18757,execs_116720,op_havoc,rep_4 new file mode 100644 index 00000000000..4ced13a82bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001367,src_000005,time_18757,execs_116720,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001372,src_000005,time_19174,execs_119483,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001372,src_000005,time_19174,execs_119483,op_havoc,rep_3 new file mode 100644 index 00000000000..b9228c17684 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001372,src_000005,time_19174,execs_119483,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001378,src_000005,time_19534,execs_121694,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001378,src_000005,time_19534,execs_121694,op_havoc,rep_4 new file mode 100644 index 00000000000..a2df6b812af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001378,src_000005,time_19534,execs_121694,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001380,src_000005,time_19750,execs_123146,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001380,src_000005,time_19750,execs_123146,op_havoc,rep_3 new file mode 100644 index 00000000000..fac7e58d011 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001380,src_000005,time_19750,execs_123146,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001381,src_000005,time_19778,execs_123327,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001381,src_000005,time_19778,execs_123327,op_havoc,rep_4 new file mode 100644 index 00000000000..2ee20d1def5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001381,src_000005,time_19778,execs_123327,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001384,src_000005,time_20107,execs_125190,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001384,src_000005,time_20107,execs_125190,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..43b67281dd7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001384,src_000005,time_20107,execs_125190,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001386,src_000005,time_20170,execs_125607,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001386,src_000005,time_20170,execs_125607,op_havoc,rep_3 new file mode 100644 index 00000000000..9703d67c1f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001386,src_000005,time_20170,execs_125607,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001390,src_000005,time_20577,execs_128166,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001390,src_000005,time_20577,execs_128166,op_havoc,rep_4 new file mode 100644 index 00000000000..0c8d5f2847f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001390,src_000005,time_20577,execs_128166,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001394,src_000005,time_20903,execs_130342,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001394,src_000005,time_20903,execs_130342,op_havoc,rep_4 new file mode 100644 index 00000000000..4171d8e92e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001394,src_000005,time_20903,execs_130342,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001395,src_000005,time_20924,execs_130485,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001395,src_000005,time_20924,execs_130485,op_havoc,rep_4 new file mode 100644 index 00000000000..d29c11e1bc1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001395,src_000005,time_20924,execs_130485,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001397,src_000005,time_21003,execs_131001,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001397,src_000005,time_21003,execs_131001,op_havoc,rep_4 new file mode 100644 index 00000000000..f24e0ebfc8e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001397,src_000005,time_21003,execs_131001,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001398,src_000005,time_21086,execs_131516,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001398,src_000005,time_21086,execs_131516,op_havoc,rep_2 new file mode 100644 index 00000000000..a9daa153a89 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001398,src_000005,time_21086,execs_131516,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001400,src_000005,time_21329,execs_133210,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001400,src_000005,time_21329,execs_133210,op_havoc,rep_4 new file mode 100644 index 00000000000..a2e3e4ebc96 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001400,src_000005,time_21329,execs_133210,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001408,src_000005,time_22141,execs_138869,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001408,src_000005,time_22141,execs_138869,op_havoc,rep_3 new file mode 100644 index 00000000000..3c9a6978782 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001408,src_000005,time_22141,execs_138869,op_havoc,rep_3 @@ -0,0 +1 @@ +:0:0m[58:5:200m@ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001410,src_000005,time_22350,execs_140275,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001410,src_000005,time_22350,execs_140275,op_havoc,rep_2 new file mode 100644 index 00000000000..080811df695 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001410,src_000005,time_22350,execs_140275,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001414,src_000005,time_22627,execs_142127,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001414,src_000005,time_22627,execs_142127,op_havoc,rep_3 new file mode 100644 index 00000000000..57d226411b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001414,src_000005,time_22627,execs_142127,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001415,src_000005,time_22695,execs_142556,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001415,src_000005,time_22695,execs_142556,op_havoc,rep_2 new file mode 100644 index 00000000000..23628d44df1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001415,src_000005,time_22695,execs_142556,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001420,src_000005,time_23223,execs_146094,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001420,src_000005,time_23223,execs_146094,op_havoc,rep_4 new file mode 100644 index 00000000000..2aaabe688c5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001420,src_000005,time_23223,execs_146094,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001421,src_000005,time_23320,execs_146751,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001421,src_000005,time_23320,execs_146751,op_havoc,rep_4 new file mode 100644 index 00000000000..5046adfaf8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001421,src_000005,time_23320,execs_146751,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001426,src_000007,time_23842,execs_149611,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001426,src_000007,time_23842,execs_149611,op_havoc,rep_7 new file mode 100644 index 00000000000..6abe5c8d231 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001426,src_000007,time_23842,execs_149611,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001441,src_000007,time_24122,execs_150120,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001441,src_000007,time_24122,execs_150120,op_havoc,rep_9 new file mode 100644 index 00000000000..72c34c658fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001441,src_000007,time_24122,execs_150120,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001442,src_000007,time_24131,execs_150156,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001442,src_000007,time_24131,execs_150156,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..a9a2aaaa7ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001442,src_000007,time_24131,execs_150156,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001443,src_000007,time_24134,execs_150175,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001443,src_000007,time_24134,execs_150175,op_havoc,rep_6 new file mode 100644 index 00000000000..8c3fe622673 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001443,src_000007,time_24134,execs_150175,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001445,src_000007,time_24174,execs_150257,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001445,src_000007,time_24174,execs_150257,op_havoc,rep_14 new file mode 100644 index 00000000000..a7a000abc70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001445,src_000007,time_24174,execs_150257,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001450,src_000007,time_24294,execs_150360,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001450,src_000007,time_24294,execs_150360,op_havoc,rep_8 new file mode 100644 index 00000000000..69aea01b010 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001450,src_000007,time_24294,execs_150360,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001451,src_000007,time_24299,execs_150378,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001451,src_000007,time_24299,execs_150378,op_havoc,rep_8 new file mode 100644 index 00000000000..50c188e5ba8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001451,src_000007,time_24299,execs_150378,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001452,src_000007,time_24311,execs_150399,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001452,src_000007,time_24311,execs_150399,op_havoc,rep_13 new file mode 100644 index 00000000000..529ee619a6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001452,src_000007,time_24311,execs_150399,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001465,src_000007,time_24802,execs_151083,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001465,src_000007,time_24802,execs_151083,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..ee7306b67dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001465,src_000007,time_24802,execs_151083,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001467,src_000007,time_24817,execs_151150,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001467,src_000007,time_24817,execs_151150,op_havoc,rep_10 new file mode 100644 index 00000000000..daa006b6c0c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001467,src_000007,time_24817,execs_151150,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001473,src_000007,time_24879,execs_151361,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001473,src_000007,time_24879,execs_151361,op_havoc,rep_7 new file mode 100644 index 00000000000..29a916cc1dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001473,src_000007,time_24879,execs_151361,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001475,src_000007,time_24925,execs_151425,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001475,src_000007,time_24925,execs_151425,op_havoc,rep_15 new file mode 100644 index 00000000000..4e052eea156 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001475,src_000007,time_24925,execs_151425,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001476,src_000007,time_24972,execs_151586,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001476,src_000007,time_24972,execs_151586,op_havoc,rep_8 new file mode 100644 index 00000000000..7809262bc2d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001476,src_000007,time_24972,execs_151586,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001477,src_000007,time_24976,execs_151604,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001477,src_000007,time_24976,execs_151604,op_havoc,rep_10 new file mode 100644 index 00000000000..3ddbddd001b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001477,src_000007,time_24976,execs_151604,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001478,src_000007,time_24986,execs_151638,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001478,src_000007,time_24986,execs_151638,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..2f0afd09e5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001478,src_000007,time_24986,execs_151638,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001483,src_000007,time_25105,execs_151824,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001483,src_000007,time_25105,execs_151824,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..7b99577df00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001483,src_000007,time_25105,execs_151824,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001484,src_000007,time_25135,execs_151891,op_havoc,rep_11,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001484,src_000007,time_25135,execs_151891,op_havoc,rep_11,+cov new file mode 100644 index 00000000000..c0c39f2c9ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001484,src_000007,time_25135,execs_151891,op_havoc,rep_11,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001487,src_000007,time_25200,execs_151987,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001487,src_000007,time_25200,execs_151987,op_havoc,rep_14 new file mode 100644 index 00000000000..3102d62eb15 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001487,src_000007,time_25200,execs_151987,op_havoc,rep_14 @@ -0,0 +1,2 @@ +ÿ]8;;hUtp]8;;hUtps:amplÿcoms:amplÿcomlickcomlick];];2;3;N;5;6ld[ +[00,s=+,ÿ;;;74;5;6;73;4;5;6;74;8;;\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001489,src_000007,time_25217,execs_152043,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001489,src_000007,time_25217,execs_152043,op_havoc,rep_14 new file mode 100644 index 00000000000..c7632cce5c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001489,src_000007,time_25217,execs_152043,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001496,src_000007,time_25372,execs_152227,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001496,src_000007,time_25372,execs_152227,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..378cbf9ae8b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001496,src_000007,time_25372,execs_152227,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001511,src_000007,time_25938,execs_153123,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001511,src_000007,time_25938,execs_153123,op_havoc,rep_16 new file mode 100644 index 00000000000..99a6432d952 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001511,src_000007,time_25938,execs_153123,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001512,src_000007,time_25974,execs_153143,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001512,src_000007,time_25974,execs_153143,op_havoc,rep_6 new file mode 100644 index 00000000000..75db50dc2d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001512,src_000007,time_25974,execs_153143,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001517,src_000007,time_26038,execs_153320,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001517,src_000007,time_26038,execs_153320,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..c876727bd4a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001517,src_000007,time_26038,execs_153320,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001520,src_000007,time_26152,execs_153494,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001520,src_000007,time_26152,execs_153494,op_havoc,rep_14 new file mode 100644 index 00000000000..9ab46917d14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001520,src_000007,time_26152,execs_153494,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001521,src_000007,time_26239,execs_153684,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001521,src_000007,time_26239,execs_153684,op_havoc,rep_12 new file mode 100644 index 00000000000..73c1d0a9f1f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001521,src_000007,time_26239,execs_153684,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001534,src_000007,time_26673,execs_154672,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001534,src_000007,time_26673,execs_154672,op_havoc,rep_14 new file mode 100644 index 00000000000..49e7575b157 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001534,src_000007,time_26673,execs_154672,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001538,src_000007,time_26866,execs_155031,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001538,src_000007,time_26866,execs_155031,op_havoc,rep_11 new file mode 100644 index 00000000000..efbc19086e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001538,src_000007,time_26866,execs_155031,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001540,src_000007,time_26888,execs_155067,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001540,src_000007,time_26888,execs_155067,op_havoc,rep_15 new file mode 100644 index 00000000000..9f887aadade Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001540,src_000007,time_26888,execs_155067,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001545,src_000007,time_27053,execs_155381,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001545,src_000007,time_27053,execs_155381,op_havoc,rep_14 new file mode 100644 index 00000000000..da3398de0b5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001545,src_000007,time_27053,execs_155381,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001547,src_000007,time_27156,execs_155601,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001547,src_000007,time_27156,execs_155601,op_havoc,rep_6 new file mode 100644 index 00000000000..c4d2677b33f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001547,src_000007,time_27156,execs_155601,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001553,src_000007,time_27249,execs_155858,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001553,src_000007,time_27249,execs_155858,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..1c530ecd4eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001553,src_000007,time_27249,execs_155858,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001554,src_000007,time_27276,execs_155922,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001554,src_000007,time_27276,execs_155922,op_havoc,rep_13 new file mode 100644 index 00000000000..aa9c8174684 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001554,src_000007,time_27276,execs_155922,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001560,src_000007,time_27514,execs_156623,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001560,src_000007,time_27514,execs_156623,op_havoc,rep_12 new file mode 100644 index 00000000000..d9dbcadc977 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001560,src_000007,time_27514,execs_156623,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001565,src_000007,time_27569,execs_156724,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001565,src_000007,time_27569,execs_156724,op_havoc,rep_14 new file mode 100644 index 00000000000..13c3a58ff73 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001565,src_000007,time_27569,execs_156724,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001569,src_000007,time_27671,execs_156943,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001569,src_000007,time_27671,execs_156943,op_havoc,rep_9 new file mode 100644 index 00000000000..59f9c8535f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001569,src_000007,time_27671,execs_156943,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001572,src_000007,time_27773,execs_157236,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001572,src_000007,time_27773,execs_157236,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..eaf85329f65 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001572,src_000007,time_27773,execs_157236,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001578,src_000007,time_28173,execs_158169,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001578,src_000007,time_28173,execs_158169,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..a95d0f54ed9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001578,src_000007,time_28173,execs_158169,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001583,src_000007,time_28605,execs_159018,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001583,src_000007,time_28605,execs_159018,op_havoc,rep_12 new file mode 100644 index 00000000000..143af3e4b99 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001583,src_000007,time_28605,execs_159018,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001587,src_000007,time_28803,execs_159570,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001587,src_000007,time_28803,execs_159570,op_havoc,rep_12 new file mode 100644 index 00000000000..305ce6463ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001587,src_000007,time_28803,execs_159570,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001589,src_000007,time_28913,execs_159735,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001589,src_000007,time_28913,execs_159735,op_havoc,rep_16 new file mode 100644 index 00000000000..eaab4a17a08 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001589,src_000007,time_28913,execs_159735,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001595,src_000007,time_29030,execs_159946,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001595,src_000007,time_29030,execs_159946,op_havoc,rep_14 new file mode 100644 index 00000000000..7f12ea92a0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001595,src_000007,time_29030,execs_159946,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001601,src_000007,time_29370,execs_160828,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001601,src_000007,time_29370,execs_160828,op_havoc,rep_12 new file mode 100644 index 00000000000..891f7e7880b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001601,src_000007,time_29370,execs_160828,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001613,src_000007,time_29872,execs_161686,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001613,src_000007,time_29872,execs_161686,op_havoc,rep_15 new file mode 100644 index 00000000000..22f9fff322f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001613,src_000007,time_29872,execs_161686,op_havoc,rep_15 @@ -0,0 +1 @@ +]8;;h*tpÿÿ[0 ! L ! , % \ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001615,src_000007,time_29956,execs_161748,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001615,src_000007,time_29956,execs_161748,op_havoc,rep_3 new file mode 100644 index 00000000000..ca08bc0acde Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001615,src_000007,time_29956,execs_161748,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001618,src_000007,time_30243,execs_162267,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001618,src_000007,time_30243,execs_162267,op_havoc,rep_16 new file mode 100644 index 00000000000..08e8225c5fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001618,src_000007,time_30243,execs_162267,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001619,src_000007,time_30269,execs_162343,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001619,src_000007,time_30269,execs_162343,op_havoc,rep_9 new file mode 100644 index 00000000000..0d794d97df3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001619,src_000007,time_30269,execs_162343,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001620,src_000007,time_30289,execs_162411,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001620,src_000007,time_30289,execs_162411,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..03030d2e1c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001620,src_000007,time_30289,execs_162411,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001624,src_000007,time_30472,execs_162828,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001624,src_000007,time_30472,execs_162828,op_havoc,rep_16 new file mode 100644 index 00000000000..24a60ac7454 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001624,src_000007,time_30472,execs_162828,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001628,src_000007,time_30681,execs_163227,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001628,src_000007,time_30681,execs_163227,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..4925ec09781 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001628,src_000007,time_30681,execs_163227,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001632,src_000007,time_30788,execs_163467,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001632,src_000007,time_30788,execs_163467,op_havoc,rep_14 new file mode 100644 index 00000000000..485f96e816d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001632,src_000007,time_30788,execs_163467,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001636,src_000007,time_30990,execs_163895,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001636,src_000007,time_30990,execs_163895,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..333f4664ab2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001636,src_000007,time_30990,execs_163895,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001637,src_000007,time_31000,execs_163943,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001637,src_000007,time_31000,execs_163943,op_havoc,rep_16 new file mode 100644 index 00000000000..aa1280ac379 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001637,src_000007,time_31000,execs_163943,op_havoc,rep_16 @@ -0,0 +1,4 @@ +ú;8;;P +WWWWWWWWWWWWWWWoo:a Whttps ûïÿhpk ûïÿhpk]8;;]9t;;ht]8;;]9t;;httÿ ;a Wo +„„„„„„„15% +o8\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001642,src_000007,time_31078,execs_164145,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001642,src_000007,time_31078,execs_164145,op_havoc,rep_9 new file mode 100644 index 00000000000..de20cb15dab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001642,src_000007,time_31078,execs_164145,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001643,src_000007,time_31091,execs_164197,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001643,src_000007,time_31091,execs_164197,op_havoc,rep_16 new file mode 100644 index 00000000000..cf3a887957c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001643,src_000007,time_31091,execs_164197,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001644,src_000007,time_31101,execs_164224,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001644,src_000007,time_31101,execs_164224,op_havoc,rep_13 new file mode 100644 index 00000000000..ab596e42afa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001644,src_000007,time_31101,execs_164224,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001645,src_000007,time_31158,execs_164378,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001645,src_000007,time_31158,execs_164378,op_havoc,rep_4 new file mode 100644 index 00000000000..da8e8654616 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001645,src_000007,time_31158,execs_164378,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001646,src_000007,time_31166,execs_164396,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001646,src_000007,time_31166,execs_164396,op_havoc,rep_14 new file mode 100644 index 00000000000..89025d0d379 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001646,src_000007,time_31166,execs_164396,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001649,src_000007,time_31263,execs_164694,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001649,src_000007,time_31263,execs_164694,op_havoc,rep_10 new file mode 100644 index 00000000000..05c1b22fa4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001649,src_000007,time_31263,execs_164694,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001654,src_000007,time_31485,execs_165140,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001654,src_000007,time_31485,execs_165140,op_havoc,rep_8 new file mode 100644 index 00000000000..defb987c4e0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001654,src_000007,time_31485,execs_165140,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001656,src_000007,time_31637,execs_165603,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001656,src_000007,time_31637,execs_165603,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..62839d11d00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001656,src_000007,time_31637,execs_165603,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001658,src_000007,time_31744,execs_165906,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001658,src_000007,time_31744,execs_165906,op_havoc,rep_11 new file mode 100644 index 00000000000..309a60f8cde --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001658,src_000007,time_31744,execs_165906,op_havoc,rep_11 @@ -0,0 +1 @@ +.co?104ê9l?25l[?1049hps;5;196mred;2;0;255;0mgrden :amð[28;=htt]s0edgrclick]5;0mgr;;\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001660,src_000007,time_31760,execs_165938,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001660,src_000007,time_31760,execs_165938,op_havoc,rep_14 new file mode 100644 index 00000000000..5ace8946446 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001660,src_000007,time_31760,execs_165938,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001662,src_000007,time_31897,execs_166320,op_havoc,rep_11,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001662,src_000007,time_31897,execs_166320,op_havoc,rep_11,+cov new file mode 100644 index 00000000000..9b78af73447 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001662,src_000007,time_31897,execs_166320,op_havoc,rep_11,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001668,src_000007,time_32274,execs_166949,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001668,src_000007,time_32274,execs_166949,op_havoc,rep_16 new file mode 100644 index 00000000000..be7d870404d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001668,src_000007,time_32274,execs_166949,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001669,src_000007,time_32360,execs_167195,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001669,src_000007,time_32360,execs_167195,op_havoc,rep_15 new file mode 100644 index 00000000000..b500252d5e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001669,src_000007,time_32360,execs_167195,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001670,src_000007,time_32604,execs_167828,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001670,src_000007,time_32604,execs_167828,op_havoc,rep_14 new file mode 100644 index 00000000000..98ab1b9ff7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001670,src_000007,time_32604,execs_167828,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001674,src_000007,time_32936,execs_168774,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001674,src_000007,time_32936,execs_168774,op_havoc,rep_13 new file mode 100644 index 00000000000..709b24ceff5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001674,src_000007,time_32936,execs_168774,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001675,src_000007,time_32967,execs_168829,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001675,src_000007,time_32967,execs_168829,op_havoc,rep_6 new file mode 100644 index 00000000000..840ea3fa496 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001675,src_000007,time_32967,execs_168829,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001676,src_000007,time_32996,execs_168863,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001676,src_000007,time_32996,execs_168863,op_havoc,rep_14 new file mode 100644 index 00000000000..db3bfb5bd4d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001676,src_000007,time_32996,execs_168863,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001677,src_000007,time_33094,execs_169163,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001677,src_000007,time_33094,execs_169163,op_havoc,rep_13 new file mode 100644 index 00000000000..e37cc5b2785 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001677,src_000007,time_33094,execs_169163,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001678,src_000007,time_33117,execs_169240,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001678,src_000007,time_33117,execs_169240,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..4e48d6e603f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001678,src_000007,time_33117,execs_169240,op_havoc,rep_12,+cov @@ -0,0 +1 @@ +]8;[38;5;19ÿrad[48;èèèèèèèèèèè1047h.? \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001680,src_000007,time_33152,execs_169327,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001680,src_000007,time_33152,execs_169327,op_havoc,rep_9 new file mode 100644 index 00000000000..999819b7eb4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001680,src_000007,time_33152,execs_169327,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001683,src_000007,time_33279,execs_169718,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001683,src_000007,time_33279,execs_169718,op_havoc,rep_4 new file mode 100644 index 00000000000..152a31a58e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001683,src_000007,time_33279,execs_169718,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001684,src_000007,time_33290,execs_169776,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001684,src_000007,time_33290,execs_169776,op_havoc,rep_10 new file mode 100644 index 00000000000..e77413ed64f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001684,src_000007,time_33290,execs_169776,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001686,src_000007,time_33376,execs_170021,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_001686,src_000007,time_33376,execs_170021,op_havoc,rep_1 new file mode 100644 index 00000000000..ea07a2e8908 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001686,src_000007,time_33376,execs_170021,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001689,src_000007,time_33463,execs_170273,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001689,src_000007,time_33463,execs_170273,op_havoc,rep_15 new file mode 100644 index 00000000000..467eb7e46dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001689,src_000007,time_33463,execs_170273,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001691,src_000007,time_33544,execs_170513,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001691,src_000007,time_33544,execs_170513,op_havoc,rep_15 new file mode 100644 index 00000000000..02810334499 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001691,src_000007,time_33544,execs_170513,op_havoc,rep_15 @@ -0,0 +1 @@ +h#N#N \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001692,src_000007,time_33562,execs_170565,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001692,src_000007,time_33562,execs_170565,op_havoc,rep_16 new file mode 100644 index 00000000000..70b24d02cc2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001692,src_000007,time_33562,execs_170565,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001693,src_000007,time_33608,execs_170635,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001693,src_000007,time_33608,execs_170635,op_havoc,rep_2 new file mode 100644 index 00000000000..7da27f98c3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001693,src_000007,time_33608,execs_170635,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001696,src_000007,time_33693,execs_170800,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001696,src_000007,time_33693,execs_170800,op_havoc,rep_9 new file mode 100644 index 00000000000..98a6209cc04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001696,src_000007,time_33693,execs_170800,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001701,src_000007,time_34104,execs_171609,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001701,src_000007,time_34104,execs_171609,op_havoc,rep_13 new file mode 100644 index 00000000000..5487ffad62b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001701,src_000007,time_34104,execs_171609,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001702,src_000007,time_34115,execs_171649,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001702,src_000007,time_34115,execs_171649,op_havoc,rep_9 new file mode 100644 index 00000000000..dce0e90dbef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001702,src_000007,time_34115,execs_171649,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001703,src_000007,time_34119,execs_171668,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001703,src_000007,time_34119,execs_171668,op_havoc,rep_11 new file mode 100644 index 00000000000..c5b8292b8bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001703,src_000007,time_34119,execs_171668,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001705,src_000007,time_34244,execs_172042,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001705,src_000007,time_34244,execs_172042,op_havoc,rep_16 new file mode 100644 index 00000000000..465e088a331 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001705,src_000007,time_34244,execs_172042,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001708,src_000007,time_34421,execs_172366,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001708,src_000007,time_34421,execs_172366,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..e3c0d5c257a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001708,src_000007,time_34421,execs_172366,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001709,src_000007,time_34488,execs_172542,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001709,src_000007,time_34488,execs_172542,op_havoc,rep_16 new file mode 100644 index 00000000000..88ed7fe26e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001709,src_000007,time_34488,execs_172542,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001712,src_000007,time_34716,execs_173043,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001712,src_000007,time_34716,execs_173043,op_havoc,rep_4 new file mode 100644 index 00000000000..b7659e9d40e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001712,src_000007,time_34716,execs_173043,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001714,src_000007,time_34891,execs_173371,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001714,src_000007,time_34891,execs_173371,op_havoc,rep_11 new file mode 100644 index 00000000000..6c368f536c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001714,src_000007,time_34891,execs_173371,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001721,src_000007,time_35249,execs_174005,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001721,src_000007,time_35249,execs_174005,op_havoc,rep_7 new file mode 100644 index 00000000000..1eb9f913889 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001721,src_000007,time_35249,execs_174005,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001722,src_000007,time_35284,execs_174089,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001722,src_000007,time_35284,execs_174089,op_havoc,rep_10 new file mode 100644 index 00000000000..eae1e4233ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001722,src_000007,time_35284,execs_174089,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001724,src_000007,time_35342,execs_174158,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001724,src_000007,time_35342,execs_174158,op_havoc,rep_13 new file mode 100644 index 00000000000..79f26b2aae9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001724,src_000007,time_35342,execs_174158,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001732,src_000007,time_36987,execs_175427,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001732,src_000007,time_36987,execs_175427,op_havoc,rep_16 new file mode 100644 index 00000000000..eac2e138d09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001732,src_000007,time_36987,execs_175427,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001734,src_000007,time_37055,execs_175587,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001734,src_000007,time_37055,execs_175587,op_havoc,rep_10 new file mode 100644 index 00000000000..43c78b6f610 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001734,src_000007,time_37055,execs_175587,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001742,src_000007,time_37551,execs_176678,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001742,src_000007,time_37551,execs_176678,op_havoc,rep_13 new file mode 100644 index 00000000000..ab9785828a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001742,src_000007,time_37551,execs_176678,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001748,src_000007,time_37972,execs_177772,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001748,src_000007,time_37972,execs_177772,op_havoc,rep_7 new file mode 100644 index 00000000000..35bcb9b16d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001748,src_000007,time_37972,execs_177772,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001752,src_000007,time_38156,execs_178129,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001752,src_000007,time_38156,execs_178129,op_havoc,rep_8 new file mode 100644 index 00000000000..f7a453c004e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001752,src_000007,time_38156,execs_178129,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001754,src_000007,time_38297,execs_178556,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001754,src_000007,time_38297,execs_178556,op_havoc,rep_9 new file mode 100644 index 00000000000..5a8e4d92769 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001754,src_000007,time_38297,execs_178556,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001758,src_000007,time_38635,execs_179449,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001758,src_000007,time_38635,execs_179449,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..4c1ce6ee600 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001758,src_000007,time_38635,execs_179449,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001760,src_000007,time_38943,execs_180187,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001760,src_000007,time_38943,execs_180187,op_havoc,rep_10 new file mode 100644 index 00000000000..fec57ef52cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001760,src_000007,time_38943,execs_180187,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001762,src_000007,time_39241,execs_180802,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001762,src_000007,time_39241,execs_180802,op_havoc,rep_8 new file mode 100644 index 00000000000..18a60dabd74 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001762,src_000007,time_39241,execs_180802,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001763,src_000007,time_39252,execs_180829,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001763,src_000007,time_39252,execs_180829,op_havoc,rep_12 new file mode 100644 index 00000000000..7a324df2220 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001763,src_000007,time_39252,execs_180829,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001764,src_000007,time_39278,execs_180859,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001764,src_000007,time_39278,execs_180859,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..acef56700c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001764,src_000007,time_39278,execs_180859,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001765,src_000007,time_39376,execs_181106,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001765,src_000007,time_39376,execs_181106,op_havoc,rep_16 new file mode 100644 index 00000000000..44a4f929a3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001765,src_000007,time_39376,execs_181106,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001768,src_000007,time_39527,execs_181613,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001768,src_000007,time_39527,execs_181613,op_havoc,rep_11 new file mode 100644 index 00000000000..8f53bb573d5 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001768,src_000007,time_39527,execs_181613,op_havoc,rep_11 @@ -0,0 +1 @@ +ÿ]=;;htt_s:š09h[?:::::ample.š09h[?:::::;K;red%9h[?:::::;K;h[?;;\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001771,src_000007,time_39680,execs_181923,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001771,src_000007,time_39680,execs_181923,op_havoc,rep_10 new file mode 100644 index 00000000000..15eb43b128c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001771,src_000007,time_39680,execs_181923,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001774,src_000007,time_39990,execs_182573,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001774,src_000007,time_39990,execs_182573,op_havoc,rep_13 new file mode 100644 index 00000000000..d94a912cbbf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001774,src_000007,time_39990,execs_182573,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001779,src_000007,time_40299,execs_183089,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001779,src_000007,time_40299,execs_183089,op_havoc,rep_10 new file mode 100644 index 00000000000..cdf08de0675 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001779,src_000007,time_40299,execs_183089,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001788,src_000007,time_40754,execs_184413,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001788,src_000007,time_40754,execs_184413,op_havoc,rep_13 new file mode 100644 index 00000000000..fef142113da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001788,src_000007,time_40754,execs_184413,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001792,src_000007,time_41079,execs_185485,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001792,src_000007,time_41079,execs_185485,op_havoc,rep_13 new file mode 100644 index 00000000000..ca404dfeca4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001792,src_000007,time_41079,execs_185485,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001794,src_000007,time_41189,execs_185729,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001794,src_000007,time_41189,execs_185729,op_havoc,rep_8 new file mode 100644 index 00000000000..6a130ba47c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001794,src_000007,time_41189,execs_185729,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001796,src_000007,time_41341,execs_186190,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001796,src_000007,time_41341,execs_186190,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..d37be89dc35 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001796,src_000007,time_41341,execs_186190,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001797,src_000007,time_41389,execs_186322,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001797,src_000007,time_41389,execs_186322,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..cbc6d6c1086 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001797,src_000007,time_41389,execs_186322,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001803,src_000007,time_41690,execs_186964,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001803,src_000007,time_41690,execs_186964,op_havoc,rep_15 new file mode 100644 index 00000000000..c4eb62c0138 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001803,src_000007,time_41690,execs_186964,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001804,src_000007,time_41709,execs_187024,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001804,src_000007,time_41709,execs_187024,op_havoc,rep_9 new file mode 100644 index 00000000000..c0e0b7d4cb9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001804,src_000007,time_41709,execs_187024,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001805,src_000007,time_41776,execs_187050,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001805,src_000007,time_41776,execs_187050,op_havoc,rep_10 new file mode 100644 index 00000000000..f07c952917f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001805,src_000007,time_41776,execs_187050,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001809,src_000007,time_42001,execs_187696,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001809,src_000007,time_42001,execs_187696,op_havoc,rep_9 new file mode 100644 index 00000000000..332e8f6e364 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001809,src_000007,time_42001,execs_187696,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001811,src_000007,time_42722,execs_188282,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001811,src_000007,time_42722,execs_188282,op_havoc,rep_9 new file mode 100644 index 00000000000..9ff858c6de1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001811,src_000007,time_42722,execs_188282,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001817,src_000007,time_43192,execs_189640,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001817,src_000007,time_43192,execs_189640,op_havoc,rep_14 new file mode 100644 index 00000000000..3157c7ef6e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001817,src_000007,time_43192,execs_189640,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001819,src_000007,time_43430,execs_190093,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001819,src_000007,time_43430,execs_190093,op_havoc,rep_4 new file mode 100644 index 00000000000..c6e447e5a58 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001819,src_000007,time_43430,execs_190093,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001820,src_000007,time_43528,execs_190356,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001820,src_000007,time_43528,execs_190356,op_havoc,rep_16 new file mode 100644 index 00000000000..5655d2e4523 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001820,src_000007,time_43528,execs_190356,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001827,src_000008,time_43788,execs_191068,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001827,src_000008,time_43788,execs_191068,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..0ef4e0f5fab --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001827,src_000008,time_43788,execs_191068,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +]52;;SGVsbÇ8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001829,src_000008,time_43860,execs_191580,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_001829,src_000008,time_43860,execs_191580,op_havoc,rep_1 new file mode 100644 index 00000000000..685cc26e747 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001829,src_000008,time_43860,execs_191580,op_havoc,rep_1 @@ -0,0 +1 @@ +]52;c;SGVsbG8]52;c;SGVsbG8== \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001833,src_000008,time_44065,execs_193012,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001833,src_000008,time_44065,execs_193012,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..eacd875c77b --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001833,src_000008,time_44065,execs_193012,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +]5;2;7]7;;2;c;SVsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001834,src_000008,time_44078,execs_193103,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001834,src_000008,time_44078,execs_193103,op_havoc,rep_2 new file mode 100644 index 00000000000..120eb4e0b80 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001834,src_000008,time_44078,execs_193103,op_havoc,rep_2 @@ -0,0 +1 @@ +]52;c;]52;c;SGVsbG8=SGV]52;c;]52;c;SGVsbGsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001835,src_000008,time_44131,execs_193488,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001835,src_000008,time_44131,execs_193488,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..13b7698e329 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001835,src_000008,time_44131,execs_193488,op_havoc,rep_1,+cov @@ -0,0 +1 @@ +]22;c;SGVsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001836,src_000008,time_44147,execs_193598,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001836,src_000008,time_44147,execs_193598,op_havoc,rep_2 new file mode 100644 index 00000000000..9bc4b6d1bd1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001836,src_000008,time_44147,execs_193598,op_havoc,rep_2 @@ -0,0 +1 @@ +]52;;SGVs]52;G8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001842,src_000008,time_44795,execs_198318,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001842,src_000008,time_44795,execs_198318,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..55a2078dd05 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001842,src_000008,time_44795,execs_198318,op_havoc,rep_1,+cov @@ -0,0 +1 @@ +]5;11;12;13;14;1red[82;c;SGVsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001843,src_000008,time_44804,execs_198379,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001843,src_000008,time_44804,execs_198379,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..ecfd57ea508 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001843,src_000008,time_44804,execs_198379,op_havoc,rep_1,+cov @@ -0,0 +1,2 @@ +]52;c;SGVsbG;2;3;4;5€]MMyÀ»¶ +]118= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001844,src_000008,time_45146,execs_200932,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_001844,src_000008,time_45146,execs_200932,op_havoc,rep_2 new file mode 100644 index 00000000000..300a62cca86 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001844,src_000008,time_45146,execs_200932,op_havoc,rep_2 @@ -0,0 +1 @@ +]52;c;SG]52;c;SG]52;c;SGVsbG8=VsbG8]52;c;SGVsbG8=VsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001847,src_000395,time_45615,execs_204336,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001847,src_000395,time_45615,execs_204336,op_havoc,rep_6 new file mode 100644 index 00000000000..82e3434edbc --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001847,src_000395,time_45615,execs_204336,op_havoc,rep_6 @@ -0,0 +1,2 @@ +Â1Aèèèçèèèèè% +o r[?0049h[;ùg, 9h[;ùg, h[;ùg,o r[;ùg+ WoÂÂÂÂú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001848,src_000395,time_45621,execs_204380,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001848,src_000395,time_45621,execs_204380,op_havoc,rep_7 new file mode 100644 index 00000000000..30defab3516 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001848,src_000395,time_45621,execs_204380,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001850,src_000395,time_45661,execs_204613,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001850,src_000395,time_45661,execs_204613,op_havoc,rep_12 new file mode 100644 index 00000000000..01b90ef2a56 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001850,src_000395,time_45661,execs_204613,op_havoc,rep_12 @@ -0,0 +1 @@ +Â1A% ùo p049ÂÂÂÂúr[?0049h[;ùg- WoÂ049hùg49hhÂÒÂÂúr[?00h[;ùg- WoÂÂÂÂúr[?0049h[;ùg- WoÂþÂÂú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001851,src_000395,time_45729,execs_205008,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001851,src_000395,time_45729,execs_205008,op_havoc,rep_12 new file mode 100644 index 00000000000..755bf5f5472 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001851,src_000395,time_45729,execs_205008,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001852,src_000395,time_45735,execs_205039,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001852,src_000395,time_45735,execs_205039,op_havoc,rep_14 new file mode 100644 index 00000000000..fbea098fe8e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001852,src_000395,time_45735,execs_205039,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001853,src_000395,time_45779,execs_205303,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001853,src_000395,time_45779,execs_205303,op_havoc,rep_12 new file mode 100644 index 00000000000..149c31d5721 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001853,src_000395,time_45779,execs_205303,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001854,src_000395,time_45784,execs_205331,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001854,src_000395,time_45784,execs_205331,op_havoc,rep_6 new file mode 100644 index 00000000000..79601b5a81a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001854,src_000395,time_45784,execs_205331,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001855,src_000395,time_45821,execs_205558,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_001855,src_000395,time_45821,execs_205558,op_havoc,rep_13 new file mode 100644 index 00000000000..969060b3c84 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001855,src_000395,time_45821,execs_205558,op_havoc,rep_13 @@ -0,0 +1 @@ +Â14ÿÿÿ€€€€€€€€€€€‘€€€€€€€€€€¤[H¤[Hli2J„„„„€€‘€€€€€€€€€€¤[H[„„„€€ú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001857,src_000395,time_46028,execs_206863,op_havoc,rep_13,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001857,src_000395,time_46028,execs_206863,op_havoc,rep_13,+cov new file mode 100644 index 00000000000..597616d8a41 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001857,src_000395,time_46028,execs_206863,op_havoc,rep_13,+cov @@ -0,0 +1,2 @@ +Â1AH +œÂ¬Â[?0049hÂ[?004Ph[;Â[?005n,9Wyl¬ÂÂú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001858,src_000395,time_46033,execs_206893,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_001858,src_000395,time_46033,execs_206893,op_havoc,rep_14 new file mode 100644 index 00000000000..e27ad287d9c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001858,src_000395,time_46033,execs_206893,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001861,src_000395,time_46104,execs_207295,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001861,src_000395,time_46104,execs_207295,op_havoc,rep_7 new file mode 100644 index 00000000000..b0f119d45d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001861,src_000395,time_46104,execs_207295,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001862,src_000395,time_46171,execs_207700,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001862,src_000395,time_46171,execs_207700,op_havoc,rep_3 new file mode 100644 index 00000000000..769e291aa60 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001862,src_000395,time_46171,execs_207700,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001864,src_000395,time_46195,execs_207845,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001864,src_000395,time_46195,execs_207845,op_havoc,rep_11 new file mode 100644 index 00000000000..0e8e516e24a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001864,src_000395,time_46195,execs_207845,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001865,src_000395,time_46197,execs_207853,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001865,src_000395,time_46197,execs_207853,op_havoc,rep_15 new file mode 100644 index 00000000000..8a929185516 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001865,src_000395,time_46197,execs_207853,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001867,src_000395,time_46283,execs_208389,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001867,src_000395,time_46283,execs_208389,op_havoc,rep_15 new file mode 100644 index 00000000000..322e06ba9cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001867,src_000395,time_46283,execs_208389,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001868,src_000395,time_46334,execs_208551,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001868,src_000395,time_46334,execs_208551,op_havoc,rep_12 new file mode 100644 index 00000000000..48ce0530d87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001868,src_000395,time_46334,execs_208551,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001870,src_000395,time_46353,execs_208646,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001870,src_000395,time_46353,execs_208646,op_havoc,rep_10 new file mode 100644 index 00000000000..82b9c954d50 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001870,src_000395,time_46353,execs_208646,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001871,src_000395,time_46355,execs_208660,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001871,src_000395,time_46355,execs_208660,op_havoc,rep_11 new file mode 100644 index 00000000000..421161d024c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001871,src_000395,time_46355,execs_208660,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001872,src_000395,time_46415,execs_209005,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001872,src_000395,time_46415,execs_209005,op_havoc,rep_15 new file mode 100644 index 00000000000..6b2c41ef2ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001872,src_000395,time_46415,execs_209005,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001874,src_000395,time_46492,execs_209473,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001874,src_000395,time_46492,execs_209473,op_havoc,rep_16 new file mode 100644 index 00000000000..a209ac22fee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001874,src_000395,time_46492,execs_209473,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001875,src_000395,time_46527,execs_209673,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001875,src_000395,time_46527,execs_209673,op_havoc,rep_9 new file mode 100644 index 00000000000..e716bf5663a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001875,src_000395,time_46527,execs_209673,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001877,src_000395,time_46537,execs_209736,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_001877,src_000395,time_46537,execs_209736,op_havoc,rep_10 new file mode 100644 index 00000000000..153b27632be --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001877,src_000395,time_46537,execs_209736,op_havoc,rep_10 @@ -0,0 +1,2 @@ +Â1A% +o r[?0049h [;[?0049h [;>[> [;>[>[?0049h m;ùg, WOÎÂÂÂú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001879,src_000395,time_46620,execs_210254,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_001879,src_000395,time_46620,execs_210254,op_havoc,rep_12 new file mode 100644 index 00000000000..2cfb5e869a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001879,src_000395,time_46620,execs_210254,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001881,src_000395,time_46631,execs_210317,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001881,src_000395,time_46631,execs_210317,op_havoc,rep_9 new file mode 100644 index 00000000000..42aad3d6409 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001881,src_000395,time_46631,execs_210317,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001884,src_000395,time_46709,execs_210795,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001884,src_000395,time_46709,execs_210795,op_havoc,rep_16 new file mode 100644 index 00000000000..965c5ba883a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001884,src_000395,time_46709,execs_210795,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001885,src_000395,time_46743,execs_210976,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001885,src_000395,time_46743,execs_210976,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..6fdc47ba7d1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001885,src_000395,time_46743,execs_210976,op_havoc,rep_7,+cov @@ -0,0 +1,2 @@ +ÂA% +o rú)0049h[;Ûg- WoÂÂ}}}}ÂÁú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001886,src_000395,time_46768,execs_211137,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001886,src_000395,time_46768,execs_211137,op_havoc,rep_16 new file mode 100644 index 00000000000..0eaf17c5a47 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001886,src_000395,time_46768,execs_211137,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001887,src_000395,time_46782,execs_211209,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_001887,src_000395,time_46782,execs_211209,op_havoc,rep_15 new file mode 100644 index 00000000000..8a9a4d6e0c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001887,src_000395,time_46782,execs_211209,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001890,src_000395,time_46953,execs_212222,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_001890,src_000395,time_46953,execs_212222,op_havoc,rep_9 new file mode 100644 index 00000000000..8dc9eaa48cb --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001890,src_000395,time_46953,execs_212222,op_havoc,rep_9 @@ -0,0 +1,3 @@ +Â1A% +o m[?0 m[?004Sh[;ù4Sh0 +ƒ m[?L04Sh[;ù4Sh[;ùg, WoÕÂ0ÂËú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001891,src_000395,time_47026,execs_212675,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_001891,src_000395,time_47026,execs_212675,op_havoc,rep_11 new file mode 100644 index 00000000000..000941b2d45 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001891,src_000395,time_47026,execs_212675,op_havoc,rep_11 @@ -0,0 +1 @@ +‘ }?0049h[;ù 0;10HoÂ1Ú 0;?0049h[;ù 0000HoÂÂÂm\cliBo¶g WoÂÂÂÂú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001893,src_000395,time_47078,execs_212995,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_001893,src_000395,time_47078,execs_212995,op_havoc,rep_16 new file mode 100644 index 00000000000..a488edfc79b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001893,src_000395,time_47078,execs_212995,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001902,src_000920,time_47461,execs_215376,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_001902,src_000920,time_47461,execs_215376,op_havoc,rep_3 new file mode 100644 index 00000000000..040b9297f76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001902,src_000920,time_47461,execs_215376,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001904,src_000920,time_47511,execs_215449,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001904,src_000920,time_47511,execs_215449,op_havoc,rep_4 new file mode 100644 index 00000000000..15f112aafb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001904,src_000920,time_47511,execs_215449,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001906,src_000920,time_47536,execs_215585,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001906,src_000920,time_47536,execs_215585,op_havoc,rep_5 new file mode 100644 index 00000000000..801dfcf7a33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001906,src_000920,time_47536,execs_215585,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001908,src_000920,time_47572,execs_215789,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001908,src_000920,time_47572,execs_215789,op_havoc,rep_6 new file mode 100644 index 00000000000..067ba805c3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001908,src_000920,time_47572,execs_215789,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001911,src_000920,time_47627,execs_216093,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001911,src_000920,time_47627,execs_216093,op_havoc,rep_5 new file mode 100644 index 00000000000..1cecac4228c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001911,src_000920,time_47627,execs_216093,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001915,src_000920,time_47665,execs_216292,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001915,src_000920,time_47665,execs_216292,op_havoc,rep_4 new file mode 100644 index 00000000000..66d0e2a4698 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001915,src_000920,time_47665,execs_216292,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001918,src_000920,time_47734,execs_216625,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001918,src_000920,time_47734,execs_216625,op_havoc,rep_5 new file mode 100644 index 00000000000..2dd82270ff3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001918,src_000920,time_47734,execs_216625,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001920,src_000920,time_47796,execs_216910,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001920,src_000920,time_47796,execs_216910,op_havoc,rep_4 new file mode 100644 index 00000000000..4fa969bc544 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001920,src_000920,time_47796,execs_216910,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001921,src_000920,time_47809,execs_216982,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001921,src_000920,time_47809,execs_216982,op_havoc,rep_8 new file mode 100644 index 00000000000..2fc863367ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001921,src_000920,time_47809,execs_216982,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001922,src_000920,time_47817,execs_217010,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001922,src_000920,time_47817,execs_217010,op_havoc,rep_6 new file mode 100644 index 00000000000..10885098351 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001922,src_000920,time_47817,execs_217010,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001924,src_000920,time_47925,execs_217592,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001924,src_000920,time_47925,execs_217592,op_havoc,rep_7 new file mode 100644 index 00000000000..e242508d799 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001924,src_000920,time_47925,execs_217592,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001925,src_000920,time_47935,execs_217627,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001925,src_000920,time_47935,execs_217627,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..c1ba36c7f7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001925,src_000920,time_47935,execs_217627,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001927,src_000920,time_48081,execs_218423,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001927,src_000920,time_48081,execs_218423,op_havoc,rep_8 new file mode 100644 index 00000000000..551a2ac9f23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001927,src_000920,time_48081,execs_218423,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001929,src_000920,time_48150,execs_218782,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_001929,src_000920,time_48150,execs_218782,op_havoc,rep_4 new file mode 100644 index 00000000000..6e7c7e191d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001929,src_000920,time_48150,execs_218782,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001932,src_000920,time_48222,execs_219155,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001932,src_000920,time_48222,execs_219155,op_havoc,rep_6 new file mode 100644 index 00000000000..0e2300ed425 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001932,src_000920,time_48222,execs_219155,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001933,src_000920,time_48249,execs_219258,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001933,src_000920,time_48249,execs_219258,op_havoc,rep_5 new file mode 100644 index 00000000000..5ca31f4875d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001933,src_000920,time_48249,execs_219258,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001938,src_000920,time_48500,execs_220594,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001938,src_000920,time_48500,execs_220594,op_havoc,rep_8 new file mode 100644 index 00000000000..6a2dd4936ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001938,src_000920,time_48500,execs_220594,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001939,src_000920,time_48524,execs_220723,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001939,src_000920,time_48524,execs_220723,op_havoc,rep_8 new file mode 100644 index 00000000000..4f9f8a29284 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001939,src_000920,time_48524,execs_220723,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001940,src_000920,time_48531,execs_220763,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001940,src_000920,time_48531,execs_220763,op_havoc,rep_8 new file mode 100644 index 00000000000..fb4ab0c784b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001940,src_000920,time_48531,execs_220763,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001942,src_000920,time_48656,execs_221410,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001942,src_000920,time_48656,execs_221410,op_havoc,rep_6 new file mode 100644 index 00000000000..6adeaa2222e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001942,src_000920,time_48656,execs_221410,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001943,src_000920,time_48788,execs_222079,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001943,src_000920,time_48788,execs_222079,op_havoc,rep_6 new file mode 100644 index 00000000000..0f7885b2e57 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001943,src_000920,time_48788,execs_222079,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001944,src_000920,time_48803,execs_222161,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001944,src_000920,time_48803,execs_222161,op_havoc,rep_7 new file mode 100644 index 00000000000..ee64172b571 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001944,src_000920,time_48803,execs_222161,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001947,src_000920,time_48961,execs_223007,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001947,src_000920,time_48961,execs_223007,op_havoc,rep_7 new file mode 100644 index 00000000000..92a5ab219b5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001947,src_000920,time_48961,execs_223007,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001948,src_000920,time_48978,execs_223102,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001948,src_000920,time_48978,execs_223102,op_havoc,rep_7 new file mode 100644 index 00000000000..16ec405eb39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001948,src_000920,time_48978,execs_223102,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001951,src_000920,time_49097,execs_223761,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001951,src_000920,time_49097,execs_223761,op_havoc,rep_8 new file mode 100644 index 00000000000..38f07087c91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001951,src_000920,time_49097,execs_223761,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001957,src_000920,time_49307,execs_224770,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_001957,src_000920,time_49307,execs_224770,op_havoc,rep_1 new file mode 100644 index 00000000000..6e13f5d69c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001957,src_000920,time_49307,execs_224770,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001958,src_000920,time_49357,execs_225028,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001958,src_000920,time_49357,execs_225028,op_havoc,rep_5 new file mode 100644 index 00000000000..2a9eb179a22 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001958,src_000920,time_49357,execs_225028,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001965,src_000476,time_49619,execs_226506,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001965,src_000476,time_49619,execs_226506,op_havoc,rep_8 new file mode 100644 index 00000000000..3bf95512500 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001965,src_000476,time_49619,execs_226506,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001969,src_000476,time_49731,execs_226838,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_001969,src_000476,time_49731,execs_226838,op_havoc,rep_8 new file mode 100644 index 00000000000..026cf5e8291 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001969,src_000476,time_49731,execs_226838,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001970,src_000476,time_49751,execs_226900,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001970,src_000476,time_49751,execs_226900,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..b683f7a51d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001970,src_000476,time_49751,execs_226900,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001971,src_000476,time_49800,execs_227065,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001971,src_000476,time_49800,execs_227065,op_havoc,rep_7 new file mode 100644 index 00000000000..680b0e46393 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_001971,src_000476,time_49800,execs_227065,op_havoc,rep_7 @@ -0,0 +1,3 @@ +“““[2Jrld!æ d!æ +ˆ‚ˆld!æ d!æ +,ˆ‚ˆˆˆ »»»»»»»»ˆˆ »»»»»»»»B! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001974,src_000476,time_49962,execs_227617,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001974,src_000476,time_49962,execs_227617,op_havoc,rep_5 new file mode 100644 index 00000000000..c98755d9845 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001974,src_000476,time_49962,execs_227617,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001975,src_000476,time_49966,execs_227631,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001975,src_000476,time_49966,execs_227631,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..85300b664aa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001975,src_000476,time_49966,execs_227631,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001977,src_000476,time_49989,execs_227708,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001977,src_000476,time_49989,execs_227708,op_havoc,rep_6 new file mode 100644 index 00000000000..0a59d1d328a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001977,src_000476,time_49989,execs_227708,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001984,src_000476,time_50254,execs_228580,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_001984,src_000476,time_50254,execs_228580,op_havoc,rep_6 new file mode 100644 index 00000000000..9235c60f7ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001984,src_000476,time_50254,execs_228580,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001987,src_000476,time_50395,execs_229002,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001987,src_000476,time_50395,execs_229002,op_havoc,rep_5 new file mode 100644 index 00000000000..763e502ff0a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001987,src_000476,time_50395,execs_229002,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001988,src_000476,time_50448,execs_229189,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_001988,src_000476,time_50448,execs_229189,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..5dcd3053cfc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001988,src_000476,time_50448,execs_229189,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001990,src_000476,time_50496,execs_229360,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_001990,src_000476,time_50496,execs_229360,op_havoc,rep_1 new file mode 100644 index 00000000000..8603ac51956 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001990,src_000476,time_50496,execs_229360,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001994,src_000476,time_50691,execs_230043,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001994,src_000476,time_50691,execs_230043,op_havoc,rep_5 new file mode 100644 index 00000000000..0e603b5397f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001994,src_000476,time_50691,execs_230043,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001995,src_000476,time_50737,execs_230203,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_001995,src_000476,time_50737,execs_230203,op_havoc,rep_5 new file mode 100644 index 00000000000..df282355d15 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001995,src_000476,time_50737,execs_230203,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_001996,src_000476,time_50743,execs_230215,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_001996,src_000476,time_50743,execs_230215,op_havoc,rep_7 new file mode 100644 index 00000000000..340dacbce2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_001996,src_000476,time_50743,execs_230215,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002000,src_000476,time_51038,execs_231205,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002000,src_000476,time_51038,execs_231205,op_havoc,rep_8 new file mode 100644 index 00000000000..dc5c0db9c3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002000,src_000476,time_51038,execs_231205,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002002,src_000476,time_51431,execs_232471,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002002,src_000476,time_51431,execs_232471,op_havoc,rep_7 new file mode 100644 index 00000000000..ede9eb424bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002002,src_000476,time_51431,execs_232471,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002004,src_000476,time_51522,execs_232781,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002004,src_000476,time_51522,execs_232781,op_havoc,rep_5 new file mode 100644 index 00000000000..5c2501d8e22 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002004,src_000476,time_51522,execs_232781,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002008,src_000476,time_51705,execs_233420,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002008,src_000476,time_51705,execs_233420,op_havoc,rep_8 new file mode 100644 index 00000000000..8c85ce78b76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002008,src_000476,time_51705,execs_233420,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002012,src_000476,time_52042,execs_234456,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002012,src_000476,time_52042,execs_234456,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..57d74976038 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002012,src_000476,time_52042,execs_234456,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002013,src_000476,time_52051,execs_234489,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002013,src_000476,time_52051,execs_234489,op_havoc,rep_6 new file mode 100644 index 00000000000..01a08ae7b77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002013,src_000476,time_52051,execs_234489,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002014,src_000476,time_52088,execs_234612,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002014,src_000476,time_52088,execs_234612,op_havoc,rep_6 new file mode 100644 index 00000000000..70ba5a28efb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002014,src_000476,time_52088,execs_234612,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002018,src_000476,time_52419,execs_235771,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002018,src_000476,time_52419,execs_235771,op_havoc,rep_6 new file mode 100644 index 00000000000..c90c5cbec26 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002018,src_000476,time_52419,execs_235771,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002019,src_000476,time_52525,execs_236138,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002019,src_000476,time_52525,execs_236138,op_havoc,rep_6 new file mode 100644 index 00000000000..1eff72fa7d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002019,src_000476,time_52525,execs_236138,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002022,src_000476,time_52859,execs_237193,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002022,src_000476,time_52859,execs_237193,op_havoc,rep_6 new file mode 100644 index 00000000000..53f507d130a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002022,src_000476,time_52859,execs_237193,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002023,src_000476,time_52874,execs_237232,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002023,src_000476,time_52874,execs_237232,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..51e93c36064 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002023,src_000476,time_52874,execs_237232,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002025,src_000476,time_53241,execs_238511,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002025,src_000476,time_53241,execs_238511,op_havoc,rep_2 new file mode 100644 index 00000000000..d370fc02361 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002025,src_000476,time_53241,execs_238511,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002026,src_000476,time_53295,execs_238636,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002026,src_000476,time_53295,execs_238636,op_havoc,rep_3 new file mode 100644 index 00000000000..80c20f346bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002026,src_000476,time_53295,execs_238636,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002028,src_000476,time_53371,execs_238891,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002028,src_000476,time_53371,execs_238891,op_havoc,rep_3 new file mode 100644 index 00000000000..f38cd241934 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002028,src_000476,time_53371,execs_238891,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002032,src_000476,time_53571,execs_239492,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002032,src_000476,time_53571,execs_239492,op_havoc,rep_8 new file mode 100644 index 00000000000..74507d11134 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002032,src_000476,time_53571,execs_239492,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002034,src_000026,time_53641,execs_239600,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002034,src_000026,time_53641,execs_239600,op_havoc,rep_7 new file mode 100644 index 00000000000..afa88012b27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002034,src_000026,time_53641,execs_239600,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002039,src_000026,time_53727,execs_240094,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002039,src_000026,time_53727,execs_240094,op_havoc,rep_16 new file mode 100644 index 00000000000..5626aac24a3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002039,src_000026,time_53727,execs_240094,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002047,src_000026,time_53774,execs_240381,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002047,src_000026,time_53774,execs_240381,op_havoc,rep_15 new file mode 100644 index 00000000000..48c2d6a9316 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002047,src_000026,time_53774,execs_240381,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002048,src_000026,time_53815,execs_240641,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002048,src_000026,time_53815,execs_240641,op_havoc,rep_11 new file mode 100644 index 00000000000..72dce7c5c8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002048,src_000026,time_53815,execs_240641,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002049,src_000026,time_53824,execs_240692,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002049,src_000026,time_53824,execs_240692,op_havoc,rep_16 new file mode 100644 index 00000000000..0391749dcf4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002049,src_000026,time_53824,execs_240692,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002050,src_000026,time_53880,execs_241048,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002050,src_000026,time_53880,execs_241048,op_havoc,rep_14 new file mode 100644 index 00000000000..721805b5215 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002050,src_000026,time_53880,execs_241048,op_havoc,rep_14 @@ -0,0 +1 @@ +:gI bc33333338:2:333338:2::-:gI bc33-:gI bc33333338:2:333338:2:25U0 0m[—833333333333sÿ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002054,src_000026,time_54116,execs_242463,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002054,src_000026,time_54116,execs_242463,op_havoc,rep_8 new file mode 100644 index 00000000000..74ed9abc7b5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002054,src_000026,time_54116,execs_242463,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002055,src_000026,time_54126,execs_242490,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002055,src_000026,time_54126,execs_242490,op_havoc,rep_8 new file mode 100644 index 00000000000..52b1c9e8fc7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002055,src_000026,time_54126,execs_242490,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002058,src_000026,time_54145,execs_242601,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002058,src_000026,time_54145,execs_242601,op_havoc,rep_8 new file mode 100644 index 00000000000..c89903fa184 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002058,src_000026,time_54145,execs_242601,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002059,src_000026,time_54168,execs_242723,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002059,src_000026,time_54168,execs_242723,op_havoc,rep_9 new file mode 100644 index 00000000000..a3a37aee9cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002059,src_000026,time_54168,execs_242723,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002062,src_000026,time_54288,execs_243419,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002062,src_000026,time_54288,execs_243419,op_havoc,rep_15 new file mode 100644 index 00000000000..52be87f9643 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002062,src_000026,time_54288,execs_243419,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002063,src_000026,time_54338,execs_243686,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002063,src_000026,time_54338,execs_243686,op_havoc,rep_9 new file mode 100644 index 00000000000..d33026ec28b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002063,src_000026,time_54338,execs_243686,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002065,src_000026,time_54362,execs_243825,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002065,src_000026,time_54362,execs_243825,op_havoc,rep_4 new file mode 100644 index 00000000000..a1491ca9068 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002065,src_000026,time_54362,execs_243825,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002068,src_000026,time_54472,execs_244489,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002068,src_000026,time_54472,execs_244489,op_havoc,rep_13 new file mode 100644 index 00000000000..ce927f4493b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002068,src_000026,time_54472,execs_244489,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002069,src_000026,time_54502,execs_244677,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002069,src_000026,time_54502,execs_244677,op_havoc,rep_11 new file mode 100644 index 00000000000..77b6fe521fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002069,src_000026,time_54502,execs_244677,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002070,src_000026,time_54588,execs_245163,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002070,src_000026,time_54588,execs_245163,op_havoc,rep_14 new file mode 100644 index 00000000000..483f6e8f243 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002070,src_000026,time_54588,execs_245163,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002072,src_000026,time_54614,execs_245272,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002072,src_000026,time_54614,execs_245272,op_havoc,rep_8 new file mode 100644 index 00000000000..106602fe5da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002072,src_000026,time_54614,execs_245272,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002073,src_000026,time_54634,execs_245385,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002073,src_000026,time_54634,execs_245385,op_havoc,rep_1 new file mode 100644 index 00000000000..acc2d9ceb23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002073,src_000026,time_54634,execs_245385,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002074,src_000026,time_54650,execs_245481,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002074,src_000026,time_54650,execs_245481,op_havoc,rep_9 new file mode 100644 index 00000000000..1cfb38740e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002074,src_000026,time_54650,execs_245481,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002077,src_000026,time_54794,execs_246321,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002077,src_000026,time_54794,execs_246321,op_havoc,rep_3 new file mode 100644 index 00000000000..e13628ab353 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002077,src_000026,time_54794,execs_246321,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002078,src_000026,time_54808,execs_246402,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002078,src_000026,time_54808,execs_246402,op_havoc,rep_15 new file mode 100644 index 00000000000..a76141efff3 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002078,src_000026,time_54808,execs_246402,op_havoc,rep_15 @@ -0,0 +1 @@ +-:H|||ÿ/1! 58:-:H|||ÿ/1! : : \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002081,src_000026,time_55036,execs_247767,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002081,src_000026,time_55036,execs_247767,op_havoc,rep_11 new file mode 100644 index 00000000000..951323da3f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002081,src_000026,time_55036,execs_247767,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002082,src_000026,time_55088,execs_248089,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002082,src_000026,time_55088,execs_248089,op_havoc,rep_14 new file mode 100644 index 00000000000..57293b15270 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002082,src_000026,time_55088,execs_248089,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002084,src_000026,time_55328,execs_249547,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002084,src_000026,time_55328,execs_249547,op_havoc,rep_14 new file mode 100644 index 00000000000..69900dbec01 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002084,src_000026,time_55328,execs_249547,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002086,src_000026,time_55502,execs_250590,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002086,src_000026,time_55502,execs_250590,op_havoc,rep_13 new file mode 100644 index 00000000000..f2dab4ddef1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002086,src_000026,time_55502,execs_250590,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002087,src_000026,time_55535,execs_250805,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002087,src_000026,time_55535,execs_250805,op_havoc,rep_15 new file mode 100644 index 00000000000..00091373572 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002087,src_000026,time_55535,execs_250805,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002090,src_000026,time_55595,execs_251146,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002090,src_000026,time_55595,execs_251146,op_havoc,rep_4 new file mode 100644 index 00000000000..53816e494fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002090,src_000026,time_55595,execs_251146,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002093,src_000026,time_55707,execs_251728,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002093,src_000026,time_55707,execs_251728,op_havoc,rep_9 new file mode 100644 index 00000000000..05aef8f5b53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002093,src_000026,time_55707,execs_251728,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002096,src_000026,time_55868,execs_252695,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002096,src_000026,time_55868,execs_252695,op_havoc,rep_9 new file mode 100644 index 00000000000..df23c57047b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002096,src_000026,time_55868,execs_252695,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002097,src_000027,time_55906,execs_252894,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002097,src_000027,time_55906,execs_252894,op_havoc,rep_16 new file mode 100644 index 00000000000..57942d3b305 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002097,src_000027,time_55906,execs_252894,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002099,src_000027,time_55927,execs_253035,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002099,src_000027,time_55927,execs_253035,op_havoc,rep_8 new file mode 100644 index 00000000000..adbfa38a3fa --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002099,src_000027,time_55927,execs_253035,op_havoc,rep_8 @@ -0,0 +1 @@ +íHello,ííííííííííííííííJíííííííííííííí lo,íííÞÑíÞííí l‡,íííÞííí diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002100,src_000027,time_55930,execs_253056,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002100,src_000027,time_55930,execs_253056,op_havoc,rep_13 new file mode 100644 index 00000000000..e5deb7b622c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002100,src_000027,time_55930,execs_253056,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002101,src_000027,time_55943,execs_253134,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002101,src_000027,time_55943,execs_253134,op_havoc,rep_6 new file mode 100644 index 00000000000..dde47b49e99 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002101,src_000027,time_55943,execs_253134,op_havoc,rep_6 @@ -0,0 +1 @@ +HelHello,íííÞíííòllo,íííÞííí lo,ííellx,íííÞííí l,o,íííÞííí lo,ííííÞííí diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002105,src_000027,time_56074,execs_253890,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002105,src_000027,time_56074,execs_253890,op_havoc,rep_15 new file mode 100644 index 00000000000..0df4807eddb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002105,src_000027,time_56074,execs_253890,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002107,src_000027,time_56137,execs_254298,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002107,src_000027,time_56137,execs_254298,op_havoc,rep_14 new file mode 100644 index 00000000000..8553d7857be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002107,src_000027,time_56137,execs_254298,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002109,src_000027,time_56280,execs_255251,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002109,src_000027,time_56280,execs_255251,op_havoc,rep_6 new file mode 100644 index 00000000000..a1061802e39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002109,src_000027,time_56280,execs_255251,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002110,src_000027,time_56307,execs_255419,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002110,src_000027,time_56307,execs_255419,op_havoc,rep_10 new file mode 100644 index 00000000000..5554b16f263 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002110,src_000027,time_56307,execs_255419,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002113,src_000027,time_56331,execs_255577,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002113,src_000027,time_56331,execs_255577,op_havoc,rep_10 new file mode 100644 index 00000000000..33b95e3f3b9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002113,src_000027,time_56331,execs_255577,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002114,src_000027,time_56357,execs_255748,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002114,src_000027,time_56357,execs_255748,op_havoc,rep_11 new file mode 100644 index 00000000000..9c03b71fe68 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002114,src_000027,time_56357,execs_255748,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002115,src_000027,time_56392,execs_255994,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002115,src_000027,time_56392,execs_255994,op_havoc,rep_3 new file mode 100644 index 00000000000..b4c0b38dc4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002115,src_000027,time_56392,execs_255994,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002117,src_000027,time_56643,execs_257646,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002117,src_000027,time_56643,execs_257646,op_havoc,rep_3 new file mode 100644 index 00000000000..3cbf586f57a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002117,src_000027,time_56643,execs_257646,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002118,src_000027,time_56758,execs_258394,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002118,src_000027,time_56758,execs_258394,op_havoc,rep_12 new file mode 100644 index 00000000000..1e488aa6791 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002118,src_000027,time_56758,execs_258394,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002120,src_000027,time_56924,execs_259450,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002120,src_000027,time_56924,execs_259450,op_havoc,rep_16 new file mode 100644 index 00000000000..d523a991909 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002120,src_000027,time_56924,execs_259450,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002122,src_000027,time_56966,execs_259614,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002122,src_000027,time_56966,execs_259614,op_havoc,rep_15 new file mode 100644 index 00000000000..9174de55990 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002122,src_000027,time_56966,execs_259614,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002123,src_000027,time_57005,execs_259874,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002123,src_000027,time_57005,execs_259874,op_havoc,rep_15 new file mode 100644 index 00000000000..3910ab3717e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002123,src_000027,time_57005,execs_259874,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002126,src_000027,time_57225,execs_261218,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002126,src_000027,time_57225,execs_261218,op_havoc,rep_14 new file mode 100644 index 00000000000..b5f2d86cd1c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002126,src_000027,time_57225,execs_261218,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002128,src_000027,time_57404,execs_262357,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002128,src_000027,time_57404,execs_262357,op_havoc,rep_11 new file mode 100644 index 00000000000..e9fdf95c5a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002128,src_000027,time_57404,execs_262357,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002129,src_000027,time_57479,execs_262799,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002129,src_000027,time_57479,execs_262799,op_havoc,rep_9 new file mode 100644 index 00000000000..5aa7dc019da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002129,src_000027,time_57479,execs_262799,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002130,src_000027,time_57502,execs_262888,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002130,src_000027,time_57502,execs_262888,op_havoc,rep_16 new file mode 100644 index 00000000000..1cb665c7c3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002130,src_000027,time_57502,execs_262888,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002137,src_000146,time_58063,execs_266440,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002137,src_000146,time_58063,execs_266440,op_havoc,rep_12 new file mode 100644 index 00000000000..d574da6fe11 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002137,src_000146,time_58063,execs_266440,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002141,src_000146,time_58133,execs_266852,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002141,src_000146,time_58133,execs_266852,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..9926e5f6682 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002141,src_000146,time_58133,execs_266852,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002143,src_000146,time_58285,execs_267837,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002143,src_000146,time_58285,execs_267837,op_havoc,rep_8 new file mode 100644 index 00000000000..20efbfcb56d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002143,src_000146,time_58285,execs_267837,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002145,src_000146,time_58363,execs_268326,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002145,src_000146,time_58363,execs_268326,op_havoc,rep_4 new file mode 100644 index 00000000000..d443806857c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002145,src_000146,time_58363,execs_268326,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002146,src_000146,time_58441,execs_268825,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002146,src_000146,time_58441,execs_268825,op_havoc,rep_9 new file mode 100644 index 00000000000..b48ea87f8e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002146,src_000146,time_58441,execs_268825,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002150,src_000146,time_58612,execs_269797,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002150,src_000146,time_58612,execs_269797,op_havoc,rep_15 new file mode 100644 index 00000000000..c7e0a085276 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002150,src_000146,time_58612,execs_269797,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002151,src_000146,time_58757,execs_270679,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002151,src_000146,time_58757,execs_270679,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..758467f152a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002151,src_000146,time_58757,execs_270679,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002152,src_000146,time_58769,execs_270733,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002152,src_000146,time_58769,execs_270733,op_havoc,rep_8 new file mode 100644 index 00000000000..8596c11fe1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002152,src_000146,time_58769,execs_270733,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002153,src_000146,time_58780,execs_270793,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002153,src_000146,time_58780,execs_270793,op_havoc,rep_9 new file mode 100644 index 00000000000..717555d5493 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002153,src_000146,time_58780,execs_270793,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002155,src_000146,time_58871,execs_271275,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002155,src_000146,time_58871,execs_271275,op_havoc,rep_12 new file mode 100644 index 00000000000..3494c2d8ba8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002155,src_000146,time_58871,execs_271275,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002156,src_000146,time_58941,execs_271686,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002156,src_000146,time_58941,execs_271686,op_havoc,rep_15 new file mode 100644 index 00000000000..cae4d3a89b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002156,src_000146,time_58941,execs_271686,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002157,src_000146,time_58990,execs_271948,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002157,src_000146,time_58990,execs_271948,op_havoc,rep_13 new file mode 100644 index 00000000000..e10cb92773f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002157,src_000146,time_58990,execs_271948,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002160,src_000146,time_59122,execs_272619,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002160,src_000146,time_59122,execs_272619,op_havoc,rep_9 new file mode 100644 index 00000000000..19289e84833 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002160,src_000146,time_59122,execs_272619,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002164,src_000146,time_59271,execs_273508,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002164,src_000146,time_59271,execs_273508,op_havoc,rep_13 new file mode 100644 index 00000000000..566a7a14911 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002164,src_000146,time_59271,execs_273508,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002165,src_000146,time_59277,execs_273539,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002165,src_000146,time_59277,execs_273539,op_havoc,rep_13 new file mode 100644 index 00000000000..7498b1c05e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002165,src_000146,time_59277,execs_273539,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002166,src_000146,time_59346,execs_273967,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002166,src_000146,time_59346,execs_273967,op_havoc,rep_11 new file mode 100644 index 00000000000..6e30aa49010 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002166,src_000146,time_59346,execs_273967,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002167,src_000146,time_59348,execs_273983,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002167,src_000146,time_59348,execs_273983,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..88982a0578d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002167,src_000146,time_59348,execs_273983,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002168,src_000146,time_59356,execs_274032,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002168,src_000146,time_59356,execs_274032,op_havoc,rep_10 new file mode 100644 index 00000000000..37c065a610f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002168,src_000146,time_59356,execs_274032,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002169,src_000146,time_59393,execs_274231,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002169,src_000146,time_59393,execs_274231,op_havoc,rep_11 new file mode 100644 index 00000000000..d3fe5fa9e55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002169,src_000146,time_59393,execs_274231,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002170,src_000146,time_59473,execs_274670,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002170,src_000146,time_59473,execs_274670,op_havoc,rep_7 new file mode 100644 index 00000000000..8a665b51c42 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002170,src_000146,time_59473,execs_274670,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002171,src_000146,time_59504,execs_274849,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002171,src_000146,time_59504,execs_274849,op_havoc,rep_9 new file mode 100644 index 00000000000..74dd8e8181f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002171,src_000146,time_59504,execs_274849,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002172,src_000146,time_59530,execs_275022,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002172,src_000146,time_59530,execs_275022,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..9d768a3d807 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002172,src_000146,time_59530,execs_275022,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002174,src_000146,time_59586,execs_275378,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002174,src_000146,time_59586,execs_275378,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..daa43d9bae3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002174,src_000146,time_59586,execs_275378,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002175,src_000146,time_59657,execs_275777,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002175,src_000146,time_59657,execs_275777,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..5d883dc31bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002175,src_000146,time_59657,execs_275777,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002176,src_000146,time_59659,execs_275791,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002176,src_000146,time_59659,execs_275791,op_havoc,rep_8 new file mode 100644 index 00000000000..6afef9bd729 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002176,src_000146,time_59659,execs_275791,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002182,src_000146,time_59995,execs_277729,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002182,src_000146,time_59995,execs_277729,op_havoc,rep_8 new file mode 100644 index 00000000000..9d401227136 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002182,src_000146,time_59995,execs_277729,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002184,src_000146,time_60035,execs_277993,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002184,src_000146,time_60035,execs_277993,op_havoc,rep_11 new file mode 100644 index 00000000000..a2c4ab95fe9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002184,src_000146,time_60035,execs_277993,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002185,src_000146,time_60060,execs_278152,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002185,src_000146,time_60060,execs_278152,op_havoc,rep_16 new file mode 100644 index 00000000000..709239f0ffd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002185,src_000146,time_60060,execs_278152,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002186,src_000146,time_60079,execs_278218,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002186,src_000146,time_60079,execs_278218,op_havoc,rep_11 new file mode 100644 index 00000000000..b45c4679cb9 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002186,src_000146,time_60079,execs_278218,op_havoc,rep_11 @@ -0,0 +1 @@ + eh[?1dh[?1d47h.[?97h?1d4h[?1d47h.[?97h.[?9h.[?9h[?10425 diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002187,src_000146,time_60126,execs_278510,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002187,src_000146,time_60126,execs_278510,op_havoc,rep_6 new file mode 100644 index 00000000000..2696979deab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002187,src_000146,time_60126,execs_278510,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002188,src_000146,time_60198,execs_278938,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002188,src_000146,time_60198,execs_278938,op_havoc,rep_9 new file mode 100644 index 00000000000..59a37c33cc1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002188,src_000146,time_60198,execs_278938,op_havoc,rep_9 @@ -0,0 +1 @@ +ól25l[1049l[ôóól29l[?25h[?1óóóól25l[1049l[?5l[1049?25h[?1óóóól25l[1049ll[?25h[?1óóóól25l[1049l[?25h[?1óóóóóWosld! diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002190,src_001018,time_60313,execs_279707,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002190,src_001018,time_60313,execs_279707,op_havoc,rep_5 new file mode 100644 index 00000000000..efecfd19486 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002190,src_001018,time_60313,execs_279707,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002191,src_001018,time_60377,execs_280077,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002191,src_001018,time_60377,execs_280077,op_havoc,rep_6 new file mode 100644 index 00000000000..71d976afe08 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002191,src_001018,time_60377,execs_280077,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002194,src_001018,time_60521,execs_280818,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002194,src_001018,time_60521,execs_280818,op_havoc,rep_6 new file mode 100644 index 00000000000..db0a2014055 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002194,src_001018,time_60521,execs_280818,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002195,src_001018,time_60723,execs_282100,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002195,src_001018,time_60723,execs_282100,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..0254332dd56 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002195,src_001018,time_60723,execs_282100,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002198,src_001018,time_61138,execs_284656,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002198,src_001018,time_61138,execs_284656,op_havoc,rep_5 new file mode 100644 index 00000000000..2aa245e1fda --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002198,src_001018,time_61138,execs_284656,op_havoc,rep_5 @@ -0,0 +1 @@ +bh[%T04KH5l'Zdb48Ibhdb47;2;0 ;1;0%T04KH5l'Zdb48Ibhdb47; bh[%Tl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002203,src_001018,time_61939,execs_289400,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002203,src_001018,time_61939,execs_289400,op_havoc,rep_6 new file mode 100644 index 00000000000..9030511f45f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002203,src_001018,time_61939,execs_289400,op_havoc,rep_6 @@ -0,0 +1,2 @@ +bþXXXX +Lld! ì \Oÿckÿ[22J[%Tl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002205,src_001018,time_62228,execs_291076,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002205,src_001018,time_62228,execs_291076,op_havoc,rep_2 new file mode 100644 index 00000000000..140ccef2d3b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002205,src_001018,time_62228,execs_291076,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002207,src_000036,time_62505,execs_292775,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002207,src_000036,time_62505,execs_292775,op_havoc,rep_1 new file mode 100644 index 00000000000..fbcbebd7fe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002207,src_000036,time_62505,execs_292775,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002208,src_000036,time_62519,execs_292884,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002208,src_000036,time_62519,execs_292884,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ddceec2de41 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002208,src_000036,time_62519,execs_292884,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002209,src_000036,time_62687,execs_294108,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002209,src_000036,time_62687,execs_294108,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ded6b20cb2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002209,src_000036,time_62687,execs_294108,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002211,src_000036,time_63061,execs_296684,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002211,src_000036,time_63061,execs_296684,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..92306a60bd6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002211,src_000036,time_63061,execs_296684,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002216,src_000036,time_64031,execs_303957,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002216,src_000036,time_64031,execs_303957,op_havoc,rep_2 new file mode 100644 index 00000000000..0efbded79cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002216,src_000036,time_64031,execs_303957,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002236,src_001759,time_66931,execs_306274,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002236,src_001759,time_66931,execs_306274,op_havoc,rep_3 new file mode 100644 index 00000000000..2a4a82db25c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002236,src_001759,time_66931,execs_306274,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002239,src_001759,time_67536,execs_306393,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002239,src_001759,time_67536,execs_306393,op_havoc,rep_8 new file mode 100644 index 00000000000..a0b32217af4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002239,src_001759,time_67536,execs_306393,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002246,src_001759,time_69328,execs_306769,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002246,src_001759,time_69328,execs_306769,op_havoc,rep_5 new file mode 100644 index 00000000000..749b3865584 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002246,src_001759,time_69328,execs_306769,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002252,src_001759,time_71290,execs_307175,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002252,src_001759,time_71290,execs_307175,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..042b7cf3f3c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002252,src_001759,time_71290,execs_307175,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002254,src_001759,time_72486,execs_307386,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002254,src_001759,time_72486,execs_307386,op_havoc,rep_8 new file mode 100644 index 00000000000..2c7ca943d4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002254,src_001759,time_72486,execs_307386,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002263,src_001759,time_75532,execs_307964,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002263,src_001759,time_75532,execs_307964,op_havoc,rep_2 new file mode 100644 index 00000000000..4bceff86d8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002263,src_001759,time_75532,execs_307964,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002265,src_001759,time_76554,execs_308171,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002265,src_001759,time_76554,execs_308171,op_havoc,rep_7 new file mode 100644 index 00000000000..7b853233b8e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002265,src_001759,time_76554,execs_308171,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002268,src_001759,time_77813,execs_308457,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002268,src_001759,time_77813,execs_308457,op_havoc,rep_3 new file mode 100644 index 00000000000..115a463a7a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002268,src_001759,time_77813,execs_308457,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002270,src_001759,time_78500,execs_308581,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002270,src_001759,time_78500,execs_308581,op_havoc,rep_8 new file mode 100644 index 00000000000..36808fad32d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002270,src_001759,time_78500,execs_308581,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002277,src_001759,time_82811,execs_309477,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002277,src_001759,time_82811,execs_309477,op_havoc,rep_5 new file mode 100644 index 00000000000..dec747a340e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002277,src_001759,time_82811,execs_309477,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002285,src_001759,time_88343,execs_310611,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002285,src_001759,time_88343,execs_310611,op_havoc,rep_4 new file mode 100644 index 00000000000..0b50e08fe99 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002285,src_001759,time_88343,execs_310611,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002288,src_001759,time_89933,execs_310934,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002288,src_001759,time_89933,execs_310934,op_havoc,rep_4 new file mode 100644 index 00000000000..4e24f4b179f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002288,src_001759,time_89933,execs_310934,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002289,src_001759,time_93395,execs_311716,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002289,src_001759,time_93395,execs_311716,op_havoc,rep_5 new file mode 100644 index 00000000000..35c0b385b8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002289,src_001759,time_93395,execs_311716,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002293,src_001759,time_97271,execs_312587,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002293,src_001759,time_97271,execs_312587,op_havoc,rep_7 new file mode 100644 index 00000000000..1cdce3dbdec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002293,src_001759,time_97271,execs_312587,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002295,src_001759,time_100154,execs_313223,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002295,src_001759,time_100154,execs_313223,op_havoc,rep_8 new file mode 100644 index 00000000000..58a6f805673 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002295,src_001759,time_100154,execs_313223,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002298,src_001759,time_101138,execs_313448,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002298,src_001759,time_101138,execs_313448,op_havoc,rep_8 new file mode 100644 index 00000000000..643a3942932 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002298,src_001759,time_101138,execs_313448,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002302,src_001759,time_102860,execs_313858,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002302,src_001759,time_102860,execs_313858,op_havoc,rep_8 new file mode 100644 index 00000000000..cbe50f7a018 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002302,src_001759,time_102860,execs_313858,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002303,src_001759,time_103439,execs_313988,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002303,src_001759,time_103439,execs_313988,op_havoc,rep_7 new file mode 100644 index 00000000000..f69198a8b53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002303,src_001759,time_103439,execs_313988,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002305,src_001759,time_105505,execs_314438,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002305,src_001759,time_105505,execs_314438,op_havoc,rep_7 new file mode 100644 index 00000000000..65153847abb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002305,src_001759,time_105505,execs_314438,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002306,src_001759,time_107464,execs_314894,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002306,src_001759,time_107464,execs_314894,op_havoc,rep_8 new file mode 100644 index 00000000000..0fd48397e29 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002306,src_001759,time_107464,execs_314894,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002314,src_001759,time_111731,execs_315813,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002314,src_001759,time_111731,execs_315813,op_havoc,rep_7 new file mode 100644 index 00000000000..4b4f4a7aac7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002314,src_001759,time_111731,execs_315813,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002316,src_001230,time_113534,execs_316948,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002316,src_001230,time_113534,execs_316948,op_havoc,rep_4 new file mode 100644 index 00000000000..3681164e7bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002316,src_001230,time_113534,execs_316948,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002317,src_001230,time_113536,execs_316964,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002317,src_001230,time_113536,execs_316964,op_havoc,rep_4 new file mode 100644 index 00000000000..65e68ec9d37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002317,src_001230,time_113536,execs_316964,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002318,src_001230,time_113646,execs_317676,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002318,src_001230,time_113646,execs_317676,op_havoc,rep_4 new file mode 100644 index 00000000000..199a769d36a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002318,src_001230,time_113646,execs_317676,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002320,src_001230,time_114138,execs_320624,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002320,src_001230,time_114138,execs_320624,op_havoc,rep_3 new file mode 100644 index 00000000000..a7735eb7a9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002320,src_001230,time_114138,execs_320624,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002321,src_001230,time_114915,execs_325494,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002321,src_001230,time_114915,execs_325494,op_havoc,rep_4 new file mode 100644 index 00000000000..16c36d1aebd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002321,src_001230,time_114915,execs_325494,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002324,src_001044,time_115211,execs_327266,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002324,src_001044,time_115211,execs_327266,op_havoc,rep_4 new file mode 100644 index 00000000000..3feb6061c34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002324,src_001044,time_115211,execs_327266,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002325,src_001044,time_115262,execs_327585,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002325,src_001044,time_115262,execs_327585,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..d5c9be74868 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002325,src_001044,time_115262,execs_327585,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002327,src_001044,time_115472,execs_328921,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002327,src_001044,time_115472,execs_328921,op_havoc,rep_3 new file mode 100644 index 00000000000..2727f999a36 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002327,src_001044,time_115472,execs_328921,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002328,src_001044,time_115557,execs_329490,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002328,src_001044,time_115557,execs_329490,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..3170b6e05a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002328,src_001044,time_115557,execs_329490,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002333,src_001044,time_116029,execs_332408,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002333,src_001044,time_116029,execs_332408,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..5cf3f63ab8d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002333,src_001044,time_116029,execs_332408,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002334,src_001044,time_116114,execs_332917,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002334,src_001044,time_116114,execs_332917,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..8aba526c345 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002334,src_001044,time_116114,execs_332917,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002335,src_001044,time_116633,execs_336041,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002335,src_001044,time_116633,execs_336041,op_havoc,rep_2 new file mode 100644 index 00000000000..635a7c1328b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002335,src_001044,time_116633,execs_336041,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002339,src_000068,time_116904,execs_337471,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002339,src_000068,time_116904,execs_337471,op_havoc,rep_12 new file mode 100644 index 00000000000..93efef5ff60 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002339,src_000068,time_116904,execs_337471,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002343,src_000068,time_117139,execs_338857,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002343,src_000068,time_117139,execs_338857,op_havoc,rep_12 new file mode 100644 index 00000000000..86092876904 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002343,src_000068,time_117139,execs_338857,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002344,src_000068,time_117183,execs_339092,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002344,src_000068,time_117183,execs_339092,op_havoc,rep_14 new file mode 100644 index 00000000000..b19953b77bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002344,src_000068,time_117183,execs_339092,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002346,src_000068,time_117615,execs_341617,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002346,src_000068,time_117615,execs_341617,op_havoc,rep_16 new file mode 100644 index 00000000000..f27a6bced1e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002346,src_000068,time_117615,execs_341617,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002347,src_000068,time_117665,execs_341895,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002347,src_000068,time_117665,execs_341895,op_havoc,rep_16 new file mode 100644 index 00000000000..9f37ef19509 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002347,src_000068,time_117665,execs_341895,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002349,src_000068,time_117762,execs_342484,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002349,src_000068,time_117762,execs_342484,op_havoc,rep_4 new file mode 100644 index 00000000000..3289d7c1b93 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002349,src_000068,time_117762,execs_342484,op_havoc,rep_4 @@ -0,0 +1 @@ +çì?b38c5;196mred[48;2; lllo,WorldHe \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002352,src_000068,time_117967,execs_343682,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002352,src_000068,time_117967,execs_343682,op_havoc,rep_15 new file mode 100644 index 00000000000..92eacbe4109 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002352,src_000068,time_117967,execs_343682,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002353,src_000068,time_118058,execs_344270,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002353,src_000068,time_118058,execs_344270,op_havoc,rep_5 new file mode 100644 index 00000000000..e544da52268 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002353,src_000068,time_118058,execs_344270,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002354,src_000068,time_118226,execs_344516,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002354,src_000068,time_118226,execs_344516,op_havoc,rep_14 new file mode 100644 index 00000000000..a61ef2872f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002354,src_000068,time_118226,execs_344516,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002355,src_000068,time_118249,execs_344657,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002355,src_000068,time_118249,execs_344657,op_havoc,rep_16 new file mode 100644 index 00000000000..dc08fc8344d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002355,src_000068,time_118249,execs_344657,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002356,src_000068,time_118325,execs_345126,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002356,src_000068,time_118325,execs_345126,op_havoc,rep_14 new file mode 100644 index 00000000000..f1f53e0f0e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002356,src_000068,time_118325,execs_345126,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002357,src_000068,time_118541,execs_346446,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002357,src_000068,time_118541,execs_346446,op_havoc,rep_15 new file mode 100644 index 00000000000..b852614acd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002357,src_000068,time_118541,execs_346446,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002358,src_001478,time_118750,execs_347490,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002358,src_001478,time_118750,execs_347490,op_havoc,rep_2 new file mode 100644 index 00000000000..92aa23d10ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002358,src_001478,time_118750,execs_347490,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002359,src_001478,time_118761,execs_347504,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002359,src_001478,time_118761,execs_347504,op_havoc,rep_1 new file mode 100644 index 00000000000..455f2c26fda Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002359,src_001478,time_118761,execs_347504,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002360,src_001478,time_118891,execs_347750,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002360,src_001478,time_118891,execs_347750,op_havoc,rep_11 new file mode 100644 index 00000000000..8de22a7fd7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002360,src_001478,time_118891,execs_347750,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002363,src_001478,time_119483,execs_348592,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002363,src_001478,time_119483,execs_348592,op_havoc,rep_11 new file mode 100644 index 00000000000..bfad234f996 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002363,src_001478,time_119483,execs_348592,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002365,src_001478,time_119629,execs_348747,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002365,src_001478,time_119629,execs_348747,op_havoc,rep_16 new file mode 100644 index 00000000000..377f03cee45 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002365,src_001478,time_119629,execs_348747,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002367,src_001478,time_120059,execs_349568,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002367,src_001478,time_120059,execs_349568,op_havoc,rep_13 new file mode 100644 index 00000000000..00cc16836fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002367,src_001478,time_120059,execs_349568,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002371,src_001478,time_121028,execs_351315,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002371,src_001478,time_121028,execs_351315,op_havoc,rep_10 new file mode 100644 index 00000000000..72e4c7fc858 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002371,src_001478,time_121028,execs_351315,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002372,src_001478,time_121242,execs_351706,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002372,src_001478,time_121242,execs_351706,op_havoc,rep_7 new file mode 100644 index 00000000000..5c9408118d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002372,src_001478,time_121242,execs_351706,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002373,src_001478,time_121426,execs_352006,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002373,src_001478,time_121426,execs_352006,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..2103804491a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002373,src_001478,time_121426,execs_352006,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002378,src_001478,time_122538,execs_353817,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002378,src_001478,time_122538,execs_353817,op_havoc,rep_10 new file mode 100644 index 00000000000..c24c07628e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002378,src_001478,time_122538,execs_353817,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002379,src_001478,time_122619,execs_353925,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002379,src_001478,time_122619,execs_353925,op_havoc,rep_14 new file mode 100644 index 00000000000..86cfaed9932 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002379,src_001478,time_122619,execs_353925,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002381,src_001478,time_123532,execs_355544,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002381,src_001478,time_123532,execs_355544,op_havoc,rep_15 new file mode 100644 index 00000000000..4ed9e957273 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002381,src_001478,time_123532,execs_355544,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002384,src_000993,time_124623,execs_357657,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002384,src_000993,time_124623,execs_357657,op_havoc,rep_7 new file mode 100644 index 00000000000..84c9d9fd87d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002384,src_000993,time_124623,execs_357657,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002386,src_000993,time_124691,execs_358045,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002386,src_000993,time_124691,execs_358045,op_havoc,rep_6 new file mode 100644 index 00000000000..deb71f51510 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002386,src_000993,time_124691,execs_358045,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002388,src_000993,time_124842,execs_358904,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002388,src_000993,time_124842,execs_358904,op_havoc,rep_3 new file mode 100644 index 00000000000..fdc20cab650 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002388,src_000993,time_124842,execs_358904,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002389,src_000993,time_124892,execs_359202,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002389,src_000993,time_124892,execs_359202,op_havoc,rep_5 new file mode 100644 index 00000000000..db965147f5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002389,src_000993,time_124892,execs_359202,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002390,src_000993,time_124957,execs_359586,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002390,src_000993,time_124957,execs_359586,op_havoc,rep_8 new file mode 100644 index 00000000000..3a99533c420 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002390,src_000993,time_124957,execs_359586,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002391,src_000993,time_125031,execs_360016,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002391,src_000993,time_125031,execs_360016,op_havoc,rep_4 new file mode 100644 index 00000000000..d9731b41bb5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002391,src_000993,time_125031,execs_360016,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002393,src_000993,time_125095,execs_360402,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002393,src_000993,time_125095,execs_360402,op_havoc,rep_6 new file mode 100644 index 00000000000..5c9dd4b2000 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002393,src_000993,time_125095,execs_360402,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002394,src_000993,time_125425,execs_362060,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002394,src_000993,time_125425,execs_362060,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..a316fd99738 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002394,src_000993,time_125425,execs_362060,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002395,src_000993,time_125790,execs_364090,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002395,src_000993,time_125790,execs_364090,op_havoc,rep_3 new file mode 100644 index 00000000000..cbc2449357c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002395,src_000993,time_125790,execs_364090,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002396,src_000993,time_125942,execs_364943,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002396,src_000993,time_125942,execs_364943,op_havoc,rep_3 new file mode 100644 index 00000000000..7a8e3f5e0d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002396,src_000993,time_125942,execs_364943,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002398,src_000993,time_126248,execs_366751,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002398,src_000993,time_126248,execs_366751,op_havoc,rep_8 new file mode 100644 index 00000000000..7c1ee053dfa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002398,src_000993,time_126248,execs_366751,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002400,src_000080,time_126383,execs_367477,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002400,src_000080,time_126383,execs_367477,op_havoc,rep_15 new file mode 100644 index 00000000000..296b399f802 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002400,src_000080,time_126383,execs_367477,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002401,src_000080,time_126415,execs_367633,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002401,src_000080,time_126415,execs_367633,op_havoc,rep_6 new file mode 100644 index 00000000000..f97957ed747 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002401,src_000080,time_126415,execs_367633,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002402,src_000080,time_126435,execs_367760,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002402,src_000080,time_126435,execs_367760,op_havoc,rep_5 new file mode 100644 index 00000000000..a2e34006cb4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002402,src_000080,time_126435,execs_367760,op_havoc,rep_5 @@ -0,0 +1 @@ +555:0:0555:0:0m[00m[58:5:20m[58:5:20m[58:5:20m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002405,src_000080,time_126637,execs_369005,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002405,src_000080,time_126637,execs_369005,op_havoc,rep_6 new file mode 100644 index 00000000000..35afd6a1b10 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002405,src_000080,time_126637,execs_369005,op_havoc,rep_6 @@ -0,0 +1 @@ +55:0:004~04~[? m[58:004500:200m[? m[58:500:200m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002408,src_000080,time_126746,execs_369701,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002408,src_000080,time_126746,execs_369701,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..6f00275afd4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002408,src_000080,time_126746,execs_369701,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002410,src_000080,time_126823,execs_370207,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002410,src_000080,time_126823,execs_370207,op_havoc,rep_10 new file mode 100644 index 00000000000..17d71400839 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002410,src_000080,time_126823,execs_370207,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002411,src_000080,time_126869,execs_370496,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002411,src_000080,time_126869,execs_370496,op_havoc,rep_10 new file mode 100644 index 00000000000..d3ea52b2dbe --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002411,src_000080,time_126869,execs_370496,op_havoc,rep_10 @@ -0,0 +1 @@ +55:0:0eeeeeeeeeeeeeeeeeeeííí li,íííí li,íåíí[5íííííeeeííÞÑíÞí8::::åíí[5íííííííÞÑíÞí8:::::::::::::::::::::5:200m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002412,src_000080,time_126946,execs_370997,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002412,src_000080,time_126946,execs_370997,op_havoc,rep_13 new file mode 100644 index 00000000000..1282b197cb4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002412,src_000080,time_126946,execs_370997,op_havoc,rep_13 @@ -0,0 +1 @@ +5:0ÿÿ`Ìmm0[58:5[58:5mmm:5[58:5mmm0[58:5CCÿ€llCCCC0[58:5CCCCcCCCCCCCCCCCCC:2ÿm \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002413,src_000080,time_127084,execs_371830,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002413,src_000080,time_127084,execs_371830,op_havoc,rep_12 new file mode 100644 index 00000000000..f2c43546e73 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002413,src_000080,time_127084,execs_371830,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002414,src_000080,time_127133,execs_372116,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002414,src_000080,time_127133,execs_372116,op_havoc,rep_16 new file mode 100644 index 00000000000..7dcbdba8e86 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002414,src_000080,time_127133,execs_372116,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002415,src_000080,time_127374,execs_373564,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002415,src_000080,time_127374,execs_373564,op_havoc,rep_9 new file mode 100644 index 00000000000..2a8a966a578 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002415,src_000080,time_127374,execs_373564,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002416,src_000080,time_127467,execs_374091,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002416,src_000080,time_127467,execs_374091,op_havoc,rep_4 new file mode 100644 index 00000000000..abc26559cc0 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002416,src_000080,time_127467,execs_374091,op_havoc,rep_4 @@ -0,0 +1,2 @@ +55: ì +ì ! ó:5:020ì ! ó:5:020 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002417,src_000080,time_127538,execs_374507,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002417,src_000080,time_127538,execs_374507,op_havoc,rep_6 new file mode 100644 index 00000000000..e78cc2f7abd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002417,src_000080,time_127538,execs_374507,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002418,src_000080,time_127571,execs_374694,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002418,src_000080,time_127571,execs_374694,op_havoc,rep_7 new file mode 100644 index 00000000000..f405bd7f608 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002418,src_000080,time_127571,execs_374694,op_havoc,rep_7 @@ -0,0 +1 @@ +55:0[58:555555555555555:2555555W505l[?149Z|?25i[5555555555555:2055555555W50m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002419,src_000080,time_127588,execs_374789,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002419,src_000080,time_127588,execs_374789,op_havoc,rep_3 new file mode 100644 index 00000000000..357f2774e53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002419,src_000080,time_127588,execs_374789,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002420,src_000080,time_127788,execs_375904,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002420,src_000080,time_127788,execs_375904,op_havoc,rep_13 new file mode 100644 index 00000000000..429f07a8db0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002420,src_000080,time_127788,execs_375904,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002421,src_000316,time_128149,execs_377413,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002421,src_000316,time_128149,execs_377413,op_havoc,rep_11 new file mode 100644 index 00000000000..0dc6d016074 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002421,src_000316,time_128149,execs_377413,op_havoc,rep_11 @@ -0,0 +1 @@ +l~dÒ~}1[éÒ}1[éÒ}1[éÒ~[é°éééÒ~[éÒéé @àécà\ccá \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002423,src_000316,time_128243,execs_377991,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002423,src_000316,time_128243,execs_377991,op_havoc,rep_10 new file mode 100644 index 00000000000..df440a7b7de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002423,src_000316,time_128243,execs_377991,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002427,src_000316,time_128652,execs_380381,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002427,src_000316,time_128652,execs_380381,op_havoc,rep_15 new file mode 100644 index 00000000000..c269648600d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002427,src_000316,time_128652,execs_380381,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002428,src_000316,time_128703,execs_380665,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002428,src_000316,time_128703,execs_380665,op_havoc,rep_9 new file mode 100644 index 00000000000..0f09b06e6f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002428,src_000316,time_128703,execs_380665,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002429,src_000316,time_128743,execs_380887,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002429,src_000316,time_128743,execs_380887,op_havoc,rep_11 new file mode 100644 index 00000000000..587b1bc2860 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002429,src_000316,time_128743,execs_380887,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002430,src_000316,time_128755,execs_380938,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002430,src_000316,time_128755,execs_380938,op_havoc,rep_13 new file mode 100644 index 00000000000..b29c7b527bc --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002430,src_000316,time_128755,execs_380938,op_havoc,rep_13 @@ -0,0 +1 @@ +l~}}1càÒéd ~l~}1 c1càÒéé ~l~8;;h}1càÒéé ~}1[éÒéé cl~}1càÒéé }1càÒéé ~l~l~}1fÈÉ!hé! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002431,src_000316,time_128856,execs_381584,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002431,src_000316,time_128856,execs_381584,op_havoc,rep_16 new file mode 100644 index 00000000000..5e3ba7daa7a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002431,src_000316,time_128856,execs_381584,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002432,src_000316,time_128867,execs_381647,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002432,src_000316,time_128867,execs_381647,op_havoc,rep_14 new file mode 100644 index 00000000000..5dd4a3e8f84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002432,src_000316,time_128867,execs_381647,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002434,src_000316,time_128968,execs_382289,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002434,src_000316,time_128968,execs_382289,op_havoc,rep_13 new file mode 100644 index 00000000000..046dc2f878e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002434,src_000316,time_128968,execs_382289,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002437,src_000316,time_129057,execs_382862,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002437,src_000316,time_129057,execs_382862,op_havoc,rep_14 new file mode 100644 index 00000000000..5529fc3828e --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002437,src_000316,time_129057,execs_382862,op_havoc,rep_14 @@ -0,0 +1,20 @@ +ll‡lllll[?29 + + + + + +ll[?29 + + + + +[?29 +  + + + + +!rldU[Lhßà + +!rldU[Lhßà)l! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002442,src_002210,time_129847,execs_387835,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002442,src_002210,time_129847,execs_387835,op_havoc,rep_3 new file mode 100644 index 00000000000..fb56e1d1a16 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002442,src_002210,time_129847,execs_387835,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002443,src_002210,time_129908,execs_388269,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002443,src_002210,time_129908,execs_388269,op_havoc,rep_1 new file mode 100644 index 00000000000..77327eea587 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002443,src_002210,time_129908,execs_388269,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002444,src_002210,time_129943,execs_388498,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002444,src_002210,time_129943,execs_388498,op_havoc,rep_4 new file mode 100644 index 00000000000..587d17dc80d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002444,src_002210,time_129943,execs_388498,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002445,src_002210,time_129975,execs_388713,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002445,src_002210,time_129975,execs_388713,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a2b6b47050d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002445,src_002210,time_129975,execs_388713,op_havoc,rep_2,+cov @@ -0,0 +1,2 @@ +Ä[l:]Ç]4;4:]Ç]4;422;[48 +]]0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002450,src_002210,time_130714,execs_393633,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002450,src_002210,time_130714,execs_393633,op_havoc,rep_4 new file mode 100644 index 00000000000..d01057427b6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002450,src_002210,time_130714,execs_393633,op_havoc,rep_4 @@ -0,0 +1,2 @@ +Ķ +]0;Mry?ck]22]0;Mry0049.dom1\}lick]22]0;Mry?]]0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002451,src_002210,time_130790,execs_394141,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002451,src_002210,time_130790,execs_394141,op_havoc,rep_3 new file mode 100644 index 00000000000..d19984a7fa4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002451,src_002210,time_130790,execs_394141,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002455,src_000134,time_131442,execs_398497,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002455,src_000134,time_131442,execs_398497,op_havoc,rep_11 new file mode 100644 index 00000000000..6957a390ac0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002455,src_000134,time_131442,execs_398497,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002456,src_001237,time_131525,execs_399041,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002456,src_001237,time_131525,execs_399041,op_havoc,rep_2 new file mode 100644 index 00000000000..775157eff90 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002456,src_001237,time_131525,execs_399041,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002460,src_001237,time_131589,execs_399295,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002460,src_001237,time_131589,execs_399295,op_havoc,rep_16 new file mode 100644 index 00000000000..a3fdc656b29 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002460,src_001237,time_131589,execs_399295,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002462,src_001237,time_131610,execs_399416,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002462,src_001237,time_131610,execs_399416,op_havoc,rep_12 new file mode 100644 index 00000000000..f75e4cbc667 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002462,src_001237,time_131610,execs_399416,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002464,src_001237,time_131843,execs_400093,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002464,src_001237,time_131843,execs_400093,op_havoc,rep_14 new file mode 100644 index 00000000000..0170b06221c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002464,src_001237,time_131843,execs_400093,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002466,src_001237,time_131918,execs_400373,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002466,src_001237,time_131918,execs_400373,op_havoc,rep_3 new file mode 100644 index 00000000000..a6a48d70dc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002466,src_001237,time_131918,execs_400373,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002467,src_001237,time_132056,execs_401100,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002467,src_001237,time_132056,execs_401100,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..1b81118720b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002467,src_001237,time_132056,execs_401100,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002470,src_001237,time_132305,execs_402315,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002470,src_001237,time_132305,execs_402315,op_havoc,rep_15 new file mode 100644 index 00000000000..58aab3a1da9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002470,src_001237,time_132305,execs_402315,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002471,src_001237,time_132331,execs_402468,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002471,src_001237,time_132331,execs_402468,op_havoc,rep_15 new file mode 100644 index 00000000000..2bc2ab06d59 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002471,src_001237,time_132331,execs_402468,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002475,src_001237,time_132433,execs_402900,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002475,src_001237,time_132433,execs_402900,op_havoc,rep_15 new file mode 100644 index 00000000000..bcad36a8bde Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002475,src_001237,time_132433,execs_402900,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002477,src_001237,time_132606,execs_403684,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002477,src_001237,time_132606,execs_403684,op_havoc,rep_8 new file mode 100644 index 00000000000..605e54af960 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002477,src_001237,time_132606,execs_403684,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002479,src_001237,time_132702,execs_404068,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002479,src_001237,time_132702,execs_404068,op_havoc,rep_5 new file mode 100644 index 00000000000..dfc3aeb4b79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002479,src_001237,time_132702,execs_404068,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002480,src_001237,time_132770,execs_404395,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002480,src_001237,time_132770,execs_404395,op_havoc,rep_11 new file mode 100644 index 00000000000..beeb0473c7c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002480,src_001237,time_132770,execs_404395,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002481,src_001237,time_132805,execs_404571,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002481,src_001237,time_132805,execs_404571,op_havoc,rep_10 new file mode 100644 index 00000000000..13355861e43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002481,src_001237,time_132805,execs_404571,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002484,src_001237,time_133075,execs_405817,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002484,src_001237,time_133075,execs_405817,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..fcc4d1f9368 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002484,src_001237,time_133075,execs_405817,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002487,src_001237,time_133471,execs_407812,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002487,src_001237,time_133471,execs_407812,op_havoc,rep_9 new file mode 100644 index 00000000000..4b208b04a3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002487,src_001237,time_133471,execs_407812,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002488,src_001237,time_133481,execs_407870,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002488,src_001237,time_133481,execs_407870,op_havoc,rep_13 new file mode 100644 index 00000000000..9538d27f39a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002488,src_001237,time_133481,execs_407870,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002492,src_001237,time_134151,execs_410944,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002492,src_001237,time_134151,execs_410944,op_havoc,rep_9 new file mode 100644 index 00000000000..6e467a93c44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002492,src_001237,time_134151,execs_410944,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002493,src_001237,time_134322,execs_411684,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002493,src_001237,time_134322,execs_411684,op_havoc,rep_16 new file mode 100644 index 00000000000..20348b29c46 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002493,src_001237,time_134322,execs_411684,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002496,src_002464,time_134618,execs_412886,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002496,src_002464,time_134618,execs_412886,op_havoc,rep_2 new file mode 100644 index 00000000000..7a0a26c0d1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002496,src_002464,time_134618,execs_412886,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002497,src_000547,time_134822,execs_413726,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002497,src_000547,time_134822,execs_413726,op_havoc,rep_1 new file mode 100644 index 00000000000..228143d11bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002497,src_000547,time_134822,execs_413726,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002498,src_002440,time_134938,execs_414390,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002498,src_002440,time_134938,execs_414390,op_havoc,rep_3 new file mode 100644 index 00000000000..eb1a5275274 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002498,src_002440,time_134938,execs_414390,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002499,src_002440,time_134969,execs_414459,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002499,src_002440,time_134969,execs_414459,op_havoc,rep_5 new file mode 100644 index 00000000000..bd7b055b61b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002499,src_002440,time_134969,execs_414459,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002501,src_002440,time_135089,execs_414804,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002501,src_002440,time_135089,execs_414804,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..12fc2262d62 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002501,src_002440,time_135089,execs_414804,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002502,src_002440,time_135475,execs_415801,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002502,src_002440,time_135475,execs_415801,op_havoc,rep_3 new file mode 100644 index 00000000000..fa3b5bb8833 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002502,src_002440,time_135475,execs_415801,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002504,src_002440,time_135658,execs_416227,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002504,src_002440,time_135658,execs_416227,op_havoc,rep_5 new file mode 100644 index 00000000000..f5580015f95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002504,src_002440,time_135658,execs_416227,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002505,src_002440,time_135699,execs_416310,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002505,src_002440,time_135699,execs_416310,op_havoc,rep_3 new file mode 100644 index 00000000000..c9b8d532b84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002505,src_002440,time_135699,execs_416310,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002510,src_002440,time_136501,execs_418468,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002510,src_002440,time_136501,execs_418468,op_havoc,rep_4 new file mode 100644 index 00000000000..4a39c4c289f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002510,src_002440,time_136501,execs_418468,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002511,src_002440,time_137797,execs_421980,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002511,src_002440,time_137797,execs_421980,op_havoc,rep_7 new file mode 100644 index 00000000000..7aa771f9759 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002511,src_002440,time_137797,execs_421980,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002512,src_002440,time_138165,execs_422928,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002512,src_002440,time_138165,execs_422928,op_havoc,rep_6 new file mode 100644 index 00000000000..9ddb50aef32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002512,src_002440,time_138165,execs_422928,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002513,src_002440,time_138409,execs_423570,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002513,src_002440,time_138409,execs_423570,op_havoc,rep_8 new file mode 100644 index 00000000000..995429736ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002513,src_002440,time_138409,execs_423570,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002514,src_000112,time_138675,execs_424546,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002514,src_000112,time_138675,execs_424546,op_havoc,rep_16 new file mode 100644 index 00000000000..c7ea350b4f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002514,src_000112,time_138675,execs_424546,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002515,src_000112,time_138677,execs_424558,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002515,src_000112,time_138677,execs_424558,op_havoc,rep_11 new file mode 100644 index 00000000000..0aa0c36f912 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002515,src_000112,time_138677,execs_424558,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002516,src_000112,time_138692,execs_424630,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002516,src_000112,time_138692,execs_424630,op_havoc,rep_5 new file mode 100644 index 00000000000..e2cc50c9276 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002516,src_000112,time_138692,execs_424630,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002517,src_000112,time_138876,execs_425647,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002517,src_000112,time_138876,execs_425647,op_havoc,rep_15 new file mode 100644 index 00000000000..4aa4ad7745f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002517,src_000112,time_138876,execs_425647,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002518,src_000112,time_138892,execs_425738,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002518,src_000112,time_138892,execs_425738,op_havoc,rep_15 new file mode 100644 index 00000000000..35bf97e9cd6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002518,src_000112,time_138892,execs_425738,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002521,src_000112,time_139125,execs_427073,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002521,src_000112,time_139125,execs_427073,op_havoc,rep_9 new file mode 100644 index 00000000000..0695e50703d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002521,src_000112,time_139125,execs_427073,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002522,src_000112,time_139375,execs_428496,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002522,src_000112,time_139375,execs_428496,op_havoc,rep_16 new file mode 100644 index 00000000000..9bc52672a5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002522,src_000112,time_139375,execs_428496,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002524,src_000112,time_139499,execs_429132,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002524,src_000112,time_139499,execs_429132,op_havoc,rep_10 new file mode 100644 index 00000000000..d5b1062f6e6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002524,src_000112,time_139499,execs_429132,op_havoc,rep_10 @@ -0,0 +1 @@ +49ˆ49h[?Í5h[?1049h[?Í5[?Í5h[?1049h[?Í5[?Í5h[?1h[?1049h[?Í5h \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002526,src_000112,time_140134,execs_432462,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002526,src_000112,time_140134,execs_432462,op_havoc,rep_12 new file mode 100644 index 00000000000..fcb7d792055 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002526,src_000112,time_140134,execs_432462,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002532,src_001371,time_140686,execs_435244,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002532,src_001371,time_140686,execs_435244,op_havoc,rep_3 new file mode 100644 index 00000000000..c7e88fb237d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002532,src_001371,time_140686,execs_435244,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002535,src_000127,time_141113,execs_436757,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002535,src_000127,time_141113,execs_436757,op_havoc,rep_13 new file mode 100644 index 00000000000..b16b9341e23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002535,src_000127,time_141113,execs_436757,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002536,src_000127,time_141186,execs_437189,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002536,src_000127,time_141186,execs_437189,op_havoc,rep_13 new file mode 100644 index 00000000000..33bd82c51e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002536,src_000127,time_141186,execs_437189,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002537,src_000127,time_141289,execs_437699,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002537,src_000127,time_141289,execs_437699,op_havoc,rep_12 new file mode 100644 index 00000000000..d06d9c447c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002537,src_000127,time_141289,execs_437699,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002539,src_000127,time_141624,execs_439499,op_havoc,rep_13,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002539,src_000127,time_141624,execs_439499,op_havoc,rep_13,+cov new file mode 100644 index 00000000000..8444c544512 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002539,src_000127,time_141624,execs_439499,op_havoc,rep_13,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002542,src_000127,time_142021,execs_441524,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002542,src_000127,time_142021,execs_441524,op_havoc,rep_8 new file mode 100644 index 00000000000..76e61f574d6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002542,src_000127,time_142021,execs_441524,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002546,src_000127,time_142448,execs_443636,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002546,src_000127,time_142448,execs_443636,op_havoc,rep_15 new file mode 100644 index 00000000000..52ca4d36e36 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002546,src_000127,time_142448,execs_443636,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002550,src_000137,time_142826,execs_445529,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002550,src_000137,time_142826,execs_445529,op_havoc,rep_3 new file mode 100644 index 00000000000..8e0d12d4564 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002550,src_000137,time_142826,execs_445529,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002551,src_001034,time_142945,execs_446361,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002551,src_001034,time_142945,execs_446361,op_havoc,rep_2 new file mode 100644 index 00000000000..ee04444c6ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002551,src_001034,time_142945,execs_446361,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002552,src_000517,time_143021,execs_446857,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002552,src_000517,time_143021,execs_446857,op_havoc,rep_5 new file mode 100644 index 00000000000..47350d4c8b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002552,src_000517,time_143021,execs_446857,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002554,src_001840,time_143250,execs_448308,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002554,src_001840,time_143250,execs_448308,op_havoc,rep_1 new file mode 100644 index 00000000000..878d548e06b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002554,src_001840,time_143250,execs_448308,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002555,src_000142,time_143379,execs_449221,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002555,src_000142,time_143379,execs_449221,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..53821039318 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002555,src_000142,time_143379,execs_449221,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +Ïl²5l[?1045reen bg9e diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002556,src_000142,time_143439,execs_449646,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002556,src_000142,time_143439,execs_449646,op_havoc,rep_2 new file mode 100644 index 00000000000..7d136e555ac --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002556,src_000142,time_143439,execs_449646,op_havoc,rep_2 @@ -0,0 +1 @@ +Ïl25l[?10;6;sb6 diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002557,src_000142,time_143487,execs_449994,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002557,src_000142,time_143487,execs_449994,op_havoc,rep_2 new file mode 100644 index 00000000000..828ccfae2d0 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002557,src_000142,time_143487,execs_449994,op_havoc,rep_2 @@ -0,0 +1,3 @@ +ÏÏl25l[?1049e +l25ll[?1049e +l[?1049e diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002560,src_001212,time_143871,execs_452627,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002560,src_001212,time_143871,execs_452627,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..2602562c0e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002560,src_001212,time_143871,execs_452627,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002562,src_001212,time_143962,execs_453258,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002562,src_001212,time_143962,execs_453258,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..faa3e1a3fd1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002562,src_001212,time_143962,execs_453258,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002564,src_001212,time_144051,execs_453890,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002564,src_001212,time_144051,execs_453890,op_havoc,rep_2 new file mode 100644 index 00000000000..edc035e919b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002564,src_001212,time_144051,execs_453890,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002566,src_001212,time_144464,execs_456834,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002566,src_001212,time_144464,execs_456834,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..8d197ce5985 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002566,src_001212,time_144464,execs_456834,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002568,src_001625,time_145278,execs_462662,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002568,src_001625,time_145278,execs_462662,op_havoc,rep_2 new file mode 100644 index 00000000000..00bd735554a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002568,src_001625,time_145278,execs_462662,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002570,src_000162,time_145427,execs_463697,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002570,src_000162,time_145427,execs_463697,op_havoc,rep_3 new file mode 100644 index 00000000000..6a5c1e15e42 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002570,src_000162,time_145427,execs_463697,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002571,src_000162,time_145443,execs_463791,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002571,src_000162,time_145443,execs_463791,op_havoc,rep_4 new file mode 100644 index 00000000000..35f30674289 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002571,src_000162,time_145443,execs_463791,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002574,src_000162,time_146157,execs_468222,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002574,src_000162,time_146157,execs_468222,op_havoc,rep_3 new file mode 100644 index 00000000000..6425ef28141 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002574,src_000162,time_146157,execs_468222,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002576,src_000162,time_146582,execs_470915,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002576,src_000162,time_146582,execs_470915,op_havoc,rep_1 new file mode 100644 index 00000000000..0b92697728c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002576,src_000162,time_146582,execs_470915,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002577,src_000162,time_146693,execs_471624,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002577,src_000162,time_146693,execs_471624,op_havoc,rep_1 new file mode 100644 index 00000000000..88f65016c13 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002577,src_000162,time_146693,execs_471624,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002579,src_001898,time_147035,execs_473602,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002579,src_001898,time_147035,execs_473602,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..40c627dcd15 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002579,src_001898,time_147035,execs_473602,op_havoc,rep_2,+cov @@ -0,0 +1,2 @@ +Â1AA% +1õÿÿo hE;ùg, WoÂÙÂÂg, Woo r[?0069r[?0069h[;ù \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002580,src_001898,time_147053,execs_473734,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002580,src_001898,time_147053,execs_473734,op_havoc,rep_1 new file mode 100644 index 00000000000..e3567ada43e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002580,src_001898,time_147053,execs_473734,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002581,src_001898,time_147068,execs_473844,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002581,src_001898,time_147068,execs_473844,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ebc96798efd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002581,src_001898,time_147068,execs_473844,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002582,src_001898,time_147139,execs_474354,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002582,src_001898,time_147139,execs_474354,op_havoc,rep_2 new file mode 100644 index 00000000000..02c7adac9d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002582,src_001898,time_147139,execs_474354,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002583,src_001898,time_147277,execs_475308,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002583,src_001898,time_147277,execs_475308,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..6988a4ad86d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002583,src_001898,time_147277,execs_475308,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002585,src_001898,time_147657,execs_477998,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002585,src_001898,time_147657,execs_477998,op_havoc,rep_2 new file mode 100644 index 00000000000..77e887fcf0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002585,src_001898,time_147657,execs_477998,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002589,src_002041,time_148845,execs_484388,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002589,src_002041,time_148845,execs_484388,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..24bd9ee865d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002589,src_002041,time_148845,execs_484388,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002590,src_002041,time_148904,execs_484718,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002590,src_002041,time_148904,execs_484718,op_havoc,rep_13 new file mode 100644 index 00000000000..1d12ae4c2a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002590,src_002041,time_148904,execs_484718,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002593,src_002041,time_149034,execs_485415,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002593,src_002041,time_149034,execs_485415,op_havoc,rep_9 new file mode 100644 index 00000000000..bda7b7b2d54 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002593,src_002041,time_149034,execs_485415,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002595,src_002041,time_149052,execs_485524,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002595,src_002041,time_149052,execs_485524,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..c9f041d6ce5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002595,src_002041,time_149052,execs_485524,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002597,src_002041,time_149109,execs_485850,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002597,src_002041,time_149109,execs_485850,op_havoc,rep_14 new file mode 100644 index 00000000000..befa06da7d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002597,src_002041,time_149109,execs_485850,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002598,src_002041,time_149408,execs_487611,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002598,src_002041,time_149408,execs_487611,op_havoc,rep_7 new file mode 100644 index 00000000000..8fbae9a333e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002598,src_002041,time_149408,execs_487611,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002600,src_002041,time_149769,execs_489700,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002600,src_002041,time_149769,execs_489700,op_havoc,rep_14 new file mode 100644 index 00000000000..ca422dff469 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002600,src_002041,time_149769,execs_489700,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002602,src_002041,time_149977,execs_490978,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002602,src_002041,time_149977,execs_490978,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..fd8f8e4fd0e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002602,src_002041,time_149977,execs_490978,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002604,src_002041,time_150048,execs_491409,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002604,src_002041,time_150048,execs_491409,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..10e2ad5f84d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002604,src_002041,time_150048,execs_491409,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002605,src_002041,time_150200,execs_492263,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002605,src_002041,time_150200,execs_492263,op_havoc,rep_13 new file mode 100644 index 00000000000..6a821e3604a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002605,src_002041,time_150200,execs_492263,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002606,src_002041,time_150228,execs_492418,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002606,src_002041,time_150228,execs_492418,op_havoc,rep_12 new file mode 100644 index 00000000000..4b75929fc01 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002606,src_002041,time_150228,execs_492418,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002609,src_002282,time_152270,execs_494125,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002609,src_002282,time_152270,execs_494125,op_havoc,rep_4 new file mode 100644 index 00000000000..e229a5e7bdf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002609,src_002282,time_152270,execs_494125,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002616,src_002282,time_153397,execs_494256,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002616,src_002282,time_153397,execs_494256,op_havoc,rep_6 new file mode 100644 index 00000000000..f45e61d2a40 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002616,src_002282,time_153397,execs_494256,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002622,src_002282,time_156008,execs_494566,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002622,src_002282,time_156008,execs_494566,op_havoc,rep_4 new file mode 100644 index 00000000000..bbf898511ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002622,src_002282,time_156008,execs_494566,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002627,src_002282,time_157820,execs_494800,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002627,src_002282,time_157820,execs_494800,op_havoc,rep_4 new file mode 100644 index 00000000000..b97a59a5ec3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002627,src_002282,time_157820,execs_494800,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002631,src_002282,time_161595,execs_495293,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002631,src_002282,time_161595,execs_495293,op_havoc,rep_3 new file mode 100644 index 00000000000..f082d772dad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002631,src_002282,time_161595,execs_495293,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002632,src_002282,time_161889,execs_495331,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002632,src_002282,time_161889,execs_495331,op_havoc,rep_3 new file mode 100644 index 00000000000..0dd16b323fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002632,src_002282,time_161889,execs_495331,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002633,src_002282,time_162526,execs_495409,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002633,src_002282,time_162526,execs_495409,op_havoc,rep_3 new file mode 100644 index 00000000000..988bd7ec790 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002633,src_002282,time_162526,execs_495409,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002635,src_002282,time_163721,execs_495562,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002635,src_002282,time_163721,execs_495562,op_havoc,rep_7 new file mode 100644 index 00000000000..84169a23450 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002635,src_002282,time_163721,execs_495562,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002636,src_002282,time_164547,execs_495670,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002636,src_002282,time_164547,execs_495670,op_havoc,rep_7 new file mode 100644 index 00000000000..56bf99ac78d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002636,src_002282,time_164547,execs_495670,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002637,src_002282,time_165050,execs_495732,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002637,src_002282,time_165050,execs_495732,op_havoc,rep_8 new file mode 100644 index 00000000000..dcbaf4503e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002637,src_002282,time_165050,execs_495732,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002639,src_002282,time_165779,execs_495807,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002639,src_002282,time_165779,execs_495807,op_havoc,rep_4 new file mode 100644 index 00000000000..9dfddcd6935 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002639,src_002282,time_165779,execs_495807,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002641,src_002282,time_168657,execs_496190,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002641,src_002282,time_168657,execs_496190,op_havoc,rep_7 new file mode 100644 index 00000000000..57e34a2ac52 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002641,src_002282,time_168657,execs_496190,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002642,src_002282,time_169353,execs_496287,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002642,src_002282,time_169353,execs_496287,op_havoc,rep_7 new file mode 100644 index 00000000000..6a4cb2d6454 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002642,src_002282,time_169353,execs_496287,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002643,src_002282,time_174852,execs_496989,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002643,src_002282,time_174852,execs_496989,op_havoc,rep_4 new file mode 100644 index 00000000000..6272acbbbf1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002643,src_002282,time_174852,execs_496989,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002644,src_002282,time_175747,execs_497105,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002644,src_002282,time_175747,execs_497105,op_havoc,rep_4 new file mode 100644 index 00000000000..20066b5eb79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002644,src_002282,time_175747,execs_497105,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002645,src_002282,time_176358,execs_497181,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002645,src_002282,time_176358,execs_497181,op_havoc,rep_8 new file mode 100644 index 00000000000..f47f6b9e7f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002645,src_002282,time_176358,execs_497181,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002649,src_002282,time_179291,execs_497522,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002649,src_002282,time_179291,execs_497522,op_havoc,rep_8 new file mode 100644 index 00000000000..5bd29107f27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002649,src_002282,time_179291,execs_497522,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002653,src_002282,time_184875,execs_498207,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002653,src_002282,time_184875,execs_498207,op_havoc,rep_5 new file mode 100644 index 00000000000..72beee43172 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002653,src_002282,time_184875,execs_498207,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002657,src_002282,time_189554,execs_498815,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002657,src_002282,time_189554,execs_498815,op_havoc,rep_8 new file mode 100644 index 00000000000..0b2e15ac2e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002657,src_002282,time_189554,execs_498815,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002659,src_002282,time_192213,execs_499140,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002659,src_002282,time_192213,execs_499140,op_havoc,rep_3 new file mode 100644 index 00000000000..714299002d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002659,src_002282,time_192213,execs_499140,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002660,src_002282,time_192779,execs_499196,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002660,src_002282,time_192779,execs_499196,op_havoc,rep_6 new file mode 100644 index 00000000000..2ff13e6d6ca Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002660,src_002282,time_192779,execs_499196,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002661,src_002282,time_193211,execs_499255,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002661,src_002282,time_193211,execs_499255,op_havoc,rep_6 new file mode 100644 index 00000000000..b2e8a0a64f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002661,src_002282,time_193211,execs_499255,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002662,src_002282,time_193883,execs_499346,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002662,src_002282,time_193883,execs_499346,op_havoc,rep_7 new file mode 100644 index 00000000000..64c25b42502 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002662,src_002282,time_193883,execs_499346,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002663,src_002282,time_194148,execs_499377,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002663,src_002282,time_194148,execs_499377,op_havoc,rep_7 new file mode 100644 index 00000000000..0f8f692e9df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002663,src_002282,time_194148,execs_499377,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002665,src_002282,time_194820,execs_499450,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002665,src_002282,time_194820,execs_499450,op_havoc,rep_2 new file mode 100644 index 00000000000..035155dec2c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002665,src_002282,time_194820,execs_499450,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002666,src_002282,time_199196,execs_500008,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002666,src_002282,time_199196,execs_500008,op_havoc,rep_7 new file mode 100644 index 00000000000..3b2dfa95645 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002666,src_002282,time_199196,execs_500008,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002670,src_002282,time_210545,execs_501488,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002670,src_002282,time_210545,execs_501488,op_havoc,rep_8 new file mode 100644 index 00000000000..8d70e011fa0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002670,src_002282,time_210545,execs_501488,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002673,src_002282,time_218671,execs_502537,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002673,src_002282,time_218671,execs_502537,op_havoc,rep_6 new file mode 100644 index 00000000000..68d5faf24f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002673,src_002282,time_218671,execs_502537,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002675,src_002282,time_224207,execs_503273,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002675,src_002282,time_224207,execs_503273,op_havoc,rep_6 new file mode 100644 index 00000000000..5d5844e2cd9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002675,src_002282,time_224207,execs_503273,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002676,src_002282,time_226073,execs_503530,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002676,src_002282,time_226073,execs_503530,op_havoc,rep_8 new file mode 100644 index 00000000000..22288edc633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002676,src_002282,time_226073,execs_503530,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002678,src_002282,time_229705,execs_503995,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002678,src_002282,time_229705,execs_503995,op_havoc,rep_8 new file mode 100644 index 00000000000..a7d08508548 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002678,src_002282,time_229705,execs_503995,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002679,src_002282,time_230802,execs_504146,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002679,src_002282,time_230802,execs_504146,op_havoc,rep_6 new file mode 100644 index 00000000000..d456ccba2e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002679,src_002282,time_230802,execs_504146,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002681,src_001937,time_231083,execs_505158,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002681,src_001937,time_231083,execs_505158,op_havoc,rep_2 new file mode 100644 index 00000000000..6062a5a3507 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002681,src_001937,time_231083,execs_505158,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002682,src_001937,time_231100,execs_505260,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002682,src_001937,time_231100,execs_505260,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..c66e5dcebec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002682,src_001937,time_231100,execs_505260,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002684,src_001937,time_231149,execs_505547,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002684,src_001937,time_231149,execs_505547,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..a73ee36b64d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002684,src_001937,time_231149,execs_505547,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002685,src_001937,time_231198,execs_505847,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002685,src_001937,time_231198,execs_505847,op_havoc,rep_7 new file mode 100644 index 00000000000..b0fefa87411 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002685,src_001937,time_231198,execs_505847,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002686,src_001937,time_231249,execs_506179,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002686,src_001937,time_231249,execs_506179,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..613bc039731 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002686,src_001937,time_231249,execs_506179,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002687,src_001937,time_231255,execs_506220,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002687,src_001937,time_231255,execs_506220,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..90a072452f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002687,src_001937,time_231255,execs_506220,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002691,src_001937,time_231469,execs_507486,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002691,src_001937,time_231469,execs_507486,op_havoc,rep_5 new file mode 100644 index 00000000000..a301ca28aff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002691,src_001937,time_231469,execs_507486,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002694,src_001937,time_231559,execs_508000,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002694,src_001937,time_231559,execs_508000,op_havoc,rep_8 new file mode 100644 index 00000000000..30a495cb924 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002694,src_001937,time_231559,execs_508000,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002696,src_001937,time_231659,execs_508584,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002696,src_001937,time_231659,execs_508584,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..ca8a738b129 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002696,src_001937,time_231659,execs_508584,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002697,src_001937,time_231818,execs_509602,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002697,src_001937,time_231818,execs_509602,op_havoc,rep_7 new file mode 100644 index 00000000000..7d93d08dd5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002697,src_001937,time_231818,execs_509602,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002698,src_001937,time_231856,execs_509833,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002698,src_001937,time_231856,execs_509833,op_havoc,rep_5 new file mode 100644 index 00000000000..49e152d35a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002698,src_001937,time_231856,execs_509833,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002699,src_001937,time_231932,execs_510299,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002699,src_001937,time_231932,execs_510299,op_havoc,rep_8 new file mode 100644 index 00000000000..88cd3c1afff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002699,src_001937,time_231932,execs_510299,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002700,src_001937,time_231949,execs_510410,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002700,src_001937,time_231949,execs_510410,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..650998362f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002700,src_001937,time_231949,execs_510410,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002702,src_001937,time_232254,execs_512305,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002702,src_001937,time_232254,execs_512305,op_havoc,rep_5 new file mode 100644 index 00000000000..441ffdfe4ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002702,src_001937,time_232254,execs_512305,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002704,src_001937,time_232438,execs_513492,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002704,src_001937,time_232438,execs_513492,op_havoc,rep_4 new file mode 100644 index 00000000000..4564874f9c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002704,src_001937,time_232438,execs_513492,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002706,src_001937,time_232635,execs_514755,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002706,src_001937,time_232635,execs_514755,op_havoc,rep_8 new file mode 100644 index 00000000000..a777b253022 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002706,src_001937,time_232635,execs_514755,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002707,src_000201,time_232705,execs_515182,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002707,src_000201,time_232705,execs_515182,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..cd8bcd5bc3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002707,src_000201,time_232705,execs_515182,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002708,src_000759,time_232852,execs_516116,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002708,src_000759,time_232852,execs_516116,op_havoc,rep_2 new file mode 100644 index 00000000000..9104176405a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002708,src_000759,time_232852,execs_516116,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002709,src_001276,time_233982,execs_516812,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002709,src_001276,time_233982,execs_516812,op_havoc,rep_3 new file mode 100644 index 00000000000..e3de1f961be --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002709,src_001276,time_233982,execs_516812,op_havoc,rep_3 @@ -0,0 +1 @@ +ÌBCD[>ÿ1ÿsbGsbÿ1ÿBCD[>ÿ1ÿsbGsbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002710,src_001276,time_234017,execs_517041,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002710,src_001276,time_234017,execs_517041,op_havoc,rep_3 new file mode 100644 index 00000000000..3ac577fa20c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002710,src_001276,time_234017,execs_517041,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002711,src_001276,time_234054,execs_517281,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002711,src_001276,time_234054,execs_517281,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..ac3647b74f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002711,src_001276,time_234054,execs_517281,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002712,src_001276,time_234095,execs_517560,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002712,src_001276,time_234095,execs_517560,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..20f40da4116 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002712,src_001276,time_234095,execs_517560,op_havoc,rep_5,+cov @@ -0,0 +1 @@ +ÌBCC>D[>ÿÿÿuTGiG \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002713,src_001276,time_234236,execs_518456,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002713,src_001276,time_234236,execs_518456,op_havoc,rep_10 new file mode 100644 index 00000000000..8848a56a3c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002713,src_001276,time_234236,execs_518456,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002715,src_001276,time_234317,execs_518967,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002715,src_001276,time_234317,execs_518967,op_havoc,rep_6 new file mode 100644 index 00000000000..733728e866f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002715,src_001276,time_234317,execs_518967,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002716,src_001276,time_234654,execs_521162,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002716,src_001276,time_234654,execs_521162,op_havoc,rep_15 new file mode 100644 index 00000000000..33f06d24e39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002716,src_001276,time_234654,execs_521162,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002717,src_001276,time_234840,execs_522384,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002717,src_001276,time_234840,execs_522384,op_havoc,rep_5 new file mode 100644 index 00000000000..07573423347 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002717,src_001276,time_234840,execs_522384,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002718,src_001276,time_234878,execs_522626,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002718,src_001276,time_234878,execs_522626,op_havoc,rep_5 new file mode 100644 index 00000000000..185b7bd4914 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002718,src_001276,time_234878,execs_522626,op_havoc,rep_5 @@ -0,0 +1 @@ +[>breedbbreGdbbreddÿÿÿsbG8GbGdbbredÿG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002719,src_001276,time_234926,execs_522956,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002719,src_001276,time_234926,execs_522956,op_havoc,rep_13 new file mode 100644 index 00000000000..f2f1bddd066 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002719,src_001276,time_234926,execs_522956,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002721,src_001276,time_235072,execs_523926,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002721,src_001276,time_235072,execs_523926,op_havoc,rep_11 new file mode 100644 index 00000000000..a1b224e26d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002721,src_001276,time_235072,execs_523926,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002722,src_000725,time_235177,execs_524593,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002722,src_000725,time_235177,execs_524593,op_havoc,rep_16 new file mode 100644 index 00000000000..b3de3f102ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002722,src_000725,time_235177,execs_524593,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002724,src_002036,time_235367,execs_525805,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002724,src_002036,time_235367,execs_525805,op_havoc,rep_1 new file mode 100644 index 00000000000..2977d0f55a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002724,src_002036,time_235367,execs_525805,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002725,src_002036,time_235401,execs_526042,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002725,src_002036,time_235401,execs_526042,op_havoc,rep_4 new file mode 100644 index 00000000000..466506d6774 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002725,src_002036,time_235401,execs_526042,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002726,src_000924,time_235750,execs_528404,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002726,src_000924,time_235750,execs_528404,op_havoc,rep_13 new file mode 100644 index 00000000000..12a39ad684a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002726,src_000924,time_235750,execs_528404,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002728,src_000924,time_235776,execs_528566,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002728,src_000924,time_235776,execs_528566,op_havoc,rep_14 new file mode 100644 index 00000000000..66ddc6fbec1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002728,src_000924,time_235776,execs_528566,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002729,src_000924,time_235837,execs_528873,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002729,src_000924,time_235837,execs_528873,op_havoc,rep_13 new file mode 100644 index 00000000000..1600c500f09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002729,src_000924,time_235837,execs_528873,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002730,src_000924,time_235910,execs_529289,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002730,src_000924,time_235910,execs_529289,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..4959c633ae5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002730,src_000924,time_235910,execs_529289,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002732,src_000924,time_236118,execs_530536,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002732,src_000924,time_236118,execs_530536,op_havoc,rep_12 new file mode 100644 index 00000000000..e62ebb49d1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002732,src_000924,time_236118,execs_530536,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002735,src_000924,time_236323,execs_531647,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002735,src_000924,time_236323,execs_531647,op_havoc,rep_6 new file mode 100644 index 00000000000..77e49c10c39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002735,src_000924,time_236323,execs_531647,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002736,src_000924,time_236372,execs_531908,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002736,src_000924,time_236372,execs_531908,op_havoc,rep_4 new file mode 100644 index 00000000000..d9f47e2b7f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002736,src_000924,time_236372,execs_531908,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002737,src_000924,time_236422,execs_532212,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002737,src_000924,time_236422,execs_532212,op_havoc,rep_11 new file mode 100644 index 00000000000..fb3ffd0f0e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002737,src_000924,time_236422,execs_532212,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002738,src_000924,time_236433,execs_532280,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002738,src_000924,time_236433,execs_532280,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..48c8a31455b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002738,src_000924,time_236433,execs_532280,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002739,src_000924,time_236483,execs_532566,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002739,src_000924,time_236483,execs_532566,op_havoc,rep_13 new file mode 100644 index 00000000000..1e1c4ceb525 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002739,src_000924,time_236483,execs_532566,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002742,src_000924,time_236899,execs_534936,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002742,src_000924,time_236899,execs_534936,op_havoc,rep_11 new file mode 100644 index 00000000000..7d705acc372 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002742,src_000924,time_236899,execs_534936,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002743,src_000924,time_237087,execs_535981,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002743,src_000924,time_237087,execs_535981,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..c05cdabf847 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002743,src_000924,time_237087,execs_535981,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002748,src_002453,time_237661,execs_539355,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002748,src_002453,time_237661,execs_539355,op_havoc,rep_3 new file mode 100644 index 00000000000..f5378df996d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002748,src_002453,time_237661,execs_539355,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002750,src_002453,time_237839,execs_540573,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002750,src_002453,time_237839,execs_540573,op_havoc,rep_4 new file mode 100644 index 00000000000..bc17b1037ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002750,src_002453,time_237839,execs_540573,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002751,src_002453,time_237872,execs_540816,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002751,src_002453,time_237872,execs_540816,op_havoc,rep_2 new file mode 100644 index 00000000000..b69c296c0ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002751,src_002453,time_237872,execs_540816,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002753,src_002453,time_238195,execs_543176,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002753,src_002453,time_238195,execs_543176,op_havoc,rep_4 new file mode 100644 index 00000000000..5bd7ea29620 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002753,src_002453,time_238195,execs_543176,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002754,src_002453,time_238300,execs_543939,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002754,src_002453,time_238300,execs_543939,op_havoc,rep_4 new file mode 100644 index 00000000000..87389bc12c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002754,src_002453,time_238300,execs_543939,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002755,src_002453,time_238430,execs_544891,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002755,src_002453,time_238430,execs_544891,op_havoc,rep_4 new file mode 100644 index 00000000000..b0a08179b94 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002755,src_002453,time_238430,execs_544891,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002757,src_000263,time_238915,execs_548401,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002757,src_000263,time_238915,execs_548401,op_havoc,rep_5 new file mode 100644 index 00000000000..231536e3518 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002757,src_000263,time_238915,execs_548401,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002759,src_000263,time_238924,execs_548460,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002759,src_000263,time_238924,execs_548460,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..4a6fadfa5f1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002759,src_000263,time_238924,execs_548460,op_havoc,rep_5,+cov @@ -0,0 +1,2 @@ +]5522Ķ Nÿ.! + W W ÿÿÿ N \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002762,src_000263,time_239402,execs_551463,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002762,src_000263,time_239402,execs_551463,op_havoc,rep_15 new file mode 100644 index 00000000000..ac5cb2fffee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002762,src_000263,time_239402,execs_551463,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002763,src_000263,time_239493,execs_552027,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002763,src_000263,time_239493,execs_552027,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..0f0aa1e7674 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002763,src_000263,time_239493,execs_552027,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002765,src_000263,time_239577,execs_552573,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002765,src_000263,time_239577,execs_552573,op_havoc,rep_9 new file mode 100644 index 00000000000..72fb5182c3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002765,src_000263,time_239577,execs_552573,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002766,src_000263,time_239644,execs_552988,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002766,src_000263,time_239644,execs_552988,op_havoc,rep_10 new file mode 100644 index 00000000000..7b0450f6615 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002766,src_000263,time_239644,execs_552988,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002767,src_000263,time_239689,execs_553281,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002767,src_000263,time_239689,execs_553281,op_havoc,rep_9 new file mode 100644 index 00000000000..a9780f0846c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002767,src_000263,time_239689,execs_553281,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002768,src_000263,time_239775,execs_553856,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002768,src_000263,time_239775,execs_553856,op_havoc,rep_4 new file mode 100644 index 00000000000..8957eabe410 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002768,src_000263,time_239775,execs_553856,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002770,src_000263,time_239896,execs_554634,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002770,src_000263,time_239896,execs_554634,op_havoc,rep_12 new file mode 100644 index 00000000000..4ea05e3904d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002770,src_000263,time_239896,execs_554634,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002771,src_000263,time_239926,execs_554828,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002771,src_000263,time_239926,execs_554828,op_havoc,rep_10 new file mode 100644 index 00000000000..25d5e1c4729 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002771,src_000263,time_239926,execs_554828,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002772,src_000278,time_240076,execs_555786,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002772,src_000278,time_240076,execs_555786,op_havoc,rep_8 new file mode 100644 index 00000000000..d21f50191fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002772,src_000278,time_240076,execs_555786,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002774,src_000278,time_240198,execs_556512,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002774,src_000278,time_240198,execs_556512,op_havoc,rep_7 new file mode 100644 index 00000000000..05afeece08a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002774,src_000278,time_240198,execs_556512,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002775,src_001556,time_240537,execs_558501,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002775,src_001556,time_240537,execs_558501,op_havoc,rep_2 new file mode 100644 index 00000000000..eb1390a9930 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002775,src_001556,time_240537,execs_558501,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002776,src_001556,time_240544,execs_558511,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002776,src_001556,time_240544,execs_558511,op_havoc,rep_3 new file mode 100644 index 00000000000..c1bfa519d03 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002776,src_001556,time_240544,execs_558511,op_havoc,rep_3 @@ -0,0 +1 @@ +ick]8;;k]8;;;5;]8;;;?104d09?1ì]8;;htc\click]8;;k]8;;;5;]8;;;?104dl]8;;h\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002779,src_001556,time_241245,execs_559445,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002779,src_001556,time_241245,execs_559445,op_havoc,rep_3 new file mode 100644 index 00000000000..ae7f587bf6d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002779,src_001556,time_241245,execs_559445,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002783,src_001556,time_241876,execs_560254,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002783,src_001556,time_241876,execs_560254,op_havoc,rep_4 new file mode 100644 index 00000000000..cb3c972acc4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002783,src_001556,time_241876,execs_560254,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002784,src_001556,time_242029,execs_560449,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002784,src_001556,time_242029,execs_560449,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..b0f5eb51b7e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002784,src_001556,time_242029,execs_560449,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002789,src_001556,time_243524,execs_562409,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002789,src_001556,time_243524,execs_562409,op_havoc,rep_2 new file mode 100644 index 00000000000..372f21fad82 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002789,src_001556,time_243524,execs_562409,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002790,src_001556,time_243668,execs_562589,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002790,src_001556,time_243668,execs_562589,op_havoc,rep_2 new file mode 100644 index 00000000000..ed78f921403 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002790,src_001556,time_243668,execs_562589,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002791,src_001556,time_243863,execs_562836,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002791,src_001556,time_243863,execs_562836,op_havoc,rep_3 new file mode 100644 index 00000000000..12bf2787a2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002791,src_001556,time_243863,execs_562836,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002792,src_001556,time_243937,execs_562933,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002792,src_001556,time_243937,execs_562933,op_havoc,rep_4 new file mode 100644 index 00000000000..60d56eaaa06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002792,src_001556,time_243937,execs_562933,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002793,src_001556,time_244471,execs_563654,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002793,src_001556,time_244471,execs_563654,op_havoc,rep_3 new file mode 100644 index 00000000000..b44421b9154 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002793,src_001556,time_244471,execs_563654,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002796,src_001556,time_244908,execs_564204,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002796,src_001556,time_244908,execs_564204,op_havoc,rep_3 new file mode 100644 index 00000000000..dced28d093d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002796,src_001556,time_244908,execs_564204,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002799,src_001037,time_246250,execs_566184,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002799,src_001037,time_246250,execs_566184,op_havoc,rep_3 new file mode 100644 index 00000000000..55f66e9c437 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002799,src_001037,time_246250,execs_566184,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002800,src_001037,time_246266,execs_566293,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002800,src_001037,time_246266,execs_566293,op_havoc,rep_2 new file mode 100644 index 00000000000..a7565776835 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002800,src_001037,time_246266,execs_566293,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002802,src_001037,time_246374,execs_567056,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002802,src_001037,time_246374,execs_567056,op_havoc,rep_3 new file mode 100644 index 00000000000..9e58316dd08 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002802,src_001037,time_246374,execs_567056,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002803,src_001037,time_246612,execs_568738,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002803,src_001037,time_246612,execs_568738,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a20325a118a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002803,src_001037,time_246612,execs_568738,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002804,src_001037,time_246956,execs_571135,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002804,src_001037,time_246956,execs_571135,op_havoc,rep_4 new file mode 100644 index 00000000000..ba98fc9008f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002804,src_001037,time_246956,execs_571135,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002805,src_001037,time_246996,execs_571429,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002805,src_001037,time_246996,execs_571429,op_havoc,rep_4 new file mode 100644 index 00000000000..8bb4b417d09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002805,src_001037,time_246996,execs_571429,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002806,src_001037,time_247402,execs_574297,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002806,src_001037,time_247402,execs_574297,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..ebc7a665d79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002806,src_001037,time_247402,execs_574297,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002807,src_001037,time_247532,execs_575234,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002807,src_001037,time_247532,execs_575234,op_havoc,rep_4 new file mode 100644 index 00000000000..a9542152641 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002807,src_001037,time_247532,execs_575234,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002808,src_001037,time_247568,execs_575468,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002808,src_001037,time_247568,execs_575468,op_havoc,rep_4 new file mode 100644 index 00000000000..4d33d5b15ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002808,src_001037,time_247568,execs_575468,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002811,src_002017,time_247993,execs_577669,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002811,src_002017,time_247993,execs_577669,op_havoc,rep_8 new file mode 100644 index 00000000000..e3dc037d055 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002811,src_002017,time_247993,execs_577669,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002814,src_002017,time_248140,execs_578307,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002814,src_002017,time_248140,execs_578307,op_havoc,rep_7 new file mode 100644 index 00000000000..8cdbe281e21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002814,src_002017,time_248140,execs_578307,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002816,src_002017,time_248288,execs_578941,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002816,src_002017,time_248288,execs_578941,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..155f8871b51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002816,src_002017,time_248288,execs_578941,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002818,src_002017,time_248356,execs_579250,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002818,src_002017,time_248356,execs_579250,op_havoc,rep_6 new file mode 100644 index 00000000000..6f33edaced0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002818,src_002017,time_248356,execs_579250,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002819,src_002017,time_248378,execs_579343,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002819,src_002017,time_248378,execs_579343,op_havoc,rep_2 new file mode 100644 index 00000000000..babbb2a29d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002819,src_002017,time_248378,execs_579343,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002822,src_002017,time_248507,execs_579902,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002822,src_002017,time_248507,execs_579902,op_havoc,rep_7 new file mode 100644 index 00000000000..bf258c7998d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002822,src_002017,time_248507,execs_579902,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002823,src_002017,time_248525,execs_579986,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002823,src_002017,time_248525,execs_579986,op_havoc,rep_6 new file mode 100644 index 00000000000..361e4dd1454 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002823,src_002017,time_248525,execs_579986,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002825,src_002017,time_248945,execs_581785,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002825,src_002017,time_248945,execs_581785,op_havoc,rep_3 new file mode 100644 index 00000000000..f804e04ea1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002825,src_002017,time_248945,execs_581785,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002827,src_002017,time_249391,execs_583706,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002827,src_002017,time_249391,execs_583706,op_havoc,rep_5 new file mode 100644 index 00000000000..ec012f6329f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002827,src_002017,time_249391,execs_583706,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002828,src_002017,time_249424,execs_583859,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002828,src_002017,time_249424,execs_583859,op_havoc,rep_4 new file mode 100644 index 00000000000..0d8f2ef7d5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002828,src_002017,time_249424,execs_583859,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002829,src_002017,time_249574,execs_584529,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002829,src_002017,time_249574,execs_584529,op_havoc,rep_1 new file mode 100644 index 00000000000..d2d4e5db5f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002829,src_002017,time_249574,execs_584529,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002831,src_002017,time_249679,execs_584993,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002831,src_002017,time_249679,execs_584993,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..1ef7125a972 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002831,src_002017,time_249679,execs_584993,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002834,src_000521,time_250264,execs_587676,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002834,src_000521,time_250264,execs_587676,op_havoc,rep_15 new file mode 100644 index 00000000000..19b10e77697 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002834,src_000521,time_250264,execs_587676,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002835,src_000521,time_250278,execs_587751,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002835,src_000521,time_250278,execs_587751,op_havoc,rep_7 new file mode 100644 index 00000000000..683b882d8fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002835,src_000521,time_250278,execs_587751,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002836,src_000521,time_250391,execs_588431,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002836,src_000521,time_250391,execs_588431,op_havoc,rep_4 new file mode 100644 index 00000000000..937b2d6edfc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002836,src_000521,time_250391,execs_588431,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002838,src_000521,time_250663,execs_590084,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_002838,src_000521,time_250663,execs_590084,op_havoc,rep_14 new file mode 100644 index 00000000000..ea2c036062b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002838,src_000521,time_250663,execs_590084,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002839,src_000521,time_250666,execs_590107,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002839,src_000521,time_250666,execs_590107,op_havoc,rep_15 new file mode 100644 index 00000000000..3daede98218 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002839,src_000521,time_250666,execs_590107,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002840,src_000521,time_250808,execs_590955,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002840,src_000521,time_250808,execs_590955,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..0fad84fe166 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002840,src_000521,time_250808,execs_590955,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002842,src_000521,time_250988,execs_591928,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002842,src_000521,time_250988,execs_591928,op_havoc,rep_13 new file mode 100644 index 00000000000..899a0dbfcfc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002842,src_000521,time_250988,execs_591928,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002843,src_000521,time_251104,execs_592638,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002843,src_000521,time_251104,execs_592638,op_havoc,rep_8 new file mode 100644 index 00000000000..cb91d151d03 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002843,src_000521,time_251104,execs_592638,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002845,src_000521,time_251164,execs_593008,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002845,src_000521,time_251164,execs_593008,op_havoc,rep_8 new file mode 100644 index 00000000000..b24b3d62e30 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002845,src_000521,time_251164,execs_593008,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002846,src_000521,time_251551,execs_595241,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002846,src_000521,time_251551,execs_595241,op_havoc,rep_9 new file mode 100644 index 00000000000..6a8d778962a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002846,src_000521,time_251551,execs_595241,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002847,src_000521,time_251591,execs_595476,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002847,src_000521,time_251591,execs_595476,op_havoc,rep_6 new file mode 100644 index 00000000000..c890534a17a --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002847,src_000521,time_251591,execs_595476,op_havoc,rep_6 @@ -0,0 +1 @@ +55d[?1039r[?ˆ5h[?1039r[?25he \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002848,src_000521,time_251775,execs_596607,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002848,src_000521,time_251775,execs_596607,op_havoc,rep_16 new file mode 100644 index 00000000000..5ae35cab0c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002848,src_000521,time_251775,execs_596607,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002849,src_002747,time_251934,execs_597590,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002849,src_002747,time_251934,execs_597590,op_havoc,rep_1 new file mode 100644 index 00000000000..c8f1f83ebe5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002849,src_002747,time_251934,execs_597590,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002852,src_002747,time_252309,execs_600514,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002852,src_002747,time_252309,execs_600514,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..f26185e6c0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002852,src_002747,time_252309,execs_600514,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002854,src_002005,time_253911,execs_609086,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002854,src_002005,time_253911,execs_609086,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..046c1aef8d5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002854,src_002005,time_253911,execs_609086,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002855,src_002005,time_253935,execs_609197,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002855,src_002005,time_253935,execs_609197,op_havoc,rep_15 new file mode 100644 index 00000000000..19cfd168353 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002855,src_002005,time_253935,execs_609197,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002856,src_002005,time_253938,execs_609210,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002856,src_002005,time_253938,execs_609210,op_havoc,rep_12 new file mode 100644 index 00000000000..f01d8e02f23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002856,src_002005,time_253938,execs_609210,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002863,src_002005,time_254244,execs_610553,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002863,src_002005,time_254244,execs_610553,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..802d1a0d8ae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002863,src_002005,time_254244,execs_610553,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002864,src_002005,time_254425,execs_611264,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002864,src_002005,time_254425,execs_611264,op_havoc,rep_9 new file mode 100644 index 00000000000..1c030bcfc62 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002864,src_002005,time_254425,execs_611264,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002865,src_002005,time_254702,execs_612425,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002865,src_002005,time_254702,execs_612425,op_havoc,rep_12 new file mode 100644 index 00000000000..7b3b39837f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002865,src_002005,time_254702,execs_612425,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002866,src_002005,time_254714,execs_612479,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_002866,src_002005,time_254714,execs_612479,op_havoc,rep_13 new file mode 100644 index 00000000000..016c81a7d76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002866,src_002005,time_254714,execs_612479,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002868,src_002005,time_254903,execs_613284,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002868,src_002005,time_254903,execs_613284,op_havoc,rep_10 new file mode 100644 index 00000000000..09e9ee4d183 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002868,src_002005,time_254903,execs_613284,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002869,src_002005,time_254908,execs_613309,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002869,src_002005,time_254908,execs_613309,op_havoc,rep_11 new file mode 100644 index 00000000000..47073d4ffd9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002869,src_002005,time_254908,execs_613309,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002871,src_002005,time_254957,execs_613520,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002871,src_002005,time_254957,execs_613520,op_havoc,rep_16 new file mode 100644 index 00000000000..c862dd690d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002871,src_002005,time_254957,execs_613520,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002872,src_002005,time_254972,execs_613583,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002872,src_002005,time_254972,execs_613583,op_havoc,rep_16 new file mode 100644 index 00000000000..d081e6a12a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002872,src_002005,time_254972,execs_613583,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002874,src_002005,time_255292,execs_614919,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002874,src_002005,time_255292,execs_614919,op_havoc,rep_10 new file mode 100644 index 00000000000..9d6b528434e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002874,src_002005,time_255292,execs_614919,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002876,src_002005,time_255368,execs_615223,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_002876,src_002005,time_255368,execs_615223,op_havoc,rep_9 new file mode 100644 index 00000000000..d65dedc3cf7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002876,src_002005,time_255368,execs_615223,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002878,src_002005,time_255525,execs_615868,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002878,src_002005,time_255525,execs_615868,op_havoc,rep_16 new file mode 100644 index 00000000000..79373c3e5d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002878,src_002005,time_255525,execs_615868,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002879,src_002005,time_255829,execs_617078,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002879,src_002005,time_255829,execs_617078,op_havoc,rep_5 new file mode 100644 index 00000000000..b351a5355f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002879,src_002005,time_255829,execs_617078,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002882,src_002005,time_256110,execs_618271,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002882,src_002005,time_256110,execs_618271,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..c5b12eae530 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002882,src_002005,time_256110,execs_618271,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002883,src_002005,time_256177,execs_618561,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002883,src_002005,time_256177,execs_618561,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..afe918f3f94 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002883,src_002005,time_256177,execs_618561,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002889,src_002133,time_256877,execs_623146,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002889,src_002133,time_256877,execs_623146,op_havoc,rep_7 new file mode 100644 index 00000000000..7c2cc377e41 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002889,src_002133,time_256877,execs_623146,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002891,src_000324,time_257770,execs_629590,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_002891,src_000324,time_257770,execs_629590,op_havoc,rep_15 new file mode 100644 index 00000000000..b2d5eb5945c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002891,src_000324,time_257770,execs_629590,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002895,src_000324,time_257985,execs_630936,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_002895,src_000324,time_257985,execs_630936,op_havoc,rep_12 new file mode 100644 index 00000000000..ea02a7e6f22 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002895,src_000324,time_257985,execs_630936,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002896,src_000324,time_258051,execs_631361,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002896,src_000324,time_258051,execs_631361,op_havoc,rep_7 new file mode 100644 index 00000000000..4d55ced2e4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002896,src_000324,time_258051,execs_631361,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002897,src_000324,time_258223,execs_632526,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_002897,src_000324,time_258223,execs_632526,op_havoc,rep_16 new file mode 100644 index 00000000000..710bc12bfa9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002897,src_000324,time_258223,execs_632526,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002898,src_000324,time_258389,execs_633613,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002898,src_000324,time_258389,execs_633613,op_havoc,rep_11 new file mode 100644 index 00000000000..6d31e5dcf14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002898,src_000324,time_258389,execs_633613,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002900,src_000324,time_258519,execs_634448,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002900,src_000324,time_258519,execs_634448,op_havoc,rep_11 new file mode 100644 index 00000000000..a7d4e7c9907 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002900,src_000324,time_258519,execs_634448,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002903,src_000324,time_258833,execs_636474,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_002903,src_000324,time_258833,execs_636474,op_havoc,rep_10 new file mode 100644 index 00000000000..7a154cdf3dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002903,src_000324,time_258833,execs_636474,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002904,src_000324,time_259104,execs_638258,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_002904,src_000324,time_259104,execs_638258,op_havoc,rep_11 new file mode 100644 index 00000000000..dbdb554546a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002904,src_000324,time_259104,execs_638258,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002906,src_002749,time_259327,execs_639681,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002906,src_002749,time_259327,execs_639681,op_havoc,rep_1 new file mode 100644 index 00000000000..47510596bd4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002906,src_002749,time_259327,execs_639681,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002907,src_002749,time_259346,execs_639821,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002907,src_002749,time_259346,execs_639821,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..4ea3a16bf3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002907,src_002749,time_259346,execs_639821,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002908,src_002749,time_259424,execs_640412,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002908,src_002749,time_259424,execs_640412,op_havoc,rep_2 new file mode 100644 index 00000000000..0ecaedc0531 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002908,src_002749,time_259424,execs_640412,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002909,src_002749,time_259513,execs_641092,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002909,src_002749,time_259513,execs_641092,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..59b179a0b9e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002909,src_002749,time_259513,execs_641092,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002912,src_002749,time_260256,execs_646800,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002912,src_002749,time_260256,execs_646800,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..cfdf0d707ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002912,src_002749,time_260256,execs_646800,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002914,src_002531,time_260768,execs_650326,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002914,src_002531,time_260768,execs_650326,op_havoc,rep_2 new file mode 100644 index 00000000000..7e5b5c8bb90 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002914,src_002531,time_260768,execs_650326,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002915,src_002849,time_261228,execs_652450,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002915,src_002849,time_261228,execs_652450,op_havoc,rep_4 new file mode 100644 index 00000000000..1e5f70a153e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002915,src_002849,time_261228,execs_652450,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002916,src_002849,time_261255,execs_652647,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002916,src_002849,time_261255,execs_652647,op_havoc,rep_1 new file mode 100644 index 00000000000..6d3e6398679 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002916,src_002849,time_261255,execs_652647,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002925,src_001122,time_262727,execs_663294,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002925,src_001122,time_262727,execs_663294,op_havoc,rep_8 new file mode 100644 index 00000000000..b95661d6587 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002925,src_001122,time_262727,execs_663294,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002927,src_001122,time_262760,execs_663486,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002927,src_001122,time_262760,execs_663486,op_havoc,rep_7 new file mode 100644 index 00000000000..805336f0cb0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002927,src_001122,time_262760,execs_663486,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002931,src_001122,time_262997,execs_664883,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002931,src_001122,time_262997,execs_664883,op_havoc,rep_8 new file mode 100644 index 00000000000..748cb810450 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002931,src_001122,time_262997,execs_664883,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002933,src_001122,time_263073,execs_665349,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002933,src_001122,time_263073,execs_665349,op_havoc,rep_3 new file mode 100644 index 00000000000..05eb1cd0043 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002933,src_001122,time_263073,execs_665349,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002935,src_001122,time_263196,execs_666106,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002935,src_001122,time_263196,execs_666106,op_havoc,rep_5 new file mode 100644 index 00000000000..a738fcdafae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002935,src_001122,time_263196,execs_666106,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002936,src_001122,time_263205,execs_666157,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002936,src_001122,time_263205,execs_666157,op_havoc,rep_7 new file mode 100644 index 00000000000..5a5ce42eef4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002936,src_001122,time_263205,execs_666157,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002937,src_001122,time_263332,execs_666942,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002937,src_001122,time_263332,execs_666942,op_havoc,rep_3 new file mode 100644 index 00000000000..d2245c2b6cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002937,src_001122,time_263332,execs_666942,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002938,src_001122,time_263375,execs_667234,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002938,src_001122,time_263375,execs_667234,op_havoc,rep_6 new file mode 100644 index 00000000000..52149318a96 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002938,src_001122,time_263375,execs_667234,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002940,src_001122,time_263488,execs_667913,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002940,src_001122,time_263488,execs_667913,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..9900642fd1e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002940,src_001122,time_263488,execs_667913,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002941,src_001122,time_263623,execs_668749,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002941,src_001122,time_263623,execs_668749,op_havoc,rep_5 new file mode 100644 index 00000000000..c65c4f9aece Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002941,src_001122,time_263623,execs_668749,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002942,src_001122,time_263907,execs_670498,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002942,src_001122,time_263907,execs_670498,op_havoc,rep_8 new file mode 100644 index 00000000000..12ea3d0c0db Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002942,src_001122,time_263907,execs_670498,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002943,src_001122,time_263922,execs_670576,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002943,src_001122,time_263922,execs_670576,op_havoc,rep_6 new file mode 100644 index 00000000000..ef22ad60093 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002943,src_001122,time_263922,execs_670576,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002945,src_000774,time_264271,execs_672792,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002945,src_000774,time_264271,execs_672792,op_havoc,rep_7 new file mode 100644 index 00000000000..02ce4b0dbd6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002945,src_000774,time_264271,execs_672792,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002946,src_000775,time_264402,execs_673606,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_002946,src_000775,time_264402,execs_673606,op_havoc,rep_6 new file mode 100644 index 00000000000..1e0d4ccf44f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002946,src_000775,time_264402,execs_673606,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002948,src_002040,time_264602,execs_674573,op_flip2,pos_13,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002948,src_002040,time_264602,execs_674573,op_flip2,pos_13,+cov new file mode 100644 index 00000000000..1e4500dd1e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002948,src_002040,time_264602,execs_674573,op_flip2,pos_13,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002951,src_002040,time_264741,execs_675564,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002951,src_002040,time_264741,execs_675564,op_havoc,rep_4 new file mode 100644 index 00000000000..71570c8d183 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002951,src_002040,time_264741,execs_675564,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002954,src_002040,time_264865,execs_676450,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002954,src_002040,time_264865,execs_676450,op_havoc,rep_3 new file mode 100644 index 00000000000..cd2e0b08ee7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002954,src_002040,time_264865,execs_676450,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002958,src_002040,time_265361,execs_680064,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002958,src_002040,time_265361,execs_680064,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..60ed52f237c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002958,src_002040,time_265361,execs_680064,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002959,src_002040,time_265505,execs_681084,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002959,src_002040,time_265505,execs_681084,op_havoc,rep_4 new file mode 100644 index 00000000000..97858c759f2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002959,src_002040,time_265505,execs_681084,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002962,src_002040,time_265833,execs_683412,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002962,src_002040,time_265833,execs_683412,op_havoc,rep_1 new file mode 100644 index 00000000000..1c7fd28bb5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002962,src_002040,time_265833,execs_683412,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002963,src_002040,time_265892,execs_683840,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002963,src_002040,time_265892,execs_683840,op_havoc,rep_3 new file mode 100644 index 00000000000..a3b7a30dca0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002963,src_002040,time_265892,execs_683840,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002964,src_002040,time_266102,execs_685349,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002964,src_002040,time_266102,execs_685349,op_havoc,rep_4 new file mode 100644 index 00000000000..1ab54e92bed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002964,src_002040,time_266102,execs_685349,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002966,src_002040,time_266186,execs_685900,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002966,src_002040,time_266186,execs_685900,op_havoc,rep_1 new file mode 100644 index 00000000000..2e1bf30664d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002966,src_002040,time_266186,execs_685900,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002967,src_002040,time_266202,execs_686011,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002967,src_002040,time_266202,execs_686011,op_havoc,rep_3 new file mode 100644 index 00000000000..3d56eae3eb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002967,src_002040,time_266202,execs_686011,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002970,src_002040,time_267306,execs_694061,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002970,src_002040,time_267306,execs_694061,op_havoc,rep_3 new file mode 100644 index 00000000000..b05974070fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002970,src_002040,time_267306,execs_694061,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002973,src_002040,time_267830,execs_697925,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002973,src_002040,time_267830,execs_697925,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..8894e3c49bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002973,src_002040,time_267830,execs_697925,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002977,src_002914,time_270224,execs_714942,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_002977,src_002914,time_270224,execs_714942,op_havoc,rep_3 new file mode 100644 index 00000000000..b0c1b30fe46 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002977,src_002914,time_270224,execs_714942,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002978,src_002914,time_270238,execs_715038,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002978,src_002914,time_270238,execs_715038,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..d705d62e0ff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002978,src_002914,time_270238,execs_715038,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002979,src_002914,time_270266,execs_715213,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002979,src_002914,time_270266,execs_715213,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..b4964fd2b44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002979,src_002914,time_270266,execs_715213,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002980,src_002914,time_270275,execs_715266,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_002980,src_002914,time_270275,execs_715266,op_havoc,rep_1 new file mode 100644 index 00000000000..a8a67310e3b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002980,src_002914,time_270275,execs_715266,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002982,src_002914,time_270587,execs_717313,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002982,src_002914,time_270587,execs_717313,op_havoc,rep_4 new file mode 100644 index 00000000000..9db896ec725 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002982,src_002914,time_270587,execs_717313,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002983,src_002914,time_270759,execs_717656,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002983,src_002914,time_270759,execs_717656,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..d17bf3d1d68 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002983,src_002914,time_270759,execs_717656,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002985,src_002914,time_271372,execs_721872,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_002985,src_002914,time_271372,execs_721872,op_havoc,rep_4 new file mode 100644 index 00000000000..8923cc7e58a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002985,src_002914,time_271372,execs_721872,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002987,src_002914,time_271623,execs_723637,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_002987,src_002914,time_271623,execs_723637,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..7002cdd7f9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002987,src_002914,time_271623,execs_723637,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002989,src_001145,time_271951,execs_725680,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002989,src_001145,time_271951,execs_725680,op_havoc,rep_8 new file mode 100644 index 00000000000..e6f3972e401 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002989,src_001145,time_271951,execs_725680,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002992,src_001145,time_272138,execs_726960,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002992,src_001145,time_272138,execs_726960,op_havoc,rep_5 new file mode 100644 index 00000000000..b7e65dffd7c --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_002992,src_001145,time_272138,execs_726960,op_havoc,rep_5 @@ -0,0 +1 @@ +, o,  \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002994,src_001145,time_272265,execs_727828,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_002994,src_001145,time_272265,execs_727828,op_havoc,rep_2 new file mode 100644 index 00000000000..9a3e3355756 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002994,src_001145,time_272265,execs_727828,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002995,src_001145,time_272451,execs_729116,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_002995,src_001145,time_272451,execs_729116,op_havoc,rep_7 new file mode 100644 index 00000000000..149e172a940 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002995,src_001145,time_272451,execs_729116,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002996,src_001145,time_272586,execs_730074,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_002996,src_001145,time_272586,execs_730074,op_havoc,rep_5 new file mode 100644 index 00000000000..dfbb8d0c6fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002996,src_001145,time_272586,execs_730074,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_002998,src_001145,time_272836,execs_731874,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_002998,src_001145,time_272836,execs_731874,op_havoc,rep_8 new file mode 100644 index 00000000000..08caab68529 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_002998,src_001145,time_272836,execs_731874,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003000,src_001145,time_273169,execs_734186,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003000,src_001145,time_273169,execs_734186,op_havoc,rep_5 new file mode 100644 index 00000000000..f5ebe16b6a5 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003000,src_001145,time_273169,execs_734186,op_havoc,rep_5 @@ -0,0 +1,23 @@ + + +þ + + + + + +' + + + + WorldINfo04þ + + + + + +' + + + + WorldINFo09l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003001,src_001145,time_273189,execs_734309,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003001,src_001145,time_273189,execs_734309,op_havoc,rep_6 new file mode 100644 index 00000000000..16d6377b4b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003001,src_001145,time_273189,execs_734309,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003002,src_002638,time_275591,execs_735551,op_quick,pos_59,val_+2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003002,src_002638,time_275591,execs_735551,op_quick,pos_59,val_+2 new file mode 100644 index 00000000000..37cb0696a62 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003002,src_002638,time_275591,execs_735551,op_quick,pos_59,val_+2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003007,src_002638,time_278900,execs_735733,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003007,src_002638,time_278900,execs_735733,op_havoc,rep_9 new file mode 100644 index 00000000000..d4814423b7a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003007,src_002638,time_278900,execs_735733,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003008,src_002638,time_279186,execs_735756,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003008,src_002638,time_279186,execs_735756,op_havoc,rep_15 new file mode 100644 index 00000000000..691a8545836 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003008,src_002638,time_279186,execs_735756,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003009,src_002638,time_279405,execs_735772,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003009,src_002638,time_279405,execs_735772,op_havoc,rep_13 new file mode 100644 index 00000000000..a5d9bc005ea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003009,src_002638,time_279405,execs_735772,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003010,src_002638,time_279722,execs_735791,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003010,src_002638,time_279722,execs_735791,op_havoc,rep_6 new file mode 100644 index 00000000000..487b727a49d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003010,src_002638,time_279722,execs_735791,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003011,src_002638,time_280738,execs_735859,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003011,src_002638,time_280738,execs_735859,op_havoc,rep_10 new file mode 100644 index 00000000000..13633b18814 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003011,src_002638,time_280738,execs_735859,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003013,src_002638,time_281507,execs_735910,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003013,src_002638,time_281507,execs_735910,op_havoc,rep_8 new file mode 100644 index 00000000000..94258450b20 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003013,src_002638,time_281507,execs_735910,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003014,src_002638,time_281653,execs_735918,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003014,src_002638,time_281653,execs_735918,op_havoc,rep_15 new file mode 100644 index 00000000000..e36315e8bd6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003014,src_002638,time_281653,execs_735918,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003015,src_002638,time_283712,execs_736058,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003015,src_002638,time_283712,execs_736058,op_havoc,rep_15 new file mode 100644 index 00000000000..b0528585d8d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003015,src_002638,time_283712,execs_736058,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003016,src_002638,time_284259,execs_736093,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003016,src_002638,time_284259,execs_736093,op_havoc,rep_12 new file mode 100644 index 00000000000..3f814c8dd1a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003016,src_002638,time_284259,execs_736093,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003018,src_002638,time_285477,execs_736183,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003018,src_002638,time_285477,execs_736183,op_havoc,rep_10 new file mode 100644 index 00000000000..3091ede963f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003018,src_002638,time_285477,execs_736183,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003019,src_002638,time_285775,execs_736202,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003019,src_002638,time_285775,execs_736202,op_havoc,rep_12 new file mode 100644 index 00000000000..56d412b8664 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003019,src_002638,time_285775,execs_736202,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003020,src_002638,time_287121,execs_736302,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003020,src_002638,time_287121,execs_736302,op_havoc,rep_10 new file mode 100644 index 00000000000..f272b2040af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003020,src_002638,time_287121,execs_736302,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003021,src_002638,time_288578,execs_736415,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003021,src_002638,time_288578,execs_736415,op_havoc,rep_5 new file mode 100644 index 00000000000..cc52b70ac25 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003021,src_002638,time_288578,execs_736415,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003022,src_002638,time_289042,execs_736446,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003022,src_002638,time_289042,execs_736446,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..069f2b810c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003022,src_002638,time_289042,execs_736446,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003025,src_002638,time_294233,execs_736821,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003025,src_002638,time_294233,execs_736821,op_havoc,rep_12 new file mode 100644 index 00000000000..7fff5e42c8e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003025,src_002638,time_294233,execs_736821,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003027,src_002638,time_299605,execs_737216,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003027,src_002638,time_299605,execs_737216,op_havoc,rep_14 new file mode 100644 index 00000000000..b5eaa735a63 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003027,src_002638,time_299605,execs_737216,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003029,src_002638,time_303655,execs_737530,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003029,src_002638,time_303655,execs_737530,op_havoc,rep_7 new file mode 100644 index 00000000000..1322358c8da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003029,src_002638,time_303655,execs_737530,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003031,src_002638,time_305556,execs_737666,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003031,src_002638,time_305556,execs_737666,op_havoc,rep_6 new file mode 100644 index 00000000000..903b70b2bff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003031,src_002638,time_305556,execs_737666,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003032,src_002638,time_306218,execs_737705,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003032,src_002638,time_306218,execs_737705,op_havoc,rep_14 new file mode 100644 index 00000000000..bc0d3f7a4b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003032,src_002638,time_306218,execs_737705,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003033,src_002638,time_306498,execs_737721,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003033,src_002638,time_306498,execs_737721,op_havoc,rep_10 new file mode 100644 index 00000000000..2139186607c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003033,src_002638,time_306498,execs_737721,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003034,src_002638,time_306918,execs_737751,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003034,src_002638,time_306918,execs_737751,op_havoc,rep_4 new file mode 100644 index 00000000000..f9067ca7f3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003034,src_002638,time_306918,execs_737751,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003035,src_002638,time_307740,execs_737809,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003035,src_002638,time_307740,execs_737809,op_havoc,rep_9 new file mode 100644 index 00000000000..1e37c0a60c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003035,src_002638,time_307740,execs_737809,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003037,src_002638,time_312837,execs_738208,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003037,src_002638,time_312837,execs_738208,op_havoc,rep_15 new file mode 100644 index 00000000000..f7c70e87b51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003037,src_002638,time_312837,execs_738208,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003041,src_002638,time_329493,execs_739487,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003041,src_002638,time_329493,execs_739487,op_havoc,rep_16 new file mode 100644 index 00000000000..fdd06bfb817 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003041,src_002638,time_329493,execs_739487,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003042,src_002638,time_334194,execs_739845,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003042,src_002638,time_334194,execs_739845,op_havoc,rep_16 new file mode 100644 index 00000000000..c3a747e557c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003042,src_002638,time_334194,execs_739845,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003044,src_002638,time_336835,execs_740043,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003044,src_002638,time_336835,execs_740043,op_havoc,rep_10 new file mode 100644 index 00000000000..0d976a1a79f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003044,src_002638,time_336835,execs_740043,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003046,src_002638,time_344772,execs_740643,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003046,src_002638,time_344772,execs_740643,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..96ef60e3787 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003046,src_002638,time_344772,execs_740643,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003047,src_002638,time_346455,execs_740772,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003047,src_002638,time_346455,execs_740772,op_havoc,rep_7 new file mode 100644 index 00000000000..fce00dfe4e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003047,src_002638,time_346455,execs_740772,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003048,src_002638,time_349117,execs_740975,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003048,src_002638,time_349117,execs_740975,op_havoc,rep_16 new file mode 100644 index 00000000000..56c6a5ee033 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003048,src_002638,time_349117,execs_740975,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003050,src_002638,time_352978,execs_741287,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003050,src_002638,time_352978,execs_741287,op_havoc,rep_6 new file mode 100644 index 00000000000..fde05d06455 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003050,src_002638,time_352978,execs_741287,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003051,src_002638,time_353827,execs_741354,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003051,src_002638,time_353827,execs_741354,op_havoc,rep_9 new file mode 100644 index 00000000000..6c1e72d453c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003051,src_002638,time_353827,execs_741354,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003052,src_002638,time_359499,execs_741788,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003052,src_002638,time_359499,execs_741788,op_havoc,rep_6 new file mode 100644 index 00000000000..d3220ad3818 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003052,src_002638,time_359499,execs_741788,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003055,src_002638,time_370589,execs_742652,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003055,src_002638,time_370589,execs_742652,op_havoc,rep_9 new file mode 100644 index 00000000000..25a5d4d8489 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003055,src_002638,time_370589,execs_742652,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003056,src_002638,time_383705,execs_743688,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003056,src_002638,time_383705,execs_743688,op_havoc,rep_16 new file mode 100644 index 00000000000..51b8bf5f376 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003056,src_002638,time_383705,execs_743688,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003058,src_002638,time_387017,execs_743932,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003058,src_002638,time_387017,execs_743932,op_havoc,rep_16 new file mode 100644 index 00000000000..694a3eff00e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003058,src_002638,time_387017,execs_743932,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003059,src_001090,time_387886,execs_744323,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003059,src_001090,time_387886,execs_744323,op_havoc,rep_5 new file mode 100644 index 00000000000..70d50034f8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003059,src_001090,time_387886,execs_744323,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003060,src_002175,time_388289,execs_745081,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003060,src_002175,time_388289,execs_745081,op_havoc,rep_6 new file mode 100644 index 00000000000..4d2b13b6d55 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003060,src_002175,time_388289,execs_745081,op_havoc,rep_6 @@ -0,0 +1,3 @@ +HeWWWMy»¶ +]118[105h[[?+[k8[1Ï5h[[?+[k?+4[4h[[?+?+4[48;2 +]118[;0;255;0mgre diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003061,src_002175,time_388296,execs_745129,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003061,src_002175,time_388296,execs_745129,op_havoc,rep_3 new file mode 100644 index 00000000000..b6bd72976f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003061,src_002175,time_388296,execs_745129,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003062,src_001683,time_388565,execs_746954,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003062,src_001683,time_388565,execs_746954,op_havoc,rep_1 new file mode 100644 index 00000000000..25183e7ad95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003062,src_001683,time_388565,execs_746954,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003063,src_002928,time_388622,execs_747372,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003063,src_002928,time_388622,execs_747372,op_havoc,rep_3 new file mode 100644 index 00000000000..2c6d6054e97 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003063,src_002928,time_388622,execs_747372,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003066,src_002928,time_388845,execs_748750,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003066,src_002928,time_388845,execs_748750,op_havoc,rep_6 new file mode 100644 index 00000000000..bc1ccb2269a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003066,src_002928,time_388845,execs_748750,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003068,src_002928,time_388967,execs_749543,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003068,src_002928,time_388967,execs_749543,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..e09c633a32a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003068,src_002928,time_388967,execs_749543,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003069,src_002928,time_388982,execs_749642,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003069,src_002928,time_388982,execs_749642,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..02d00627d5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003069,src_002928,time_388982,execs_749642,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003070,src_002928,time_389222,execs_751211,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003070,src_002928,time_389222,execs_751211,op_havoc,rep_7 new file mode 100644 index 00000000000..f7e61b1e145 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003070,src_002928,time_389222,execs_751211,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003073,src_002928,time_389624,execs_753829,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003073,src_002928,time_389624,execs_753829,op_havoc,rep_6 new file mode 100644 index 00000000000..f39ce059f36 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003073,src_002928,time_389624,execs_753829,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003076,src_002928,time_390105,execs_756897,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003076,src_002928,time_390105,execs_756897,op_havoc,rep_8 new file mode 100644 index 00000000000..90c4a092eaa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003076,src_002928,time_390105,execs_756897,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003077,src_002928,time_390122,execs_757006,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003077,src_002928,time_390122,execs_757006,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..380f3b57ca4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003077,src_002928,time_390122,execs_757006,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003079,src_002883,time_390247,execs_757659,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003079,src_002883,time_390247,execs_757659,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..c053cb7aecf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003079,src_002883,time_390247,execs_757659,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003080,src_002883,time_390252,execs_757681,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003080,src_002883,time_390252,execs_757681,op_havoc,rep_1 new file mode 100644 index 00000000000..812f3536993 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003080,src_002883,time_390252,execs_757681,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003081,src_002883,time_390375,execs_758182,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003081,src_002883,time_390375,execs_758182,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..f2c55942e24 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003081,src_002883,time_390375,execs_758182,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003082,src_002883,time_390451,execs_758503,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003082,src_002883,time_390451,execs_758503,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a0cffe7e507 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003082,src_002883,time_390451,execs_758503,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003083,src_002529,time_391425,execs_762765,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003083,src_002529,time_391425,execs_762765,op_havoc,rep_15 new file mode 100644 index 00000000000..a9d80daec00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003083,src_002529,time_391425,execs_762765,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003084,src_002529,time_391473,execs_763022,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003084,src_002529,time_391473,execs_763022,op_havoc,rep_10 new file mode 100644 index 00000000000..5d9d47aacf1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003084,src_002529,time_391473,execs_763022,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003085,src_002529,time_391479,execs_763062,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003085,src_002529,time_391479,execs_763062,op_havoc,rep_12 new file mode 100644 index 00000000000..093e641235d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003085,src_002529,time_391479,execs_763062,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003086,src_002529,time_391503,execs_763183,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003086,src_002529,time_391503,execs_763183,op_havoc,rep_14 new file mode 100644 index 00000000000..7aa45b9e83e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003086,src_002529,time_391503,execs_763183,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003088,src_002529,time_391607,execs_763793,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003088,src_002529,time_391607,execs_763793,op_havoc,rep_7 new file mode 100644 index 00000000000..df6f150b83e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003088,src_002529,time_391607,execs_763793,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003089,src_002529,time_391615,execs_763846,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003089,src_002529,time_391615,execs_763846,op_havoc,rep_8 new file mode 100644 index 00000000000..bc2efd31fe1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003089,src_002529,time_391615,execs_763846,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003092,src_002529,time_391820,execs_764971,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003092,src_002529,time_391820,execs_764971,op_havoc,rep_11 new file mode 100644 index 00000000000..ac5da2ca6ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003092,src_002529,time_391820,execs_764971,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003095,src_002529,time_391977,execs_765883,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003095,src_002529,time_391977,execs_765883,op_havoc,rep_9 new file mode 100644 index 00000000000..af0407a46f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003095,src_002529,time_391977,execs_765883,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003099,src_002529,time_392216,execs_767237,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003099,src_002529,time_392216,execs_767237,op_havoc,rep_11 new file mode 100644 index 00000000000..769a91d2799 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003099,src_002529,time_392216,execs_767237,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003102,src_002529,time_392658,execs_769803,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003102,src_002529,time_392658,execs_769803,op_havoc,rep_7 new file mode 100644 index 00000000000..c8ad8c494e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003102,src_002529,time_392658,execs_769803,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003105,src_002529,time_392892,execs_771233,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003105,src_002529,time_392892,execs_771233,op_havoc,rep_11 new file mode 100644 index 00000000000..379b0ddbef4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003105,src_002529,time_392892,execs_771233,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003106,src_002529,time_392913,execs_771344,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003106,src_002529,time_392913,execs_771344,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..5b84cbc1056 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003106,src_002529,time_392913,execs_771344,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003108,src_001639,time_393160,execs_772822,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003108,src_001639,time_393160,execs_772822,op_havoc,rep_1 new file mode 100644 index 00000000000..79a2b1ead7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003108,src_001639,time_393160,execs_772822,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003109,src_001827,time_393271,execs_773418,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003109,src_001827,time_393271,execs_773418,op_havoc,rep_4 new file mode 100644 index 00000000000..5f6a95e0571 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003109,src_001827,time_393271,execs_773418,op_havoc,rep_4 @@ -0,0 +1 @@ +]52;;SGVs\b]5]52;;SGVsb§8=Ç8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003110,src_003072,time_393393,execs_774269,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003110,src_003072,time_393393,execs_774269,op_havoc,rep_4 new file mode 100644 index 00000000000..61cfc0af79a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003110,src_003072,time_393393,execs_774269,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003111,src_003072,time_393405,execs_774346,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003111,src_003072,time_393405,execs_774346,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..0d9be0eb596 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003111,src_003072,time_393405,execs_774346,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003112,src_003072,time_393456,execs_774600,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003112,src_003072,time_393456,execs_774600,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..47a8ad2b0a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003112,src_003072,time_393456,execs_774600,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003114,src_003072,time_393509,execs_774840,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003114,src_003072,time_393509,execs_774840,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..eeb39587ef8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003114,src_003072,time_393509,execs_774840,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003117,src_003072,time_393679,execs_775632,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003117,src_003072,time_393679,execs_775632,op_havoc,rep_10 new file mode 100644 index 00000000000..a6f9a72c5ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003117,src_003072,time_393679,execs_775632,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003118,src_003072,time_393764,execs_776091,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003118,src_003072,time_393764,execs_776091,op_havoc,rep_15 new file mode 100644 index 00000000000..f3349f75e0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003118,src_003072,time_393764,execs_776091,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003121,src_003072,time_393811,execs_776350,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003121,src_003072,time_393811,execs_776350,op_havoc,rep_11 new file mode 100644 index 00000000000..47ec6503fb2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003121,src_003072,time_393811,execs_776350,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003122,src_003072,time_393851,execs_776495,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003122,src_003072,time_393851,execs_776495,op_havoc,rep_13 new file mode 100644 index 00000000000..a32f7a2289b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003122,src_003072,time_393851,execs_776495,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003123,src_003072,time_393966,execs_777129,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003123,src_003072,time_393966,execs_777129,op_havoc,rep_8 new file mode 100644 index 00000000000..fd2bb6deea2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003123,src_003072,time_393966,execs_777129,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003124,src_003072,time_393995,execs_777299,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003124,src_003072,time_393995,execs_777299,op_havoc,rep_16 new file mode 100644 index 00000000000..cb725c2b79b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003124,src_003072,time_393995,execs_777299,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003125,src_003072,time_394074,execs_777676,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003125,src_003072,time_394074,execs_777676,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..cbe2eade331 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003125,src_003072,time_394074,execs_777676,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003127,src_003072,time_394271,execs_778690,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003127,src_003072,time_394271,execs_778690,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..fe7d7c9557f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003127,src_003072,time_394271,execs_778690,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003129,src_003072,time_394293,execs_778801,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003129,src_003072,time_394293,execs_778801,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..24bd0fe6e1a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003129,src_003072,time_394293,execs_778801,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003131,src_003072,time_394669,execs_780676,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003131,src_003072,time_394669,execs_780676,op_havoc,rep_12 new file mode 100644 index 00000000000..e90093cddbd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003131,src_003072,time_394669,execs_780676,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003132,src_003072,time_394704,execs_780867,op_havoc,rep_13,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003132,src_003072,time_394704,execs_780867,op_havoc,rep_13,+cov new file mode 100644 index 00000000000..1b525b71439 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003132,src_003072,time_394704,execs_780867,op_havoc,rep_13,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003134,src_003072,time_395003,execs_782468,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003134,src_003072,time_395003,execs_782468,op_havoc,rep_13 new file mode 100644 index 00000000000..c781795934d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003134,src_003072,time_395003,execs_782468,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003136,src_003072,time_395281,execs_783927,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003136,src_003072,time_395281,execs_783927,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..a3f7f327676 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003136,src_003072,time_395281,execs_783927,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003137,src_002924,time_395362,execs_784372,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003137,src_002924,time_395362,execs_784372,op_havoc,rep_5 new file mode 100644 index 00000000000..525c3451378 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003137,src_002924,time_395362,execs_784372,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003139,src_002924,time_395405,execs_784617,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003139,src_002924,time_395405,execs_784617,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..a30c8a32aba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003139,src_002924,time_395405,execs_784617,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003141,src_002924,time_395480,execs_785045,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003141,src_002924,time_395480,execs_785045,op_havoc,rep_15 new file mode 100644 index 00000000000..dd4dee8596a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003141,src_002924,time_395480,execs_785045,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003142,src_002924,time_395509,execs_785213,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003142,src_002924,time_395509,execs_785213,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..c4c8916a11d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003142,src_002924,time_395509,execs_785213,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003145,src_002924,time_395849,execs_787119,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003145,src_002924,time_395849,execs_787119,op_havoc,rep_11 new file mode 100644 index 00000000000..e276f17f156 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003145,src_002924,time_395849,execs_787119,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003149,src_002924,time_396451,execs_790408,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003149,src_002924,time_396451,execs_790408,op_havoc,rep_14 new file mode 100644 index 00000000000..d3486e2ccb2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003149,src_002924,time_396451,execs_790408,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003150,src_002924,time_396574,execs_791109,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003150,src_002924,time_396574,execs_791109,op_havoc,rep_12 new file mode 100644 index 00000000000..6471026aa26 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003150,src_002924,time_396574,execs_791109,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003152,src_002924,time_396834,execs_792516,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003152,src_002924,time_396834,execs_792516,op_havoc,rep_12 new file mode 100644 index 00000000000..c37dfb6c776 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003152,src_002924,time_396834,execs_792516,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003153,src_002924,time_396860,execs_792676,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003153,src_002924,time_396860,execs_792676,op_havoc,rep_10 new file mode 100644 index 00000000000..63d0b72a1d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003153,src_002924,time_396860,execs_792676,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003154,src_002924,time_396914,execs_792965,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003154,src_002924,time_396914,execs_792965,op_havoc,rep_8 new file mode 100644 index 00000000000..9712f97d3af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003154,src_002924,time_396914,execs_792965,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003155,src_002924,time_397006,execs_793473,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003155,src_002924,time_397006,execs_793473,op_havoc,rep_8 new file mode 100644 index 00000000000..99cd4b513a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003155,src_002924,time_397006,execs_793473,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003156,src_003151,time_397169,execs_794472,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003156,src_003151,time_397169,execs_794472,op_havoc,rep_8 new file mode 100644 index 00000000000..4cfd38a3cd7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003156,src_003151,time_397169,execs_794472,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003158,src_003151,time_397182,execs_794551,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003158,src_003151,time_397182,execs_794551,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..a02a3fb822b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003158,src_003151,time_397182,execs_794551,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003159,src_003151,time_397254,execs_794936,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003159,src_003151,time_397254,execs_794936,op_havoc,rep_4 new file mode 100644 index 00000000000..8da808428f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003159,src_003151,time_397254,execs_794936,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003160,src_003151,time_397343,execs_795417,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003160,src_003151,time_397343,execs_795417,op_havoc,rep_8 new file mode 100644 index 00000000000..cd6bba68457 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003160,src_003151,time_397343,execs_795417,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003162,src_003151,time_397641,execs_797026,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003162,src_003151,time_397641,execs_797026,op_havoc,rep_6 new file mode 100644 index 00000000000..2d19a6e488d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003162,src_003151,time_397641,execs_797026,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003163,src_003151,time_397737,execs_797481,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003163,src_003151,time_397737,execs_797481,op_havoc,rep_2 new file mode 100644 index 00000000000..fbc2d25c52f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003163,src_003151,time_397737,execs_797481,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003164,src_003151,time_397814,execs_797871,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003164,src_003151,time_397814,execs_797871,op_havoc,rep_7 new file mode 100644 index 00000000000..3afca0954f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003164,src_003151,time_397814,execs_797871,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003166,src_003151,time_398298,execs_800429,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003166,src_003151,time_398298,execs_800429,op_havoc,rep_5 new file mode 100644 index 00000000000..cbb51448e8a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003166,src_003151,time_398298,execs_800429,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003168,src_003151,time_398921,execs_803083,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003168,src_003151,time_398921,execs_803083,op_havoc,rep_7 new file mode 100644 index 00000000000..9989877ee8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003168,src_003151,time_398921,execs_803083,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003169,src_002208,time_399169,execs_804468,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003169,src_002208,time_399169,execs_804468,op_havoc,rep_2 new file mode 100644 index 00000000000..921fdba946a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003169,src_002208,time_399169,execs_804468,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003170,src_002553,time_399253,execs_805108,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003170,src_002553,time_399253,execs_805108,op_havoc,rep_1 new file mode 100644 index 00000000000..597c01ec391 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003170,src_002553,time_399253,execs_805108,op_havoc,rep_1 @@ -0,0 +1 @@ +]22;]22;]22;]22;c;SGc;SG \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003171,src_002553,time_399277,execs_805291,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003171,src_002553,time_399277,execs_805291,op_havoc,rep_1 new file mode 100644 index 00000000000..69ce8940933 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003171,src_002553,time_399277,execs_805291,op_havoc,rep_1 @@ -0,0 +1 @@ +]22;]22;c;SG]22;]22;c;SG \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003172,src_000798,time_399455,execs_806643,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003172,src_000798,time_399455,execs_806643,op_havoc,rep_5 new file mode 100644 index 00000000000..7d073a82d0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003172,src_000798,time_399455,execs_806643,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003173,src_000872,time_404416,execs_807649,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003173,src_000872,time_404416,execs_807649,op_havoc,rep_9 new file mode 100644 index 00000000000..6cd99484ee1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003173,src_000872,time_404416,execs_807649,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003174,src_000872,time_404447,execs_807848,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003174,src_000872,time_404447,execs_807848,op_havoc,rep_6 new file mode 100644 index 00000000000..7dc56b9234c --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003174,src_000872,time_404447,execs_807848,op_havoc,rep_6 @@ -0,0 +1 @@ +[>9[>5h[>2mgreen@bg[>5h[>2mgreen[>2mgrlen 04 o[>5h[>2mgreen@bg \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003175,src_000872,time_404457,execs_807905,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003175,src_000872,time_404457,execs_807905,op_havoc,rep_10 new file mode 100644 index 00000000000..a07169406a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003175,src_000872,time_404457,execs_807905,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003177,src_000872,time_404560,execs_808514,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003177,src_000872,time_404560,execs_808514,op_havoc,rep_4 new file mode 100644 index 00000000000..f7c7e66f2c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003177,src_000872,time_404560,execs_808514,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003180,src_000872,time_404879,execs_810510,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003180,src_000872,time_404879,execs_810510,op_havoc,rep_13 new file mode 100644 index 00000000000..8a28bb1c083 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003180,src_000872,time_404879,execs_810510,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003181,src_000872,time_405041,execs_811474,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003181,src_000872,time_405041,execs_811474,op_havoc,rep_10 new file mode 100644 index 00000000000..ccddb218fe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003181,src_000872,time_405041,execs_811474,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003182,src_000872,time_405202,execs_812445,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003182,src_000872,time_405202,execs_812445,op_havoc,rep_11 new file mode 100644 index 00000000000..f9b7cd13330 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003182,src_000872,time_405202,execs_812445,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003183,src_000872,time_405340,execs_813249,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003183,src_000872,time_405340,execs_813249,op_havoc,rep_11 new file mode 100644 index 00000000000..6abda1e1f26 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003183,src_000872,time_405340,execs_813249,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003184,src_000872,time_405403,execs_813616,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003184,src_000872,time_405403,execs_813616,op_havoc,rep_7 new file mode 100644 index 00000000000..2381af0073f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003184,src_000872,time_405403,execs_813616,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003185,src_000872,time_405592,execs_814778,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003185,src_000872,time_405592,execs_814778,op_havoc,rep_13 new file mode 100644 index 00000000000..3ea6c711daf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003185,src_000872,time_405592,execs_814778,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003186,src_000872,time_405627,execs_814948,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003186,src_000872,time_405627,execs_814948,op_havoc,rep_11 new file mode 100644 index 00000000000..2eebdfd7cf0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003186,src_000872,time_405627,execs_814948,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003194,src_002993,time_406145,execs_818221,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003194,src_002993,time_406145,execs_818221,op_havoc,rep_6 new file mode 100644 index 00000000000..10c14c42bc7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003194,src_002993,time_406145,execs_818221,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003195,src_002993,time_406174,execs_818428,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003195,src_002993,time_406174,execs_818428,op_havoc,rep_8 new file mode 100644 index 00000000000..bd0bc695fe9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003195,src_002993,time_406174,execs_818428,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003196,src_002993,time_406238,execs_818853,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003196,src_002993,time_406238,execs_818853,op_havoc,rep_6 new file mode 100644 index 00000000000..e075c489e4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003196,src_002993,time_406238,execs_818853,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003199,src_002993,time_406362,execs_819754,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003199,src_002993,time_406362,execs_819754,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..548391bbecb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003199,src_002993,time_406362,execs_819754,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003201,src_002993,time_406400,execs_820017,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003201,src_002993,time_406400,execs_820017,op_havoc,rep_4 new file mode 100644 index 00000000000..d98d7e40a57 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003201,src_002993,time_406400,execs_820017,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003207,src_002993,time_406622,execs_821625,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003207,src_002993,time_406622,execs_821625,op_havoc,rep_8 new file mode 100644 index 00000000000..1a337d0d9ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003207,src_002993,time_406622,execs_821625,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003211,src_002993,time_407236,execs_825962,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003211,src_002993,time_407236,execs_825962,op_havoc,rep_7 new file mode 100644 index 00000000000..9f63e68d15d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003211,src_002993,time_407236,execs_825962,op_havoc,rep_7 @@ -0,0 +1 @@ +25l[?1/1/49h[)&h1/49h[)&h149h[)&h49h[)&h \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003212,src_002993,time_407265,execs_826166,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003212,src_002993,time_407265,execs_826166,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..dd17e871a9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003212,src_002993,time_407265,execs_826166,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003214,src_002993,time_407352,execs_826774,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003214,src_002993,time_407352,execs_826774,op_havoc,rep_6 new file mode 100644 index 00000000000..5a6bf7e11ca Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003214,src_002993,time_407352,execs_826774,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003220,src_002993,time_408165,execs_832491,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003220,src_002993,time_408165,execs_832491,op_havoc,rep_8 new file mode 100644 index 00000000000..dfca1f59a69 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003220,src_002993,time_408165,execs_832491,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003222,src_002993,time_408397,execs_834152,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003222,src_002993,time_408397,execs_834152,op_havoc,rep_5 new file mode 100644 index 00000000000..aa48976e0fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003222,src_002993,time_408397,execs_834152,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003223,src_002993,time_408441,execs_834467,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003223,src_002993,time_408441,execs_834467,op_havoc,rep_8 new file mode 100644 index 00000000000..3bbd36fbfe5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003223,src_002993,time_408441,execs_834467,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003224,src_002993,time_408543,execs_835171,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003224,src_002993,time_408543,execs_835171,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..aea5e0bc809 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003224,src_002993,time_408543,execs_835171,op_havoc,rep_6,+cov @@ -0,0 +1,2 @@ +]M]MMyÀ»œ +]104;meen b4;155;6_788;9green b4;155;6_788;9l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003226,src_002993,time_408824,execs_837145,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003226,src_002993,time_408824,execs_837145,op_havoc,rep_4 new file mode 100644 index 00000000000..d2fa60d8cb1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003226,src_002993,time_408824,execs_837145,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003227,src_002993,time_408869,execs_837474,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003227,src_002993,time_408869,execs_837474,op_havoc,rep_8 new file mode 100644 index 00000000000..af40978440c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003227,src_002993,time_408869,execs_837474,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003229,src_002993,time_408895,execs_837648,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003229,src_002993,time_408895,execs_837648,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..56a12a826da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003229,src_002993,time_408895,execs_837648,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003230,src_002993,time_409146,execs_839407,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003230,src_002993,time_409146,execs_839407,op_havoc,rep_6 new file mode 100644 index 00000000000..f8deea39685 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003230,src_002993,time_409146,execs_839407,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003231,src_002993,time_409407,execs_841248,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003231,src_002993,time_409407,execs_841248,op_havoc,rep_3 new file mode 100644 index 00000000000..09095a11bf6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003231,src_002993,time_409407,execs_841248,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003232,src_002993,time_409608,execs_842682,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003232,src_002993,time_409608,execs_842682,op_havoc,rep_4 new file mode 100644 index 00000000000..9c52e1f1e0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003232,src_002993,time_409608,execs_842682,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003233,src_002993,time_409962,execs_845198,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003233,src_002993,time_409962,execs_845198,op_havoc,rep_5 new file mode 100644 index 00000000000..13ad72b9e2d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003233,src_002993,time_409962,execs_845198,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003234,src_002993,time_410120,execs_846346,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003234,src_002993,time_410120,execs_846346,op_havoc,rep_8 new file mode 100644 index 00000000000..d28440f7780 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003234,src_002993,time_410120,execs_846346,op_havoc,rep_8 @@ -0,0 +1 @@ +25i[?1s|i[?1s|?2i[?1s?25i[?1s495i[?1s49 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003235,src_002993,time_410339,execs_847940,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003235,src_002993,time_410339,execs_847940,op_havoc,rep_8 new file mode 100644 index 00000000000..2ee1d60e010 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003235,src_002993,time_410339,execs_847940,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003239,src_002993,time_410850,execs_851534,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003239,src_002993,time_410850,execs_851534,op_havoc,rep_4 new file mode 100644 index 00000000000..e05a3015fab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003239,src_002993,time_410850,execs_851534,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003242,src_002117,time_411873,execs_858394,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003242,src_002117,time_411873,execs_858394,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..7cf1c5d58ea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003242,src_002117,time_411873,execs_858394,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003243,src_002117,time_411874,execs_858404,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003243,src_002117,time_411874,execs_858404,op_havoc,rep_2 new file mode 100644 index 00000000000..459fe98a8e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003243,src_002117,time_411874,execs_858404,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003246,src_002117,time_411897,execs_858546,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003246,src_002117,time_411897,execs_858546,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..9a59b6ef65d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003246,src_002117,time_411897,execs_858546,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003247,src_002117,time_411908,execs_858616,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003247,src_002117,time_411908,execs_858616,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..a3c9a1feb9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003247,src_002117,time_411908,execs_858616,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003248,src_002117,time_411940,execs_858831,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003248,src_002117,time_411940,execs_858831,op_havoc,rep_8 new file mode 100644 index 00000000000..07f873f0a4f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003248,src_002117,time_411940,execs_858831,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003249,src_002117,time_411952,execs_858915,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003249,src_002117,time_411952,execs_858915,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..adf7c64b8f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003249,src_002117,time_411952,execs_858915,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003252,src_002117,time_412052,execs_859552,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003252,src_002117,time_412052,execs_859552,op_havoc,rep_11 new file mode 100644 index 00000000000..9277b6f5ecf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003252,src_002117,time_412052,execs_859552,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003253,src_002117,time_412078,execs_859721,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003253,src_002117,time_412078,execs_859721,op_havoc,rep_11 new file mode 100644 index 00000000000..29031010de7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003253,src_002117,time_412078,execs_859721,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003254,src_002117,time_412109,execs_859912,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003254,src_002117,time_412109,execs_859912,op_havoc,rep_16 new file mode 100644 index 00000000000..0f3cc76bfac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003254,src_002117,time_412109,execs_859912,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003255,src_002117,time_412147,execs_860183,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003255,src_002117,time_412147,execs_860183,op_havoc,rep_12 new file mode 100644 index 00000000000..3afbebea782 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003255,src_002117,time_412147,execs_860183,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003257,src_002117,time_412224,execs_860590,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003257,src_002117,time_412224,execs_860590,op_havoc,rep_15 new file mode 100644 index 00000000000..96e48f6cc9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003257,src_002117,time_412224,execs_860590,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003261,src_002117,time_412392,execs_861643,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003261,src_002117,time_412392,execs_861643,op_havoc,rep_16 new file mode 100644 index 00000000000..c2f552b16f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003261,src_002117,time_412392,execs_861643,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003264,src_002117,time_412791,execs_864174,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003264,src_002117,time_412791,execs_864174,op_havoc,rep_13 new file mode 100644 index 00000000000..bfbb7ff9ba9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003264,src_002117,time_412791,execs_864174,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003265,src_002117,time_412798,execs_864213,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003265,src_002117,time_412798,execs_864213,op_havoc,rep_16 new file mode 100644 index 00000000000..845f574ff73 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003265,src_002117,time_412798,execs_864213,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003268,src_002117,time_412953,execs_865219,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003268,src_002117,time_412953,execs_865219,op_havoc,rep_15 new file mode 100644 index 00000000000..e372865263a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003268,src_002117,time_412953,execs_865219,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003269,src_002117,time_412957,execs_865246,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003269,src_002117,time_412957,execs_865246,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..9a11a808a74 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003269,src_002117,time_412957,execs_865246,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003270,src_002117,time_412962,execs_865278,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003270,src_002117,time_412962,execs_865278,op_havoc,rep_9 new file mode 100644 index 00000000000..1953432400b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003270,src_002117,time_412962,execs_865278,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003272,src_002117,time_413293,execs_867410,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003272,src_002117,time_413293,execs_867410,op_havoc,rep_14 new file mode 100644 index 00000000000..efd49aa3133 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003272,src_002117,time_413293,execs_867410,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003273,src_002117,time_413322,execs_867583,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003273,src_002117,time_413322,execs_867583,op_havoc,rep_13 new file mode 100644 index 00000000000..d797292ec88 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003273,src_002117,time_413322,execs_867583,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003275,src_000461,time_413703,execs_869779,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003275,src_000461,time_413703,execs_869779,op_havoc,rep_8 new file mode 100644 index 00000000000..3015a6e74bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003275,src_000461,time_413703,execs_869779,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003277,src_002867,time_413849,execs_870751,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003277,src_002867,time_413849,execs_870751,op_havoc,rep_2 new file mode 100644 index 00000000000..c070eaeaa34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003277,src_002867,time_413849,execs_870751,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003278,src_002867,time_413897,execs_871097,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003278,src_002867,time_413897,execs_871097,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..e64bf4727eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003278,src_002867,time_413897,execs_871097,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003280,src_002867,time_414114,execs_872643,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003280,src_002867,time_414114,execs_872643,op_havoc,rep_2 new file mode 100644 index 00000000000..8ec530a6210 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003280,src_002867,time_414114,execs_872643,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003281,src_002867,time_414193,execs_873224,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003281,src_002867,time_414193,execs_873224,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..4c2f8cad067 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003281,src_002867,time_414193,execs_873224,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003283,src_002867,time_414439,execs_875022,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003283,src_002867,time_414439,execs_875022,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..29c284ecfa6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003283,src_002867,time_414439,execs_875022,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003284,src_001536,time_415309,execs_880876,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003284,src_001536,time_415309,execs_880876,op_havoc,rep_2 new file mode 100644 index 00000000000..ead84d5cf47 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003284,src_001536,time_415309,execs_880876,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003285,src_001536,time_415316,execs_880915,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003285,src_001536,time_415316,execs_880915,op_havoc,rep_7 new file mode 100644 index 00000000000..e48eb3984e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003285,src_001536,time_415316,execs_880915,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003288,src_001536,time_415860,execs_883587,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003288,src_001536,time_415860,execs_883587,op_havoc,rep_15 new file mode 100644 index 00000000000..0274d3b0c5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003288,src_001536,time_415860,execs_883587,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003289,src_001536,time_416043,execs_884326,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003289,src_001536,time_416043,execs_884326,op_havoc,rep_10 new file mode 100644 index 00000000000..718e9599332 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003289,src_001536,time_416043,execs_884326,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003292,src_001536,time_416085,execs_884507,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003292,src_001536,time_416085,execs_884507,op_havoc,rep_16 new file mode 100644 index 00000000000..07a645617e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003292,src_001536,time_416085,execs_884507,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003293,src_001536,time_416314,execs_885614,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003293,src_001536,time_416314,execs_885614,op_havoc,rep_15 new file mode 100644 index 00000000000..3557b540db5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003293,src_001536,time_416314,execs_885614,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003296,src_001536,time_416825,execs_887793,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003296,src_001536,time_416825,execs_887793,op_havoc,rep_15 new file mode 100644 index 00000000000..d8f47725a00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003296,src_001536,time_416825,execs_887793,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003297,src_001536,time_416893,execs_888125,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003297,src_001536,time_416893,execs_888125,op_havoc,rep_16 new file mode 100644 index 00000000000..79cc386cc65 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003297,src_001536,time_416893,execs_888125,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003298,src_001536,time_417087,execs_889045,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003298,src_001536,time_417087,execs_889045,op_havoc,rep_15 new file mode 100644 index 00000000000..9873f36272f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003298,src_001536,time_417087,execs_889045,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003299,src_001536,time_417092,execs_889069,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003299,src_001536,time_417092,execs_889069,op_havoc,rep_11 new file mode 100644 index 00000000000..d73c09b32a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003299,src_001536,time_417092,execs_889069,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003300,src_001536,time_417332,execs_890183,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003300,src_001536,time_417332,execs_890183,op_havoc,rep_7 new file mode 100644 index 00000000000..46b7cc918be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003300,src_001536,time_417332,execs_890183,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003301,src_003259,time_418475,execs_890998,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003301,src_003259,time_418475,execs_890998,op_havoc,rep_2 new file mode 100644 index 00000000000..9f5825f0187 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003301,src_003259,time_418475,execs_890998,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003303,src_000836,time_420554,execs_893202,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003303,src_000836,time_420554,execs_893202,op_havoc,rep_2 new file mode 100644 index 00000000000..da00e14b59c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003303,src_000836,time_420554,execs_893202,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003305,src_001849,time_420773,execs_894427,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003305,src_001849,time_420773,execs_894427,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..876a898d5de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003305,src_001849,time_420773,execs_894427,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003306,src_000586,time_420986,execs_895216,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003306,src_000586,time_420986,execs_895216,op_havoc,rep_5 new file mode 100644 index 00000000000..4a3fccfc5ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003306,src_000586,time_420986,execs_895216,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003307,src_003235,time_421041,execs_895596,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003307,src_003235,time_421041,execs_895596,op_havoc,rep_2 new file mode 100644 index 00000000000..f356f94de7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003307,src_003235,time_421041,execs_895596,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003309,src_000748,time_421460,execs_898569,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003309,src_000748,time_421460,execs_898569,op_havoc,rep_5 new file mode 100644 index 00000000000..796ce6c3a98 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003309,src_000748,time_421460,execs_898569,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003311,src_003304,time_421553,execs_899054,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003311,src_003304,time_421553,execs_899054,op_havoc,rep_10 new file mode 100644 index 00000000000..94a26fdae91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003311,src_003304,time_421553,execs_899054,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003314,src_003304,time_421724,execs_899588,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003314,src_003304,time_421724,execs_899588,op_havoc,rep_12 new file mode 100644 index 00000000000..3da92d5845f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003314,src_003304,time_421724,execs_899588,op_havoc,rep_12 @@ -0,0 +1 @@ +Â1Q25lT?ŠŠŠŠŠŠŠŠ]9;1;97Ç‘ŠŠŠ]9;1;97Ç‘ŠŠ[ŠŠŠŠŠŠlŠŠú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003316,src_003304,time_421786,execs_899811,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003316,src_003304,time_421786,execs_899811,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..b69cc15c26d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003316,src_003304,time_421786,execs_899811,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003318,src_003304,time_421905,execs_900213,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003318,src_003304,time_421905,execs_900213,op_havoc,rep_15 new file mode 100644 index 00000000000..23d029348b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003318,src_003304,time_421905,execs_900213,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003320,src_003304,time_421974,execs_900400,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003320,src_003304,time_421974,execs_900400,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..69822744f34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003320,src_003304,time_421974,execs_900400,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003321,src_003304,time_421999,execs_900491,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003321,src_003304,time_421999,execs_900491,op_havoc,rep_8 new file mode 100644 index 00000000000..1072a215439 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003321,src_003304,time_421999,execs_900491,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003322,src_003304,time_422115,execs_900882,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003322,src_003304,time_422115,execs_900882,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..41dfa7232b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003322,src_003304,time_422115,execs_900882,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003324,src_003304,time_422186,execs_901129,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003324,src_003304,time_422186,execs_901129,op_havoc,rep_11 new file mode 100644 index 00000000000..d4f339a49df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003324,src_003304,time_422186,execs_901129,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003326,src_003304,time_422996,execs_903760,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003326,src_003304,time_422996,execs_903760,op_havoc,rep_11 new file mode 100644 index 00000000000..24f8ceabca2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003326,src_003304,time_422996,execs_903760,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003327,src_003304,time_423052,execs_903955,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003327,src_003304,time_423052,execs_903955,op_havoc,rep_8 new file mode 100644 index 00000000000..38bdb304403 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003327,src_003304,time_423052,execs_903955,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003329,src_003304,time_423330,execs_904872,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003329,src_003304,time_423330,execs_904872,op_havoc,rep_7 new file mode 100644 index 00000000000..d09e42838c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003329,src_003304,time_423330,execs_904872,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003331,src_003304,time_423654,execs_906003,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003331,src_003304,time_423654,execs_906003,op_havoc,rep_16 new file mode 100644 index 00000000000..7217ed3c062 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003331,src_003304,time_423654,execs_906003,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003332,src_003304,time_423881,execs_906832,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003332,src_003304,time_423881,execs_906832,op_havoc,rep_6 new file mode 100644 index 00000000000..56bc4172b37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003332,src_003304,time_423881,execs_906832,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003334,src_003304,time_423991,execs_907225,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003334,src_003304,time_423991,execs_907225,op_havoc,rep_12 new file mode 100644 index 00000000000..f4399bc8521 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003334,src_003304,time_423991,execs_907225,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003335,src_003304,time_424049,execs_907428,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003335,src_003304,time_424049,execs_907428,op_havoc,rep_13 new file mode 100644 index 00000000000..92c37e29676 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003335,src_003304,time_424049,execs_907428,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003338,src_002851,time_424777,execs_910896,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003338,src_002851,time_424777,execs_910896,op_havoc,rep_5 new file mode 100644 index 00000000000..c7bebedf278 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003338,src_002851,time_424777,execs_910896,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003339,src_002851,time_424805,execs_911084,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003339,src_002851,time_424805,execs_911084,op_havoc,rep_16 new file mode 100644 index 00000000000..e3f7a100f36 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003339,src_002851,time_424805,execs_911084,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003340,src_002851,time_424823,execs_911184,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003340,src_002851,time_424823,execs_911184,op_havoc,rep_3 new file mode 100644 index 00000000000..43bc78de016 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003340,src_002851,time_424823,execs_911184,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003345,src_002851,time_425290,execs_913993,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003345,src_002851,time_425290,execs_913993,op_havoc,rep_11 new file mode 100644 index 00000000000..ee318e26f4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003345,src_002851,time_425290,execs_913993,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003346,src_002851,time_425330,execs_914246,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003346,src_002851,time_425330,execs_914246,op_havoc,rep_15 new file mode 100644 index 00000000000..89f07e67990 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003346,src_002851,time_425330,execs_914246,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003347,src_002851,time_425332,execs_914256,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003347,src_002851,time_425332,execs_914256,op_havoc,rep_6 new file mode 100644 index 00000000000..866d1110fd0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003347,src_002851,time_425332,execs_914256,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003348,src_002851,time_425440,execs_914913,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003348,src_002851,time_425440,execs_914913,op_havoc,rep_9 new file mode 100644 index 00000000000..e49282d5909 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003348,src_002851,time_425440,execs_914913,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003351,src_002851,time_425717,execs_916626,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003351,src_002851,time_425717,execs_916626,op_havoc,rep_9 new file mode 100644 index 00000000000..941f2fa7868 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003351,src_002851,time_425717,execs_916626,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003352,src_002851,time_425946,execs_918052,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003352,src_002851,time_425946,execs_918052,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..2a63c16fa72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003352,src_002851,time_425946,execs_918052,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003353,src_002851,time_425961,execs_918159,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003353,src_002851,time_425961,execs_918159,op_havoc,rep_6 new file mode 100644 index 00000000000..93be65c0b9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003353,src_002851,time_425961,execs_918159,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003355,src_002851,time_426017,execs_918516,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003355,src_002851,time_426017,execs_918516,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..24fb866cbf9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003355,src_002851,time_426017,execs_918516,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003357,src_001147,time_426395,execs_920955,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003357,src_001147,time_426395,execs_920955,op_havoc,rep_2 new file mode 100644 index 00000000000..6faae16266f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003357,src_001147,time_426395,execs_920955,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003358,src_001147,time_426404,execs_921015,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003358,src_001147,time_426404,execs_921015,op_havoc,rep_2 new file mode 100644 index 00000000000..cf774083fee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003358,src_001147,time_426404,execs_921015,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003359,src_001147,time_426526,execs_921864,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003359,src_001147,time_426526,execs_921864,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..b6f8be455ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003359,src_001147,time_426526,execs_921864,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003360,src_000520,time_426769,execs_923603,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003360,src_000520,time_426769,execs_923603,op_havoc,rep_11 new file mode 100644 index 00000000000..1d1fc91ea38 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003360,src_000520,time_426769,execs_923603,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003361,src_002981,time_426875,execs_924331,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003361,src_002981,time_426875,execs_924331,op_havoc,rep_8 new file mode 100644 index 00000000000..fcd79338572 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003361,src_002981,time_426875,execs_924331,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003362,src_002981,time_426983,execs_925052,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003362,src_002981,time_426983,execs_925052,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..0afea7c1834 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003362,src_002981,time_426983,execs_925052,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003363,src_002981,time_426995,execs_925117,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003363,src_002981,time_426995,execs_925117,op_havoc,rep_5 new file mode 100644 index 00000000000..f2a58d56ea2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003363,src_002981,time_426995,execs_925117,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003367,src_002981,time_427234,execs_926711,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003367,src_002981,time_427234,execs_926711,op_havoc,rep_8 new file mode 100644 index 00000000000..ff86f504214 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003367,src_002981,time_427234,execs_926711,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003369,src_002981,time_428081,execs_932180,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003369,src_002981,time_428081,execs_932180,op_havoc,rep_6 new file mode 100644 index 00000000000..01de9694138 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003369,src_002981,time_428081,execs_932180,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003370,src_002981,time_428326,execs_933772,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003370,src_002981,time_428326,execs_933772,op_havoc,rep_7 new file mode 100644 index 00000000000..1f42acbd147 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003370,src_002981,time_428326,execs_933772,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003372,src_003341,time_428697,execs_935575,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003372,src_003341,time_428697,execs_935575,op_havoc,rep_2 new file mode 100644 index 00000000000..198c727f4fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003372,src_003341,time_428697,execs_935575,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003373,src_003341,time_428715,execs_935621,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003373,src_003341,time_428715,execs_935621,op_havoc,rep_1 new file mode 100644 index 00000000000..bf99e394fe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003373,src_003341,time_428715,execs_935621,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003375,src_003341,time_428843,execs_935930,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003375,src_003341,time_428843,execs_935930,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..5089473c774 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003375,src_003341,time_428843,execs_935930,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003377,src_003341,time_428972,execs_936246,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003377,src_003341,time_428972,execs_936246,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..b94bfafd1b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003377,src_003341,time_428972,execs_936246,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003378,src_003341,time_429012,execs_936337,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003378,src_003341,time_429012,execs_936337,op_havoc,rep_1 new file mode 100644 index 00000000000..c85970e99da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003378,src_003341,time_429012,execs_936337,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003379,src_003341,time_430071,execs_938884,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003379,src_003341,time_430071,execs_938884,op_havoc,rep_4 new file mode 100644 index 00000000000..f7e37519e88 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003379,src_003341,time_430071,execs_938884,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003380,src_003341,time_430456,execs_939829,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003380,src_003341,time_430456,execs_939829,op_havoc,rep_1 new file mode 100644 index 00000000000..ec4a40b6819 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003380,src_003341,time_430456,execs_939829,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003381,src_003341,time_430611,execs_940202,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003381,src_003341,time_430611,execs_940202,op_havoc,rep_4 new file mode 100644 index 00000000000..a86a2839fc5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003381,src_003341,time_430611,execs_940202,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003385,src_002994,time_432731,execs_945754,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003385,src_002994,time_432731,execs_945754,op_havoc,rep_1 new file mode 100644 index 00000000000..7314d703192 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003385,src_002994,time_432731,execs_945754,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003392,src_002683,time_433817,execs_950432,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003392,src_002683,time_433817,execs_950432,op_havoc,rep_15 new file mode 100644 index 00000000000..84cd91fdbae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003392,src_002683,time_433817,execs_950432,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003393,src_002683,time_434087,execs_951999,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003393,src_002683,time_434087,execs_951999,op_havoc,rep_12 new file mode 100644 index 00000000000..d86519c4bc8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003393,src_002683,time_434087,execs_951999,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003394,src_002683,time_434198,execs_952677,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003394,src_002683,time_434198,execs_952677,op_havoc,rep_9 new file mode 100644 index 00000000000..1cc97d87002 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003394,src_002683,time_434198,execs_952677,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003395,src_002683,time_434254,execs_953007,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003395,src_002683,time_434254,execs_953007,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..47f83b365f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003395,src_002683,time_434254,execs_953007,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003396,src_002683,time_434291,execs_953231,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003396,src_002683,time_434291,execs_953231,op_havoc,rep_15 new file mode 100644 index 00000000000..4cdb8961c6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003396,src_002683,time_434291,execs_953231,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003400,src_002683,time_434530,execs_954681,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003400,src_002683,time_434530,execs_954681,op_havoc,rep_10 new file mode 100644 index 00000000000..160c57dd81c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003400,src_002683,time_434530,execs_954681,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003403,src_002683,time_434895,execs_956894,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003403,src_002683,time_434895,execs_956894,op_havoc,rep_16 new file mode 100644 index 00000000000..853a7637052 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003403,src_002683,time_434895,execs_956894,op_havoc,rep_16 @@ -0,0 +1,2 @@ +ÿ:/6eL +ÿ中#NN#N qQs)[4h#N#N qQs)[4h#N qQs)[4h#N#N qQs)[4hqQ©~m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003404,src_002683,time_435030,execs_957694,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003404,src_002683,time_435030,execs_957694,op_havoc,rep_6 new file mode 100644 index 00000000000..18945839a0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003404,src_002683,time_435030,execs_957694,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003408,src_002333,time_435266,execs_958999,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003408,src_002333,time_435266,execs_958999,op_havoc,rep_5 new file mode 100644 index 00000000000..e4025627fae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003408,src_002333,time_435266,execs_958999,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003409,src_002333,time_435315,execs_959324,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003409,src_002333,time_435315,execs_959324,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..fe0fed235d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003409,src_002333,time_435315,execs_959324,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003410,src_002333,time_435407,execs_959914,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003410,src_002333,time_435407,execs_959914,op_havoc,rep_5 new file mode 100644 index 00000000000..dbab04ddc11 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003410,src_002333,time_435407,execs_959914,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003411,src_002333,time_435777,execs_962368,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003411,src_002333,time_435777,execs_962368,op_havoc,rep_7 new file mode 100644 index 00000000000..4a4e0cfcde0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003411,src_002333,time_435777,execs_962368,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003412,src_002333,time_436409,execs_966618,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003412,src_002333,time_436409,execs_966618,op_havoc,rep_6 new file mode 100644 index 00000000000..c855202cda7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003412,src_002333,time_436409,execs_966618,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003416,src_003138,time_436897,execs_969686,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003416,src_003138,time_436897,execs_969686,op_havoc,rep_16 new file mode 100644 index 00000000000..dbc36a2a661 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003416,src_003138,time_436897,execs_969686,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003418,src_003138,time_436980,execs_970128,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003418,src_003138,time_436980,execs_970128,op_havoc,rep_9 new file mode 100644 index 00000000000..228715d1c1e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003418,src_003138,time_436980,execs_970128,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003419,src_003138,time_436988,execs_970166,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003419,src_003138,time_436988,execs_970166,op_havoc,rep_12 new file mode 100644 index 00000000000..f366eedd182 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003419,src_003138,time_436988,execs_970166,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003420,src_003138,time_437077,execs_970682,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003420,src_003138,time_437077,execs_970682,op_havoc,rep_12 new file mode 100644 index 00000000000..6fb1aa22310 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003420,src_003138,time_437077,execs_970682,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003421,src_003138,time_437365,execs_972221,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003421,src_003138,time_437365,execs_972221,op_havoc,rep_14 new file mode 100644 index 00000000000..eeb1aed1ca0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003421,src_003138,time_437365,execs_972221,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003423,src_003138,time_437985,execs_975602,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003423,src_003138,time_437985,execs_975602,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..6b03896ad68 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003423,src_003138,time_437985,execs_975602,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003425,src_003138,time_438414,execs_977935,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003425,src_003138,time_438414,execs_977935,op_havoc,rep_6 new file mode 100644 index 00000000000..cd9dc436c43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003425,src_003138,time_438414,execs_977935,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003426,src_001841,time_438669,execs_979542,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003426,src_001841,time_438669,execs_979542,op_havoc,rep_3 new file mode 100644 index 00000000000..497bf2506a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003426,src_001841,time_438669,execs_979542,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003427,src_001841,time_438675,execs_979591,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003427,src_001841,time_438675,execs_979591,op_havoc,rep_4 new file mode 100644 index 00000000000..763a2184fd5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003427,src_001841,time_438675,execs_979591,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003431,src_001354,time_439104,execs_981788,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003431,src_001354,time_439104,execs_981788,op_havoc,rep_1 new file mode 100644 index 00000000000..92436f55354 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003431,src_001354,time_439104,execs_981788,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003432,src_001354,time_439119,execs_981857,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003432,src_001354,time_439119,execs_981857,op_havoc,rep_3 new file mode 100644 index 00000000000..a64f2c41e50 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003432,src_001354,time_439119,execs_981857,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003433,src_001354,time_439122,execs_981866,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003433,src_001354,time_439122,execs_981866,op_havoc,rep_6 new file mode 100644 index 00000000000..21cdafd0748 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003433,src_001354,time_439122,execs_981866,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003437,src_001354,time_439508,execs_983666,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003437,src_001354,time_439508,execs_983666,op_havoc,rep_7 new file mode 100644 index 00000000000..4cfdc33c1cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003437,src_001354,time_439508,execs_983666,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003439,src_001354,time_440000,execs_985887,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003439,src_001354,time_440000,execs_985887,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..1f3a9ff5115 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003439,src_001354,time_440000,execs_985887,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003441,src_001354,time_440069,execs_986158,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003441,src_001354,time_440069,execs_986158,op_havoc,rep_6 new file mode 100644 index 00000000000..331441571ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003441,src_001354,time_440069,execs_986158,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003442,src_001354,time_440119,execs_986325,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003442,src_001354,time_440119,execs_986325,op_havoc,rep_4 new file mode 100644 index 00000000000..aafb10cca7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003442,src_001354,time_440119,execs_986325,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003443,src_001354,time_440271,execs_987036,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003443,src_001354,time_440271,execs_987036,op_havoc,rep_8 new file mode 100644 index 00000000000..89f13e3fac5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003443,src_001354,time_440271,execs_987036,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003445,src_001354,time_440443,execs_987808,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003445,src_001354,time_440443,execs_987808,op_havoc,rep_7 new file mode 100644 index 00000000000..7d5201d09af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003445,src_001354,time_440443,execs_987808,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003449,src_001354,time_441041,execs_990605,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003449,src_001354,time_441041,execs_990605,op_havoc,rep_4 new file mode 100644 index 00000000000..83c92a987a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003449,src_001354,time_441041,execs_990605,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003450,src_001354,time_441201,execs_991354,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003450,src_001354,time_441201,execs_991354,op_havoc,rep_6 new file mode 100644 index 00000000000..6ed6b96fae5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003450,src_001354,time_441201,execs_991354,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003451,src_001354,time_441267,execs_991689,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003451,src_001354,time_441267,execs_991689,op_havoc,rep_8 new file mode 100644 index 00000000000..474aad51a66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003451,src_001354,time_441267,execs_991689,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003454,src_002684,time_449471,execs_995565,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003454,src_002684,time_449471,execs_995565,op_havoc,rep_7 new file mode 100644 index 00000000000..07e9f6a66d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003454,src_002684,time_449471,execs_995565,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003455,src_002684,time_449606,execs_996468,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003455,src_002684,time_449606,execs_996468,op_havoc,rep_4 new file mode 100644 index 00000000000..b40da4387ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003455,src_002684,time_449606,execs_996468,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003456,src_002684,time_449672,execs_996914,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003456,src_002684,time_449672,execs_996914,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..a7529989184 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003456,src_002684,time_449672,execs_996914,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003457,src_002684,time_449981,execs_998970,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003457,src_002684,time_449981,execs_998970,op_havoc,rep_6 new file mode 100644 index 00000000000..ae1888168c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003457,src_002684,time_449981,execs_998970,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003459,src_002684,time_450664,execs_1003614,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003459,src_002684,time_450664,execs_1003614,op_havoc,rep_7 new file mode 100644 index 00000000000..a3e19f95966 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003459,src_002684,time_450664,execs_1003614,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003460,src_000577,time_450911,execs_1005236,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003460,src_000577,time_450911,execs_1005236,op_havoc,rep_1 new file mode 100644 index 00000000000..a2bdbe57695 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003460,src_000577,time_450911,execs_1005236,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003461,src_000577,time_450997,execs_1005755,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003461,src_000577,time_450997,execs_1005755,op_havoc,rep_2 new file mode 100644 index 00000000000..c983a437105 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003461,src_000577,time_450997,execs_1005755,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003462,src_000858,time_451164,execs_1006591,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003462,src_000858,time_451164,execs_1006591,op_havoc,rep_4 new file mode 100644 index 00000000000..9e1086c739a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003462,src_000858,time_451164,execs_1006591,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003463,src_003210,time_451263,execs_1007193,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003463,src_003210,time_451263,execs_1007193,op_havoc,rep_3 new file mode 100644 index 00000000000..6cc95dc08c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003463,src_003210,time_451263,execs_1007193,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003466,src_003210,time_451377,execs_1008010,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003466,src_003210,time_451377,execs_1008010,op_havoc,rep_8 new file mode 100644 index 00000000000..f6a802bd8d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003466,src_003210,time_451377,execs_1008010,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003467,src_003210,time_451380,execs_1008028,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003467,src_003210,time_451380,execs_1008028,op_havoc,rep_5 new file mode 100644 index 00000000000..fdfa2a5cda1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003467,src_003210,time_451380,execs_1008028,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003468,src_003210,time_451452,execs_1008539,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003468,src_003210,time_451452,execs_1008539,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..ae47679d770 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003468,src_003210,time_451452,execs_1008539,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003472,src_003210,time_452400,execs_1015218,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003472,src_003210,time_452400,execs_1015218,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..103564d9198 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003472,src_003210,time_452400,execs_1015218,op_havoc,rep_7,+cov @@ -0,0 +1 @@ +y´ó‚¶mp:]0;Myyyyyyyyyyyyyyyyyyyó„@„„„„„„„[[[;9l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003473,src_003458,time_452685,execs_1017197,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003473,src_003458,time_452685,execs_1017197,op_havoc,rep_2 new file mode 100644 index 00000000000..f418c9122a9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003473,src_003458,time_452685,execs_1017197,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003474,src_003458,time_452699,execs_1017278,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003474,src_003458,time_452699,execs_1017278,op_havoc,rep_7 new file mode 100644 index 00000000000..31797bb34f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003474,src_003458,time_452699,execs_1017278,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003475,src_003458,time_452714,execs_1017374,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003475,src_003458,time_452714,execs_1017374,op_havoc,rep_3 new file mode 100644 index 00000000000..edf5cccfcc2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003475,src_003458,time_452714,execs_1017374,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003476,src_003458,time_452749,execs_1017560,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003476,src_003458,time_452749,execs_1017560,op_havoc,rep_8 new file mode 100644 index 00000000000..4b7396375f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003476,src_003458,time_452749,execs_1017560,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003477,src_003458,time_452762,execs_1017643,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003477,src_003458,time_452762,execs_1017643,op_havoc,rep_5 new file mode 100644 index 00000000000..44df80d1449 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003477,src_003458,time_452762,execs_1017643,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003478,src_003458,time_452853,execs_1018223,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003478,src_003458,time_452853,execs_1018223,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..f387a832ab0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003478,src_003458,time_452853,execs_1018223,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003481,src_003458,time_453343,execs_1021388,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003481,src_003458,time_453343,execs_1021388,op_havoc,rep_8 new file mode 100644 index 00000000000..3962075a236 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003481,src_003458,time_453343,execs_1021388,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003483,src_003458,time_454104,execs_1026240,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003483,src_003458,time_454104,execs_1026240,op_havoc,rep_7 new file mode 100644 index 00000000000..279649154d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003483,src_003458,time_454104,execs_1026240,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003485,src_002196,time_454270,execs_1027335,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003485,src_002196,time_454270,execs_1027335,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..5ef5f262b3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003485,src_002196,time_454270,execs_1027335,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003486,src_002196,time_454283,execs_1027425,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003486,src_002196,time_454283,execs_1027425,op_havoc,rep_4 new file mode 100644 index 00000000000..9351517d32a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003486,src_002196,time_454283,execs_1027425,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003488,src_002196,time_454419,execs_1028386,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003488,src_002196,time_454419,execs_1028386,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..f2ebe5111e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003488,src_002196,time_454419,execs_1028386,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003489,src_002196,time_454590,execs_1029586,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003489,src_002196,time_454590,execs_1029586,op_havoc,rep_4 new file mode 100644 index 00000000000..e0040cb72ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003489,src_002196,time_454590,execs_1029586,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003490,src_002196,time_455149,execs_1033445,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003490,src_002196,time_455149,execs_1033445,op_havoc,rep_2 new file mode 100644 index 00000000000..540dbb0d30a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003490,src_002196,time_455149,execs_1033445,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003492,src_001989,time_456034,execs_1037500,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003492,src_001989,time_456034,execs_1037500,op_havoc,rep_10 new file mode 100644 index 00000000000..4de7b473404 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003492,src_001989,time_456034,execs_1037500,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003494,src_002723,time_456560,execs_1039495,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003494,src_002723,time_456560,execs_1039495,op_havoc,rep_1 new file mode 100644 index 00000000000..e72a5d32f0b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003494,src_002723,time_456560,execs_1039495,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003495,src_002723,time_456577,execs_1039616,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003495,src_002723,time_456577,execs_1039616,op_havoc,rep_3 new file mode 100644 index 00000000000..8a61d92e322 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003495,src_002723,time_456577,execs_1039616,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003496,src_002723,time_456632,execs_1039988,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003496,src_002723,time_456632,execs_1039988,op_havoc,rep_8 new file mode 100644 index 00000000000..d85bedd0c87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003496,src_002723,time_456632,execs_1039988,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003497,src_002723,time_456676,execs_1040242,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003497,src_002723,time_456676,execs_1040242,op_havoc,rep_3 new file mode 100644 index 00000000000..6e6ae08c354 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003497,src_002723,time_456676,execs_1040242,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003498,src_002723,time_456776,execs_1040903,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003498,src_002723,time_456776,execs_1040903,op_havoc,rep_3 new file mode 100644 index 00000000000..6058a0efe02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003498,src_002723,time_456776,execs_1040903,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003499,src_002723,time_456982,execs_1042196,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003499,src_002723,time_456982,execs_1042196,op_havoc,rep_3 new file mode 100644 index 00000000000..1d084b229c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003499,src_002723,time_456982,execs_1042196,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003500,src_002723,time_457088,execs_1042876,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003500,src_002723,time_457088,execs_1042876,op_havoc,rep_2 new file mode 100644 index 00000000000..04a60589db7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003500,src_002723,time_457088,execs_1042876,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003501,src_002723,time_457245,execs_1043929,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003501,src_002723,time_457245,execs_1043929,op_havoc,rep_5 new file mode 100644 index 00000000000..b5dc3ad20b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003501,src_002723,time_457245,execs_1043929,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003502,src_002723,time_457409,execs_1045007,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003502,src_002723,time_457409,execs_1045007,op_havoc,rep_3 new file mode 100644 index 00000000000..da964ed8572 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003502,src_002723,time_457409,execs_1045007,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003503,src_002723,time_457432,execs_1045138,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003503,src_002723,time_457432,execs_1045138,op_havoc,rep_5 new file mode 100644 index 00000000000..0ea586d5b3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003503,src_002723,time_457432,execs_1045138,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003505,src_000604,time_458159,execs_1049959,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003505,src_000604,time_458159,execs_1049959,op_havoc,rep_12 new file mode 100644 index 00000000000..990267105cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003505,src_000604,time_458159,execs_1049959,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003506,src_000604,time_458192,execs_1050172,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003506,src_000604,time_458192,execs_1050172,op_havoc,rep_7 new file mode 100644 index 00000000000..50288e1fdd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003506,src_000604,time_458192,execs_1050172,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003507,src_003219,time_458468,execs_1052022,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003507,src_003219,time_458468,execs_1052022,op_havoc,rep_4 new file mode 100644 index 00000000000..477e37073c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003507,src_003219,time_458468,execs_1052022,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003508,src_003219,time_458491,execs_1052156,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003508,src_003219,time_458491,execs_1052156,op_havoc,rep_2 new file mode 100644 index 00000000000..df81a337676 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003508,src_003219,time_458491,execs_1052156,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003509,src_003219,time_458578,execs_1052655,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003509,src_003219,time_458578,execs_1052655,op_havoc,rep_4 new file mode 100644 index 00000000000..ed24a1b3a4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003509,src_003219,time_458578,execs_1052655,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003510,src_003219,time_458746,execs_1053673,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003510,src_003219,time_458746,execs_1053673,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..be6c4a65fcc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003510,src_003219,time_458746,execs_1053673,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003511,src_003219,time_459039,execs_1055474,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003511,src_003219,time_459039,execs_1055474,op_havoc,rep_4 new file mode 100644 index 00000000000..7c104963c5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003511,src_003219,time_459039,execs_1055474,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003513,src_003219,time_459481,execs_1058181,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003513,src_003219,time_459481,execs_1058181,op_havoc,rep_3 new file mode 100644 index 00000000000..c95a5e6f86d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003513,src_003219,time_459481,execs_1058181,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003514,src_003219,time_459485,execs_1058207,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003514,src_003219,time_459485,execs_1058207,op_havoc,rep_4 new file mode 100644 index 00000000000..68cc0f1d001 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003514,src_003219,time_459485,execs_1058207,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003515,src_003219,time_459836,execs_1060333,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003515,src_003219,time_459836,execs_1060333,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..f11323e93ff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003515,src_003219,time_459836,execs_1060333,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003517,src_000625,time_460100,execs_1061975,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003517,src_000625,time_460100,execs_1061975,op_havoc,rep_10 new file mode 100644 index 00000000000..cb4d2dc77d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003517,src_000625,time_460100,execs_1061975,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003518,src_000625,time_460180,execs_1062471,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003518,src_000625,time_460180,execs_1062471,op_havoc,rep_3 new file mode 100644 index 00000000000..8281100f3fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003518,src_000625,time_460180,execs_1062471,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003519,src_003485,time_460284,execs_1063174,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003519,src_003485,time_460284,execs_1063174,op_havoc,rep_2 new file mode 100644 index 00000000000..93bf7ae4f6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003519,src_003485,time_460284,execs_1063174,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003522,src_002331,time_460666,execs_1065866,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003522,src_002331,time_460666,execs_1065866,op_havoc,rep_16 new file mode 100644 index 00000000000..bfeb9a5eebf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003522,src_002331,time_460666,execs_1065866,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003523,src_002331,time_460702,execs_1066079,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003523,src_002331,time_460702,execs_1066079,op_havoc,rep_10 new file mode 100644 index 00000000000..0ff6d4269a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003523,src_002331,time_460702,execs_1066079,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003525,src_002331,time_460865,execs_1067052,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003525,src_002331,time_460865,execs_1067052,op_havoc,rep_11 new file mode 100644 index 00000000000..4de6a716f18 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003525,src_002331,time_460865,execs_1067052,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003531,src_002331,time_461662,execs_1071840,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003531,src_002331,time_461662,execs_1071840,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..effca3a5f05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003531,src_002331,time_461662,execs_1071840,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003533,src_002331,time_461884,execs_1073129,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003533,src_002331,time_461884,execs_1073129,op_havoc,rep_6 new file mode 100644 index 00000000000..9d7f21fa340 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003533,src_002331,time_461884,execs_1073129,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003540,src_003238,time_462417,execs_1076453,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003540,src_003238,time_462417,execs_1076453,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..fbf0ad6bf5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003540,src_003238,time_462417,execs_1076453,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003541,src_003238,time_462499,execs_1077084,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003541,src_003238,time_462499,execs_1077084,op_havoc,rep_2 new file mode 100644 index 00000000000..154a486c760 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003541,src_003238,time_462499,execs_1077084,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003543,src_003238,time_462597,execs_1077808,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003543,src_003238,time_462597,execs_1077808,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..e42a5df8bb2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003543,src_003238,time_462597,execs_1077808,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003544,src_003238,time_462620,execs_1077977,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003544,src_003238,time_462620,execs_1077977,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..e5daa543d33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003544,src_003238,time_462620,execs_1077977,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003545,src_003238,time_462643,execs_1078142,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003545,src_003238,time_462643,execs_1078142,op_havoc,rep_2 new file mode 100644 index 00000000000..9a55d8bde67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003545,src_003238,time_462643,execs_1078142,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003546,src_003238,time_462709,execs_1078637,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003546,src_003238,time_462709,execs_1078637,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..a2a5a682f09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003546,src_003238,time_462709,execs_1078637,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003549,src_003238,time_462774,execs_1079110,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003549,src_003238,time_462774,execs_1079110,op_havoc,rep_2 new file mode 100644 index 00000000000..6b03f189bea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003549,src_003238,time_462774,execs_1079110,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003553,src_003238,time_463406,execs_1083716,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003553,src_003238,time_463406,execs_1083716,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..1885ce7db0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003553,src_003238,time_463406,execs_1083716,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003554,src_003120,time_463729,execs_1086122,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003554,src_003120,time_463729,execs_1086122,op_havoc,rep_2 new file mode 100644 index 00000000000..6c56ac5adec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003554,src_003120,time_463729,execs_1086122,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003556,src_001467,time_463909,execs_1087304,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003556,src_001467,time_463909,execs_1087304,op_havoc,rep_15 new file mode 100644 index 00000000000..62a56e60cf4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003556,src_001467,time_463909,execs_1087304,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003557,src_001467,time_464033,execs_1088013,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003557,src_001467,time_464033,execs_1088013,op_havoc,rep_15 new file mode 100644 index 00000000000..0f62aa3128a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003557,src_001467,time_464033,execs_1088013,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003558,src_001467,time_464109,execs_1088458,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003558,src_001467,time_464109,execs_1088458,op_havoc,rep_6 new file mode 100644 index 00000000000..9560153a806 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003558,src_001467,time_464109,execs_1088458,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003560,src_001467,time_465048,execs_1093935,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003560,src_001467,time_465048,execs_1093935,op_havoc,rep_11 new file mode 100644 index 00000000000..be3c0901397 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003560,src_001467,time_465048,execs_1093935,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003561,src_001467,time_465169,execs_1094608,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003561,src_001467,time_465169,execs_1094608,op_havoc,rep_16 new file mode 100644 index 00000000000..b23e7e729c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003561,src_001467,time_465169,execs_1094608,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003562,src_001467,time_465513,execs_1096555,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003562,src_001467,time_465513,execs_1096555,op_havoc,rep_16 new file mode 100644 index 00000000000..bc6ad583919 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003562,src_001467,time_465513,execs_1096555,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003563,src_001467,time_465526,execs_1096637,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003563,src_001467,time_465526,execs_1096637,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..03f9090b4a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003563,src_001467,time_465526,execs_1096637,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003564,src_000651,time_465617,execs_1097149,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003564,src_000651,time_465617,execs_1097149,op_havoc,rep_4 new file mode 100644 index 00000000000..9281d3bab9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003564,src_000651,time_465617,execs_1097149,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003566,src_002695,time_465803,execs_1098399,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003566,src_002695,time_465803,execs_1098399,op_havoc,rep_2 new file mode 100644 index 00000000000..28b1eba8503 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003566,src_002695,time_465803,execs_1098399,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003568,src_001309,time_466216,execs_1101161,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003568,src_001309,time_466216,execs_1101161,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..4497d915a21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003568,src_001309,time_466216,execs_1101161,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003569,src_000670,time_466333,execs_1101884,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003569,src_000670,time_466333,execs_1101884,op_havoc,rep_5 new file mode 100644 index 00000000000..adb2def66fe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003569,src_000670,time_466333,execs_1101884,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003570,src_000670,time_466361,execs_1102044,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003570,src_000670,time_466361,execs_1102044,op_havoc,rep_12 new file mode 100644 index 00000000000..f06fc36290c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003570,src_000670,time_466361,execs_1102044,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003572,src_000676,time_466603,execs_1103711,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003572,src_000676,time_466603,execs_1103711,op_havoc,rep_4 new file mode 100644 index 00000000000..46d237d11f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003572,src_000676,time_466603,execs_1103711,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003573,src_003246,time_466766,execs_1104890,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003573,src_003246,time_466766,execs_1104890,op_havoc,rep_2 new file mode 100644 index 00000000000..50177e6ce85 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003573,src_003246,time_466766,execs_1104890,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003575,src_003265,time_467301,execs_1105791,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003575,src_003265,time_467301,execs_1105791,op_havoc,rep_1 new file mode 100644 index 00000000000..eb5a5736c72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003575,src_003265,time_467301,execs_1105791,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003576,src_003265,time_467307,execs_1105836,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003576,src_003265,time_467307,execs_1105836,op_havoc,rep_2 new file mode 100644 index 00000000000..471cca06ac6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003576,src_003265,time_467307,execs_1105836,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003577,src_002875,time_467471,execs_1107006,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003577,src_002875,time_467471,execs_1107006,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..aac5a855f42 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003577,src_002875,time_467471,execs_1107006,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003581,src_002875,time_467516,execs_1107264,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003581,src_002875,time_467516,execs_1107264,op_havoc,rep_7 new file mode 100644 index 00000000000..26e185bcf69 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003581,src_002875,time_467516,execs_1107264,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003582,src_002875,time_467538,execs_1107405,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003582,src_002875,time_467538,execs_1107405,op_havoc,rep_12 new file mode 100644 index 00000000000..4d3f478568c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003582,src_002875,time_467538,execs_1107405,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003584,src_002875,time_467818,execs_1108895,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003584,src_002875,time_467818,execs_1108895,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..fdb1ace42f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003584,src_002875,time_467818,execs_1108895,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003585,src_002875,time_467928,execs_1109557,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003585,src_002875,time_467928,execs_1109557,op_havoc,rep_13 new file mode 100644 index 00000000000..51b231ec268 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003585,src_002875,time_467928,execs_1109557,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003587,src_002875,time_468142,execs_1110811,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003587,src_002875,time_468142,execs_1110811,op_havoc,rep_13 new file mode 100644 index 00000000000..610b85a7b27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003587,src_002875,time_468142,execs_1110811,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003588,src_002875,time_468348,execs_1112081,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003588,src_002875,time_468348,execs_1112081,op_havoc,rep_15 new file mode 100644 index 00000000000..995e6b40778 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003588,src_002875,time_468348,execs_1112081,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003589,src_002875,time_468553,execs_1113321,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003589,src_002875,time_468553,execs_1113321,op_havoc,rep_13 new file mode 100644 index 00000000000..5b32f6d94ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003589,src_002875,time_468553,execs_1113321,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003590,src_002875,time_468554,execs_1113329,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003590,src_002875,time_468554,execs_1113329,op_havoc,rep_6 new file mode 100644 index 00000000000..476d88cb19c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003590,src_002875,time_468554,execs_1113329,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003594,src_002875,time_468900,execs_1115404,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003594,src_002875,time_468900,execs_1115404,op_havoc,rep_12 new file mode 100644 index 00000000000..e38f249ad5a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003594,src_002875,time_468900,execs_1115404,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003595,src_002875,time_468980,execs_1115942,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003595,src_002875,time_468980,execs_1115942,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..2550f88a3ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003595,src_002875,time_468980,execs_1115942,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003596,src_002875,time_469007,execs_1116077,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003596,src_002875,time_469007,execs_1116077,op_havoc,rep_16 new file mode 100644 index 00000000000..106aad5e532 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003596,src_002875,time_469007,execs_1116077,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003597,src_003119,time_469180,execs_1117140,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003597,src_003119,time_469180,execs_1117140,op_havoc,rep_5 new file mode 100644 index 00000000000..f93aa3e897f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003597,src_003119,time_469180,execs_1117140,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003598,src_003119,time_469256,execs_1117536,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003598,src_003119,time_469256,execs_1117536,op_havoc,rep_4 new file mode 100644 index 00000000000..b22b27059c0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003598,src_003119,time_469256,execs_1117536,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003599,src_003119,time_469263,execs_1117571,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003599,src_003119,time_469263,execs_1117571,op_havoc,rep_8 new file mode 100644 index 00000000000..4365cba6d0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003599,src_003119,time_469263,execs_1117571,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003600,src_003119,time_469282,execs_1117658,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003600,src_003119,time_469282,execs_1117658,op_havoc,rep_14 new file mode 100644 index 00000000000..8c37305553b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003600,src_003119,time_469282,execs_1117658,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003601,src_003119,time_469517,execs_1118717,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003601,src_003119,time_469517,execs_1118717,op_havoc,rep_13 new file mode 100644 index 00000000000..d492784960c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003601,src_003119,time_469517,execs_1118717,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003602,src_003119,time_469550,execs_1118734,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003602,src_003119,time_469550,execs_1118734,op_havoc,rep_15 new file mode 100644 index 00000000000..cb691ff06c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003602,src_003119,time_469550,execs_1118734,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003603,src_003119,time_470117,execs_1121659,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003603,src_003119,time_470117,execs_1121659,op_havoc,rep_13 new file mode 100644 index 00000000000..df387ba8bea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003603,src_003119,time_470117,execs_1121659,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003605,src_003119,time_470321,execs_1122607,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003605,src_003119,time_470321,execs_1122607,op_havoc,rep_15 new file mode 100644 index 00000000000..90f4df4c48b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003605,src_003119,time_470321,execs_1122607,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003606,src_003119,time_470509,execs_1123513,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003606,src_003119,time_470509,execs_1123513,op_havoc,rep_14 new file mode 100644 index 00000000000..8aaf4f0d441 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003606,src_003119,time_470509,execs_1123513,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003609,src_003119,time_470959,execs_1125737,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003609,src_003119,time_470959,execs_1125737,op_havoc,rep_15 new file mode 100644 index 00000000000..87cc509eb80 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003609,src_003119,time_470959,execs_1125737,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003610,src_003526,time_471310,execs_1127263,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003610,src_003526,time_471310,execs_1127263,op_havoc,rep_7 new file mode 100644 index 00000000000..5c3a6a91105 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003610,src_003526,time_471310,execs_1127263,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003612,src_003526,time_471473,execs_1128368,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003612,src_003526,time_471473,execs_1128368,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..6cdf5f8c760 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003612,src_003526,time_471473,execs_1128368,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003613,src_003526,time_471496,execs_1128505,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003613,src_003526,time_471496,execs_1128505,op_havoc,rep_3 new file mode 100644 index 00000000000..cbeb4c89edd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003613,src_003526,time_471496,execs_1128505,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003614,src_003526,time_471578,execs_1129048,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003614,src_003526,time_471578,execs_1129048,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..6d9b8a9281d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003614,src_003526,time_471578,execs_1129048,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003616,src_003526,time_471925,execs_1131231,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003616,src_003526,time_471925,execs_1131231,op_havoc,rep_8 new file mode 100644 index 00000000000..587f5df0882 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003616,src_003526,time_471925,execs_1131231,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003617,src_003526,time_471975,execs_1131544,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003617,src_003526,time_471975,execs_1131544,op_havoc,rep_5 new file mode 100644 index 00000000000..d4cf181284f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003617,src_003526,time_471975,execs_1131544,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003618,src_003526,time_472551,execs_1135380,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003618,src_003526,time_472551,execs_1135380,op_havoc,rep_5 new file mode 100644 index 00000000000..97290fa61d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003618,src_003526,time_472551,execs_1135380,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003622,src_000696,time_472980,execs_1138243,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003622,src_000696,time_472980,execs_1138243,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..2face8fbf6e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003622,src_000696,time_472980,execs_1138243,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003624,src_000696,time_474172,execs_1146493,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003624,src_000696,time_474172,execs_1146493,op_havoc,rep_7 new file mode 100644 index 00000000000..d8ad8460b9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003624,src_000696,time_474172,execs_1146493,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003625,src_001300,time_474418,execs_1148001,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003625,src_001300,time_474418,execs_1148001,op_havoc,rep_4 new file mode 100644 index 00000000000..4b08740b67c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003625,src_001300,time_474418,execs_1148001,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003626,src_003302,time_474558,execs_1148907,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003626,src_003302,time_474558,execs_1148907,op_havoc,rep_1 new file mode 100644 index 00000000000..7cc6bb84d71 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003626,src_003302,time_474558,execs_1148907,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003627,src_003302,time_474591,execs_1149148,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003627,src_003302,time_474591,execs_1149148,op_havoc,rep_2 new file mode 100644 index 00000000000..c14541b26ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003627,src_003302,time_474591,execs_1149148,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003628,src_003302,time_474788,execs_1150593,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003628,src_003302,time_474788,execs_1150593,op_havoc,rep_2 new file mode 100644 index 00000000000..9f91b7a2933 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003628,src_003302,time_474788,execs_1150593,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003629,src_003302,time_475048,execs_1152457,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003629,src_003302,time_475048,execs_1152457,op_havoc,rep_2 new file mode 100644 index 00000000000..57f672e738a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003629,src_003302,time_475048,execs_1152457,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003630,src_003302,time_475142,execs_1153153,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003630,src_003302,time_475142,execs_1153153,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..06f17fa29db Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003630,src_003302,time_475142,execs_1153153,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003631,src_003302,time_475181,execs_1153446,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003631,src_003302,time_475181,execs_1153446,op_havoc,rep_2 new file mode 100644 index 00000000000..d53bd3a74b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003631,src_003302,time_475181,execs_1153446,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003632,src_003302,time_475572,execs_1156327,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003632,src_003302,time_475572,execs_1156327,op_havoc,rep_2 new file mode 100644 index 00000000000..7cbb04ece4a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003632,src_003302,time_475572,execs_1156327,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003633,src_000712,time_475890,execs_1158621,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003633,src_000712,time_475890,execs_1158621,op_havoc,rep_2 new file mode 100644 index 00000000000..811b443e770 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003633,src_000712,time_475890,execs_1158621,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003635,src_000717,time_476199,execs_1160390,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003635,src_000717,time_476199,execs_1160390,op_havoc,rep_13 new file mode 100644 index 00000000000..421c54f077b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003635,src_000717,time_476199,execs_1160390,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003638,src_000717,time_476344,execs_1161297,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003638,src_000717,time_476344,execs_1161297,op_havoc,rep_14 new file mode 100644 index 00000000000..84b5a9e1bbd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003638,src_000717,time_476344,execs_1161297,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003640,src_000717,time_476653,execs_1162435,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003640,src_000717,time_476653,execs_1162435,op_havoc,rep_16 new file mode 100644 index 00000000000..7e5d3495374 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003640,src_000717,time_476653,execs_1162435,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003641,src_000717,time_476718,execs_1162804,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003641,src_000717,time_476718,execs_1162804,op_havoc,rep_14 new file mode 100644 index 00000000000..56b01b65738 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003641,src_000717,time_476718,execs_1162804,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003642,src_000717,time_476972,execs_1164247,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003642,src_000717,time_476972,execs_1164247,op_havoc,rep_16 new file mode 100644 index 00000000000..08db27bdd7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003642,src_000717,time_476972,execs_1164247,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003643,src_000717,time_477111,execs_1165103,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003643,src_000717,time_477111,execs_1165103,op_havoc,rep_6 new file mode 100644 index 00000000000..a6569272561 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003643,src_000717,time_477111,execs_1165103,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003644,src_000717,time_477230,execs_1165794,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003644,src_000717,time_477230,execs_1165794,op_havoc,rep_7 new file mode 100644 index 00000000000..0040c5a8d09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003644,src_000717,time_477230,execs_1165794,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003645,src_000717,time_477659,execs_1168335,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003645,src_000717,time_477659,execs_1168335,op_havoc,rep_7 new file mode 100644 index 00000000000..6ea23094e6f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003645,src_000717,time_477659,execs_1168335,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003646,src_000717,time_477795,execs_1169205,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003646,src_000717,time_477795,execs_1169205,op_havoc,rep_16 new file mode 100644 index 00000000000..d4522cf23ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003646,src_000717,time_477795,execs_1169205,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003648,src_002727,time_478019,execs_1170434,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003648,src_002727,time_478019,execs_1170434,op_havoc,rep_16 new file mode 100644 index 00000000000..abc11e380fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003648,src_002727,time_478019,execs_1170434,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003651,src_002727,time_478267,execs_1171598,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003651,src_002727,time_478267,execs_1171598,op_havoc,rep_7 new file mode 100644 index 00000000000..32134ae9a05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003651,src_002727,time_478267,execs_1171598,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003653,src_002727,time_478354,execs_1172053,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003653,src_002727,time_478354,execs_1172053,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..0d635b3ddff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003653,src_002727,time_478354,execs_1172053,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003654,src_002727,time_478535,execs_1172990,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003654,src_002727,time_478535,execs_1172990,op_havoc,rep_13 new file mode 100644 index 00000000000..8b13b6c222c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003654,src_002727,time_478535,execs_1172990,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003655,src_002727,time_478675,execs_1173714,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003655,src_002727,time_478675,execs_1173714,op_havoc,rep_15 new file mode 100644 index 00000000000..8b8c794e1e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003655,src_002727,time_478675,execs_1173714,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003657,src_002727,time_479518,execs_1178033,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003657,src_002727,time_479518,execs_1178033,op_havoc,rep_7 new file mode 100644 index 00000000000..ece226846e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003657,src_002727,time_479518,execs_1178033,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003658,src_002727,time_479795,execs_1179648,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003658,src_002727,time_479795,execs_1179648,op_havoc,rep_8 new file mode 100644 index 00000000000..9a50c01ac06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003658,src_002727,time_479795,execs_1179648,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003659,src_002727,time_479824,execs_1179787,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003659,src_002727,time_479824,execs_1179787,op_havoc,rep_15 new file mode 100644 index 00000000000..7a0f34b94dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003659,src_002727,time_479824,execs_1179787,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003660,src_001465,time_479935,execs_1180475,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003660,src_001465,time_479935,execs_1180475,op_havoc,rep_8 new file mode 100644 index 00000000000..0dea057a624 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003660,src_001465,time_479935,execs_1180475,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003662,src_003565,time_480172,execs_1181977,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003662,src_003565,time_480172,execs_1181977,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..d516dd69217 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003662,src_003565,time_480172,execs_1181977,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003664,src_003565,time_480204,execs_1182183,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003664,src_003565,time_480204,execs_1182183,op_havoc,rep_2 new file mode 100644 index 00000000000..2e92f1f575b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003664,src_003565,time_480204,execs_1182183,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003666,src_003565,time_480931,execs_1186799,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003666,src_003565,time_480931,execs_1186799,op_havoc,rep_2 new file mode 100644 index 00000000000..41693c991fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003666,src_003565,time_480931,execs_1186799,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003667,src_003565,time_481209,execs_1188516,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003667,src_003565,time_481209,execs_1188516,op_havoc,rep_2 new file mode 100644 index 00000000000..f7d904fad61 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003667,src_003565,time_481209,execs_1188516,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003675,src_003480,time_481894,execs_1192726,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003675,src_003480,time_481894,execs_1192726,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ced22c072e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003675,src_003480,time_481894,execs_1192726,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003676,src_003480,time_481896,execs_1192740,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003676,src_003480,time_481896,execs_1192740,op_havoc,rep_8 new file mode 100644 index 00000000000..9a0342329e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003676,src_003480,time_481896,execs_1192740,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003677,src_003480,time_482162,execs_1194285,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003677,src_003480,time_482162,execs_1194285,op_havoc,rep_8 new file mode 100644 index 00000000000..10ffe566ac1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003677,src_003480,time_482162,execs_1194285,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003678,src_003480,time_482196,execs_1194495,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003678,src_003480,time_482196,execs_1194495,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..a4e32ee11b8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003678,src_003480,time_482196,execs_1194495,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003679,src_003480,time_482290,execs_1195095,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003679,src_003480,time_482290,execs_1195095,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..8cca5427c8b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003679,src_003480,time_482290,execs_1195095,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003680,src_003480,time_482305,execs_1195191,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003680,src_003480,time_482305,execs_1195191,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..f3338e43fdd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003680,src_003480,time_482305,execs_1195191,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003681,src_003480,time_482347,execs_1195438,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003681,src_003480,time_482347,execs_1195438,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..c3bfbe12771 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003681,src_003480,time_482347,execs_1195438,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003682,src_003480,time_482362,execs_1195537,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003682,src_003480,time_482362,execs_1195537,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..df1b6b86f58 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003682,src_003480,time_482362,execs_1195537,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003684,src_003480,time_482927,execs_1199049,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003684,src_003480,time_482927,execs_1199049,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..f93d1912a7c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003684,src_003480,time_482927,execs_1199049,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003685,src_003480,time_483063,execs_1199929,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003685,src_003480,time_483063,execs_1199929,op_havoc,rep_6 new file mode 100644 index 00000000000..c492e2f9231 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003685,src_003480,time_483063,execs_1199929,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003687,src_003516,time_483394,execs_1202048,op_quick,pos_17,val_+3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003687,src_003516,time_483394,execs_1202048,op_quick,pos_17,val_+3,+cov new file mode 100644 index 00000000000..beada31ea87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003687,src_003516,time_483394,execs_1202048,op_quick,pos_17,val_+3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003688,src_003516,time_483396,execs_1202058,op_quick,pos_20,val_+3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003688,src_003516,time_483396,execs_1202058,op_quick,pos_20,val_+3,+cov new file mode 100644 index 00000000000..3545062420f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003688,src_003516,time_483396,execs_1202058,op_quick,pos_20,val_+3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003690,src_003516,time_483444,execs_1202429,op_int16,pos_20,val_+0,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003690,src_003516,time_483444,execs_1202429,op_int16,pos_20,val_+0,+cov new file mode 100644 index 00000000000..56858701b9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003690,src_003516,time_483444,execs_1202429,op_int16,pos_20,val_+0,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003691,src_003516,time_483450,execs_1202469,op_int32,pos_15,val_+32,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003691,src_003516,time_483450,execs_1202469,op_int32,pos_15,val_+32,+cov new file mode 100644 index 00000000000..118a0ed84f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003691,src_003516,time_483450,execs_1202469,op_int32,pos_15,val_+32,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003693,src_003516,time_483458,execs_1202529,op_int32,pos_17,val_+32,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003693,src_003516,time_483458,execs_1202529,op_int32,pos_17,val_+32,+cov new file mode 100644 index 00000000000..a945491a21d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003693,src_003516,time_483458,execs_1202529,op_int32,pos_17,val_+32,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003696,src_003516,time_483487,execs_1202733,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003696,src_003516,time_483487,execs_1202733,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..b5a2f4bc083 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003696,src_003516,time_483487,execs_1202733,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003697,src_003516,time_483527,execs_1203019,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003697,src_003516,time_483527,execs_1203019,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..fa673df4efa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003697,src_003516,time_483527,execs_1203019,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003698,src_003516,time_483543,execs_1203141,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003698,src_003516,time_483543,execs_1203141,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..a8c91b3f00d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003698,src_003516,time_483543,execs_1203141,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003702,src_003516,time_483741,execs_1204625,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003702,src_003516,time_483741,execs_1204625,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..14f607d6131 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003702,src_003516,time_483741,execs_1204625,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003703,src_003516,time_483797,execs_1205047,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003703,src_003516,time_483797,execs_1205047,op_havoc,rep_2 new file mode 100644 index 00000000000..2a5c2df2ced Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003703,src_003516,time_483797,execs_1205047,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003704,src_003516,time_484922,execs_1213551,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003704,src_003516,time_484922,execs_1213551,op_havoc,rep_2 new file mode 100644 index 00000000000..c1dfb04d2d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003704,src_003516,time_484922,execs_1213551,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003707,src_003516,time_485216,execs_1215715,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003707,src_003516,time_485216,execs_1215715,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..525700f400f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003707,src_003516,time_485216,execs_1215715,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003708,src_003516,time_485299,execs_1216346,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003708,src_003516,time_485299,execs_1216346,op_havoc,rep_2 new file mode 100644 index 00000000000..080b373eeb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003708,src_003516,time_485299,execs_1216346,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003709,src_003516,time_485609,execs_1218733,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003709,src_003516,time_485609,execs_1218733,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..296f410ed0b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003709,src_003516,time_485609,execs_1218733,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003711,src_003516,time_486392,execs_1224743,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003711,src_003516,time_486392,execs_1224743,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..8d87d39438b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003711,src_003516,time_486392,execs_1224743,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003715,src_003516,time_487212,execs_1230936,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003715,src_003516,time_487212,execs_1230936,op_havoc,rep_2 new file mode 100644 index 00000000000..bfb0f0157ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003715,src_003516,time_487212,execs_1230936,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003719,src_000733,time_488558,execs_1241210,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003719,src_000733,time_488558,execs_1241210,op_havoc,rep_2 new file mode 100644 index 00000000000..f11f871ca0b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003719,src_000733,time_488558,execs_1241210,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003720,src_003139,time_488657,execs_1241901,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003720,src_003139,time_488657,execs_1241901,op_havoc,rep_8 new file mode 100644 index 00000000000..241568bed2f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003720,src_003139,time_488657,execs_1241901,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003723,src_003388,time_488875,execs_1243099,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003723,src_003388,time_488875,execs_1243099,op_havoc,rep_14 new file mode 100644 index 00000000000..8f7945b8448 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003723,src_003388,time_488875,execs_1243099,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003728,src_003388,time_489117,execs_1244665,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003728,src_003388,time_489117,execs_1244665,op_havoc,rep_16 new file mode 100644 index 00000000000..57b7be63cc4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003728,src_003388,time_489117,execs_1244665,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003729,src_003388,time_489231,execs_1245411,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003729,src_003388,time_489231,execs_1245411,op_havoc,rep_8 new file mode 100644 index 00000000000..a30974a5399 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003729,src_003388,time_489231,execs_1245411,op_havoc,rep_8 @@ -0,0 +1 @@ +Woĵþ]6]#90î ]66]#90]80;=8o]HHHHHµµµHHHHHHHHHHHHHHHH6]¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨lo¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¬¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨2222222222222ĵl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003733,src_003388,time_489361,execs_1246223,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003733,src_003388,time_489361,execs_1246223,op_havoc,rep_10 new file mode 100644 index 00000000000..f2a3b4f4202 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003733,src_003388,time_489361,execs_1246223,op_havoc,rep_10 @@ -0,0 +1 @@ +Woĵþ]6]#90î ]66]#90î ]]#90î ]66]#90î ]66]#9d]#9ãî ]]#90î ]]#90î ]#90îÿ\80;6]]#90î ]66]#90î ]66]#9;loĵl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003740,src_003388,time_490249,execs_1251907,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003740,src_003388,time_490249,execs_1251907,op_havoc,rep_7 new file mode 100644 index 00000000000..8fba1180645 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003740,src_003388,time_490249,execs_1251907,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003742,src_000734,time_490396,execs_1252822,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003742,src_000734,time_490396,execs_1252822,op_havoc,rep_5 new file mode 100644 index 00000000000..b1f05ea4a0c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003742,src_000734,time_490396,execs_1252822,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003743,src_003417,time_490500,execs_1253511,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003743,src_003417,time_490500,execs_1253511,op_havoc,rep_7 new file mode 100644 index 00000000000..848d5877a43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003743,src_003417,time_490500,execs_1253511,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003744,src_003417,time_490581,execs_1254011,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003744,src_003417,time_490581,execs_1254011,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..e36b72e348b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003744,src_003417,time_490581,execs_1254011,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003746,src_003621,time_490986,execs_1256581,op_quick,pos_24,val_+2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003746,src_003621,time_490986,execs_1256581,op_quick,pos_24,val_+2 new file mode 100644 index 00000000000..717c547cf5a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003746,src_003621,time_490986,execs_1256581,op_quick,pos_24,val_+2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003755,src_003621,time_491112,execs_1257158,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003755,src_003621,time_491112,execs_1257158,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..10a74b491bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003755,src_003621,time_491112,execs_1257158,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003756,src_003621,time_491142,execs_1257297,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003756,src_003621,time_491142,execs_1257297,op_havoc,rep_6 new file mode 100644 index 00000000000..0c8829ee8be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003756,src_003621,time_491142,execs_1257297,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003759,src_003621,time_491194,execs_1257530,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003759,src_003621,time_491194,execs_1257530,op_havoc,rep_9 new file mode 100644 index 00000000000..2f8f8a12fa7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003759,src_003621,time_491194,execs_1257530,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003761,src_003621,time_491359,execs_1258209,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003761,src_003621,time_491359,execs_1258209,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..1ea08777482 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003761,src_003621,time_491359,execs_1258209,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003762,src_003621,time_491447,execs_1258556,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003762,src_003621,time_491447,execs_1258556,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..48150a75450 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003762,src_003621,time_491447,execs_1258556,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003763,src_003621,time_491490,execs_1258746,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003763,src_003621,time_491490,execs_1258746,op_havoc,rep_11 new file mode 100644 index 00000000000..11679cc5320 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003763,src_003621,time_491490,execs_1258746,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003765,src_003621,time_491569,execs_1259079,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003765,src_003621,time_491569,execs_1259079,op_havoc,rep_10 new file mode 100644 index 00000000000..a1f9fca9c7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003765,src_003621,time_491569,execs_1259079,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003766,src_003621,time_491578,execs_1259118,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003766,src_003621,time_491578,execs_1259118,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..717828278a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003766,src_003621,time_491578,execs_1259118,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003767,src_003621,time_491703,execs_1259674,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003767,src_003621,time_491703,execs_1259674,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..dec6f198e2c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003767,src_003621,time_491703,execs_1259674,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003769,src_003621,time_491897,execs_1260505,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003769,src_003621,time_491897,execs_1260505,op_havoc,rep_7 new file mode 100644 index 00000000000..1ef1453bf3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003769,src_003621,time_491897,execs_1260505,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003770,src_003621,time_491945,execs_1260689,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003770,src_003621,time_491945,execs_1260689,op_havoc,rep_13 new file mode 100644 index 00000000000..24a6303aebf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003770,src_003621,time_491945,execs_1260689,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003771,src_003621,time_491995,execs_1260915,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003771,src_003621,time_491995,execs_1260915,op_havoc,rep_14 new file mode 100644 index 00000000000..1e75dfffaf5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003771,src_003621,time_491995,execs_1260915,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003772,src_003621,time_492314,execs_1262268,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003772,src_003621,time_492314,execs_1262268,op_havoc,rep_12 new file mode 100644 index 00000000000..ae62968f7e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003772,src_003621,time_492314,execs_1262268,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003773,src_003621,time_492639,execs_1263641,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003773,src_003621,time_492639,execs_1263641,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..aa7cb75b2f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003773,src_003621,time_492639,execs_1263641,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003774,src_003621,time_492727,execs_1264017,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003774,src_003621,time_492727,execs_1264017,op_havoc,rep_15 new file mode 100644 index 00000000000..c0f860fd3bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003774,src_003621,time_492727,execs_1264017,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003775,src_003621,time_493034,execs_1265341,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003775,src_003621,time_493034,execs_1265341,op_havoc,rep_15 new file mode 100644 index 00000000000..fbfef92a660 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003775,src_003621,time_493034,execs_1265341,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003778,src_003621,time_493125,execs_1265722,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003778,src_003621,time_493125,execs_1265722,op_havoc,rep_10 new file mode 100644 index 00000000000..7153009331a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003778,src_003621,time_493125,execs_1265722,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003779,src_003621,time_493359,execs_1266755,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003779,src_003621,time_493359,execs_1266755,op_havoc,rep_6 new file mode 100644 index 00000000000..f5c7f86fc28 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003779,src_003621,time_493359,execs_1266755,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003781,src_003621,time_493394,execs_1266913,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003781,src_003621,time_493394,execs_1266913,op_havoc,rep_6 new file mode 100644 index 00000000000..7d370de01bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003781,src_003621,time_493394,execs_1266913,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003783,src_003621,time_493747,execs_1268451,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003783,src_003621,time_493747,execs_1268451,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..43c8c16deaf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003783,src_003621,time_493747,execs_1268451,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003785,src_003621,time_495088,execs_1274292,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003785,src_003621,time_495088,execs_1274292,op_havoc,rep_16 new file mode 100644 index 00000000000..3a4c15ec93b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003785,src_003621,time_495088,execs_1274292,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003787,src_003621,time_495253,execs_1274924,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003787,src_003621,time_495253,execs_1274924,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..c469d08e579 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003787,src_003621,time_495253,execs_1274924,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003788,src_003621,time_495422,execs_1275581,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003788,src_003621,time_495422,execs_1275581,op_havoc,rep_12 new file mode 100644 index 00000000000..36d8eaae82e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003788,src_003621,time_495422,execs_1275581,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003789,src_003621,time_495778,execs_1277024,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003789,src_003621,time_495778,execs_1277024,op_havoc,rep_15 new file mode 100644 index 00000000000..333d9d3b76b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003789,src_003621,time_495778,execs_1277024,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003790,src_003621,time_495807,execs_1277157,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003790,src_003621,time_495807,execs_1277157,op_havoc,rep_8 new file mode 100644 index 00000000000..300c27c326b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003790,src_003621,time_495807,execs_1277157,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003791,src_003621,time_496214,execs_1278941,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003791,src_003621,time_496214,execs_1278941,op_havoc,rep_8 new file mode 100644 index 00000000000..42450fd118c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003791,src_003621,time_496214,execs_1278941,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003793,src_003621,time_496579,execs_1280414,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003793,src_003621,time_496579,execs_1280414,op_havoc,rep_5 new file mode 100644 index 00000000000..9343ed95e33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003793,src_003621,time_496579,execs_1280414,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003794,src_003621,time_496892,execs_1281834,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003794,src_003621,time_496892,execs_1281834,op_havoc,rep_11 new file mode 100644 index 00000000000..b92363f3683 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003794,src_003621,time_496892,execs_1281834,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003795,src_003621,time_497126,execs_1282841,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003795,src_003621,time_497126,execs_1282841,op_havoc,rep_16 new file mode 100644 index 00000000000..249c8a7791f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003795,src_003621,time_497126,execs_1282841,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003796,src_003621,time_497339,execs_1283767,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003796,src_003621,time_497339,execs_1283767,op_havoc,rep_15 new file mode 100644 index 00000000000..8511da5b5e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003796,src_003621,time_497339,execs_1283767,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003800,src_003621,time_499173,execs_1291250,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003800,src_003621,time_499173,execs_1291250,op_havoc,rep_12 new file mode 100644 index 00000000000..afc25eae755 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003800,src_003621,time_499173,execs_1291250,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003802,src_003621,time_499357,execs_1292041,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003802,src_003621,time_499357,execs_1292041,op_havoc,rep_7 new file mode 100644 index 00000000000..7d7bb8076c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003802,src_003621,time_499357,execs_1292041,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003804,src_003669,time_500410,execs_1296773,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003804,src_003669,time_500410,execs_1296773,op_havoc,rep_1 new file mode 100644 index 00000000000..cd70e3eda29 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003804,src_003669,time_500410,execs_1296773,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003805,src_000784,time_500609,execs_1298039,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003805,src_000784,time_500609,execs_1298039,op_havoc,rep_6 new file mode 100644 index 00000000000..139b1d6456f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003805,src_000784,time_500609,execs_1298039,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003806,src_000784,time_500638,execs_1298221,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003806,src_000784,time_500638,execs_1298221,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..bce43080cc8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003806,src_000784,time_500638,execs_1298221,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003808,src_003465,time_501161,execs_1300618,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003808,src_003465,time_501161,execs_1300618,op_havoc,rep_4 new file mode 100644 index 00000000000..f9622041f4a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003808,src_003465,time_501161,execs_1300618,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003810,src_003465,time_501295,execs_1301588,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003810,src_003465,time_501295,execs_1301588,op_havoc,rep_3 new file mode 100644 index 00000000000..a0f60f47c04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003810,src_003465,time_501295,execs_1301588,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003811,src_003465,time_501301,execs_1301634,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003811,src_003465,time_501301,execs_1301634,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..e5e70df2593 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003811,src_003465,time_501301,execs_1301634,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003812,src_003465,time_501324,execs_1301792,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003812,src_003465,time_501324,execs_1301792,op_havoc,rep_3 new file mode 100644 index 00000000000..92a09b94cfc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003812,src_003465,time_501324,execs_1301792,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003813,src_003465,time_501401,execs_1302334,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003813,src_003465,time_501401,execs_1302334,op_havoc,rep_4 new file mode 100644 index 00000000000..8c0a319c597 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003813,src_003465,time_501401,execs_1302334,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003814,src_003465,time_501480,execs_1302924,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003814,src_003465,time_501480,execs_1302924,op_havoc,rep_3 new file mode 100644 index 00000000000..3bc3c0033b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003814,src_003465,time_501480,execs_1302924,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003815,src_003465,time_501759,execs_1304950,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003815,src_003465,time_501759,execs_1304950,op_havoc,rep_3 new file mode 100644 index 00000000000..927b3c41f57 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003815,src_003465,time_501759,execs_1304950,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003816,src_000809,time_502449,execs_1310003,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003816,src_000809,time_502449,execs_1310003,op_havoc,rep_10 new file mode 100644 index 00000000000..23cdd7a8be9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003816,src_000809,time_502449,execs_1310003,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003818,src_000809,time_502600,execs_1310776,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003818,src_000809,time_502600,execs_1310776,op_havoc,rep_13 new file mode 100644 index 00000000000..cdb1d0eb59c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003818,src_000809,time_502600,execs_1310776,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003819,src_000809,time_502619,execs_1310889,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003819,src_000809,time_502619,execs_1310889,op_havoc,rep_11 new file mode 100644 index 00000000000..c2a89089dda Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003819,src_000809,time_502619,execs_1310889,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003821,src_000809,time_502812,execs_1311995,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003821,src_000809,time_502812,execs_1311995,op_havoc,rep_7 new file mode 100644 index 00000000000..26a85332800 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003821,src_000809,time_502812,execs_1311995,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003822,src_000809,time_503367,execs_1315372,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003822,src_000809,time_503367,execs_1315372,op_havoc,rep_10 new file mode 100644 index 00000000000..02fab1a61de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003822,src_000809,time_503367,execs_1315372,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003823,src_000809,time_503545,execs_1316497,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003823,src_000809,time_503545,execs_1316497,op_havoc,rep_15 new file mode 100644 index 00000000000..c9340a8eb1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003823,src_000809,time_503545,execs_1316497,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003824,src_002852,time_505142,execs_1321179,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003824,src_002852,time_505142,execs_1321179,op_havoc,rep_4 new file mode 100644 index 00000000000..c7eccc92ae5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003824,src_002852,time_505142,execs_1321179,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003825,src_003216,time_505294,execs_1322225,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003825,src_003216,time_505294,execs_1322225,op_havoc,rep_9 new file mode 100644 index 00000000000..2e946be896f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003825,src_003216,time_505294,execs_1322225,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003827,src_003216,time_505315,execs_1322354,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003827,src_003216,time_505315,execs_1322354,op_havoc,rep_1 new file mode 100644 index 00000000000..2b72c060931 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003827,src_003216,time_505315,execs_1322354,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003828,src_003216,time_505349,execs_1322579,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003828,src_003216,time_505349,execs_1322579,op_havoc,rep_7 new file mode 100644 index 00000000000..5b3657fd4ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003828,src_003216,time_505349,execs_1322579,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003829,src_003216,time_505367,execs_1322695,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003829,src_003216,time_505367,execs_1322695,op_havoc,rep_10 new file mode 100644 index 00000000000..cc26b540a1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003829,src_003216,time_505367,execs_1322695,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003830,src_003216,time_505545,execs_1323810,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003830,src_003216,time_505545,execs_1323810,op_havoc,rep_15 new file mode 100644 index 00000000000..ad92c84300c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003830,src_003216,time_505545,execs_1323810,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003831,src_003216,time_505611,execs_1324229,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003831,src_003216,time_505611,execs_1324229,op_havoc,rep_10 new file mode 100644 index 00000000000..1bc4da40643 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003831,src_003216,time_505611,execs_1324229,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003833,src_003216,time_505841,execs_1325751,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003833,src_003216,time_505841,execs_1325751,op_havoc,rep_11 new file mode 100644 index 00000000000..0d48309ee35 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003833,src_003216,time_505841,execs_1325751,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003834,src_003216,time_505899,execs_1326085,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003834,src_003216,time_505899,execs_1326085,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..b68906e4688 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003834,src_003216,time_505899,execs_1326085,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003835,src_003216,time_505922,execs_1326243,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003835,src_003216,time_505922,execs_1326243,op_havoc,rep_13 new file mode 100644 index 00000000000..01498a10aee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003835,src_003216,time_505922,execs_1326243,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003837,src_003216,time_505996,execs_1326751,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003837,src_003216,time_505996,execs_1326751,op_havoc,rep_8 new file mode 100644 index 00000000000..07294ed3ae6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003837,src_003216,time_505996,execs_1326751,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003838,src_003216,time_506214,execs_1328118,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003838,src_003216,time_506214,execs_1328118,op_havoc,rep_6 new file mode 100644 index 00000000000..c3cc5816b21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003838,src_003216,time_506214,execs_1328118,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003841,src_003448,time_507028,execs_1333147,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003841,src_003448,time_507028,execs_1333147,op_havoc,rep_9 new file mode 100644 index 00000000000..d8d60ec8b77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003841,src_003448,time_507028,execs_1333147,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003842,src_003448,time_507080,execs_1333393,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003842,src_003448,time_507080,execs_1333393,op_havoc,rep_15 new file mode 100644 index 00000000000..ccb7a5f03ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003842,src_003448,time_507080,execs_1333393,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003843,src_003448,time_507123,execs_1333602,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003843,src_003448,time_507123,execs_1333602,op_havoc,rep_5 new file mode 100644 index 00000000000..464dc93a64a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003843,src_003448,time_507123,execs_1333602,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003844,src_003448,time_507269,execs_1334303,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003844,src_003448,time_507269,execs_1334303,op_havoc,rep_15 new file mode 100644 index 00000000000..d65fb27c569 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003844,src_003448,time_507269,execs_1334303,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003845,src_003448,time_507278,execs_1334337,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003845,src_003448,time_507278,execs_1334337,op_havoc,rep_13 new file mode 100644 index 00000000000..cde91433856 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003845,src_003448,time_507278,execs_1334337,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003846,src_003448,time_507391,execs_1334885,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003846,src_003448,time_507391,execs_1334885,op_havoc,rep_15 new file mode 100644 index 00000000000..749a455ae1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003846,src_003448,time_507391,execs_1334885,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003847,src_003448,time_507430,execs_1335043,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003847,src_003448,time_507430,execs_1335043,op_havoc,rep_4 new file mode 100644 index 00000000000..6fc158a0908 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003847,src_003448,time_507430,execs_1335043,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003848,src_003448,time_507567,execs_1335713,op_havoc,rep_9,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003848,src_003448,time_507567,execs_1335713,op_havoc,rep_9,+cov new file mode 100644 index 00000000000..3838acf94c0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003848,src_003448,time_507567,execs_1335713,op_havoc,rep_9,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003849,src_003448,time_507596,execs_1335794,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003849,src_003448,time_507596,execs_1335794,op_havoc,rep_12 new file mode 100644 index 00000000000..6e601fd166f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003849,src_003448,time_507596,execs_1335794,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003850,src_003448,time_507724,execs_1336396,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003850,src_003448,time_507724,execs_1336396,op_havoc,rep_3 new file mode 100644 index 00000000000..fc23a341b34 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003850,src_003448,time_507724,execs_1336396,op_havoc,rep_3 @@ -0,0 +1,2 @@ +÷[1;2;3;44;5;6;7;8;9;10;11;12;1¬33333mred[ +;2r!Hfpo[31 ÿÿ33333 3;14;5;26m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003851,src_003448,time_507812,execs_1336801,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003851,src_003448,time_507812,execs_1336801,op_havoc,rep_4 new file mode 100644 index 00000000000..4df8dc003e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003851,src_003448,time_507812,execs_1336801,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003852,src_003675,time_508708,execs_1340495,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003852,src_003675,time_508708,execs_1340495,op_havoc,rep_1 new file mode 100644 index 00000000000..5981c571c81 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003852,src_003675,time_508708,execs_1340495,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003853,src_003675,time_508815,execs_1341218,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003853,src_003675,time_508815,execs_1341218,op_havoc,rep_2 new file mode 100644 index 00000000000..e3fd11b10ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003853,src_003675,time_508815,execs_1341218,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003854,src_003079,time_509077,execs_1342947,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003854,src_003079,time_509077,execs_1342947,op_havoc,rep_2 new file mode 100644 index 00000000000..7f1e16d39fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003854,src_003079,time_509077,execs_1342947,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003855,src_002354,time_509368,execs_1344177,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003855,src_002354,time_509368,execs_1344177,op_havoc,rep_2 new file mode 100644 index 00000000000..ab32a00670b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003855,src_002354,time_509368,execs_1344177,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003856,src_003551,time_509497,execs_1345003,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003856,src_003551,time_509497,execs_1345003,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..cc793e62059 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003856,src_003551,time_509497,execs_1345003,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003857,src_003551,time_509501,execs_1345028,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003857,src_003551,time_509501,execs_1345028,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ebf1036940f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003857,src_003551,time_509501,execs_1345028,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003858,src_003551,time_509753,execs_1346961,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003858,src_003551,time_509753,execs_1346961,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..73b50e7ea08 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003858,src_003551,time_509753,execs_1346961,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003859,src_003551,time_509822,execs_1347472,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003859,src_003551,time_509822,execs_1347472,op_havoc,rep_2 new file mode 100644 index 00000000000..843734ff808 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003859,src_003551,time_509822,execs_1347472,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003862,src_003551,time_510255,execs_1350739,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003862,src_003551,time_510255,execs_1350739,op_havoc,rep_2 new file mode 100644 index 00000000000..088bb0f836c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003862,src_003551,time_510255,execs_1350739,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003863,src_003551,time_510368,execs_1351605,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003863,src_003551,time_510368,execs_1351605,op_havoc,rep_2 new file mode 100644 index 00000000000..935db8b9e19 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003863,src_003551,time_510368,execs_1351605,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003864,src_003551,time_510417,execs_1351975,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003864,src_003551,time_510417,execs_1351975,op_havoc,rep_2 new file mode 100644 index 00000000000..a3a9a4030bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003864,src_003551,time_510417,execs_1351975,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003870,src_003344,time_511431,execs_1357883,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003870,src_003344,time_511431,execs_1357883,op_havoc,rep_4 new file mode 100644 index 00000000000..bd5b01e652d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003870,src_003344,time_511431,execs_1357883,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003871,src_003344,time_511513,execs_1358402,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003871,src_003344,time_511513,execs_1358402,op_havoc,rep_4 new file mode 100644 index 00000000000..6dc43527fdd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003871,src_003344,time_511513,execs_1358402,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003874,src_003133,time_513291,execs_1366215,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003874,src_003133,time_513291,execs_1366215,op_havoc,rep_2 new file mode 100644 index 00000000000..0751734fb2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003874,src_003133,time_513291,execs_1366215,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003875,src_003133,time_513465,execs_1367367,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003875,src_003133,time_513465,execs_1367367,op_havoc,rep_2 new file mode 100644 index 00000000000..12cc2e76b95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003875,src_003133,time_513465,execs_1367367,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003876,src_001712,time_513805,execs_1369316,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003876,src_001712,time_513805,execs_1369316,op_havoc,rep_7 new file mode 100644 index 00000000000..f5eacbf514d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003876,src_001712,time_513805,execs_1369316,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003878,src_003702,time_514004,execs_1370124,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003878,src_003702,time_514004,execs_1370124,op_havoc,rep_1 new file mode 100644 index 00000000000..7d4c4138ff9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003878,src_003702,time_514004,execs_1370124,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003879,src_003702,time_514111,execs_1370869,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003879,src_003702,time_514111,execs_1370869,op_havoc,rep_7 new file mode 100644 index 00000000000..4c25793ec04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003879,src_003702,time_514111,execs_1370869,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003880,src_003702,time_514132,execs_1371018,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003880,src_003702,time_514132,execs_1371018,op_havoc,rep_7 new file mode 100644 index 00000000000..6ce902ae0b9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003880,src_003702,time_514132,execs_1371018,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003881,src_003702,time_514307,execs_1372235,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003881,src_003702,time_514307,execs_1372235,op_havoc,rep_4 new file mode 100644 index 00000000000..e9be1126f5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003881,src_003702,time_514307,execs_1372235,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003882,src_003702,time_514393,execs_1372873,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003882,src_003702,time_514393,execs_1372873,op_havoc,rep_5 new file mode 100644 index 00000000000..9dce0ec1440 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003882,src_003702,time_514393,execs_1372873,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003883,src_003702,time_514420,execs_1373079,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003883,src_003702,time_514420,execs_1373079,op_havoc,rep_3 new file mode 100644 index 00000000000..b6d5402a482 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003883,src_003702,time_514420,execs_1373079,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003884,src_003702,time_514522,execs_1373794,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003884,src_003702,time_514522,execs_1373794,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..b2f4122b577 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003884,src_003702,time_514522,execs_1373794,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003885,src_003702,time_514598,execs_1374326,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003885,src_003702,time_514598,execs_1374326,op_havoc,rep_2 new file mode 100644 index 00000000000..47a1bce42d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003885,src_003702,time_514598,execs_1374326,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003887,src_003702,time_515025,execs_1377324,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003887,src_003702,time_515025,execs_1377324,op_havoc,rep_5 new file mode 100644 index 00000000000..1cfd1941d66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003887,src_003702,time_515025,execs_1377324,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003890,src_000855,time_515373,execs_1379724,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003890,src_000855,time_515373,execs_1379724,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..acf13be75d5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003890,src_000855,time_515373,execs_1379724,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003897,src_000855,time_515937,execs_1383685,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003897,src_000855,time_515937,execs_1383685,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..661fe0ea2d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003897,src_000855,time_515937,execs_1383685,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003898,src_000855,time_515954,execs_1383801,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003898,src_000855,time_515954,execs_1383801,op_havoc,rep_4 new file mode 100644 index 00000000000..e585a66f54c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003898,src_000855,time_515954,execs_1383801,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003899,src_000855,time_516035,execs_1384341,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003899,src_000855,time_516035,execs_1384341,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..16f745dd6d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003899,src_000855,time_516035,execs_1384341,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003901,src_000855,time_516472,execs_1387345,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003901,src_000855,time_516472,execs_1387345,op_havoc,rep_2 new file mode 100644 index 00000000000..b2d890b0b23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003901,src_000855,time_516472,execs_1387345,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003902,src_000855,time_516544,execs_1387832,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003902,src_000855,time_516544,execs_1387832,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..bcdeed825c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003902,src_000855,time_516544,execs_1387832,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003903,src_000911,time_516796,execs_1389529,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003903,src_000911,time_516796,execs_1389529,op_havoc,rep_4 new file mode 100644 index 00000000000..35506476ea3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003903,src_000911,time_516796,execs_1389529,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003904,src_003568,time_517034,execs_1391172,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003904,src_003568,time_517034,execs_1391172,op_havoc,rep_16 new file mode 100644 index 00000000000..07fbcf5699f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003904,src_003568,time_517034,execs_1391172,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003905,src_003568,time_517036,execs_1391184,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003905,src_003568,time_517036,execs_1391184,op_havoc,rep_5 new file mode 100644 index 00000000000..4c1020c6371 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003905,src_003568,time_517036,execs_1391184,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003906,src_003568,time_517078,execs_1391404,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003906,src_003568,time_517078,execs_1391404,op_havoc,rep_12 new file mode 100644 index 00000000000..ffe0d12b815 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003906,src_003568,time_517078,execs_1391404,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003907,src_003568,time_517130,execs_1391716,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003907,src_003568,time_517130,execs_1391716,op_havoc,rep_13 new file mode 100644 index 00000000000..1e57104ccd7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003907,src_003568,time_517130,execs_1391716,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003908,src_003568,time_517152,execs_1391833,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003908,src_003568,time_517152,execs_1391833,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..a95262caa32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003908,src_003568,time_517152,execs_1391833,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003911,src_003568,time_517783,execs_1395624,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003911,src_003568,time_517783,execs_1395624,op_havoc,rep_14 new file mode 100644 index 00000000000..1e120f402df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003911,src_003568,time_517783,execs_1395624,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003912,src_003568,time_518362,execs_1398962,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003912,src_003568,time_518362,execs_1398962,op_havoc,rep_9 new file mode 100644 index 00000000000..4e44644cb91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003912,src_003568,time_518362,execs_1398962,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003913,src_002728,time_518716,execs_1401165,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003913,src_002728,time_518716,execs_1401165,op_havoc,rep_2 new file mode 100644 index 00000000000..21fa347d48d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003913,src_002728,time_518716,execs_1401165,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003914,src_002728,time_518767,execs_1401486,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003914,src_002728,time_518767,execs_1401486,op_havoc,rep_2 new file mode 100644 index 00000000000..5663c6a6ee5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003914,src_002728,time_518767,execs_1401486,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003917,src_002111,time_519391,execs_1405587,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003917,src_002111,time_519391,execs_1405587,op_havoc,rep_2 new file mode 100644 index 00000000000..d3d58d57181 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003917,src_002111,time_519391,execs_1405587,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003918,src_001341,time_519615,execs_1407063,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003918,src_001341,time_519615,execs_1407063,op_havoc,rep_4 new file mode 100644 index 00000000000..9ca976ce7b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003918,src_001341,time_519615,execs_1407063,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003919,src_001341,time_519666,execs_1407404,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003919,src_001341,time_519666,execs_1407404,op_havoc,rep_13 new file mode 100644 index 00000000000..124dcd1faac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003919,src_001341,time_519666,execs_1407404,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003920,src_003584,time_520065,execs_1409353,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003920,src_003584,time_520065,execs_1409353,op_havoc,rep_3 new file mode 100644 index 00000000000..0e452c2484c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003920,src_003584,time_520065,execs_1409353,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003922,src_000974,time_520321,execs_1410801,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003922,src_000974,time_520321,execs_1410801,op_havoc,rep_16 new file mode 100644 index 00000000000..a199b7e3985 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003922,src_000974,time_520321,execs_1410801,op_havoc,rep_16 @@ -0,0 +1,6 @@ +[;8, WoĶ +]0]0ollo, WoĶ +]0]0 ]0 oĶ + ]0olo, ]0]0 ]oll WoĶ +]0]0 ]0oêlo, WoĶ +]m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003923,src_000974,time_520392,execs_1411248,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003923,src_000974,time_520392,execs_1411248,op_havoc,rep_14 new file mode 100644 index 00000000000..2b0fddf823f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003923,src_000974,time_520392,execs_1411248,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003925,src_000974,time_520841,execs_1413843,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003925,src_000974,time_520841,execs_1413843,op_havoc,rep_15 new file mode 100644 index 00000000000..41bf9226c10 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003925,src_000974,time_520841,execs_1413843,op_havoc,rep_15 @@ -0,0 +1,4 @@ +Wo;?104d09?1ì]8;;htc\click]8;;k[L[*l +[?1045reeno3L[*l +[?1045reeno[3[*l +[?1045reen00ÿ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003926,src_000974,time_520876,execs_1413878,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003926,src_000974,time_520876,execs_1413878,op_havoc,rep_10 new file mode 100644 index 00000000000..66be223d069 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003926,src_000974,time_520876,execs_1413878,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003927,src_000974,time_521135,execs_1415493,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003927,src_000974,time_521135,execs_1415493,op_havoc,rep_16 new file mode 100644 index 00000000000..487626fef02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003927,src_000974,time_521135,execs_1415493,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003931,src_003036,time_524724,execs_1420512,op_quick,pos_64,val_+11 b/test/fuzz-libghostty/corpus/stream-cmin/id_003931,src_003036,time_524724,execs_1420512,op_quick,pos_64,val_+11 new file mode 100644 index 00000000000..d37039ecf00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003931,src_003036,time_524724,execs_1420512,op_quick,pos_64,val_+11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003932,src_000991,time_527458,execs_1420697,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003932,src_000991,time_527458,execs_1420697,op_havoc,rep_5 new file mode 100644 index 00000000000..88e2992b5fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003932,src_000991,time_527458,execs_1420697,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003934,src_000991,time_527537,execs_1420747,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_003934,src_000991,time_527537,execs_1420747,op_havoc,rep_14 new file mode 100644 index 00000000000..41d14d8e6a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003934,src_000991,time_527537,execs_1420747,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003936,src_002104,time_527972,execs_1421468,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003936,src_002104,time_527972,execs_1421468,op_havoc,rep_3 new file mode 100644 index 00000000000..644a0940230 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003936,src_002104,time_527972,execs_1421468,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003938,src_002104,time_528064,execs_1422061,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003938,src_002104,time_528064,execs_1422061,op_havoc,rep_3 new file mode 100644 index 00000000000..bff26afd49f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003938,src_002104,time_528064,execs_1422061,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003939,src_002104,time_528200,execs_1422915,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003939,src_002104,time_528200,execs_1422915,op_havoc,rep_16 new file mode 100644 index 00000000000..7195feec4f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003939,src_002104,time_528200,execs_1422915,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003940,src_002104,time_528228,execs_1423071,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003940,src_002104,time_528228,execs_1423071,op_havoc,rep_15 new file mode 100644 index 00000000000..dee51e7e8e0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003940,src_002104,time_528228,execs_1423071,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003942,src_002104,time_528381,execs_1423937,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003942,src_002104,time_528381,execs_1423937,op_havoc,rep_3 new file mode 100644 index 00000000000..76bdbe599b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003942,src_002104,time_528381,execs_1423937,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003943,src_002104,time_528429,execs_1424250,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003943,src_002104,time_528429,execs_1424250,op_havoc,rep_13 new file mode 100644 index 00000000000..1ad2d3362ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003943,src_002104,time_528429,execs_1424250,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003944,src_002104,time_528475,execs_1424548,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_003944,src_002104,time_528475,execs_1424548,op_havoc,rep_3 new file mode 100644 index 00000000000..d6390e3815f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003944,src_002104,time_528475,execs_1424548,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003945,src_002104,time_528578,execs_1425204,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003945,src_002104,time_528578,execs_1425204,op_havoc,rep_8 new file mode 100644 index 00000000000..80547772de1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003945,src_002104,time_528578,execs_1425204,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003946,src_002104,time_528661,execs_1425695,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003946,src_002104,time_528661,execs_1425695,op_havoc,rep_15 new file mode 100644 index 00000000000..a9c08376e1f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003946,src_002104,time_528661,execs_1425695,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003949,src_002104,time_528842,execs_1426816,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003949,src_002104,time_528842,execs_1426816,op_havoc,rep_15 new file mode 100644 index 00000000000..bf075d2b6f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003949,src_002104,time_528842,execs_1426816,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003950,src_002104,time_528933,execs_1427372,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003950,src_002104,time_528933,execs_1427372,op_havoc,rep_13 new file mode 100644 index 00000000000..84cee74858c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003950,src_002104,time_528933,execs_1427372,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003951,src_002104,time_528999,execs_1427750,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003951,src_002104,time_528999,execs_1427750,op_havoc,rep_13 new file mode 100644 index 00000000000..63d2276d43a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003951,src_002104,time_528999,execs_1427750,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003952,src_002104,time_529189,execs_1428927,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003952,src_002104,time_529189,execs_1428927,op_havoc,rep_15 new file mode 100644 index 00000000000..a761bd3e8e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003952,src_002104,time_529189,execs_1428927,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003954,src_002104,time_529461,execs_1430648,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_003954,src_002104,time_529461,execs_1430648,op_havoc,rep_13 new file mode 100644 index 00000000000..e635cd6c468 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003954,src_002104,time_529461,execs_1430648,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003955,src_001058,time_529535,execs_1431120,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003955,src_001058,time_529535,execs_1431120,op_havoc,rep_4 new file mode 100644 index 00000000000..bc2308538d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003955,src_001058,time_529535,execs_1431120,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003956,src_001058,time_529560,execs_1431277,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003956,src_001058,time_529560,execs_1431277,op_havoc,rep_4 new file mode 100644 index 00000000000..9f719071109 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003956,src_001058,time_529560,execs_1431277,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003957,src_001058,time_529638,execs_1431787,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003957,src_001058,time_529638,execs_1431787,op_havoc,rep_4 new file mode 100644 index 00000000000..040f08aef7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003957,src_001058,time_529638,execs_1431787,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003960,src_001114,time_530083,execs_1434467,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003960,src_001114,time_530083,execs_1434467,op_havoc,rep_8 new file mode 100644 index 00000000000..6ac48c15f9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003960,src_001114,time_530083,execs_1434467,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003961,src_001114,time_530110,execs_1434611,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003961,src_001114,time_530110,execs_1434611,op_havoc,rep_2 new file mode 100644 index 00000000000..291adb94e08 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003961,src_001114,time_530110,execs_1434611,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003962,src_001114,time_530460,execs_1436527,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_003962,src_001114,time_530460,execs_1436527,op_havoc,rep_8 new file mode 100644 index 00000000000..ef07ec06202 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003962,src_001114,time_530460,execs_1436527,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003964,src_001114,time_531460,execs_1442146,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003964,src_001114,time_531460,execs_1442146,op_havoc,rep_6 new file mode 100644 index 00000000000..544f2da4f8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003964,src_001114,time_531460,execs_1442146,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003965,src_003278,time_531799,execs_1444048,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003965,src_003278,time_531799,execs_1444048,op_havoc,rep_2 new file mode 100644 index 00000000000..84d84419fbb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003965,src_003278,time_531799,execs_1444048,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003966,src_003278,time_531819,execs_1444188,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003966,src_003278,time_531819,execs_1444188,op_havoc,rep_1 new file mode 100644 index 00000000000..2188e8bce57 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003966,src_003278,time_531819,execs_1444188,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003968,src_003106,time_532384,execs_1448128,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_003968,src_003106,time_532384,execs_1448128,op_havoc,rep_15 new file mode 100644 index 00000000000..a4d0417c93b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003968,src_003106,time_532384,execs_1448128,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003969,src_003106,time_532390,execs_1448163,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_003969,src_003106,time_532390,execs_1448163,op_havoc,rep_9 new file mode 100644 index 00000000000..3a0ce867d61 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003969,src_003106,time_532390,execs_1448163,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003971,src_002972,time_532712,execs_1449808,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_003971,src_002972,time_532712,execs_1449808,op_havoc,rep_6 new file mode 100644 index 00000000000..56047958923 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003971,src_002972,time_532712,execs_1449808,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003972,src_002972,time_532810,execs_1450270,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003972,src_002972,time_532810,execs_1450270,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..c0fd72fac37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003972,src_002972,time_532810,execs_1450270,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003973,src_002972,time_533017,execs_1451209,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003973,src_002972,time_533017,execs_1451209,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..acd0ea8485c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003973,src_002972,time_533017,execs_1451209,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003974,src_002972,time_533545,execs_1453585,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_003974,src_002972,time_533545,execs_1453585,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..653ae26966f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003974,src_002972,time_533545,execs_1453585,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003975,src_002972,time_533655,execs_1454093,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003975,src_002972,time_533655,execs_1454093,op_havoc,rep_12 new file mode 100644 index 00000000000..e143e8220b9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003975,src_002972,time_533655,execs_1454093,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003976,src_002972,time_533731,execs_1454439,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_003976,src_002972,time_533731,execs_1454439,op_havoc,rep_5 new file mode 100644 index 00000000000..33bb7b13005 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003976,src_002972,time_533731,execs_1454439,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003977,src_002972,time_533942,execs_1455391,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_003977,src_002972,time_533942,execs_1455391,op_havoc,rep_16 new file mode 100644 index 00000000000..b265e57adfd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003977,src_002972,time_533942,execs_1455391,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003979,src_002972,time_534002,execs_1455664,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_003979,src_002972,time_534002,execs_1455664,op_havoc,rep_12 new file mode 100644 index 00000000000..39bcd0837eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003979,src_002972,time_534002,execs_1455664,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003980,src_002709,time_534847,execs_1459408,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003980,src_002709,time_534847,execs_1459408,op_havoc,rep_4 new file mode 100644 index 00000000000..a2a95a19ce5 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_003980,src_002709,time_534847,execs_1459408,op_havoc,rep_4 @@ -0,0 +1 @@ +ÌBCD[>ÿ1ÿsbsbÿ1ÿBCBC [>>ÿ1ÿsbGsbÿ1ÿBCD[>ÿ1ÿGsbÿ1ÿBCD[>ÿ1ÿsbGsbGD[>sbGsbGD[>ÿ1ÿsbGsbG8G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003981,src_002709,time_534858,execs_1459489,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_003981,src_002709,time_534858,execs_1459489,op_havoc,rep_4 new file mode 100644 index 00000000000..f5856d24924 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003981,src_002709,time_534858,execs_1459489,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003984,src_001983,time_535115,execs_1460507,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003984,src_001983,time_535115,execs_1460507,op_havoc,rep_2 new file mode 100644 index 00000000000..c78b0215b32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003984,src_001983,time_535115,execs_1460507,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003990,src_001983,time_535669,execs_1462026,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003990,src_001983,time_535669,execs_1462026,op_havoc,rep_2 new file mode 100644 index 00000000000..0bcdae56ef7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003990,src_001983,time_535669,execs_1462026,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003992,src_001983,time_535805,execs_1462407,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003992,src_001983,time_535805,execs_1462407,op_havoc,rep_2 new file mode 100644 index 00000000000..e2235271029 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003992,src_001983,time_535805,execs_1462407,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003994,src_001983,time_536592,execs_1464578,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_003994,src_001983,time_536592,execs_1464578,op_havoc,rep_1 new file mode 100644 index 00000000000..ca9aacdd168 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003994,src_001983,time_536592,execs_1464578,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003995,src_001983,time_536823,execs_1465220,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003995,src_001983,time_536823,execs_1465220,op_havoc,rep_2 new file mode 100644 index 00000000000..834706796e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003995,src_001983,time_536823,execs_1465220,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003996,src_001983,time_538111,execs_1468787,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_003996,src_001983,time_538111,execs_1468787,op_havoc,rep_2 new file mode 100644 index 00000000000..a549eab164b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003996,src_001983,time_538111,execs_1468787,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003997,src_003679,time_538677,execs_1470582,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_003997,src_003679,time_538677,execs_1470582,op_havoc,rep_7 new file mode 100644 index 00000000000..f4080a01858 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003997,src_003679,time_538677,execs_1470582,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_003998,src_003679,time_538759,execs_1470857,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_003998,src_003679,time_538759,execs_1470857,op_havoc,rep_10 new file mode 100644 index 00000000000..dc2f30516cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_003998,src_003679,time_538759,execs_1470857,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004001,src_003679,time_539273,execs_1472877,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004001,src_003679,time_539273,execs_1472877,op_havoc,rep_14 new file mode 100644 index 00000000000..d4e915d5b53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004001,src_003679,time_539273,execs_1472877,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004002,src_003679,time_540640,execs_1477738,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004002,src_003679,time_540640,execs_1477738,op_havoc,rep_13 new file mode 100644 index 00000000000..e085ac1c51c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004002,src_003679,time_540640,execs_1477738,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004003,src_003679,time_540752,execs_1478110,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004003,src_003679,time_540752,execs_1478110,op_havoc,rep_11 new file mode 100644 index 00000000000..6ba912bd5fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004003,src_003679,time_540752,execs_1478110,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004005,src_003679,time_541004,execs_1479049,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004005,src_003679,time_541004,execs_1479049,op_havoc,rep_9 new file mode 100644 index 00000000000..78e9ef2c596 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004005,src_003679,time_541004,execs_1479049,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004006,src_003436,time_541344,execs_1480402,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004006,src_003436,time_541344,execs_1480402,op_havoc,rep_1 new file mode 100644 index 00000000000..1269278f350 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004006,src_003436,time_541344,execs_1480402,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004007,src_003436,time_541356,execs_1480476,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004007,src_003436,time_541356,execs_1480476,op_havoc,rep_1 new file mode 100644 index 00000000000..2a5ae7dbc34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004007,src_003436,time_541356,execs_1480476,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004008,src_003436,time_541360,execs_1480505,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004008,src_003436,time_541360,execs_1480505,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..3657efa8910 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004008,src_003436,time_541360,execs_1480505,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004009,src_003436,time_541385,execs_1480670,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004009,src_003436,time_541385,execs_1480670,op_havoc,rep_2 new file mode 100644 index 00000000000..484a5ac64f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004009,src_003436,time_541385,execs_1480670,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004010,src_003436,time_541725,execs_1482892,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004010,src_003436,time_541725,execs_1482892,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..826471a37fc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004010,src_003436,time_541725,execs_1482892,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004011,src_003436,time_542042,execs_1484999,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004011,src_003436,time_542042,execs_1484999,op_havoc,rep_1 new file mode 100644 index 00000000000..e0458cbbb0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004011,src_003436,time_542042,execs_1484999,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004012,src_003436,time_542090,execs_1485311,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004012,src_003436,time_542090,execs_1485311,op_havoc,rep_2 new file mode 100644 index 00000000000..34a896e21a9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004012,src_003436,time_542090,execs_1485311,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004014,src_003436,time_542480,execs_1487646,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004014,src_003436,time_542480,execs_1487646,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..18c716fe205 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004014,src_003436,time_542480,execs_1487646,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004015,src_003436,time_542510,execs_1487827,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004015,src_003436,time_542510,execs_1487827,op_havoc,rep_2 new file mode 100644 index 00000000000..9306a4bd271 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004015,src_003436,time_542510,execs_1487827,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004016,src_003436,time_542654,execs_1488770,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004016,src_003436,time_542654,execs_1488770,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..fe92cfba442 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004016,src_003436,time_542654,execs_1488770,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004017,src_003316,time_542976,execs_1490744,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004017,src_003316,time_542976,execs_1490744,op_havoc,rep_16 new file mode 100644 index 00000000000..ff69676fad2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004017,src_003316,time_542976,execs_1490744,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004020,src_003504,time_543549,execs_1494425,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004020,src_003504,time_543549,execs_1494425,op_havoc,rep_1 new file mode 100644 index 00000000000..fbbb95ed08d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004020,src_003504,time_543549,execs_1494425,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004022,src_002325,time_543883,execs_1496574,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004022,src_002325,time_543883,execs_1496574,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..7889f69607e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004022,src_002325,time_543883,execs_1496574,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004023,src_003698,time_544046,execs_1497595,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004023,src_003698,time_544046,execs_1497595,op_havoc,rep_8 new file mode 100644 index 00000000000..f4f9460ee66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004023,src_003698,time_544046,execs_1497595,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004024,src_003698,time_544069,execs_1497754,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004024,src_003698,time_544069,execs_1497754,op_havoc,rep_2 new file mode 100644 index 00000000000..e4cfb516b9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004024,src_003698,time_544069,execs_1497754,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004031,src_003822,time_545518,execs_1507772,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004031,src_003822,time_545518,execs_1507772,op_havoc,rep_1 new file mode 100644 index 00000000000..f62e6a61e50 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004031,src_003822,time_545518,execs_1507772,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004032,src_003822,time_545542,execs_1507912,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004032,src_003822,time_545542,execs_1507912,op_havoc,rep_8 new file mode 100644 index 00000000000..9aedc8fe61c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004032,src_003822,time_545542,execs_1507912,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004033,src_004030,time_545717,execs_1508994,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004033,src_004030,time_545717,execs_1508994,op_havoc,rep_5 new file mode 100644 index 00000000000..f6ed7e8ceb1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004033,src_004030,time_545717,execs_1508994,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004035,src_004030,time_545803,execs_1509566,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004035,src_004030,time_545803,execs_1509566,op_havoc,rep_8 new file mode 100644 index 00000000000..9235d93e0a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004035,src_004030,time_545803,execs_1509566,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004036,src_004030,time_545837,execs_1509787,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004036,src_004030,time_545837,execs_1509787,op_havoc,rep_5 new file mode 100644 index 00000000000..8ca418f1f03 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004036,src_004030,time_545837,execs_1509787,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004037,src_004030,time_545939,execs_1510460,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004037,src_004030,time_545939,execs_1510460,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..ab5e84fbf97 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004037,src_004030,time_545939,execs_1510460,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004038,src_004030,time_546300,execs_1512846,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004038,src_004030,time_546300,execs_1512846,op_havoc,rep_8 new file mode 100644 index 00000000000..654e874ed8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004038,src_004030,time_546300,execs_1512846,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004039,src_004030,time_546440,execs_1513814,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004039,src_004030,time_546440,execs_1513814,op_havoc,rep_6 new file mode 100644 index 00000000000..471740c2483 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004039,src_004030,time_546440,execs_1513814,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004040,src_004030,time_546568,execs_1514539,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004040,src_004030,time_546568,execs_1514539,op_havoc,rep_5 new file mode 100644 index 00000000000..8dc0953741b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004040,src_004030,time_546568,execs_1514539,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004041,src_004030,time_546824,execs_1516202,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004041,src_004030,time_546824,execs_1516202,op_havoc,rep_3 new file mode 100644 index 00000000000..b557269cdbc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004041,src_004030,time_546824,execs_1516202,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004044,src_003608,time_547538,execs_1519310,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004044,src_003608,time_547538,execs_1519310,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..85b8e4767f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004044,src_003608,time_547538,execs_1519310,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004045,src_003608,time_547563,execs_1519442,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004045,src_003608,time_547563,execs_1519442,op_havoc,rep_5 new file mode 100644 index 00000000000..ee56a2d7b33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004045,src_003608,time_547563,execs_1519442,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004047,src_003608,time_547877,execs_1521142,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004047,src_003608,time_547877,execs_1521142,op_havoc,rep_6 new file mode 100644 index 00000000000..4dc0b87e10e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004047,src_003608,time_547877,execs_1521142,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004049,src_003608,time_548023,execs_1521976,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004049,src_003608,time_548023,execs_1521976,op_havoc,rep_4 new file mode 100644 index 00000000000..7f76cf86c3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004049,src_003608,time_548023,execs_1521976,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004051,src_003608,time_549160,execs_1528471,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004051,src_003608,time_549160,execs_1528471,op_havoc,rep_8 new file mode 100644 index 00000000000..2e2761beddb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004051,src_003608,time_549160,execs_1528471,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004052,src_001330,time_549230,execs_1528808,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004052,src_001330,time_549230,execs_1528808,op_havoc,rep_15 new file mode 100644 index 00000000000..2ca2007f1a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004052,src_001330,time_549230,execs_1528808,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004053,src_001330,time_549274,execs_1528928,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004053,src_001330,time_549274,execs_1528928,op_havoc,rep_15 new file mode 100644 index 00000000000..037ff564291 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004053,src_001330,time_549274,execs_1528928,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004054,src_003493,time_549467,execs_1529462,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004054,src_003493,time_549467,execs_1529462,op_havoc,rep_1 new file mode 100644 index 00000000000..b0867468d32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004054,src_003493,time_549467,execs_1529462,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004055,src_003493,time_549479,execs_1529549,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004055,src_003493,time_549479,execs_1529549,op_havoc,rep_2 new file mode 100644 index 00000000000..d1b5f0f1db2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004055,src_003493,time_549479,execs_1529549,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004056,src_003783,time_549749,execs_1531406,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004056,src_003783,time_549749,execs_1531406,op_havoc,rep_1 new file mode 100644 index 00000000000..8879dba3769 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004056,src_003783,time_549749,execs_1531406,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004057,src_001334,time_549936,execs_1532642,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004057,src_001334,time_549936,execs_1532642,op_havoc,rep_4 new file mode 100644 index 00000000000..66354fe42e0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004057,src_001334,time_549936,execs_1532642,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004059,src_003958,time_550127,execs_1533841,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004059,src_003958,time_550127,execs_1533841,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..578e99c2c33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004059,src_003958,time_550127,execs_1533841,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004067,src_003958,time_550533,execs_1536680,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004067,src_003958,time_550533,execs_1536680,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..080a5ee6ffb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004067,src_003958,time_550533,execs_1536680,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004068,src_003958,time_550538,execs_1536711,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004068,src_003958,time_550538,execs_1536711,op_havoc,rep_2 new file mode 100644 index 00000000000..6fd5e81038d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004068,src_003958,time_550538,execs_1536711,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004070,src_003958,time_550728,execs_1538062,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004070,src_003958,time_550728,execs_1538062,op_havoc,rep_2 new file mode 100644 index 00000000000..6f6d1b2db9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004070,src_003958,time_550728,execs_1538062,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004071,src_001357,time_551565,execs_1544092,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004071,src_001357,time_551565,execs_1544092,op_havoc,rep_4 new file mode 100644 index 00000000000..ef721ccbb6b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004071,src_001357,time_551565,execs_1544092,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004072,src_001384,time_551632,execs_1544555,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004072,src_001384,time_551632,execs_1544555,op_havoc,rep_2 new file mode 100644 index 00000000000..a655d8c7a14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004072,src_001384,time_551632,execs_1544555,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004073,src_001384,time_551682,execs_1544922,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004073,src_001384,time_551682,execs_1544922,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..0e6061ca86f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004073,src_001384,time_551682,execs_1544922,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004074,src_002958,time_552585,execs_1548755,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004074,src_002958,time_552585,execs_1548755,op_havoc,rep_2 new file mode 100644 index 00000000000..da055ccdd4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004074,src_002958,time_552585,execs_1548755,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004075,src_003273,time_552710,execs_1549615,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004075,src_003273,time_552710,execs_1549615,op_havoc,rep_2 new file mode 100644 index 00000000000..30ea6834ef7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004075,src_003273,time_552710,execs_1549615,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004076,src_003273,time_552723,execs_1549701,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004076,src_003273,time_552723,execs_1549701,op_havoc,rep_3 new file mode 100644 index 00000000000..e423a2e929d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004076,src_003273,time_552723,execs_1549701,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004078,src_001422,time_553123,execs_1551889,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004078,src_001422,time_553123,execs_1551889,op_havoc,rep_2 new file mode 100644 index 00000000000..dffbf1af232 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004078,src_001422,time_553123,execs_1551889,op_havoc,rep_2 @@ -0,0 +1 @@ +0;1ord;3;2;5;6lo,3m[4:m3mo,3m[4:m3m[4:mhell;14:mhell;14;15;16 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004081,src_002686,time_553624,execs_1555194,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004081,src_002686,time_553624,execs_1555194,op_havoc,rep_4 new file mode 100644 index 00000000000..9fe0fb7c516 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004081,src_002686,time_553624,execs_1555194,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004082,src_002686,time_553737,execs_1556022,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004082,src_002686,time_553737,execs_1556022,op_havoc,rep_2 new file mode 100644 index 00000000000..8f0c0e13489 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004082,src_002686,time_553737,execs_1556022,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004084,src_000467,time_554776,execs_1563074,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004084,src_000467,time_554776,execs_1563074,op_havoc,rep_11 new file mode 100644 index 00000000000..c6285974ead Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004084,src_000467,time_554776,execs_1563074,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004085,src_000467,time_554796,execs_1563200,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004085,src_000467,time_554796,execs_1563200,op_havoc,rep_13 new file mode 100644 index 00000000000..a3f1c82ec95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004085,src_000467,time_554796,execs_1563200,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004086,src_003127,time_554963,execs_1564213,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004086,src_003127,time_554963,execs_1564213,op_havoc,rep_2 new file mode 100644 index 00000000000..754697480ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004086,src_003127,time_554963,execs_1564213,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004087,src_003127,time_555044,execs_1564773,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004087,src_003127,time_555044,execs_1564773,op_havoc,rep_1 new file mode 100644 index 00000000000..007f36d90cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004087,src_003127,time_555044,execs_1564773,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004089,src_003840,time_555364,execs_1566943,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004089,src_003840,time_555364,execs_1566943,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..df1fa433a5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004089,src_003840,time_555364,execs_1566943,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004090,src_003840,time_555434,execs_1567398,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004090,src_003840,time_555434,execs_1567398,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..efc4dd75f2e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004090,src_003840,time_555434,execs_1567398,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004091,src_003840,time_555458,execs_1567545,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004091,src_003840,time_555458,execs_1567545,op_havoc,rep_7 new file mode 100644 index 00000000000..f20b15c7781 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004091,src_003840,time_555458,execs_1567545,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004092,src_003840,time_555473,execs_1567646,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004092,src_003840,time_555473,execs_1567646,op_havoc,rep_4 new file mode 100644 index 00000000000..f61844b61d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004092,src_003840,time_555473,execs_1567646,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004093,src_003840,time_555586,execs_1568382,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004093,src_003840,time_555586,execs_1568382,op_havoc,rep_6 new file mode 100644 index 00000000000..e4dd8c78880 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004093,src_003840,time_555586,execs_1568382,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004094,src_003840,time_555607,execs_1568518,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004094,src_003840,time_555607,execs_1568518,op_havoc,rep_6 new file mode 100644 index 00000000000..3c43bae9484 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004094,src_003840,time_555607,execs_1568518,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004095,src_003840,time_556438,execs_1573852,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004095,src_003840,time_556438,execs_1573852,op_havoc,rep_4 new file mode 100644 index 00000000000..271e9e00bcd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004095,src_003840,time_556438,execs_1573852,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004096,src_001496,time_556981,execs_1576707,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004096,src_001496,time_556981,execs_1576707,op_havoc,rep_7 new file mode 100644 index 00000000000..3a0b0412b5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004096,src_001496,time_556981,execs_1576707,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004099,src_003146,time_557490,execs_1578907,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004099,src_003146,time_557490,execs_1578907,op_havoc,rep_4 new file mode 100644 index 00000000000..43539018c81 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004099,src_003146,time_557490,execs_1578907,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004101,src_003146,time_558368,execs_1583859,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004101,src_003146,time_558368,execs_1583859,op_havoc,rep_14 new file mode 100644 index 00000000000..33395497acb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004101,src_003146,time_558368,execs_1583859,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004102,src_003611,time_558947,execs_1587260,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004102,src_003611,time_558947,execs_1587260,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..6a0bee22764 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004102,src_003611,time_558947,execs_1587260,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004103,src_003611,time_558993,execs_1587550,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004103,src_003611,time_558993,execs_1587550,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..ba33162bcf5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004103,src_003611,time_558993,execs_1587550,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004104,src_003611,time_559056,execs_1587958,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004104,src_003611,time_559056,execs_1587958,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..69e6ed59402 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004104,src_003611,time_559056,execs_1587958,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004105,src_003611,time_559101,execs_1588276,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004105,src_003611,time_559101,execs_1588276,op_havoc,rep_3 new file mode 100644 index 00000000000..ed8575061c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004105,src_003611,time_559101,execs_1588276,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004106,src_003611,time_560035,execs_1594543,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004106,src_003611,time_560035,execs_1594543,op_havoc,rep_3 new file mode 100644 index 00000000000..75d49623742 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004106,src_003611,time_560035,execs_1594543,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004108,src_004077,time_560742,execs_1598526,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004108,src_004077,time_560742,execs_1598526,op_havoc,rep_11 new file mode 100644 index 00000000000..4f997550ca8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004108,src_004077,time_560742,execs_1598526,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004109,src_004077,time_560783,execs_1598589,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004109,src_004077,time_560783,execs_1598589,op_havoc,rep_16 new file mode 100644 index 00000000000..6dac79e31ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004109,src_004077,time_560783,execs_1598589,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004112,src_004077,time_561055,execs_1599041,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004112,src_004077,time_561055,execs_1599041,op_havoc,rep_5 new file mode 100644 index 00000000000..42021611857 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004112,src_004077,time_561055,execs_1599041,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004114,src_004077,time_561100,execs_1599113,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004114,src_004077,time_561100,execs_1599113,op_havoc,rep_14 new file mode 100644 index 00000000000..2b9edd0fede Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004114,src_004077,time_561100,execs_1599113,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004115,src_004077,time_561159,execs_1599225,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004115,src_004077,time_561159,execs_1599225,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..d8ca88a519a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004115,src_004077,time_561159,execs_1599225,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004116,src_004077,time_561257,execs_1599392,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004116,src_004077,time_561257,execs_1599392,op_havoc,rep_8 new file mode 100644 index 00000000000..953a7c6e992 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004116,src_004077,time_561257,execs_1599392,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004117,src_004077,time_561467,execs_1599742,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004117,src_004077,time_561467,execs_1599742,op_havoc,rep_8 new file mode 100644 index 00000000000..68f61df3e23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004117,src_004077,time_561467,execs_1599742,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004119,src_004077,time_562607,execs_1601712,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004119,src_004077,time_562607,execs_1601712,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..ac58732bacd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004119,src_004077,time_562607,execs_1601712,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004120,src_004077,time_562968,execs_1602363,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004120,src_004077,time_562968,execs_1602363,op_havoc,rep_16 new file mode 100644 index 00000000000..2ab80c6505a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004120,src_004077,time_562968,execs_1602363,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004122,src_004077,time_564845,execs_1605681,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004122,src_004077,time_564845,execs_1605681,op_havoc,rep_8 new file mode 100644 index 00000000000..32b4760d501 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004122,src_004077,time_564845,execs_1605681,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004123,src_004077,time_564885,execs_1605753,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004123,src_004077,time_564885,execs_1605753,op_havoc,rep_12 new file mode 100644 index 00000000000..32d760f91a9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004123,src_004077,time_564885,execs_1605753,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004126,src_004077,time_566978,execs_1609461,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004126,src_004077,time_566978,execs_1609461,op_havoc,rep_10 new file mode 100644 index 00000000000..8793d70c26a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004126,src_004077,time_566978,execs_1609461,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004128,src_004077,time_567364,execs_1610125,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004128,src_004077,time_567364,execs_1610125,op_havoc,rep_15 new file mode 100644 index 00000000000..4ab862964f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004128,src_004077,time_567364,execs_1610125,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004130,src_004077,time_567825,execs_1610925,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004130,src_004077,time_567825,execs_1610925,op_havoc,rep_13 new file mode 100644 index 00000000000..58e6c4c6634 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004130,src_004077,time_567825,execs_1610925,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004131,src_001572,time_568153,execs_1611491,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004131,src_001572,time_568153,execs_1611491,op_havoc,rep_3 new file mode 100644 index 00000000000..bcd43515e5a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004131,src_001572,time_568153,execs_1611491,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004132,src_004037,time_568522,execs_1612494,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004132,src_004037,time_568522,execs_1612494,op_havoc,rep_3 new file mode 100644 index 00000000000..8d9015e213c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004132,src_004037,time_568522,execs_1612494,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004133,src_004037,time_568589,execs_1612847,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004133,src_004037,time_568589,execs_1612847,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..58fb457ccbd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004133,src_004037,time_568589,execs_1612847,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004134,src_004037,time_568710,execs_1613527,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004134,src_004037,time_568710,execs_1613527,op_havoc,rep_6 new file mode 100644 index 00000000000..bc6ef77e313 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004134,src_004037,time_568710,execs_1613527,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004135,src_004037,time_568913,execs_1614724,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004135,src_004037,time_568913,execs_1614724,op_havoc,rep_12 new file mode 100644 index 00000000000..dd79a894691 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004135,src_004037,time_568913,execs_1614724,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004136,src_004037,time_569303,execs_1616982,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004136,src_004037,time_569303,execs_1616982,op_havoc,rep_14 new file mode 100644 index 00000000000..15ada7c39a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004136,src_004037,time_569303,execs_1616982,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004137,src_004037,time_569317,execs_1617053,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004137,src_004037,time_569317,execs_1617053,op_havoc,rep_6 new file mode 100644 index 00000000000..1e242d4c3c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004137,src_004037,time_569317,execs_1617053,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004138,src_002011,time_569876,execs_1620478,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004138,src_002011,time_569876,execs_1620478,op_havoc,rep_2 new file mode 100644 index 00000000000..8c23ef47c0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004138,src_002011,time_569876,execs_1620478,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004139,src_003965,time_569981,execs_1621233,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004139,src_003965,time_569981,execs_1621233,op_havoc,rep_1 new file mode 100644 index 00000000000..da3c1529698 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004139,src_003965,time_569981,execs_1621233,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004140,src_001656,time_570170,execs_1622467,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004140,src_001656,time_570170,execs_1622467,op_havoc,rep_2 new file mode 100644 index 00000000000..c156577a87f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004140,src_001656,time_570170,execs_1622467,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004141,src_002579,time_570278,execs_1622769,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004141,src_002579,time_570278,execs_1622769,op_havoc,rep_1 new file mode 100644 index 00000000000..d15a6c705c7 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004141,src_002579,time_570278,execs_1622769,op_havoc,rep_1 @@ -0,0 +1,2 @@ +Â1AA% +1õÿÿo E;ùg, WoÂÙÂÂg, Woo r[?0069rhE;ùg, WoÂÙÂÂg, Woo r[?0069r[?0069h[;ù \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004142,src_002579,time_570325,execs_1623095,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004142,src_002579,time_570325,execs_1623095,op_havoc,rep_2 new file mode 100644 index 00000000000..7dd8c826540 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004142,src_002579,time_570325,execs_1623095,op_havoc,rep_2 @@ -0,0 +1,2 @@ + Woo r[?0069r[Â1AA%, Woo r[?0069r[?0069h[;ù +1õÿÿo hE;ùg, WoÂÙÂÂg, Woo r[?0069r[?0069h[;ù \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004144,src_004079,time_570532,execs_1624615,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004144,src_004079,time_570532,execs_1624615,op_havoc,rep_7 new file mode 100644 index 00000000000..e76872f0e65 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004144,src_004079,time_570532,execs_1624615,op_havoc,rep_7 @@ -0,0 +1 @@ +]9;4;0ù[Kh€€€€l9h0ù[[0m]9;4;0€€leKhD5;0€€l9hù[KhC5]9;4;0ù[[0m]9;4;0€€l9hù[KhC5]9;4;0ù[[0m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004146,src_004079,time_570971,execs_1627606,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004146,src_004079,time_570971,execs_1627606,op_havoc,rep_8 new file mode 100644 index 00000000000..6913dc2d54f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004146,src_004079,time_570971,execs_1627606,op_havoc,rep_8 @@ -0,0 +1 @@ +hD5]9;4;ù0ù[KhD5]9;4;0ù*** €l9T]9;4;ù[KhD5]9;4;0ù[[0meKhD5]9;4;ù[KhD5]9;4;0ù[[0m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004147,src_004079,time_571000,execs_1627802,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004147,src_004079,time_571000,execs_1627802,op_havoc,rep_8 new file mode 100644 index 00000000000..e07e8d46584 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004147,src_004079,time_571000,execs_1627802,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004148,src_004079,time_571235,execs_1629430,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004148,src_004079,time_571235,execs_1629430,op_havoc,rep_8 new file mode 100644 index 00000000000..d31d3c594f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004148,src_004079,time_571235,execs_1629430,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004149,src_004079,time_571319,execs_1629988,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004149,src_004079,time_571319,execs_1629988,op_havoc,rep_5 new file mode 100644 index 00000000000..022411471bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004149,src_004079,time_571319,execs_1629988,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004150,src_004079,time_571550,execs_1631547,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004150,src_004079,time_571550,execs_1631547,op_havoc,rep_3 new file mode 100644 index 00000000000..f0779cefb20 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004150,src_004079,time_571550,execs_1631547,op_havoc,rep_3 @@ -0,0 +1 @@ +*[KhD5l]9;4;4ù[hD5l]9;4;4ù[[0m \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004152,src_004079,time_571677,execs_1632413,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004152,src_004079,time_571677,execs_1632413,op_havoc,rep_7 new file mode 100644 index 00000000000..35301fe113c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004152,src_004079,time_571677,execs_1632413,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004154,src_003571,time_572001,execs_1634575,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004154,src_003571,time_572001,execs_1634575,op_havoc,rep_3 new file mode 100644 index 00000000000..b6bf4d3544d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004154,src_003571,time_572001,execs_1634575,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004155,src_003571,time_572026,execs_1634749,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004155,src_003571,time_572026,execs_1634749,op_havoc,rep_3 new file mode 100644 index 00000000000..7d7f3950c32 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004155,src_003571,time_572026,execs_1634749,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004160,src_003571,time_572262,execs_1636398,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004160,src_003571,time_572262,execs_1636398,op_havoc,rep_4 new file mode 100644 index 00000000000..8eb61a68c63 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004160,src_003571,time_572262,execs_1636398,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004161,src_003571,time_572263,execs_1636406,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004161,src_003571,time_572263,execs_1636406,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..1c9b808f123 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004161,src_003571,time_572263,execs_1636406,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004162,src_003571,time_572410,execs_1637432,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004162,src_003571,time_572410,execs_1637432,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..41567ae9ffc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004162,src_003571,time_572410,execs_1637432,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004164,src_003571,time_572619,execs_1638834,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004164,src_003571,time_572619,execs_1638834,op_havoc,rep_4 new file mode 100644 index 00000000000..9666691aecb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004164,src_003571,time_572619,execs_1638834,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004165,src_003571,time_572830,execs_1640303,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004165,src_003571,time_572830,execs_1640303,op_havoc,rep_4 new file mode 100644 index 00000000000..92df9212338 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004165,src_003571,time_572830,execs_1640303,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004166,src_003571,time_573040,execs_1641741,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004166,src_003571,time_573040,execs_1641741,op_havoc,rep_4 new file mode 100644 index 00000000000..47f8628f386 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004166,src_003571,time_573040,execs_1641741,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004169,src_003515,time_573463,execs_1644624,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004169,src_003515,time_573463,execs_1644624,op_havoc,rep_3 new file mode 100644 index 00000000000..61ad2bc22bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004169,src_003515,time_573463,execs_1644624,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004170,src_003515,time_573505,execs_1644796,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004170,src_003515,time_573505,execs_1644796,op_havoc,rep_3 new file mode 100644 index 00000000000..c70ee5e84b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004170,src_003515,time_573505,execs_1644796,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004171,src_003515,time_573704,execs_1645595,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004171,src_003515,time_573704,execs_1645595,op_havoc,rep_4 new file mode 100644 index 00000000000..121fad51e86 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004171,src_003515,time_573704,execs_1645595,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004172,src_003515,time_574430,execs_1648676,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004172,src_003515,time_574430,execs_1648676,op_havoc,rep_8 new file mode 100644 index 00000000000..43ce3095d55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004172,src_003515,time_574430,execs_1648676,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004174,src_003515,time_574945,execs_1650848,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004174,src_003515,time_574945,execs_1650848,op_havoc,rep_1 new file mode 100644 index 00000000000..5f46a16ff68 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004174,src_003515,time_574945,execs_1650848,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004176,src_003322,time_575788,execs_1654365,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004176,src_003322,time_575788,execs_1654365,op_havoc,rep_4 new file mode 100644 index 00000000000..e0bedca447c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004176,src_003322,time_575788,execs_1654365,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004178,src_003415,time_576337,execs_1656682,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004178,src_003415,time_576337,execs_1656682,op_havoc,rep_4 new file mode 100644 index 00000000000..28a8d1f631b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004178,src_003415,time_576337,execs_1656682,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004179,src_003415,time_576371,execs_1656887,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004179,src_003415,time_576371,execs_1656887,op_havoc,rep_2 new file mode 100644 index 00000000000..5a53960d0a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004179,src_003415,time_576371,execs_1656887,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004180,src_003415,time_576464,execs_1657506,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004180,src_003415,time_576464,execs_1657506,op_havoc,rep_4 new file mode 100644 index 00000000000..68af53f95ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004180,src_003415,time_576464,execs_1657506,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004181,src_003415,time_576708,execs_1659064,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004181,src_003415,time_576708,execs_1659064,op_havoc,rep_4 new file mode 100644 index 00000000000..5d114786ee6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004181,src_003415,time_576708,execs_1659064,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004182,src_001771,time_577806,execs_1666341,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004182,src_001771,time_577806,execs_1666341,op_havoc,rep_9 new file mode 100644 index 00000000000..ebc827d24e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004182,src_001771,time_577806,execs_1666341,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004184,src_001771,time_577888,execs_1666626,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004184,src_001771,time_577888,execs_1666626,op_havoc,rep_15 new file mode 100644 index 00000000000..664086ca83d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004184,src_001771,time_577888,execs_1666626,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004185,src_001771,time_578063,execs_1667234,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004185,src_001771,time_578063,execs_1667234,op_havoc,rep_6 new file mode 100644 index 00000000000..89c2b6f74f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004185,src_001771,time_578063,execs_1667234,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004186,src_001771,time_578358,execs_1668257,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004186,src_001771,time_578358,execs_1668257,op_havoc,rep_15 new file mode 100644 index 00000000000..ab2f50faf1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004186,src_001771,time_578358,execs_1668257,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004187,src_001771,time_580375,execs_1675057,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004187,src_001771,time_580375,execs_1675057,op_havoc,rep_14 new file mode 100644 index 00000000000..3a5557dbfd8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004187,src_001771,time_580375,execs_1675057,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004188,src_002434,time_580665,execs_1676222,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004188,src_002434,time_580665,execs_1676222,op_havoc,rep_3 new file mode 100644 index 00000000000..f4715975b52 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004188,src_002434,time_580665,execs_1676222,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004189,src_002434,time_580728,execs_1676647,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004189,src_002434,time_580728,execs_1676647,op_havoc,rep_4 new file mode 100644 index 00000000000..2d48f295a31 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004189,src_002434,time_580728,execs_1676647,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004190,src_003744,time_581025,execs_1678262,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004190,src_003744,time_581025,execs_1678262,op_havoc,rep_2 new file mode 100644 index 00000000000..01f35c55c74 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004190,src_003744,time_581025,execs_1678262,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004191,src_003512,time_581300,execs_1678994,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004191,src_003512,time_581300,execs_1678994,op_havoc,rep_15 new file mode 100644 index 00000000000..64146b55579 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004191,src_003512,time_581300,execs_1678994,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004194,src_004145,time_581738,execs_1680896,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004194,src_004145,time_581738,execs_1680896,op_havoc,rep_8 new file mode 100644 index 00000000000..a3578a5dca5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004194,src_004145,time_581738,execs_1680896,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004195,src_004145,time_581783,execs_1681189,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004195,src_004145,time_581783,execs_1681189,op_havoc,rep_5 new file mode 100644 index 00000000000..951c6abcdb7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004195,src_004145,time_581783,execs_1681189,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004196,src_004145,time_582024,execs_1682763,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004196,src_004145,time_582024,execs_1682763,op_havoc,rep_7 new file mode 100644 index 00000000000..818b71d0a2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004196,src_004145,time_582024,execs_1682763,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004197,src_004145,time_582649,execs_1686833,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004197,src_004145,time_582649,execs_1686833,op_havoc,rep_5 new file mode 100644 index 00000000000..c0a8a087ea3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004197,src_004145,time_582649,execs_1686833,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004199,src_004145,time_582873,execs_1688328,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004199,src_004145,time_582873,execs_1688328,op_havoc,rep_8 new file mode 100644 index 00000000000..30035aed7d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004199,src_004145,time_582873,execs_1688328,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004200,src_003653,time_583511,execs_1692536,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004200,src_003653,time_583511,execs_1692536,op_havoc,rep_8 new file mode 100644 index 00000000000..f4adbe73aa6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004200,src_003653,time_583511,execs_1692536,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004201,src_003653,time_583626,execs_1693227,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004201,src_003653,time_583626,execs_1693227,op_havoc,rep_6 new file mode 100644 index 00000000000..ed7c4ce54a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004201,src_003653,time_583626,execs_1693227,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004202,src_002755,time_583951,execs_1695334,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004202,src_002755,time_583951,execs_1695334,op_havoc,rep_7 new file mode 100644 index 00000000000..beea93c5e06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004202,src_002755,time_583951,execs_1695334,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004203,src_002831,time_584215,execs_1696510,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004203,src_002831,time_584215,execs_1696510,op_havoc,rep_2 new file mode 100644 index 00000000000..f0ee8e1fdb7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004203,src_002831,time_584215,execs_1696510,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004206,src_001799,time_584434,execs_1697670,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004206,src_001799,time_584434,execs_1697670,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..a79b7f7db55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004206,src_001799,time_584434,execs_1697670,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004213,src_001799,time_584966,execs_1701133,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004213,src_001799,time_584966,execs_1701133,op_havoc,rep_14 new file mode 100644 index 00000000000..adf3cc7d413 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004213,src_001799,time_584966,execs_1701133,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004217,src_001799,time_585723,execs_1705871,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004217,src_001799,time_585723,execs_1705871,op_havoc,rep_14 new file mode 100644 index 00000000000..3f029f5ee4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004217,src_001799,time_585723,execs_1705871,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004218,src_001799,time_585727,execs_1705894,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004218,src_001799,time_585727,execs_1705894,op_havoc,rep_13 new file mode 100644 index 00000000000..4825a829800 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004218,src_001799,time_585727,execs_1705894,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004220,src_001799,time_585848,execs_1706687,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004220,src_001799,time_585848,execs_1706687,op_havoc,rep_5 new file mode 100644 index 00000000000..91a9f3d2fd9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004220,src_001799,time_585848,execs_1706687,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004221,src_003780,time_585946,execs_1707351,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004221,src_003780,time_585946,execs_1707351,op_havoc,rep_8 new file mode 100644 index 00000000000..9e63b3d4fa9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004221,src_003780,time_585946,execs_1707351,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004222,src_003780,time_585952,execs_1707393,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004222,src_003780,time_585952,execs_1707393,op_havoc,rep_6 new file mode 100644 index 00000000000..a91eb914363 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004222,src_003780,time_585952,execs_1707393,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004223,src_003780,time_585974,execs_1707529,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004223,src_003780,time_585974,execs_1707529,op_havoc,rep_4 new file mode 100644 index 00000000000..aee0ae06e9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004223,src_003780,time_585974,execs_1707529,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004224,src_003780,time_586019,execs_1707800,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004224,src_003780,time_586019,execs_1707800,op_havoc,rep_8 new file mode 100644 index 00000000000..3812e552802 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004224,src_003780,time_586019,execs_1707800,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004225,src_003776,time_587378,execs_1716987,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004225,src_003776,time_587378,execs_1716987,op_havoc,rep_2 new file mode 100644 index 00000000000..77f2c068e4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004225,src_003776,time_587378,execs_1716987,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004226,src_003369,time_587651,execs_1718266,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004226,src_003369,time_587651,execs_1718266,op_havoc,rep_4 new file mode 100644 index 00000000000..deb48f10666 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004226,src_003369,time_587651,execs_1718266,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004227,src_003369,time_587790,execs_1719212,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004227,src_003369,time_587790,execs_1719212,op_havoc,rep_4 new file mode 100644 index 00000000000..4847d030ea4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004227,src_003369,time_587790,execs_1719212,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004228,src_001988,time_588017,execs_1720708,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004228,src_001988,time_588017,execs_1720708,op_havoc,rep_10 new file mode 100644 index 00000000000..c28cde58a4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004228,src_001988,time_588017,execs_1720708,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004229,src_001988,time_588113,execs_1721131,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004229,src_001988,time_588113,execs_1721131,op_havoc,rep_8 new file mode 100644 index 00000000000..48d69da20be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004229,src_001988,time_588113,execs_1721131,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004231,src_001943,time_588656,execs_1723739,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004231,src_001943,time_588656,execs_1723739,op_havoc,rep_1 new file mode 100644 index 00000000000..5fa46ac5f05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004231,src_001943,time_588656,execs_1723739,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004232,src_001943,time_588704,execs_1724009,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004232,src_001943,time_588704,execs_1724009,op_havoc,rep_1 new file mode 100644 index 00000000000..c247514af18 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004232,src_001943,time_588704,execs_1724009,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004233,src_004219,time_588984,execs_1725587,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004233,src_004219,time_588984,execs_1725587,op_havoc,rep_1 new file mode 100644 index 00000000000..d84d1d868fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004233,src_004219,time_588984,execs_1725587,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004234,src_004219,time_589013,execs_1725786,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004234,src_004219,time_589013,execs_1725786,op_havoc,rep_4 new file mode 100644 index 00000000000..4747403617a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004234,src_004219,time_589013,execs_1725786,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004235,src_004219,time_589066,execs_1726112,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004235,src_004219,time_589066,execs_1726112,op_havoc,rep_4 new file mode 100644 index 00000000000..2592bd20051 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004235,src_004219,time_589066,execs_1726112,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004236,src_004219,time_589099,execs_1726344,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004236,src_004219,time_589099,execs_1726344,op_havoc,rep_4 new file mode 100644 index 00000000000..01b19629633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004236,src_004219,time_589099,execs_1726344,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004237,src_003926,time_589737,execs_1730867,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004237,src_003926,time_589737,execs_1730867,op_havoc,rep_4 new file mode 100644 index 00000000000..9859ecf2acf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004237,src_003926,time_589737,execs_1730867,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004239,src_004134,time_590104,execs_1732648,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004239,src_004134,time_590104,execs_1732648,op_havoc,rep_2 new file mode 100644 index 00000000000..0790d5e3feb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004239,src_004134,time_590104,execs_1732648,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004240,src_004134,time_590289,execs_1733898,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004240,src_004134,time_590289,execs_1733898,op_havoc,rep_4 new file mode 100644 index 00000000000..7ce23fe01e0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004240,src_004134,time_590289,execs_1733898,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004241,src_002700,time_590822,execs_1737535,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004241,src_002700,time_590822,execs_1737535,op_havoc,rep_2 new file mode 100644 index 00000000000..764e049aae2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004241,src_002700,time_590822,execs_1737535,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004242,src_003904,time_590937,execs_1738383,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004242,src_003904,time_590937,execs_1738383,op_havoc,rep_2 new file mode 100644 index 00000000000..4a0782fa340 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004242,src_003904,time_590937,execs_1738383,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004243,src_003500,time_591339,execs_1740885,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004243,src_003500,time_591339,execs_1740885,op_havoc,rep_2 new file mode 100644 index 00000000000..f0720c3eb2f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004243,src_003500,time_591339,execs_1740885,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004244,src_003256,time_591457,execs_1741705,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004244,src_003256,time_591457,execs_1741705,op_havoc,rep_3 new file mode 100644 index 00000000000..259aab77761 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004244,src_003256,time_591457,execs_1741705,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004245,src_003622,time_591652,execs_1743099,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004245,src_003622,time_591652,execs_1743099,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..b851f5056b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004245,src_003622,time_591652,execs_1743099,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004246,src_003630,time_591828,execs_1744205,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004246,src_003630,time_591828,execs_1744205,op_havoc,rep_8 new file mode 100644 index 00000000000..ae4aba93345 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004246,src_003630,time_591828,execs_1744205,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004247,src_003630,time_591912,execs_1744754,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004247,src_003630,time_591912,execs_1744754,op_havoc,rep_8 new file mode 100644 index 00000000000..939a802566f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004247,src_003630,time_591912,execs_1744754,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004248,src_003630,time_591920,execs_1744809,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004248,src_003630,time_591920,execs_1744809,op_havoc,rep_6 new file mode 100644 index 00000000000..d146f4ff0c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004248,src_003630,time_591920,execs_1744809,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004249,src_004022,time_592523,execs_1748872,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004249,src_004022,time_592523,execs_1748872,op_havoc,rep_5 new file mode 100644 index 00000000000..2f776f52051 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004249,src_004022,time_592523,execs_1748872,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004250,src_004022,time_592540,execs_1748977,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004250,src_004022,time_592540,execs_1748977,op_havoc,rep_8 new file mode 100644 index 00000000000..f167d498252 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004250,src_004022,time_592540,execs_1748977,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004251,src_004022,time_592546,execs_1749016,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004251,src_004022,time_592546,execs_1749016,op_havoc,rep_6 new file mode 100644 index 00000000000..b7316471b0a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004251,src_004022,time_592546,execs_1749016,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004252,src_004022,time_592564,execs_1749139,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004252,src_004022,time_592564,execs_1749139,op_havoc,rep_6 new file mode 100644 index 00000000000..c20242b28ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004252,src_004022,time_592564,execs_1749139,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004253,src_004022,time_592963,execs_1751751,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004253,src_004022,time_592963,execs_1751751,op_havoc,rep_3 new file mode 100644 index 00000000000..f9e0a4cc602 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004253,src_004022,time_592963,execs_1751751,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004254,src_003685,time_594045,execs_1758961,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004254,src_003685,time_594045,execs_1758961,op_havoc,rep_16 new file mode 100644 index 00000000000..b67aa5471b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004254,src_003685,time_594045,execs_1758961,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004256,src_003828,time_594288,execs_1760440,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004256,src_003828,time_594288,execs_1760440,op_havoc,rep_3 new file mode 100644 index 00000000000..d84ceaa98cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004256,src_003828,time_594288,execs_1760440,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004257,src_003828,time_594295,execs_1760484,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004257,src_003828,time_594295,execs_1760484,op_havoc,rep_2 new file mode 100644 index 00000000000..2062943eacf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004257,src_003828,time_594295,execs_1760484,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004259,src_003694,time_595099,execs_1766084,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004259,src_003694,time_595099,execs_1766084,op_havoc,rep_4 new file mode 100644 index 00000000000..2ed89305fc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004259,src_003694,time_595099,execs_1766084,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004260,src_003736,time_595389,execs_1767961,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004260,src_003736,time_595389,execs_1767961,op_havoc,rep_7 new file mode 100644 index 00000000000..e35f9470076 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004260,src_003736,time_595389,execs_1767961,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004262,src_004198,time_595687,execs_1769377,op_flip1,pos_38,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004262,src_004198,time_595687,execs_1769377,op_flip1,pos_38,+cov new file mode 100644 index 00000000000..5c6fe4f23af --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004262,src_004198,time_595687,execs_1769377,op_flip1,pos_38,+cov @@ -0,0 +1 @@ +***heKhD5]9;4;2]66;6¢¢¢¢¢¢Š¢¢lo3:4;]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004264,src_004198,time_595795,execs_1770168,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004264,src_004198,time_595795,execs_1770168,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..be3429a1529 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004264,src_004198,time_595795,execs_1770168,op_havoc,rep_1,+cov @@ -0,0 +1 @@ +***heKhD5]9;4;2]66;6¢¢Š¢¢lo3;4;]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004265,src_004198,time_595915,execs_1771024,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004265,src_004198,time_595915,execs_1771024,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ffba6076f19 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004265,src_004198,time_595915,execs_1771024,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +***heKhD5]9;4;4;]9;4;2]66;6¢¢¢¢¢¢Š¢¢lo3;4;]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004268,src_004198,time_596108,execs_1772386,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004268,src_004198,time_596108,execs_1772386,op_havoc,rep_1 new file mode 100644 index 00000000000..f82d765b7f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004268,src_004198,time_596108,execs_1772386,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004269,src_004198,time_596371,execs_1774316,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004269,src_004198,time_596371,execs_1774316,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..2695d00c996 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004269,src_004198,time_596371,execs_1774316,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004271,src_004198,time_596483,execs_1775083,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004271,src_004198,time_596483,execs_1775083,op_havoc,rep_2 new file mode 100644 index 00000000000..fe6c1304a9d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004271,src_004198,time_596483,execs_1775083,op_havoc,rep_2 @@ -0,0 +1 @@ +***heKhD5]9;4;24;2]66;6¢¢o3;4]66;6¢¢¢¢¢¢Š¢¢l4;2]66;6¢¢4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004273,src_004198,time_600107,execs_1801584,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004273,src_004198,time_600107,execs_1801584,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..147acc77133 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004273,src_004198,time_600107,execs_1801584,op_havoc,rep_1,+cov @@ -0,0 +1 @@ +***heKhD5]9;4;2]66;6¢¢¢¢¢¢Š¢¢lo3;4 層B333333mredfp4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004274,src_004198,time_600868,execs_1807187,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004274,src_004198,time_600868,execs_1807187,op_havoc,rep_2 new file mode 100644 index 00000000000..73dd5c38fa8 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004274,src_004198,time_600868,execs_1807187,op_havoc,rep_2 @@ -0,0 +1 @@ +*;]9;4;30ù[4;2]66;6¢¢¢¢¢¢Š¢¢lo3;4;]9;4;30ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004275,src_003397,time_601055,execs_1808397,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004275,src_003397,time_601055,execs_1808397,op_havoc,rep_2 new file mode 100644 index 00000000000..b6e94f2b0c1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004275,src_003397,time_601055,execs_1808397,op_havoc,rep_2 @@ -0,0 +1 @@ +//tW5;¸­ €)ÌA! €)ÌA! €)ÌA! »)ÌB! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004276,src_003397,time_601059,execs_1808429,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004276,src_003397,time_601059,execs_1808429,op_havoc,rep_2 new file mode 100644 index 00000000000..03a92aa9fdf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004276,src_003397,time_601059,execs_1808429,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004277,src_003397,time_601342,execs_1810478,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004277,src_003397,time_601342,execs_1810478,op_havoc,rep_2 new file mode 100644 index 00000000000..99711b37e00 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004277,src_003397,time_601342,execs_1810478,op_havoc,rep_2 @@ -0,0 +1 @@ +øïJ rldôøïJïJ rldôùïJ rldôøïJïJ rldô)ÌA! \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004278,src_002500,time_601834,execs_1813705,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004278,src_002500,time_601834,execs_1813705,op_havoc,rep_2 new file mode 100644 index 00000000000..2305401283c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004278,src_002500,time_601834,execs_1813705,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004279,src_002562,time_601916,execs_1814302,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004279,src_002562,time_601916,execs_1814302,op_havoc,rep_10 new file mode 100644 index 00000000000..1ae846eedc1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004279,src_002562,time_601916,execs_1814302,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004283,src_004073,time_603139,execs_1817024,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004283,src_004073,time_603139,execs_1817024,op_havoc,rep_3 new file mode 100644 index 00000000000..e3bf93300da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004283,src_004073,time_603139,execs_1817024,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004284,src_002752,time_603393,execs_1817873,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004284,src_002752,time_603393,execs_1817873,op_havoc,rep_6 new file mode 100644 index 00000000000..d77bb924c2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004284,src_002752,time_603393,execs_1817873,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004285,src_002752,time_603466,execs_1818335,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004285,src_002752,time_603466,execs_1818335,op_havoc,rep_16 new file mode 100644 index 00000000000..823ee6b3096 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004285,src_002752,time_603466,execs_1818335,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004286,src_002752,time_603683,execs_1819645,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004286,src_002752,time_603683,execs_1819645,op_havoc,rep_10 new file mode 100644 index 00000000000..40e568c850a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004286,src_002752,time_603683,execs_1819645,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004287,src_004089,time_604174,execs_1822695,op_quick,pos_79,val_+5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004287,src_004089,time_604174,execs_1822695,op_quick,pos_79,val_+5 new file mode 100644 index 00000000000..57c772531bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004287,src_004089,time_604174,execs_1822695,op_quick,pos_79,val_+5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004288,src_004089,time_604304,execs_1823488,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004288,src_004089,time_604304,execs_1823488,op_havoc,rep_6 new file mode 100644 index 00000000000..1ee4e4a08b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004288,src_004089,time_604304,execs_1823488,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004289,src_004089,time_604426,execs_1824133,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004289,src_004089,time_604426,execs_1824133,op_havoc,rep_8 new file mode 100644 index 00000000000..67abe30320e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004289,src_004089,time_604426,execs_1824133,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004290,src_002108,time_605825,execs_1832561,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004290,src_002108,time_605825,execs_1832561,op_havoc,rep_1 new file mode 100644 index 00000000000..a9147921fac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004290,src_002108,time_605825,execs_1832561,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004291,src_002108,time_605852,execs_1832769,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004291,src_002108,time_605852,execs_1832769,op_havoc,rep_2 new file mode 100644 index 00000000000..54eb1d4e4eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004291,src_002108,time_605852,execs_1832769,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004292,src_002115,time_606007,execs_1833942,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004292,src_002115,time_606007,execs_1833942,op_havoc,rep_2 new file mode 100644 index 00000000000..9280324975d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004292,src_002115,time_606007,execs_1833942,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004293,src_002115,time_606019,execs_1834025,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004293,src_002115,time_606019,execs_1834025,op_havoc,rep_2 new file mode 100644 index 00000000000..28ecc6be220 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004293,src_002115,time_606019,execs_1834025,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004294,src_002115,time_606037,execs_1834150,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004294,src_002115,time_606037,execs_1834150,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..6fc9e80edf5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004294,src_002115,time_606037,execs_1834150,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004296,src_003001,time_607172,execs_1840334,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004296,src_003001,time_607172,execs_1840334,op_havoc,rep_1 new file mode 100644 index 00000000000..a17fbc374a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004296,src_003001,time_607172,execs_1840334,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004297,src_003491,time_607267,execs_1840995,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004297,src_003491,time_607267,execs_1840995,op_havoc,rep_12 new file mode 100644 index 00000000000..c4b59d22cb9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004297,src_003491,time_607267,execs_1840995,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004298,src_003491,time_607269,execs_1841008,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004298,src_003491,time_607269,execs_1841008,op_havoc,rep_9 new file mode 100644 index 00000000000..ac5bd1cbe2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004298,src_003491,time_607269,execs_1841008,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004299,src_003491,time_607793,execs_1843062,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004299,src_003491,time_607793,execs_1843062,op_havoc,rep_12 new file mode 100644 index 00000000000..6981254e3af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004299,src_003491,time_607793,execs_1843062,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004300,src_003491,time_608135,execs_1844936,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004300,src_003491,time_608135,execs_1844936,op_havoc,rep_14 new file mode 100644 index 00000000000..c8ca9e5e532 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004300,src_003491,time_608135,execs_1844936,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004304,src_003857,time_609976,execs_1855740,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004304,src_003857,time_609976,execs_1855740,op_havoc,rep_4 new file mode 100644 index 00000000000..ae08fd0fec5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004304,src_003857,time_609976,execs_1855740,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004305,src_003857,time_610118,execs_1856717,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004305,src_003857,time_610118,execs_1856717,op_havoc,rep_6 new file mode 100644 index 00000000000..4c5dd7546b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004305,src_003857,time_610118,execs_1856717,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004306,src_002604,time_610550,execs_1859183,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004306,src_002604,time_610550,execs_1859183,op_havoc,rep_3 new file mode 100644 index 00000000000..dc6ba6f491d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004306,src_002604,time_610550,execs_1859183,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004307,src_002806,time_610638,execs_1859780,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004307,src_002806,time_610638,execs_1859780,op_havoc,rep_4 new file mode 100644 index 00000000000..cc91aee5a4d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004307,src_002806,time_610638,execs_1859780,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004308,src_002806,time_610640,execs_1859795,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004308,src_002806,time_610640,execs_1859795,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..1b86df41517 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004308,src_002806,time_610640,execs_1859795,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004310,src_002806,time_610644,execs_1859823,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004310,src_002806,time_610644,execs_1859823,op_havoc,rep_3 new file mode 100644 index 00000000000..e7011300902 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004310,src_002806,time_610644,execs_1859823,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004311,src_002806,time_610688,execs_1860100,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004311,src_002806,time_610688,execs_1860100,op_havoc,rep_6 new file mode 100644 index 00000000000..2dd821fd8a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004311,src_002806,time_610688,execs_1860100,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004312,src_002806,time_611029,execs_1862171,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004312,src_002806,time_611029,execs_1862171,op_havoc,rep_10 new file mode 100644 index 00000000000..c46dc50b3b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004312,src_002806,time_611029,execs_1862171,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004314,src_002806,time_611570,execs_1864498,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004314,src_002806,time_611570,execs_1864498,op_havoc,rep_14 new file mode 100644 index 00000000000..9d39f121a2f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004314,src_002806,time_611570,execs_1864498,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004315,src_002806,time_611765,execs_1865697,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004315,src_002806,time_611765,execs_1865697,op_havoc,rep_13 new file mode 100644 index 00000000000..b0ed76f5449 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004315,src_002806,time_611765,execs_1865697,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004318,src_003946,time_612450,execs_1869767,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004318,src_003946,time_612450,execs_1869767,op_havoc,rep_1 new file mode 100644 index 00000000000..14744ae7679 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004318,src_003946,time_612450,execs_1869767,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004320,src_003946,time_612528,execs_1870211,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004320,src_003946,time_612528,execs_1870211,op_havoc,rep_7 new file mode 100644 index 00000000000..c81c0bf2efa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004320,src_003946,time_612528,execs_1870211,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004321,src_002209,time_612879,execs_1872356,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004321,src_002209,time_612879,execs_1872356,op_havoc,rep_11 new file mode 100644 index 00000000000..4c70d2a033d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004321,src_002209,time_612879,execs_1872356,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004322,src_002944,time_612992,execs_1872931,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004322,src_002944,time_612992,execs_1872931,op_havoc,rep_2 new file mode 100644 index 00000000000..b5aece8e6bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004322,src_002944,time_612992,execs_1872931,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004323,src_002944,time_613016,execs_1873099,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004323,src_002944,time_613016,execs_1873099,op_havoc,rep_1 new file mode 100644 index 00000000000..0a2f8cba1cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004323,src_002944,time_613016,execs_1873099,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004324,src_004199,time_613404,execs_1875125,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004324,src_004199,time_613404,execs_1875125,op_havoc,rep_2 new file mode 100644 index 00000000000..0c4b9cdba2d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004324,src_004199,time_613404,execs_1875125,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004325,src_004199,time_613459,execs_1875495,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004325,src_004199,time_613459,execs_1875495,op_havoc,rep_4 new file mode 100644 index 00000000000..ca47e46d4f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004325,src_004199,time_613459,execs_1875495,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004326,src_004199,time_613557,execs_1876145,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004326,src_004199,time_613557,execs_1876145,op_havoc,rep_4 new file mode 100644 index 00000000000..c112e898769 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004326,src_004199,time_613557,execs_1876145,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004327,src_004199,time_613571,execs_1876210,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004327,src_004199,time_613571,execs_1876210,op_havoc,rep_4 new file mode 100644 index 00000000000..99af90be7fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004327,src_004199,time_613571,execs_1876210,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004331,src_003411,time_614939,execs_1885321,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004331,src_003411,time_614939,execs_1885321,op_havoc,rep_2 new file mode 100644 index 00000000000..c1e3fd1d6ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004331,src_003411,time_614939,execs_1885321,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004332,src_004093,time_615135,execs_1886702,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004332,src_004093,time_615135,execs_1886702,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..ecef9ff867c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004332,src_004093,time_615135,execs_1886702,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004333,src_003703,time_615354,execs_1888232,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004333,src_003703,time_615354,execs_1888232,op_havoc,rep_11 new file mode 100644 index 00000000000..911cc35a67e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004333,src_003703,time_615354,execs_1888232,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004334,src_004269,time_615573,execs_1889571,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004334,src_004269,time_615573,execs_1889571,op_havoc,rep_4 new file mode 100644 index 00000000000..ea7c71f89e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004334,src_004269,time_615573,execs_1889571,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004335,src_004269,time_615577,execs_1889591,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004335,src_004269,time_615577,execs_1889591,op_havoc,rep_8 new file mode 100644 index 00000000000..1a100dcc107 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004335,src_004269,time_615577,execs_1889591,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004342,src_002262,time_618921,execs_1893406,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004342,src_002262,time_618921,execs_1893406,op_havoc,rep_1 new file mode 100644 index 00000000000..8616331b8df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004342,src_002262,time_618921,execs_1893406,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004345,src_002262,time_620474,execs_1893681,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004345,src_002262,time_620474,execs_1893681,op_havoc,rep_2 new file mode 100644 index 00000000000..e546e7d6086 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004345,src_002262,time_620474,execs_1893681,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004346,src_002262,time_623627,execs_1894241,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004346,src_002262,time_623627,execs_1894241,op_havoc,rep_2 new file mode 100644 index 00000000000..89fba4f40bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004346,src_002262,time_623627,execs_1894241,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004350,src_002262,time_628960,execs_1895181,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004350,src_002262,time_628960,execs_1895181,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..fe02292d047 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004350,src_002262,time_628960,execs_1895181,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004353,src_002262,time_638832,execs_1896939,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004353,src_002262,time_638832,execs_1896939,op_havoc,rep_1 new file mode 100644 index 00000000000..4b65954ef02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004353,src_002262,time_638832,execs_1896939,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004356,src_002262,time_656251,execs_1900004,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004356,src_002262,time_656251,execs_1900004,op_havoc,rep_2 new file mode 100644 index 00000000000..54bfb0db357 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004356,src_002262,time_656251,execs_1900004,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004357,src_002262,time_659648,execs_1900598,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004357,src_002262,time_659648,execs_1900598,op_havoc,rep_2 new file mode 100644 index 00000000000..156069f686b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004357,src_002262,time_659648,execs_1900598,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004360,src_002262,time_669651,execs_1902371,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004360,src_002262,time_669651,execs_1902371,op_havoc,rep_1 new file mode 100644 index 00000000000..87d25adec4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004360,src_002262,time_669651,execs_1902371,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004361,src_003534,time_671767,execs_1902878,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004361,src_003534,time_671767,execs_1902878,op_havoc,rep_3 new file mode 100644 index 00000000000..7264b917bcf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004361,src_003534,time_671767,execs_1902878,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004362,src_003534,time_671842,execs_1903361,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004362,src_003534,time_671842,execs_1903361,op_havoc,rep_8 new file mode 100644 index 00000000000..2cf4ceab1f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004362,src_003534,time_671842,execs_1903361,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004363,src_003534,time_671864,execs_1903500,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004363,src_003534,time_671864,execs_1903500,op_havoc,rep_8 new file mode 100644 index 00000000000..638de1137ea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004363,src_003534,time_671864,execs_1903500,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004364,src_003534,time_672239,execs_1905940,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004364,src_003534,time_672239,execs_1905940,op_havoc,rep_8 new file mode 100644 index 00000000000..006fadb41c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004364,src_003534,time_672239,execs_1905940,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004365,src_003534,time_672736,execs_1909217,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004365,src_003534,time_672736,execs_1909217,op_havoc,rep_7 new file mode 100644 index 00000000000..f15423ba930 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004365,src_003534,time_672736,execs_1909217,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004366,src_003534,time_672795,execs_1909604,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004366,src_003534,time_672795,execs_1909604,op_havoc,rep_5 new file mode 100644 index 00000000000..ed0f01f2016 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004366,src_003534,time_672795,execs_1909604,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004367,src_002334,time_673252,execs_1912569,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004367,src_002334,time_673252,execs_1912569,op_havoc,rep_8 new file mode 100644 index 00000000000..128648cd2cc --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004367,src_002334,time_673252,execs_1912569,op_havoc,rep_8 @@ -0,0 +1,4 @@ +hh9h[?45h['45h9h9h[?4aor[1 +l[1 +l +;155h['45h[?1049h \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004368,src_002334,time_673266,execs_1912626,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004368,src_002334,time_673266,execs_1912626,op_havoc,rep_5 new file mode 100644 index 00000000000..0bca2bd7830 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004368,src_002334,time_673266,execs_1912626,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004369,src_002334,time_673361,execs_1913260,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004369,src_002334,time_673361,execs_1913260,op_havoc,rep_2 new file mode 100644 index 00000000000..354c1d98fa7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004369,src_002334,time_673361,execs_1913260,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004370,src_002334,time_673452,execs_1913881,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004370,src_002334,time_673452,execs_1913881,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..72295249df2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004370,src_002334,time_673452,execs_1913881,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004371,src_002334,time_673476,execs_1914041,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004371,src_002334,time_673476,execs_1914041,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..5ff1aead639 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004371,src_002334,time_673476,execs_1914041,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004372,src_002334,time_673785,execs_1916103,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004372,src_002334,time_673785,execs_1916103,op_havoc,rep_7 new file mode 100644 index 00000000000..93a9c87065e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004372,src_002334,time_673785,execs_1916103,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004373,src_002334,time_674212,execs_1918875,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004373,src_002334,time_674212,execs_1918875,op_havoc,rep_8 new file mode 100644 index 00000000000..f2e1bb9d98f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004373,src_002334,time_674212,execs_1918875,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004374,src_002334,time_674512,execs_1920870,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004374,src_002334,time_674512,execs_1920870,op_havoc,rep_3 new file mode 100644 index 00000000000..b5bd416fdc9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004374,src_002334,time_674512,execs_1920870,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004375,src_002334,time_674703,execs_1922080,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004375,src_002334,time_674703,execs_1922080,op_havoc,rep_2 new file mode 100644 index 00000000000..45ffb1a2db0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004375,src_002334,time_674703,execs_1922080,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004382,src_004163,time_675965,execs_1923398,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004382,src_004163,time_675965,execs_1923398,op_havoc,rep_10 new file mode 100644 index 00000000000..6b5ea78e0b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004382,src_004163,time_675965,execs_1923398,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004385,src_004163,time_676322,execs_1923706,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004385,src_004163,time_676322,execs_1923706,op_havoc,rep_13 new file mode 100644 index 00000000000..80d3d6704b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004385,src_004163,time_676322,execs_1923706,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004386,src_004163,time_676346,execs_1923805,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004386,src_004163,time_676346,execs_1923805,op_havoc,rep_10 new file mode 100644 index 00000000000..f03d35a78cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004386,src_004163,time_676346,execs_1923805,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004388,src_004163,time_676456,execs_1924179,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004388,src_004163,time_676456,execs_1924179,op_havoc,rep_6 new file mode 100644 index 00000000000..057794c357b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004388,src_004163,time_676456,execs_1924179,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004390,src_004163,time_676558,execs_1924505,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004390,src_004163,time_676558,execs_1924505,op_havoc,rep_7 new file mode 100644 index 00000000000..c6dbd2c4e81 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004390,src_004163,time_676558,execs_1924505,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004391,src_004163,time_677900,execs_1926930,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004391,src_004163,time_677900,execs_1926930,op_havoc,rep_8 new file mode 100644 index 00000000000..7964617119c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004391,src_004163,time_677900,execs_1926930,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004392,src_004163,time_679031,execs_1930018,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004392,src_004163,time_679031,execs_1930018,op_havoc,rep_14 new file mode 100644 index 00000000000..182518e68c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004392,src_004163,time_679031,execs_1930018,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004397,src_004371,time_680357,execs_1932636,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004397,src_004371,time_680357,execs_1932636,op_havoc,rep_2 new file mode 100644 index 00000000000..7a886811009 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004397,src_004371,time_680357,execs_1932636,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004398,src_003111,time_680616,execs_1934393,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004398,src_003111,time_680616,execs_1934393,op_havoc,rep_16 new file mode 100644 index 00000000000..727a824a0ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004398,src_003111,time_680616,execs_1934393,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004399,src_003111,time_680623,execs_1934419,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004399,src_003111,time_680623,execs_1934419,op_havoc,rep_6 new file mode 100644 index 00000000000..244967ee463 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004399,src_003111,time_680623,execs_1934419,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004400,src_003111,time_680734,execs_1934948,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004400,src_003111,time_680734,execs_1934948,op_havoc,rep_9 new file mode 100644 index 00000000000..3edce92e1c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004400,src_003111,time_680734,execs_1934948,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004401,src_000347,time_681664,execs_1939284,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004401,src_000347,time_681664,execs_1939284,op_havoc,rep_2 new file mode 100644 index 00000000000..2ddb9ff8b11 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004401,src_000347,time_681664,execs_1939284,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004402,src_002815,time_681748,execs_1939890,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004402,src_002815,time_681748,execs_1939890,op_havoc,rep_11 new file mode 100644 index 00000000000..563491a7f46 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004402,src_002815,time_681748,execs_1939890,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004403,src_004148,time_681950,execs_1941098,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004403,src_004148,time_681950,execs_1941098,op_havoc,rep_1 new file mode 100644 index 00000000000..2f8722c6104 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004403,src_004148,time_681950,execs_1941098,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004404,src_004148,time_682054,execs_1941804,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004404,src_004148,time_682054,execs_1941804,op_havoc,rep_3 new file mode 100644 index 00000000000..7d89d7506bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004404,src_004148,time_682054,execs_1941804,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004405,src_001618,time_682335,execs_1943577,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004405,src_001618,time_682335,execs_1943577,op_havoc,rep_1 new file mode 100644 index 00000000000..9c237972b73 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004405,src_001618,time_682335,execs_1943577,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004407,src_003811,time_682816,execs_1945286,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004407,src_003811,time_682816,execs_1945286,op_havoc,rep_1 new file mode 100644 index 00000000000..859fad0e09a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004407,src_003811,time_682816,execs_1945286,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004408,src_002408,time_682987,execs_1946513,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004408,src_002408,time_682987,execs_1946513,op_havoc,rep_3 new file mode 100644 index 00000000000..c03cb166ad7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004408,src_002408,time_682987,execs_1946513,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004409,src_002408,time_683041,execs_1946764,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004409,src_002408,time_683041,execs_1946764,op_havoc,rep_9 new file mode 100644 index 00000000000..972d3d5acdd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004409,src_002408,time_683041,execs_1946764,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004412,src_004329,time_683353,execs_1948456,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004412,src_004329,time_683353,execs_1948456,op_havoc,rep_8 new file mode 100644 index 00000000000..1a6683de5e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004412,src_004329,time_683353,execs_1948456,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004415,src_002415,time_684481,execs_1955332,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004415,src_002415,time_684481,execs_1955332,op_havoc,rep_1 new file mode 100644 index 00000000000..53d22354805 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004415,src_002415,time_684481,execs_1955332,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004416,src_002415,time_684500,execs_1955448,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004416,src_002415,time_684500,execs_1955448,op_havoc,rep_2 new file mode 100644 index 00000000000..0baca4d81a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004416,src_002415,time_684500,execs_1955448,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004417,src_004264,time_684679,execs_1956563,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004417,src_004264,time_684679,execs_1956563,op_havoc,rep_1 new file mode 100644 index 00000000000..0fc5046a0ba --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004417,src_004264,time_684679,execs_1956563,op_havoc,rep_1 @@ -0,0 +1 @@ +***h;2]66;6¢¢Š¢¢lo3;4;]9;4;2eKhD5]9;4;2]66;6¢¢Š¢¢lo3;4;]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004418,src_002445,time_684996,execs_1958835,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004418,src_002445,time_684996,execs_1958835,op_havoc,rep_4 new file mode 100644 index 00000000000..d2987200e36 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004418,src_002445,time_684996,execs_1958835,op_havoc,rep_4 @@ -0,0 +1,3 @@ +[l:kÇ]4;4:]Ç]4;422;Ç]4;4:]Ç]4;422;[48 +]]ÄÇ]4;422;[48 +]]0 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004419,src_004023,time_685116,execs_1959610,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004419,src_004023,time_685116,execs_1959610,op_havoc,rep_3 new file mode 100644 index 00000000000..2892210ef37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004419,src_004023,time_685116,execs_1959610,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004420,src_003464,time_685443,execs_1961111,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004420,src_003464,time_685443,execs_1961111,op_havoc,rep_1 new file mode 100644 index 00000000000..5b731b6a5b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004420,src_003464,time_685443,execs_1961111,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004421,src_003464,time_685449,execs_1961151,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004421,src_003464,time_685449,execs_1961151,op_havoc,rep_2 new file mode 100644 index 00000000000..6c9741581ae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004421,src_003464,time_685449,execs_1961151,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004422,src_003464,time_685470,execs_1961290,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004422,src_003464,time_685470,execs_1961290,op_havoc,rep_2 new file mode 100644 index 00000000000..3f3c7052306 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004422,src_003464,time_685470,execs_1961290,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004425,src_003464,time_685782,execs_1963633,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004425,src_003464,time_685782,execs_1963633,op_havoc,rep_2 new file mode 100644 index 00000000000..dd82a3c72ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004425,src_003464,time_685782,execs_1963633,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004427,src_003464,time_686554,execs_1969516,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004427,src_003464,time_686554,execs_1969516,op_havoc,rep_2 new file mode 100644 index 00000000000..ec3d8d1dfb5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004427,src_003464,time_686554,execs_1969516,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004428,src_002467,time_686727,execs_1970784,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004428,src_002467,time_686727,execs_1970784,op_havoc,rep_1 new file mode 100644 index 00000000000..f8baf9c67e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004428,src_002467,time_686727,execs_1970784,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004430,src_003274,time_687274,execs_1974194,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004430,src_003274,time_687274,execs_1974194,op_havoc,rep_4 new file mode 100644 index 00000000000..75c1aa00f12 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004430,src_003274,time_687274,execs_1974194,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004431,src_003274,time_687306,execs_1974356,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004431,src_003274,time_687306,execs_1974356,op_havoc,rep_14 new file mode 100644 index 00000000000..fef7724f5c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004431,src_003274,time_687306,execs_1974356,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004432,src_003274,time_687364,execs_1974678,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004432,src_003274,time_687364,execs_1974678,op_havoc,rep_16 new file mode 100644 index 00000000000..822dc0dc4d6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004432,src_003274,time_687364,execs_1974678,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004433,src_003274,time_687426,execs_1975021,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004433,src_003274,time_687426,execs_1975021,op_havoc,rep_5 new file mode 100644 index 00000000000..cf1c0bec238 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004433,src_003274,time_687426,execs_1975021,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004434,src_003502,time_688102,execs_1979113,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004434,src_003502,time_688102,execs_1979113,op_havoc,rep_1 new file mode 100644 index 00000000000..bc4702e4c5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004434,src_003502,time_688102,execs_1979113,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004435,src_003502,time_688124,execs_1979257,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004435,src_003502,time_688124,execs_1979257,op_havoc,rep_8 new file mode 100644 index 00000000000..d8936a64621 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004435,src_003502,time_688124,execs_1979257,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004436,src_004414,time_688473,execs_1981554,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004436,src_004414,time_688473,execs_1981554,op_havoc,rep_7 new file mode 100644 index 00000000000..29e071440d5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004436,src_004414,time_688473,execs_1981554,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004439,src_004414,time_688526,execs_1981865,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004439,src_004414,time_688526,execs_1981865,op_havoc,rep_7 new file mode 100644 index 00000000000..c18942872bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004439,src_004414,time_688526,execs_1981865,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004441,src_004414,time_688884,execs_1984117,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004441,src_004414,time_688884,execs_1984117,op_havoc,rep_8 new file mode 100644 index 00000000000..3cb0bd74aa9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004441,src_004414,time_688884,execs_1984117,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004442,src_004414,time_689012,execs_1984913,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004442,src_004414,time_689012,execs_1984913,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..c314cdddfa5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004442,src_004414,time_689012,execs_1984913,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004443,src_004414,time_689037,execs_1985061,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004443,src_004414,time_689037,execs_1985061,op_havoc,rep_4 new file mode 100644 index 00000000000..7f8b8092983 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004443,src_004414,time_689037,execs_1985061,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004445,src_004129,time_689861,execs_1989419,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004445,src_004129,time_689861,execs_1989419,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..3d3fa5e8e06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004445,src_004129,time_689861,execs_1989419,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004448,src_004129,time_690122,execs_1989866,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004448,src_004129,time_690122,execs_1989866,op_havoc,rep_3 new file mode 100644 index 00000000000..001b061a4ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004448,src_004129,time_690122,execs_1989866,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004452,src_004129,time_691125,execs_1991544,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004452,src_004129,time_691125,execs_1991544,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..0cf0e076beb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004452,src_004129,time_691125,execs_1991544,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004455,src_003974,time_695672,execs_1999185,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004455,src_003974,time_695672,execs_1999185,op_havoc,rep_2 new file mode 100644 index 00000000000..2d32b5ae3f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004455,src_003974,time_695672,execs_1999185,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004456,src_003974,time_695693,execs_1999335,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004456,src_003974,time_695693,execs_1999335,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..40d96ba66f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004456,src_003974,time_695693,execs_1999335,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004457,src_003974,time_695752,execs_1999767,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004457,src_003974,time_695752,execs_1999767,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..19eb16aeea0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004457,src_003974,time_695752,execs_1999767,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004458,src_002582,time_696374,execs_2004089,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004458,src_002582,time_696374,execs_2004089,op_havoc,rep_3 new file mode 100644 index 00000000000..1a8a4487d85 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004458,src_002582,time_696374,execs_2004089,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004459,src_002582,time_696387,execs_2004178,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004459,src_002582,time_696387,execs_2004178,op_havoc,rep_8 new file mode 100644 index 00000000000..f3e393ac99b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004459,src_002582,time_696387,execs_2004178,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004460,src_002583,time_696552,execs_2005322,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004460,src_002583,time_696552,execs_2005322,op_havoc,rep_7 new file mode 100644 index 00000000000..7920e18ff5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004460,src_002583,time_696552,execs_2005322,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004461,src_002583,time_696593,execs_2005587,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004461,src_002583,time_696593,execs_2005587,op_havoc,rep_4 new file mode 100644 index 00000000000..6cba7d5ad2d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004461,src_002583,time_696593,execs_2005587,op_havoc,rep_4 @@ -0,0 +1,3 @@ +Â1Ad% +555555ö! +5a!ýlo,ííí]115E;ù,ííí]115EE;ù,ííí]115E;ùg, Wo;ùg, WoÂÙ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004463,src_004447,time_696826,execs_2006800,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004463,src_004447,time_696826,execs_2006800,op_havoc,rep_8 new file mode 100644 index 00000000000..47814d3536e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004463,src_004447,time_696826,execs_2006800,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004464,src_004447,time_696851,execs_2006810,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004464,src_004447,time_696851,execs_2006810,op_havoc,rep_5 new file mode 100644 index 00000000000..9d3e61a0cd1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004464,src_004447,time_696851,execs_2006810,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004465,src_004447,time_697339,execs_2008266,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004465,src_004447,time_697339,execs_2008266,op_havoc,rep_8 new file mode 100644 index 00000000000..42671260d37 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004465,src_004447,time_697339,execs_2008266,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004466,src_004447,time_698475,execs_2011728,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004466,src_004447,time_698475,execs_2011728,op_havoc,rep_7 new file mode 100644 index 00000000000..93f5481ee12 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004466,src_004447,time_698475,execs_2011728,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004468,src_004447,time_699167,execs_2013911,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004468,src_004447,time_699167,execs_2013911,op_havoc,rep_6 new file mode 100644 index 00000000000..3ceb0e66470 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004468,src_004447,time_699167,execs_2013911,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004469,src_002823,time_699924,execs_2016526,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004469,src_002823,time_699924,execs_2016526,op_havoc,rep_2 new file mode 100644 index 00000000000..3876ef4f01d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004469,src_002823,time_699924,execs_2016526,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004470,src_002823,time_699934,execs_2016592,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004470,src_002823,time_699934,execs_2016592,op_havoc,rep_2 new file mode 100644 index 00000000000..2c63a18245e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004470,src_002823,time_699934,execs_2016592,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004471,src_002688,time_700145,execs_2018072,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004471,src_002688,time_700145,execs_2018072,op_havoc,rep_8 new file mode 100644 index 00000000000..c177cd55fd4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004471,src_002688,time_700145,execs_2018072,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004472,src_003320,time_700301,execs_2019011,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004472,src_003320,time_700301,execs_2019011,op_havoc,rep_6 new file mode 100644 index 00000000000..316e23db0f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004472,src_003320,time_700301,execs_2019011,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004473,src_004150,time_700634,execs_2021221,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004473,src_004150,time_700634,execs_2021221,op_havoc,rep_3 new file mode 100644 index 00000000000..aa68ea210b6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004473,src_004150,time_700634,execs_2021221,op_havoc,rep_3 @@ -0,0 +1 @@ +*/[KhD#l]9;4;4ù[hD5l]9[2P]9;4;4ù[hD5l]9;4;4ù[[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004474,src_004059,time_700888,execs_2022770,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004474,src_004059,time_700888,execs_2022770,op_havoc,rep_2 new file mode 100644 index 00000000000..1726532bb55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004474,src_004059,time_700888,execs_2022770,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004476,src_002971,time_701109,execs_2024384,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004476,src_002971,time_701109,execs_2024384,op_havoc,rep_8 new file mode 100644 index 00000000000..ca4fb82b9fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004476,src_002971,time_701109,execs_2024384,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004478,src_002971,time_701197,execs_2024977,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004478,src_002971,time_701197,execs_2024977,op_havoc,rep_5 new file mode 100644 index 00000000000..ae901cb35ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004478,src_002971,time_701197,execs_2024977,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004479,src_002971,time_701235,execs_2025244,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004479,src_002971,time_701235,execs_2025244,op_havoc,rep_4 new file mode 100644 index 00000000000..e36f351c86a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004479,src_002971,time_701235,execs_2025244,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004480,src_002971,time_701384,execs_2026255,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004480,src_002971,time_701384,execs_2026255,op_havoc,rep_7 new file mode 100644 index 00000000000..5915d7eefeb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004480,src_002971,time_701384,execs_2026255,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004481,src_002971,time_701408,execs_2026415,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004481,src_002971,time_701408,execs_2026415,op_havoc,rep_5 new file mode 100644 index 00000000000..6a47a2c738d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004481,src_002971,time_701408,execs_2026415,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004482,src_002971,time_701778,execs_2028927,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004482,src_002971,time_701778,execs_2028927,op_havoc,rep_8 new file mode 100644 index 00000000000..f7b7e2dae8b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004482,src_002971,time_701778,execs_2028927,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004483,src_002971,time_701811,execs_2029149,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004483,src_002971,time_701811,execs_2029149,op_havoc,rep_3 new file mode 100644 index 00000000000..0ac574bd476 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004483,src_002971,time_701811,execs_2029149,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004484,src_002971,time_701822,execs_2029222,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004484,src_002971,time_701822,execs_2029222,op_havoc,rep_7 new file mode 100644 index 00000000000..d49b60a080f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004484,src_002971,time_701822,execs_2029222,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004485,src_002696,time_702479,execs_2033611,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004485,src_002696,time_702479,execs_2033611,op_havoc,rep_4 new file mode 100644 index 00000000000..131f5cfd77a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004485,src_002696,time_702479,execs_2033611,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004486,src_002696,time_702489,execs_2033670,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004486,src_002696,time_702489,execs_2033670,op_havoc,rep_4 new file mode 100644 index 00000000000..d24cb78e3a6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004486,src_002696,time_702489,execs_2033670,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004487,src_002909,time_703008,execs_2036976,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004487,src_002909,time_703008,execs_2036976,op_havoc,rep_4 new file mode 100644 index 00000000000..a7d4f78b3f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004487,src_002909,time_703008,execs_2036976,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004488,src_002909,time_703044,execs_2037238,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004488,src_002909,time_703044,execs_2037238,op_havoc,rep_3 new file mode 100644 index 00000000000..eeceb3e5fff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004488,src_002909,time_703044,execs_2037238,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004490,src_004244,time_703360,execs_2039526,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004490,src_004244,time_703360,execs_2039526,op_havoc,rep_6 new file mode 100644 index 00000000000..20bbb582a33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004490,src_004244,time_703360,execs_2039526,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004491,src_004244,time_703392,execs_2039736,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004491,src_004244,time_703392,execs_2039736,op_havoc,rep_7 new file mode 100644 index 00000000000..d7bb5e9b405 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004491,src_004244,time_703392,execs_2039736,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004492,src_004244,time_703495,execs_2040398,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004492,src_004244,time_703495,execs_2040398,op_havoc,rep_8 new file mode 100644 index 00000000000..c9881413eaf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004492,src_004244,time_703495,execs_2040398,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004493,src_004244,time_703542,execs_2040702,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004493,src_004244,time_703542,execs_2040702,op_havoc,rep_6 new file mode 100644 index 00000000000..f20c866a7ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004493,src_004244,time_703542,execs_2040702,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004494,src_004467,time_705007,execs_2049565,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004494,src_004467,time_705007,execs_2049565,op_havoc,rep_4 new file mode 100644 index 00000000000..84967886c77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004494,src_004467,time_705007,execs_2049565,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004495,src_004467,time_705129,execs_2049594,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004495,src_004467,time_705129,execs_2049594,op_havoc,rep_3 new file mode 100644 index 00000000000..cf87e2f0f5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004495,src_004467,time_705129,execs_2049594,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004496,src_004467,time_705215,execs_2049833,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004496,src_004467,time_705215,execs_2049833,op_havoc,rep_6 new file mode 100644 index 00000000000..8f698e34745 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004496,src_004467,time_705215,execs_2049833,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004498,src_004467,time_706128,execs_2052113,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004498,src_004467,time_706128,execs_2052113,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..0af5c9fdc0d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004498,src_004467,time_706128,execs_2052113,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004499,src_004467,time_706310,execs_2052589,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004499,src_004467,time_706310,execs_2052589,op_havoc,rep_7 new file mode 100644 index 00000000000..60b70262dd2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004499,src_004467,time_706310,execs_2052589,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004501,src_004467,time_706696,execs_2053238,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004501,src_004467,time_706696,execs_2053238,op_havoc,rep_7 new file mode 100644 index 00000000000..d054fe94e1e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004501,src_004467,time_706696,execs_2053238,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004502,src_004467,time_707205,execs_2054449,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004502,src_004467,time_707205,execs_2054449,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..8dbab11c95b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004502,src_004467,time_707205,execs_2054449,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004503,src_004467,time_708471,execs_2057551,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004503,src_004467,time_708471,execs_2057551,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..00e85f42e5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004503,src_004467,time_708471,execs_2057551,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004504,src_002717,time_709087,execs_2059082,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004504,src_002717,time_709087,execs_2059082,op_havoc,rep_6 new file mode 100644 index 00000000000..bb51bb6464b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004504,src_002717,time_709087,execs_2059082,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004505,src_004366,time_709196,execs_2059783,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004505,src_004366,time_709196,execs_2059783,op_havoc,rep_2 new file mode 100644 index 00000000000..1b7e0828227 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004505,src_004366,time_709196,execs_2059783,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004506,src_004319,time_709383,execs_2061038,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004506,src_004319,time_709383,execs_2061038,op_havoc,rep_2 new file mode 100644 index 00000000000..65e4b2e3a48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004506,src_004319,time_709383,execs_2061038,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004507,src_004319,time_709499,execs_2061762,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004507,src_004319,time_709499,execs_2061762,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..0a9be0a6d5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004507,src_004319,time_709499,execs_2061762,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004508,src_002719,time_709765,execs_2063530,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004508,src_002719,time_709765,execs_2063530,op_havoc,rep_3 new file mode 100644 index 00000000000..6138ce6ba1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004508,src_002719,time_709765,execs_2063530,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004509,src_004275,time_710180,execs_2064440,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004509,src_004275,time_710180,execs_2064440,op_havoc,rep_3 new file mode 100644 index 00000000000..4960fd4ce8e --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004509,src_004275,time_710180,execs_2064440,op_havoc,rep_3 @@ -0,0 +1 @@ +//tW5;¸¸­ €)ÌA!¸¸­ €)ÌA! €)ÌA! €)ÌA! €)ÌA! »)ÌB­ €)ÌA! €)ÌA! €)ÌA! »)ÌB \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004510,src_003942,time_710301,execs_2065338,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004510,src_003942,time_710301,execs_2065338,op_havoc,rep_2 new file mode 100644 index 00000000000..8f9acbf8a63 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004510,src_003942,time_710301,execs_2065338,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004511,src_003659,time_710578,execs_2066644,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004511,src_003659,time_710578,execs_2066644,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..792f58b9e86 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004511,src_003659,time_710578,execs_2066644,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004512,src_003659,time_710583,execs_2066673,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004512,src_003659,time_710583,execs_2066673,op_havoc,rep_9 new file mode 100644 index 00000000000..52cafa330e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004512,src_003659,time_710583,execs_2066673,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004513,src_003659,time_710775,execs_2067569,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004513,src_003659,time_710775,execs_2067569,op_havoc,rep_7 new file mode 100644 index 00000000000..c8752c67be2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004513,src_003659,time_710775,execs_2067569,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004514,src_003659,time_710867,execs_2068096,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004514,src_003659,time_710867,execs_2068096,op_havoc,rep_3 new file mode 100644 index 00000000000..c5e28fe7af8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004514,src_003659,time_710867,execs_2068096,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004515,src_003659,time_711486,execs_2071317,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004515,src_003659,time_711486,execs_2071317,op_havoc,rep_10 new file mode 100644 index 00000000000..10f05121ba2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004515,src_003659,time_711486,execs_2071317,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004516,src_003659,time_711501,execs_2071413,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004516,src_003659,time_711501,execs_2071413,op_havoc,rep_16 new file mode 100644 index 00000000000..5883e70540d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004516,src_003659,time_711501,execs_2071413,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004518,src_003315,time_713961,execs_2077181,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004518,src_003315,time_713961,execs_2077181,op_havoc,rep_2 new file mode 100644 index 00000000000..dbfcff388c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004518,src_003315,time_713961,execs_2077181,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004519,src_003315,time_714030,execs_2077668,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004519,src_003315,time_714030,execs_2077668,op_havoc,rep_1 new file mode 100644 index 00000000000..10d18763c45 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004519,src_003315,time_714030,execs_2077668,op_havoc,rep_1 @@ -0,0 +1 @@ +1lñZ5h[?1l[?10?1049h[>q 1lñZ5h[?1lñZ‰ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004520,src_003315,time_714127,execs_2078377,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004520,src_003315,time_714127,execs_2078377,op_havoc,rep_1 new file mode 100644 index 00000000000..92b807ab4b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004520,src_003315,time_714127,execs_2078377,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004521,src_003315,time_714231,execs_2079127,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004521,src_003315,time_714231,execs_2079127,op_havoc,rep_2 new file mode 100644 index 00000000000..905ccecdd0e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004521,src_003315,time_714231,execs_2079127,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004522,src_003315,time_714797,execs_2083293,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004522,src_003315,time_714797,execs_2083293,op_havoc,rep_2 new file mode 100644 index 00000000000..5c1d5026b8d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004522,src_003315,time_714797,execs_2083293,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004524,src_002785,time_715611,execs_2086958,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004524,src_002785,time_715611,execs_2086958,op_havoc,rep_16 new file mode 100644 index 00000000000..1c4000f5545 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004524,src_002785,time_715611,execs_2086958,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004525,src_002837,time_716024,execs_2087513,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004525,src_002837,time_716024,execs_2087513,op_havoc,rep_8 new file mode 100644 index 00000000000..0581b138e13 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004525,src_002837,time_716024,execs_2087513,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004526,src_002837,time_716033,execs_2087569,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004526,src_002837,time_716033,execs_2087569,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..4f2a66227f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004526,src_002837,time_716033,execs_2087569,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004527,src_002837,time_716059,execs_2087724,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004527,src_002837,time_716059,execs_2087724,op_havoc,rep_13 new file mode 100644 index 00000000000..eae34b5ee42 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004527,src_002837,time_716059,execs_2087724,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004528,src_002837,time_716077,execs_2087837,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004528,src_002837,time_716077,execs_2087837,op_havoc,rep_13 new file mode 100644 index 00000000000..f0339a1370f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004528,src_002837,time_716077,execs_2087837,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004529,src_002837,time_716751,execs_2091516,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004529,src_002837,time_716751,execs_2091516,op_havoc,rep_15 new file mode 100644 index 00000000000..7b7b23d8390 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004529,src_002837,time_716751,execs_2091516,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004530,src_002837,time_717027,execs_2093049,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004530,src_002837,time_717027,execs_2093049,op_havoc,rep_7 new file mode 100644 index 00000000000..55b77d079e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004530,src_002837,time_717027,execs_2093049,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004532,src_004452,time_718568,execs_2097733,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004532,src_004452,time_718568,execs_2097733,op_havoc,rep_2 new file mode 100644 index 00000000000..69376546901 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004532,src_004452,time_718568,execs_2097733,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004533,src_003329,time_719041,execs_2098158,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004533,src_003329,time_719041,execs_2098158,op_havoc,rep_2 new file mode 100644 index 00000000000..690fb07f0df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004533,src_003329,time_719041,execs_2098158,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004534,src_003329,time_719160,execs_2098955,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004534,src_003329,time_719160,execs_2098955,op_havoc,rep_4 new file mode 100644 index 00000000000..8011ae369e0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004534,src_003329,time_719160,execs_2098955,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004535,src_002947,time_719589,execs_2101840,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004535,src_002947,time_719589,execs_2101840,op_havoc,rep_7 new file mode 100644 index 00000000000..1de5f85066e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004535,src_002947,time_719589,execs_2101840,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004536,src_003860,time_719679,execs_2102421,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004536,src_003860,time_719679,execs_2102421,op_havoc,rep_4 new file mode 100644 index 00000000000..f4136201827 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004536,src_003860,time_719679,execs_2102421,op_havoc,rep_4 @@ -0,0 +1,3 @@ +À»¶]133;N;6;k]8;mick]8;;g[0èck]8;¶ +]133;C;6;7À»¶ +]133;C;6;7;;9l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004537,src_003860,time_719699,execs_2102544,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004537,src_003860,time_719699,execs_2102544,op_havoc,rep_3 new file mode 100644 index 00000000000..78a3ef9b958 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004537,src_003860,time_719699,execs_2102544,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004538,src_003860,time_719735,execs_2102772,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004538,src_003860,time_719735,execs_2102772,op_havoc,rep_7 new file mode 100644 index 00000000000..68fff35a51d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004538,src_003860,time_719735,execs_2102772,op_havoc,rep_7 @@ -0,0 +1,6 @@ +À»¶ +]1]133 +]133]133 +5]133 +]133\133 +]1;C;6;7;;]1;C;6;7;<9l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004539,src_003860,time_719737,execs_2102786,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004539,src_003860,time_719737,execs_2102786,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..225577dc59f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004539,src_003860,time_719737,execs_2102786,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004541,src_003860,time_719899,execs_2103778,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004541,src_003860,time_719899,execs_2103778,op_havoc,rep_4 new file mode 100644 index 00000000000..f65d341cb79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004541,src_003860,time_719899,execs_2103778,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004543,src_003860,time_720217,execs_2105947,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004543,src_003860,time_720217,execs_2105947,op_havoc,rep_7 new file mode 100644 index 00000000000..d5981bc6e7a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004543,src_003860,time_720217,execs_2105947,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004545,src_003860,time_720699,execs_2109322,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004545,src_003860,time_720699,execs_2109322,op_havoc,rep_3 new file mode 100644 index 00000000000..2f58bc3aaf0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004545,src_003860,time_720699,execs_2109322,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004546,src_002973,time_721110,execs_2112116,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004546,src_002973,time_721110,execs_2112116,op_havoc,rep_4 new file mode 100644 index 00000000000..053abaccabb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004546,src_002973,time_721110,execs_2112116,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004547,src_004507,time_722137,execs_2113602,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004547,src_004507,time_722137,execs_2113602,op_havoc,rep_2 new file mode 100644 index 00000000000..4a91c2737e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004547,src_004507,time_722137,execs_2113602,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004548,src_003908,time_722417,execs_2115522,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004548,src_003908,time_722417,execs_2115522,op_havoc,rep_6 new file mode 100644 index 00000000000..a6cedd65782 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004548,src_003908,time_722417,execs_2115522,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004549,src_003908,time_722456,execs_2115735,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004549,src_003908,time_722456,execs_2115735,op_havoc,rep_4 new file mode 100644 index 00000000000..170d346be02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004549,src_003908,time_722456,execs_2115735,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004550,src_003063,time_722815,execs_2117954,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004550,src_003063,time_722815,execs_2117954,op_havoc,rep_14 new file mode 100644 index 00000000000..e8744f36596 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004550,src_003063,time_722815,execs_2117954,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004551,src_003063,time_722848,execs_2118169,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004551,src_003063,time_722848,execs_2118169,op_havoc,rep_11 new file mode 100644 index 00000000000..478ed5a1655 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004551,src_003063,time_722848,execs_2118169,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004552,src_003069,time_723253,execs_2120501,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004552,src_003069,time_723253,execs_2120501,op_havoc,rep_7 new file mode 100644 index 00000000000..341d6b7ec70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004552,src_003069,time_723253,execs_2120501,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004553,src_003069,time_723394,execs_2121368,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004553,src_003069,time_723394,execs_2121368,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..b83c0b1e340 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004553,src_003069,time_723394,execs_2121368,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004554,src_003077,time_723646,execs_2122812,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004554,src_003077,time_723646,execs_2122812,op_havoc,rep_3 new file mode 100644 index 00000000000..52b90fc1c48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004554,src_003077,time_723646,execs_2122812,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004555,src_003077,time_723651,execs_2122846,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004555,src_003077,time_723651,execs_2122846,op_havoc,rep_3 new file mode 100644 index 00000000000..b631c51d110 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004555,src_003077,time_723651,execs_2122846,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004556,src_003129,time_724006,execs_2125242,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004556,src_003129,time_724006,execs_2125242,op_havoc,rep_2 new file mode 100644 index 00000000000..e261ff1cb5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004556,src_003129,time_724006,execs_2125242,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004557,src_004294,time_724195,execs_2126508,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004557,src_004294,time_724195,execs_2126508,op_havoc,rep_4 new file mode 100644 index 00000000000..a2cedb239e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004557,src_004294,time_724195,execs_2126508,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004560,src_004064,time_724459,execs_2128282,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004560,src_004064,time_724459,execs_2128282,op_havoc,rep_8 new file mode 100644 index 00000000000..2f2b47d1e8b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004560,src_004064,time_724459,execs_2128282,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004561,src_004064,time_724658,execs_2129468,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004561,src_004064,time_724658,execs_2129468,op_havoc,rep_7 new file mode 100644 index 00000000000..f2a1c1439fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004561,src_004064,time_724658,execs_2129468,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004563,src_004064,time_725263,execs_2132820,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004563,src_004064,time_725263,execs_2132820,op_havoc,rep_16 new file mode 100644 index 00000000000..3cfa94a4e2f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004563,src_004064,time_725263,execs_2132820,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004564,src_004064,time_725358,execs_2133394,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004564,src_004064,time_725358,execs_2133394,op_havoc,rep_6 new file mode 100644 index 00000000000..785e1d79aae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004564,src_004064,time_725358,execs_2133394,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004566,src_004064,time_725448,execs_2133969,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004566,src_004064,time_725448,execs_2133969,op_havoc,rep_11 new file mode 100644 index 00000000000..ceaba5013c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004566,src_004064,time_725448,execs_2133969,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004567,src_004064,time_725588,execs_2134830,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004567,src_004064,time_725588,execs_2134830,op_havoc,rep_13 new file mode 100644 index 00000000000..895930cf23b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004567,src_004064,time_725588,execs_2134830,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004568,src_003132,time_726037,execs_2137504,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004568,src_003132,time_726037,execs_2137504,op_havoc,rep_4 new file mode 100644 index 00000000000..0fdd29a3ff5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004568,src_003132,time_726037,execs_2137504,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004569,src_003132,time_726041,execs_2137528,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004569,src_003132,time_726041,execs_2137528,op_havoc,rep_3 new file mode 100644 index 00000000000..828e7970ef9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004569,src_003132,time_726041,execs_2137528,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004570,src_003266,time_726515,execs_2140595,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004570,src_003266,time_726515,execs_2140595,op_havoc,rep_6 new file mode 100644 index 00000000000..64e7b245ec9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004570,src_003266,time_726515,execs_2140595,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004571,src_003543,time_726597,execs_2141105,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004571,src_003543,time_726597,execs_2141105,op_havoc,rep_3 new file mode 100644 index 00000000000..b9181cca476 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004571,src_003543,time_726597,execs_2141105,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004573,src_003543,time_726635,execs_2141351,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004573,src_003543,time_726635,execs_2141351,op_havoc,rep_6 new file mode 100644 index 00000000000..44cd1a7b31d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004573,src_003543,time_726635,execs_2141351,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004574,src_003543,time_726933,execs_2143359,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004574,src_003543,time_726933,execs_2143359,op_havoc,rep_3 new file mode 100644 index 00000000000..a49f1316573 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004574,src_003543,time_726933,execs_2143359,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004575,src_003543,time_727488,execs_2147156,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004575,src_003543,time_727488,execs_2147156,op_havoc,rep_3 new file mode 100644 index 00000000000..4a4739aabe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004575,src_003543,time_727488,execs_2147156,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004576,src_003543,time_727902,execs_2149863,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004576,src_003543,time_727902,execs_2149863,op_havoc,rep_5 new file mode 100644 index 00000000000..5e7867da8f2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004576,src_003543,time_727902,execs_2149863,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004577,src_003142,time_728041,execs_2150815,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004577,src_003142,time_728041,execs_2150815,op_havoc,rep_5 new file mode 100644 index 00000000000..edd5f86c2f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004577,src_003142,time_728041,execs_2150815,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004578,src_003680,time_728419,execs_2152298,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004578,src_003680,time_728419,execs_2152298,op_havoc,rep_8 new file mode 100644 index 00000000000..dde87f7fa10 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004578,src_003680,time_728419,execs_2152298,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004579,src_003680,time_728526,execs_2152972,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004579,src_003680,time_728526,execs_2152972,op_havoc,rep_5 new file mode 100644 index 00000000000..62b7f62e0cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004579,src_003680,time_728526,execs_2152972,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004580,src_003779,time_729130,execs_2156444,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004580,src_003779,time_729130,execs_2156444,op_havoc,rep_3 new file mode 100644 index 00000000000..a3f128469d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004580,src_003779,time_729130,execs_2156444,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004581,src_003928,time_729502,execs_2158865,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004581,src_003928,time_729502,execs_2158865,op_havoc,rep_2 new file mode 100644 index 00000000000..3f3021ee273 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004581,src_003928,time_729502,execs_2158865,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004582,src_003332,time_729660,execs_2159940,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004582,src_003332,time_729660,execs_2159940,op_havoc,rep_1 new file mode 100644 index 00000000000..d32df0a5d03 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004582,src_003332,time_729660,execs_2159940,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004583,src_003332,time_729679,execs_2160075,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004583,src_003332,time_729679,execs_2160075,op_havoc,rep_2 new file mode 100644 index 00000000000..91757e3efc2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004583,src_003332,time_729679,execs_2160075,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004584,src_003618,time_729930,execs_2161868,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004584,src_003618,time_729930,execs_2161868,op_havoc,rep_1 new file mode 100644 index 00000000000..13e00f321b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004584,src_003618,time_729930,execs_2161868,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004585,src_003618,time_730102,execs_2163046,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004585,src_003618,time_730102,execs_2163046,op_havoc,rep_2 new file mode 100644 index 00000000000..de7371b48fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004585,src_003618,time_730102,execs_2163046,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004586,src_003148,time_730378,execs_2164798,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004586,src_003148,time_730378,execs_2164798,op_havoc,rep_10 new file mode 100644 index 00000000000..47800b4f907 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004586,src_003148,time_730378,execs_2164798,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004587,src_003175,time_730567,execs_2165870,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004587,src_003175,time_730567,execs_2165870,op_havoc,rep_3 new file mode 100644 index 00000000000..d6ae91a46df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004587,src_003175,time_730567,execs_2165870,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004588,src_003482,time_730661,execs_2166489,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004588,src_003482,time_730661,execs_2166489,op_havoc,rep_2 new file mode 100644 index 00000000000..c9d8faf5b10 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004588,src_003482,time_730661,execs_2166489,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004589,src_003482,time_730666,execs_2166512,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004589,src_003482,time_730666,execs_2166512,op_havoc,rep_8 new file mode 100644 index 00000000000..1e37a81cf6c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004589,src_003482,time_730666,execs_2166512,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004590,src_003482,time_730711,execs_2166794,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004590,src_003482,time_730711,execs_2166794,op_havoc,rep_3 new file mode 100644 index 00000000000..ee429683972 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004590,src_003482,time_730711,execs_2166794,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004592,src_003482,time_731321,execs_2170584,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004592,src_003482,time_731321,execs_2170584,op_havoc,rep_7 new file mode 100644 index 00000000000..e4a74ef0430 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004592,src_003482,time_731321,execs_2170584,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004593,src_003482,time_731466,execs_2171456,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004593,src_003482,time_731466,execs_2171456,op_havoc,rep_4 new file mode 100644 index 00000000000..f3ca6bae656 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004593,src_003482,time_731466,execs_2171456,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004594,src_004351,time_733359,execs_2176639,op_quick,pos_124,val_+1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004594,src_004351,time_733359,execs_2176639,op_quick,pos_124,val_+1 new file mode 100644 index 00000000000..1758ed5d1a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004594,src_004351,time_733359,execs_2176639,op_quick,pos_124,val_+1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004595,src_004351,time_733463,execs_2176665,op_quick,pos_143,val_+1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004595,src_004351,time_733463,execs_2176665,op_quick,pos_143,val_+1 new file mode 100644 index 00000000000..8b1fdfa78ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004595,src_004351,time_733463,execs_2176665,op_quick,pos_143,val_+1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004599,src_004351,time_734234,execs_2176837,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004599,src_004351,time_734234,execs_2176837,op_havoc,rep_8 new file mode 100644 index 00000000000..5da9400a03a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004599,src_004351,time_734234,execs_2176837,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004601,src_004351,time_734429,execs_2176881,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004601,src_004351,time_734429,execs_2176881,op_havoc,rep_4 new file mode 100644 index 00000000000..6875883166c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004601,src_004351,time_734429,execs_2176881,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004602,src_004351,time_734563,execs_2176910,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004602,src_004351,time_734563,execs_2176910,op_havoc,rep_6 new file mode 100644 index 00000000000..eaaaae0a2b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004602,src_004351,time_734563,execs_2176910,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004603,src_004351,time_734677,execs_2176936,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004603,src_004351,time_734677,execs_2176936,op_havoc,rep_5 new file mode 100644 index 00000000000..4fd59d28bfe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004603,src_004351,time_734677,execs_2176936,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004604,src_004351,time_735783,execs_2177199,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004604,src_004351,time_735783,execs_2177199,op_havoc,rep_1 new file mode 100644 index 00000000000..573c9b5ff51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004604,src_004351,time_735783,execs_2177199,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004608,src_004351,time_738734,execs_2177898,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004608,src_004351,time_738734,execs_2177898,op_havoc,rep_8 new file mode 100644 index 00000000000..3839bb5bd7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004608,src_004351,time_738734,execs_2177898,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004615,src_004351,time_741518,execs_2178532,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004615,src_004351,time_741518,execs_2178532,op_havoc,rep_7 new file mode 100644 index 00000000000..d1aa7ef557a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004615,src_004351,time_741518,execs_2178532,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004616,src_004351,time_742225,execs_2178694,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004616,src_004351,time_742225,execs_2178694,op_havoc,rep_5 new file mode 100644 index 00000000000..ee6018514b5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004616,src_004351,time_742225,execs_2178694,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004618,src_004351,time_744049,execs_2179122,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004618,src_004351,time_744049,execs_2179122,op_havoc,rep_2 new file mode 100644 index 00000000000..b5273856c39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004618,src_004351,time_744049,execs_2179122,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004620,src_004351,time_758514,execs_2182570,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004620,src_004351,time_758514,execs_2182570,op_havoc,rep_8 new file mode 100644 index 00000000000..f0da077af23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004620,src_004351,time_758514,execs_2182570,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004621,src_004351,time_762242,execs_2183459,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004621,src_004351,time_762242,execs_2183459,op_havoc,rep_4 new file mode 100644 index 00000000000..b2c2b1ba459 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004621,src_004351,time_762242,execs_2183459,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004625,src_004351,time_771875,execs_2185720,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004625,src_004351,time_771875,execs_2185720,op_havoc,rep_8 new file mode 100644 index 00000000000..d08abf8c754 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004625,src_004351,time_771875,execs_2185720,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004626,src_004351,time_774102,execs_2186244,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004626,src_004351,time_774102,execs_2186244,op_havoc,rep_8 new file mode 100644 index 00000000000..4d2b0a1342f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004626,src_004351,time_774102,execs_2186244,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004633,src_003213,time_775721,execs_2191858,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004633,src_003213,time_775721,execs_2191858,op_havoc,rep_2 new file mode 100644 index 00000000000..3bc4bdc5425 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004633,src_003213,time_775721,execs_2191858,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004635,src_004475,time_776581,execs_2196810,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004635,src_004475,time_776581,execs_2196810,op_havoc,rep_2 new file mode 100644 index 00000000000..6e8c47493d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004635,src_004475,time_776581,execs_2196810,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004636,src_004475,time_776668,execs_2197351,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004636,src_004475,time_776668,execs_2197351,op_havoc,rep_2 new file mode 100644 index 00000000000..a1b5b141a8a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004636,src_004475,time_776668,execs_2197351,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004637,src_004475,time_776737,execs_2197778,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004637,src_004475,time_776737,execs_2197778,op_havoc,rep_4 new file mode 100644 index 00000000000..5a847827638 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004637,src_004475,time_776737,execs_2197778,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004638,src_004475,time_776805,execs_2198193,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004638,src_004475,time_776805,execs_2198193,op_havoc,rep_5 new file mode 100644 index 00000000000..b801d35891c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004638,src_004475,time_776805,execs_2198193,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004639,src_004475,time_776881,execs_2198622,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004639,src_004475,time_776881,execs_2198622,op_havoc,rep_6 new file mode 100644 index 00000000000..02da2dd2859 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004639,src_004475,time_776881,execs_2198622,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004641,src_004475,time_777520,execs_2202523,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004641,src_004475,time_777520,execs_2202523,op_havoc,rep_2 new file mode 100644 index 00000000000..e2e8ad16398 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004641,src_004475,time_777520,execs_2202523,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004642,src_004475,time_777936,execs_2205056,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004642,src_004475,time_777936,execs_2205056,op_havoc,rep_13 new file mode 100644 index 00000000000..5c0425a7041 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004642,src_004475,time_777936,execs_2205056,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004643,src_003227,time_778169,execs_2206306,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004643,src_003227,time_778169,execs_2206306,op_havoc,rep_3 new file mode 100644 index 00000000000..806d555afc5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004643,src_003227,time_778169,execs_2206306,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004647,src_004214,time_778431,execs_2208077,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004647,src_004214,time_778431,execs_2208077,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..0028cc148a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004647,src_004214,time_778431,execs_2208077,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004648,src_004214,time_778451,execs_2208215,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004648,src_004214,time_778451,execs_2208215,op_havoc,rep_9 new file mode 100644 index 00000000000..475c0ed0612 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004648,src_004214,time_778451,execs_2208215,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004649,src_004214,time_778468,execs_2208303,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004649,src_004214,time_778468,execs_2208303,op_havoc,rep_3 new file mode 100644 index 00000000000..a256b8b7208 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004649,src_004214,time_778468,execs_2208303,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004650,src_004214,time_778475,execs_2208348,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004650,src_004214,time_778475,execs_2208348,op_havoc,rep_6 new file mode 100644 index 00000000000..83af46ab91c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004650,src_004214,time_778475,execs_2208348,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004651,src_004214,time_778622,execs_2209235,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004651,src_004214,time_778622,execs_2209235,op_havoc,rep_10 new file mode 100644 index 00000000000..e53cfce5f44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004651,src_004214,time_778622,execs_2209235,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004652,src_004214,time_779012,execs_2211273,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004652,src_004214,time_779012,execs_2211273,op_havoc,rep_12 new file mode 100644 index 00000000000..176ce9cb39d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004652,src_004214,time_779012,execs_2211273,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004653,src_004214,time_779067,execs_2211602,op_havoc,rep_13,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004653,src_004214,time_779067,execs_2211602,op_havoc,rep_13,+cov new file mode 100644 index 00000000000..edbd77adb9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004653,src_004214,time_779067,execs_2211602,op_havoc,rep_13,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004654,src_004214,time_779071,execs_2211625,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004654,src_004214,time_779071,execs_2211625,op_havoc,rep_11 new file mode 100644 index 00000000000..93da163eee3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004654,src_004214,time_779071,execs_2211625,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004656,src_004214,time_779622,execs_2214889,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004656,src_004214,time_779622,execs_2214889,op_havoc,rep_8 new file mode 100644 index 00000000000..c2185de2be1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004656,src_004214,time_779622,execs_2214889,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004657,src_004214,time_779678,execs_2215234,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004657,src_004214,time_779678,execs_2215234,op_havoc,rep_12 new file mode 100644 index 00000000000..f6eeaab20d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004657,src_004214,time_779678,execs_2215234,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004660,src_003228,time_780141,execs_2217304,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004660,src_003228,time_780141,execs_2217304,op_havoc,rep_11 new file mode 100644 index 00000000000..05b253149e2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004660,src_003228,time_780141,execs_2217304,op_havoc,rep_11 @@ -0,0 +1 @@ +J[[[[22Óè2l[21þ[[[J[[[ [[[22J[22G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004661,src_004104,time_780542,execs_2219475,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004661,src_004104,time_780542,execs_2219475,op_havoc,rep_4 new file mode 100644 index 00000000000..477bd518693 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004661,src_004104,time_780542,execs_2219475,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004662,src_004104,time_780716,execs_2220585,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004662,src_004104,time_780716,execs_2220585,op_havoc,rep_8 new file mode 100644 index 00000000000..b3679a4fa53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004662,src_004104,time_780716,execs_2220585,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004663,src_004104,time_780788,execs_2221020,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004663,src_004104,time_780788,execs_2221020,op_havoc,rep_7 new file mode 100644 index 00000000000..fcbeba1d787 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004663,src_004104,time_780788,execs_2221020,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004664,src_003229,time_781368,execs_2224528,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004664,src_003229,time_781368,execs_2224528,op_havoc,rep_3 new file mode 100644 index 00000000000..2779c194597 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004664,src_003229,time_781368,execs_2224528,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004666,src_003229,time_781552,execs_2225694,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004666,src_003229,time_781552,execs_2225694,op_havoc,rep_5 new file mode 100644 index 00000000000..c2c01d94488 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004666,src_003229,time_781552,execs_2225694,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004668,src_004591,time_782160,execs_2229591,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004668,src_004591,time_782160,execs_2229591,op_havoc,rep_8 new file mode 100644 index 00000000000..51a62ff5ffd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004668,src_004591,time_782160,execs_2229591,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004669,src_004591,time_782179,execs_2229700,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004669,src_004591,time_782179,execs_2229700,op_havoc,rep_6 new file mode 100644 index 00000000000..8d165609897 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004669,src_004591,time_782179,execs_2229700,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004670,src_004591,time_782254,execs_2230158,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004670,src_004591,time_782254,execs_2230158,op_havoc,rep_8 new file mode 100644 index 00000000000..98662e1c550 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004670,src_004591,time_782254,execs_2230158,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004671,src_004591,time_782566,execs_2232097,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004671,src_004591,time_782566,execs_2232097,op_havoc,rep_6 new file mode 100644 index 00000000000..4639f30be09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004671,src_004591,time_782566,execs_2232097,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004673,src_003247,time_783663,execs_2238762,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004673,src_003247,time_783663,execs_2238762,op_havoc,rep_6 new file mode 100644 index 00000000000..ba7fa6da8c5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004673,src_003247,time_783663,execs_2238762,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004674,src_004583,time_783988,execs_2239390,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004674,src_004583,time_783988,execs_2239390,op_havoc,rep_1 new file mode 100644 index 00000000000..d394d8d74cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004674,src_004583,time_783988,execs_2239390,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004675,src_004551,time_784179,execs_2240629,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004675,src_004551,time_784179,execs_2240629,op_havoc,rep_2 new file mode 100644 index 00000000000..d57e12b0dd2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004675,src_004551,time_784179,execs_2240629,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004676,src_004551,time_784191,execs_2240710,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004676,src_004551,time_784191,execs_2240710,op_havoc,rep_1 new file mode 100644 index 00000000000..025ca4da3ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004676,src_004551,time_784191,execs_2240710,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004677,src_004267,time_784776,execs_2243666,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004677,src_004267,time_784776,execs_2243666,op_havoc,rep_4 new file mode 100644 index 00000000000..857574b8ef6 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004677,src_004267,time_784776,execs_2243666,op_havoc,rep_4 @@ -0,0 +1 @@ +**ÕheKhD5]9;4;2]66;6¢¢¢ˆ¢¢Š¢¢l::::::::::::::::::::::::::::::5:2%0m]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004679,src_004267,time_784876,execs_2244218,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004679,src_004267,time_784876,execs_2244218,op_havoc,rep_4 new file mode 100644 index 00000000000..9b475ff0af3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004679,src_004267,time_784876,execs_2244218,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004680,src_004267,time_785052,execs_2245283,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004680,src_004267,time_785052,execs_2245283,op_havoc,rep_4 new file mode 100644 index 00000000000..4216b523b21 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004680,src_004267,time_785052,execs_2245283,op_havoc,rep_4 @@ -0,0 +1 @@ +***h€ÿÿÿD5]9;4;2]66;C¢¢¢¢¢¢Š¢¢l:::::::::5:200m]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004681,src_002761,time_786006,execs_2251703,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004681,src_002761,time_786006,execs_2251703,op_havoc,rep_14 new file mode 100644 index 00000000000..2066ad2611b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004681,src_002761,time_786006,execs_2251703,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004682,src_004380,time_786528,execs_2252374,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004682,src_004380,time_786528,execs_2252374,op_havoc,rep_2 new file mode 100644 index 00000000000..e7e93b18604 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004682,src_004380,time_786528,execs_2252374,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004684,src_004380,time_786960,execs_2252622,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004684,src_004380,time_786960,execs_2252622,op_havoc,rep_4 new file mode 100644 index 00000000000..2f9b7e34bb2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004684,src_004380,time_786960,execs_2252622,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004685,src_004380,time_786980,execs_2252638,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004685,src_004380,time_786980,execs_2252638,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..494768c5848 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004685,src_004380,time_786980,execs_2252638,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004688,src_004380,time_788416,execs_2253571,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004688,src_004380,time_788416,execs_2253571,op_havoc,rep_6 new file mode 100644 index 00000000000..6cfac9cbb5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004688,src_004380,time_788416,execs_2253571,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004689,src_004380,time_794628,execs_2258106,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004689,src_004380,time_794628,execs_2258106,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..cf8cc9e94d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004689,src_004380,time_794628,execs_2258106,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004690,src_004380,time_795637,execs_2258762,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004690,src_004380,time_795637,execs_2258762,op_havoc,rep_5 new file mode 100644 index 00000000000..ec63bbdc6d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004690,src_004380,time_795637,execs_2258762,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004692,src_003262,time_800239,execs_2263031,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004692,src_003262,time_800239,execs_2263031,op_havoc,rep_6 new file mode 100644 index 00000000000..8e825f44ad9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004692,src_003262,time_800239,execs_2263031,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004693,src_003262,time_800308,execs_2263459,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004693,src_003262,time_800308,execs_2263459,op_havoc,rep_7 new file mode 100644 index 00000000000..90aa6781262 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004693,src_003262,time_800308,execs_2263459,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004694,src_004081,time_801223,execs_2265044,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004694,src_004081,time_801223,execs_2265044,op_havoc,rep_2 new file mode 100644 index 00000000000..c94c15d9d5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004694,src_004081,time_801223,execs_2265044,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004695,src_002029,time_801489,execs_2266979,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004695,src_002029,time_801489,execs_2266979,op_havoc,rep_10 new file mode 100644 index 00000000000..25802d29a2d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004695,src_002029,time_801489,execs_2266979,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004696,src_004470,time_801587,execs_2267509,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004696,src_004470,time_801587,execs_2267509,op_havoc,rep_7 new file mode 100644 index 00000000000..7951624cbc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004696,src_004470,time_801587,execs_2267509,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004697,src_004470,time_801592,execs_2267546,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004697,src_004470,time_801592,execs_2267546,op_havoc,rep_10 new file mode 100644 index 00000000000..9194bacd588 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004697,src_004470,time_801592,execs_2267546,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004700,src_004470,time_802002,execs_2270058,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004700,src_004470,time_802002,execs_2270058,op_havoc,rep_9 new file mode 100644 index 00000000000..e4130b39e6c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004700,src_004470,time_802002,execs_2270058,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004703,src_003582,time_803441,execs_2278888,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004703,src_003582,time_803441,execs_2278888,op_havoc,rep_6 new file mode 100644 index 00000000000..67fb238a52b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004703,src_003582,time_803441,execs_2278888,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004704,src_003582,time_803558,execs_2279578,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004704,src_003582,time_803558,execs_2279578,op_havoc,rep_6 new file mode 100644 index 00000000000..62ef8966b66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004704,src_003582,time_803558,execs_2279578,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004705,src_003359,time_803858,execs_2281280,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004705,src_003359,time_803858,execs_2281280,op_havoc,rep_3 new file mode 100644 index 00000000000..894a734eac1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004705,src_003359,time_803858,execs_2281280,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004706,src_003396,time_804973,execs_2283175,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004706,src_003396,time_804973,execs_2283175,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..f0ebd382484 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004706,src_003396,time_804973,execs_2283175,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004707,src_003396,time_804988,execs_2283271,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004707,src_003396,time_804988,execs_2283271,op_havoc,rep_4 new file mode 100644 index 00000000000..00eeb788946 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004707,src_003396,time_804988,execs_2283271,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004708,src_003396,time_805183,execs_2284484,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004708,src_003396,time_805183,execs_2284484,op_havoc,rep_4 new file mode 100644 index 00000000000..fc9e2bbb866 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004708,src_003396,time_805183,execs_2284484,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004710,src_003419,time_806202,execs_2290425,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004710,src_003419,time_806202,execs_2290425,op_havoc,rep_3 new file mode 100644 index 00000000000..b0fa4e7397f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004710,src_003419,time_806202,execs_2290425,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004711,src_003419,time_806287,execs_2290959,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004711,src_003419,time_806287,execs_2290959,op_havoc,rep_4 new file mode 100644 index 00000000000..1ecc7831828 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004711,src_003419,time_806287,execs_2290959,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004713,src_002480,time_806864,execs_2294683,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004713,src_002480,time_806864,execs_2294683,op_havoc,rep_7 new file mode 100644 index 00000000000..904b8d1bcb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004713,src_002480,time_806864,execs_2294683,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004716,src_004565,time_807287,execs_2297266,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004716,src_004565,time_807287,execs_2297266,op_havoc,rep_2 new file mode 100644 index 00000000000..8f08ea8ed35 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004716,src_004565,time_807287,execs_2297266,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004717,src_004565,time_807292,execs_2297279,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004717,src_004565,time_807292,execs_2297279,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..3a776ef56a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004717,src_004565,time_807292,execs_2297279,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004718,src_004565,time_807311,execs_2297293,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004718,src_004565,time_807311,execs_2297293,op_havoc,rep_4 new file mode 100644 index 00000000000..a0fe1c570f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004718,src_004565,time_807311,execs_2297293,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004719,src_004565,time_807315,execs_2297316,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004719,src_004565,time_807315,execs_2297316,op_havoc,rep_15 new file mode 100644 index 00000000000..ca9e8f540e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004719,src_004565,time_807315,execs_2297316,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004720,src_004565,time_807317,execs_2297329,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004720,src_004565,time_807317,execs_2297329,op_havoc,rep_16 new file mode 100644 index 00000000000..ad65d99ae80 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004720,src_004565,time_807317,execs_2297329,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004723,src_004565,time_807382,execs_2297660,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004723,src_004565,time_807382,execs_2297660,op_havoc,rep_8 new file mode 100644 index 00000000000..4b315ab8001 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004723,src_004565,time_807382,execs_2297660,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004728,src_004565,time_807578,execs_2298424,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004728,src_004565,time_807578,execs_2298424,op_havoc,rep_10 new file mode 100644 index 00000000000..e927e33b589 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004728,src_004565,time_807578,execs_2298424,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004729,src_004565,time_807625,execs_2298613,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004729,src_004565,time_807625,execs_2298613,op_havoc,rep_11 new file mode 100644 index 00000000000..e26b8bea13b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004729,src_004565,time_807625,execs_2298613,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004730,src_004565,time_807697,execs_2298975,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004730,src_004565,time_807697,execs_2298975,op_havoc,rep_13 new file mode 100644 index 00000000000..faf8aca7e9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004730,src_004565,time_807697,execs_2298975,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004734,src_004565,time_808082,execs_2300350,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004734,src_004565,time_808082,execs_2300350,op_havoc,rep_14 new file mode 100644 index 00000000000..1bc8d5f2ffa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004734,src_004565,time_808082,execs_2300350,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004735,src_004565,time_808173,execs_2300778,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004735,src_004565,time_808173,execs_2300778,op_havoc,rep_9 new file mode 100644 index 00000000000..d7f816b2d39 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004735,src_004565,time_808173,execs_2300778,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004736,src_004565,time_808257,execs_2301178,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004736,src_004565,time_808257,execs_2301178,op_havoc,rep_9 new file mode 100644 index 00000000000..c05dca97b3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004736,src_004565,time_808257,execs_2301178,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004738,src_004565,time_808377,execs_2301674,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004738,src_004565,time_808377,execs_2301674,op_havoc,rep_3 new file mode 100644 index 00000000000..a54ac507abe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004738,src_004565,time_808377,execs_2301674,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004740,src_004565,time_808446,execs_2301906,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004740,src_004565,time_808446,execs_2301906,op_havoc,rep_10 new file mode 100644 index 00000000000..992c3d89911 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004740,src_004565,time_808446,execs_2301906,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004741,src_004565,time_808549,execs_2302414,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004741,src_004565,time_808549,execs_2302414,op_havoc,rep_6 new file mode 100644 index 00000000000..ce3ce9d4992 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004741,src_004565,time_808549,execs_2302414,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004743,src_004565,time_808912,execs_2304074,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004743,src_004565,time_808912,execs_2304074,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..59797d11c92 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004743,src_004565,time_808912,execs_2304074,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004746,src_004565,time_810123,execs_2309085,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004746,src_004565,time_810123,execs_2309085,op_havoc,rep_10 new file mode 100644 index 00000000000..e153d261ff8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004746,src_004565,time_810123,execs_2309085,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004747,src_004565,time_810432,execs_2310374,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004747,src_004565,time_810432,execs_2310374,op_havoc,rep_9 new file mode 100644 index 00000000000..971169a76e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004747,src_004565,time_810432,execs_2310374,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004748,src_004565,time_810489,execs_2310637,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004748,src_004565,time_810489,execs_2310637,op_havoc,rep_16 new file mode 100644 index 00000000000..8e156688bd2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004748,src_004565,time_810489,execs_2310637,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004750,src_004565,time_812650,execs_2319845,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004750,src_004565,time_812650,execs_2319845,op_havoc,rep_16 new file mode 100644 index 00000000000..ba567f4874a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004750,src_004565,time_812650,execs_2319845,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004752,src_004181,time_814299,execs_2327685,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004752,src_004181,time_814299,execs_2327685,op_havoc,rep_1 new file mode 100644 index 00000000000..bf5b755ad04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004752,src_004181,time_814299,execs_2327685,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004753,src_004181,time_814306,execs_2327736,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004753,src_004181,time_814306,execs_2327736,op_havoc,rep_2 new file mode 100644 index 00000000000..f864d68cf70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004753,src_004181,time_814306,execs_2327736,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004754,src_003519,time_814639,execs_2330076,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004754,src_003519,time_814639,execs_2330076,op_havoc,rep_3 new file mode 100644 index 00000000000..c667041029c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004754,src_003519,time_814639,execs_2330076,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004755,src_004511,time_814867,execs_2331351,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004755,src_004511,time_814867,execs_2331351,op_havoc,rep_3 new file mode 100644 index 00000000000..96ecb835609 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004755,src_004511,time_814867,execs_2331351,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004756,src_004511,time_814891,execs_2331504,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004756,src_004511,time_814891,execs_2331504,op_havoc,rep_2 new file mode 100644 index 00000000000..20450c6c4a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004756,src_004511,time_814891,execs_2331504,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004757,src_004245,time_815247,execs_2333783,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004757,src_004245,time_815247,execs_2333783,op_havoc,rep_1 new file mode 100644 index 00000000000..fd91a368fbd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004757,src_004245,time_815247,execs_2333783,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004758,src_004245,time_815390,execs_2334784,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004758,src_004245,time_815390,execs_2334784,op_havoc,rep_2 new file mode 100644 index 00000000000..b21eb4d9236 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004758,src_004245,time_815390,execs_2334784,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004759,src_004245,time_815441,execs_2335146,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004759,src_004245,time_815441,execs_2335146,op_havoc,rep_4 new file mode 100644 index 00000000000..9900c0655a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004759,src_004245,time_815441,execs_2335146,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004761,src_004245,time_816253,execs_2340992,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004761,src_004245,time_816253,execs_2340992,op_havoc,rep_4 new file mode 100644 index 00000000000..ff76108410b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004761,src_004245,time_816253,execs_2340992,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004763,src_003532,time_816748,execs_2344410,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004763,src_003532,time_816748,execs_2344410,op_havoc,rep_14 new file mode 100644 index 00000000000..b4931a9a49a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004763,src_003532,time_816748,execs_2344410,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004765,src_003532,time_816821,execs_2344896,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004765,src_003532,time_816821,execs_2344896,op_havoc,rep_3 new file mode 100644 index 00000000000..f02f1bf0614 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004765,src_003532,time_816821,execs_2344896,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004766,src_003532,time_816935,execs_2345676,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004766,src_003532,time_816935,execs_2345676,op_havoc,rep_1 new file mode 100644 index 00000000000..c1ae2564754 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004766,src_003532,time_816935,execs_2345676,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004767,src_003532,time_817429,execs_2348991,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004767,src_003532,time_817429,execs_2348991,op_havoc,rep_3 new file mode 100644 index 00000000000..2ecdd8869f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004767,src_003532,time_817429,execs_2348991,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004769,src_003533,time_818053,execs_2353139,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004769,src_003533,time_818053,execs_2353139,op_havoc,rep_1 new file mode 100644 index 00000000000..4906cd7a373 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004769,src_003533,time_818053,execs_2353139,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004770,src_004760,time_819241,execs_2355436,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004770,src_004760,time_819241,execs_2355436,op_havoc,rep_1 new file mode 100644 index 00000000000..61caf874272 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004770,src_004760,time_819241,execs_2355436,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004771,src_004760,time_819259,execs_2355488,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004771,src_004760,time_819259,execs_2355488,op_havoc,rep_4 new file mode 100644 index 00000000000..2fb8c3191a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004771,src_004760,time_819259,execs_2355488,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004772,src_004757,time_819807,execs_2358266,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004772,src_004757,time_819807,execs_2358266,op_havoc,rep_2 new file mode 100644 index 00000000000..50c306f721e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004772,src_004757,time_819807,execs_2358266,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004773,src_004311,time_820513,execs_2362324,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004773,src_004311,time_820513,execs_2362324,op_havoc,rep_2 new file mode 100644 index 00000000000..c53a8bcf531 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004773,src_004311,time_820513,execs_2362324,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004774,src_004311,time_820659,execs_2363341,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004774,src_004311,time_820659,execs_2363341,op_havoc,rep_4 new file mode 100644 index 00000000000..55da2011a27 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004774,src_004311,time_820659,execs_2363341,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004775,src_004311,time_820828,execs_2364484,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004775,src_004311,time_820828,execs_2364484,op_havoc,rep_2 new file mode 100644 index 00000000000..243be130283 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004775,src_004311,time_820828,execs_2364484,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004776,src_003542,time_821207,execs_2367142,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004776,src_003542,time_821207,execs_2367142,op_havoc,rep_2 new file mode 100644 index 00000000000..ca3b64d1620 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004776,src_003542,time_821207,execs_2367142,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004777,src_004457,time_821473,execs_2368525,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004777,src_004457,time_821473,execs_2368525,op_havoc,rep_4 new file mode 100644 index 00000000000..53245ec582c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004777,src_004457,time_821473,execs_2368525,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004778,src_003793,time_821661,execs_2369768,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004778,src_003793,time_821661,execs_2369768,op_havoc,rep_5 new file mode 100644 index 00000000000..0a071681d0b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004778,src_003793,time_821661,execs_2369768,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004779,src_003687,time_821975,execs_2371055,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004779,src_003687,time_821975,execs_2371055,op_havoc,rep_2 new file mode 100644 index 00000000000..340e1bee548 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004779,src_003687,time_821975,execs_2371055,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004780,src_004122,time_822153,execs_2372226,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004780,src_004122,time_822153,execs_2372226,op_havoc,rep_2 new file mode 100644 index 00000000000..33ef45742af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004780,src_004122,time_822153,execs_2372226,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004781,src_004456,time_822373,execs_2373138,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004781,src_004456,time_822373,execs_2373138,op_havoc,rep_1 new file mode 100644 index 00000000000..1cda6b9cbca Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004781,src_004456,time_822373,execs_2373138,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004782,src_002664,time_825548,execs_2374511,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004782,src_002664,time_825548,execs_2374511,op_havoc,rep_8 new file mode 100644 index 00000000000..2251c2b3a2d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004782,src_002664,time_825548,execs_2374511,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004784,src_004662,time_828064,execs_2375659,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004784,src_004662,time_828064,execs_2375659,op_havoc,rep_4 new file mode 100644 index 00000000000..cba824c323c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004784,src_004662,time_828064,execs_2375659,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004785,src_004553,time_828328,execs_2377035,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004785,src_004553,time_828328,execs_2377035,op_havoc,rep_8 new file mode 100644 index 00000000000..ca12cdcd8a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004785,src_004553,time_828328,execs_2377035,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004787,src_003684,time_830337,execs_2380549,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004787,src_003684,time_830337,execs_2380549,op_havoc,rep_4 new file mode 100644 index 00000000000..773f305174b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004787,src_003684,time_830337,execs_2380549,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004788,src_003684,time_830378,execs_2380835,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004788,src_003684,time_830378,execs_2380835,op_havoc,rep_7 new file mode 100644 index 00000000000..b185ec9ec21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004788,src_003684,time_830378,execs_2380835,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004789,src_003684,time_830524,execs_2381780,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004789,src_003684,time_830524,execs_2381780,op_havoc,rep_4 new file mode 100644 index 00000000000..96b094c73d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004789,src_003684,time_830524,execs_2381780,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004790,src_004709,time_831312,execs_2386765,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004790,src_004709,time_831312,execs_2386765,op_havoc,rep_1 new file mode 100644 index 00000000000..50159b14aeb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004790,src_004709,time_831312,execs_2386765,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004792,src_004709,time_831877,execs_2389804,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004792,src_004709,time_831877,execs_2389804,op_havoc,rep_3 new file mode 100644 index 00000000000..a909b44dbbe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004792,src_004709,time_831877,execs_2389804,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004793,src_004051,time_832790,execs_2394810,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004793,src_004051,time_832790,execs_2394810,op_havoc,rep_12 new file mode 100644 index 00000000000..9315e56cfc0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004793,src_004051,time_832790,execs_2394810,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004795,src_004051,time_833100,execs_2396405,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004795,src_004051,time_833100,execs_2396405,op_havoc,rep_12 new file mode 100644 index 00000000000..db15979daff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004795,src_004051,time_833100,execs_2396405,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004796,src_004051,time_833293,execs_2397432,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004796,src_004051,time_833293,execs_2397432,op_havoc,rep_16 new file mode 100644 index 00000000000..364d1f23117 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004796,src_004051,time_833293,execs_2397432,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004798,src_004328,time_834810,execs_2405511,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004798,src_004328,time_834810,execs_2405511,op_havoc,rep_7 new file mode 100644 index 00000000000..dab59817851 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004798,src_004328,time_834810,execs_2405511,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004799,src_004273,time_835556,execs_2409798,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004799,src_004273,time_835556,execs_2409798,op_havoc,rep_1 new file mode 100644 index 00000000000..317c5a79582 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004799,src_004273,time_835556,execs_2409798,op_havoc,rep_1 @@ -0,0 +1 @@ +***heK;2]66;6¢¢¢¢¢¢Š¢¢lo3;4 層3;4 層B333333mredfp4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004800,src_004273,time_835626,execs_2410305,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004800,src_004273,time_835626,execs_2410305,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..b54084b916f --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_004800,src_004273,time_835626,execs_2410305,op_havoc,rep_2,+cov @@ -0,0 +1 @@ +***heKhD5]9;4;2]66;6¢¢¢¢¢¢Š¢¢lo3;4 稻B333333mredfp4;0ù]9;4;2[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004802,src_004437,time_836291,execs_2414937,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004802,src_004437,time_836291,execs_2414937,op_havoc,rep_4 new file mode 100644 index 00000000000..9f77ce32352 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004802,src_004437,time_836291,execs_2414937,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004803,src_003711,time_836702,execs_2417424,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004803,src_003711,time_836702,execs_2417424,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..d375e666f1a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004803,src_003711,time_836702,execs_2417424,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004804,src_003711,time_836703,execs_2417437,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004804,src_003711,time_836703,execs_2417437,op_havoc,rep_4 new file mode 100644 index 00000000000..cc6890a3092 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004804,src_003711,time_836703,execs_2417437,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004806,src_003711,time_836796,execs_2418096,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004806,src_003711,time_836796,execs_2418096,op_havoc,rep_2 new file mode 100644 index 00000000000..f1cdebf4b80 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004806,src_003711,time_836796,execs_2418096,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004807,src_003709,time_838052,execs_2427258,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004807,src_003709,time_838052,execs_2427258,op_havoc,rep_3 new file mode 100644 index 00000000000..65374354b65 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004807,src_003709,time_838052,execs_2427258,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004809,src_003715,time_838639,execs_2429496,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004809,src_003715,time_838639,execs_2429496,op_havoc,rep_2 new file mode 100644 index 00000000000..a882d3a92a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004809,src_003715,time_838639,execs_2429496,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004812,src_003735,time_840269,execs_2432420,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004812,src_003735,time_840269,execs_2432420,op_havoc,rep_7 new file mode 100644 index 00000000000..40d18bb5f9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004812,src_003735,time_840269,execs_2432420,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004813,src_004102,time_840735,execs_2434811,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004813,src_004102,time_840735,execs_2434811,op_havoc,rep_7 new file mode 100644 index 00000000000..0d460b041e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004813,src_004102,time_840735,execs_2434811,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004814,src_003741,time_841282,execs_2436372,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004814,src_003741,time_841282,execs_2436372,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..aeabe1ce325 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004814,src_003741,time_841282,execs_2436372,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004816,src_003777,time_841577,execs_2438332,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004816,src_003777,time_841577,execs_2438332,op_havoc,rep_14 new file mode 100644 index 00000000000..d549764e757 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004816,src_003777,time_841577,execs_2438332,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004817,src_003777,time_841835,execs_2439133,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004817,src_003777,time_841835,execs_2439133,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..33474216709 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004817,src_003777,time_841835,execs_2439133,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004818,src_003777,time_841875,execs_2439255,op_havoc,rep_11,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004818,src_003777,time_841875,execs_2439255,op_havoc,rep_11,+cov new file mode 100644 index 00000000000..d226adb5d60 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004818,src_003777,time_841875,execs_2439255,op_havoc,rep_11,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004819,src_003777,time_842158,execs_2440247,op_havoc,rep_12,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004819,src_003777,time_842158,execs_2440247,op_havoc,rep_12,+cov new file mode 100644 index 00000000000..3560ff5882d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004819,src_003777,time_842158,execs_2440247,op_havoc,rep_12,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004820,src_003777,time_842212,execs_2440461,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004820,src_003777,time_842212,execs_2440461,op_havoc,rep_6 new file mode 100644 index 00000000000..716044197c8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004820,src_003777,time_842212,execs_2440461,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004821,src_003777,time_844381,execs_2447501,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004821,src_003777,time_844381,execs_2447501,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..d07d44a8313 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004821,src_003777,time_844381,execs_2447501,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004822,src_003777,time_844397,execs_2447542,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004822,src_003777,time_844397,execs_2447542,op_havoc,rep_16 new file mode 100644 index 00000000000..bf7610ea26f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004822,src_003777,time_844397,execs_2447542,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004828,src_003786,time_844678,execs_2448023,op_quick,pos_33,val_+13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004828,src_003786,time_844678,execs_2448023,op_quick,pos_33,val_+13 new file mode 100644 index 00000000000..1c87a3583d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004828,src_003786,time_844678,execs_2448023,op_quick,pos_33,val_+13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004837,src_003786,time_845806,execs_2448637,op_arith8,pos_15,val_+17 b/test/fuzz-libghostty/corpus/stream-cmin/id_004837,src_003786,time_845806,execs_2448637,op_arith8,pos_15,val_+17 new file mode 100644 index 00000000000..fca8b3ad98a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004837,src_003786,time_845806,execs_2448637,op_arith8,pos_15,val_+17 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004838,src_003786,time_845823,execs_2448646,op_arith8,pos_15,val_+18 b/test/fuzz-libghostty/corpus/stream-cmin/id_004838,src_003786,time_845823,execs_2448646,op_arith8,pos_15,val_+18 new file mode 100644 index 00000000000..5b78e415f79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004838,src_003786,time_845823,execs_2448646,op_arith8,pos_15,val_+18 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004848,src_003786,time_848828,execs_2450301,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004848,src_003786,time_848828,execs_2450301,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..6cf39d89549 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004848,src_003786,time_848828,execs_2450301,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004858,src_003786,time_849158,execs_2450559,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004858,src_003786,time_849158,execs_2450559,op_havoc,rep_2 new file mode 100644 index 00000000000..59e41938438 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004858,src_003786,time_849158,execs_2450559,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004860,src_003786,time_849261,execs_2450670,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004860,src_003786,time_849261,execs_2450670,op_havoc,rep_2 new file mode 100644 index 00000000000..6b631022eb7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004860,src_003786,time_849261,execs_2450670,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004862,src_003786,time_849310,execs_2450718,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004862,src_003786,time_849310,execs_2450718,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..93df3c6b2d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004862,src_003786,time_849310,execs_2450718,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004863,src_003786,time_849330,execs_2450730,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004863,src_003786,time_849330,execs_2450730,op_havoc,rep_3 new file mode 100644 index 00000000000..729470f559b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004863,src_003786,time_849330,execs_2450730,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004866,src_003786,time_849557,execs_2450892,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004866,src_003786,time_849557,execs_2450892,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..a300ed15a55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004866,src_003786,time_849557,execs_2450892,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004870,src_003786,time_849703,execs_2451022,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004870,src_003786,time_849703,execs_2451022,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..f304f2aabc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004870,src_003786,time_849703,execs_2451022,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004879,src_003786,time_850559,execs_2451883,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004879,src_003786,time_850559,execs_2451883,op_havoc,rep_3 new file mode 100644 index 00000000000..6ec184fe4a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004879,src_003786,time_850559,execs_2451883,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004884,src_003786,time_851060,execs_2452371,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004884,src_003786,time_851060,execs_2452371,op_havoc,rep_2 new file mode 100644 index 00000000000..b6d02d1608a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004884,src_003786,time_851060,execs_2452371,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004885,src_003786,time_851224,execs_2452531,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004885,src_003786,time_851224,execs_2452531,op_havoc,rep_2 new file mode 100644 index 00000000000..90bc9eaaefb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004885,src_003786,time_851224,execs_2452531,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004891,src_003786,time_851798,execs_2453097,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004891,src_003786,time_851798,execs_2453097,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..13eba834238 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004891,src_003786,time_851798,execs_2453097,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004895,src_003786,time_852733,execs_2454054,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004895,src_003786,time_852733,execs_2454054,op_havoc,rep_6 new file mode 100644 index 00000000000..1ae8ac669e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004895,src_003786,time_852733,execs_2454054,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004896,src_003786,time_852895,execs_2454226,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004896,src_003786,time_852895,execs_2454226,op_havoc,rep_5 new file mode 100644 index 00000000000..5336755780e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004896,src_003786,time_852895,execs_2454226,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004901,src_003786,time_853368,execs_2454640,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_004901,src_003786,time_853368,execs_2454640,op_havoc,rep_4 new file mode 100644 index 00000000000..bc364ce7852 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004901,src_003786,time_853368,execs_2454640,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004903,src_003786,time_853523,execs_2454801,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004903,src_003786,time_853523,execs_2454801,op_havoc,rep_2 new file mode 100644 index 00000000000..de6920d0312 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004903,src_003786,time_853523,execs_2454801,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004905,src_003786,time_853730,execs_2454997,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004905,src_003786,time_853730,execs_2454997,op_havoc,rep_5 new file mode 100644 index 00000000000..5f52166ff77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004905,src_003786,time_853730,execs_2454997,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004910,src_003786,time_854749,execs_2456000,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004910,src_003786,time_854749,execs_2456000,op_havoc,rep_5 new file mode 100644 index 00000000000..5fc67881122 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004910,src_003786,time_854749,execs_2456000,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004911,src_003786,time_855060,execs_2456282,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004911,src_003786,time_855060,execs_2456282,op_havoc,rep_5 new file mode 100644 index 00000000000..e8775c86f8f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004911,src_003786,time_855060,execs_2456282,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004914,src_003786,time_857547,execs_2458943,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004914,src_003786,time_857547,execs_2458943,op_havoc,rep_8 new file mode 100644 index 00000000000..a42abf273cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004914,src_003786,time_857547,execs_2458943,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004916,src_003786,time_857930,execs_2459334,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004916,src_003786,time_857930,execs_2459334,op_havoc,rep_7 new file mode 100644 index 00000000000..c2562dcb4b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004916,src_003786,time_857930,execs_2459334,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004918,src_003786,time_859629,execs_2461119,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004918,src_003786,time_859629,execs_2461119,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..7a07dba9dfd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004918,src_003786,time_859629,execs_2461119,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004922,src_003786,time_861119,execs_2462704,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004922,src_003786,time_861119,execs_2462704,op_havoc,rep_3 new file mode 100644 index 00000000000..d2e8165f16c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004922,src_003786,time_861119,execs_2462704,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004927,src_003786,time_866578,execs_2467273,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004927,src_003786,time_866578,execs_2467273,op_havoc,rep_7 new file mode 100644 index 00000000000..9e4f06fad65 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004927,src_003786,time_866578,execs_2467273,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004929,src_003786,time_868217,execs_2468908,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004929,src_003786,time_868217,execs_2468908,op_havoc,rep_6 new file mode 100644 index 00000000000..d48d102f90d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004929,src_003786,time_868217,execs_2468908,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004934,src_003786,time_870929,execs_2471542,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004934,src_003786,time_870929,execs_2471542,op_havoc,rep_8 new file mode 100644 index 00000000000..cd257fbe619 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004934,src_003786,time_870929,execs_2471542,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004935,src_003786,time_872738,execs_2473383,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004935,src_003786,time_872738,execs_2473383,op_havoc,rep_5 new file mode 100644 index 00000000000..1f65d6b3ced Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004935,src_003786,time_872738,execs_2473383,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004936,src_003786,time_874099,execs_2474744,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004936,src_003786,time_874099,execs_2474744,op_havoc,rep_3 new file mode 100644 index 00000000000..87b0185a3f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004936,src_003786,time_874099,execs_2474744,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004937,src_003786,time_874375,execs_2475016,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004937,src_003786,time_874375,execs_2475016,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..2ead77af9ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004937,src_003786,time_874375,execs_2475016,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004938,src_003786,time_876016,execs_2476722,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004938,src_003786,time_876016,execs_2476722,op_havoc,rep_3 new file mode 100644 index 00000000000..191c21eef67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004938,src_003786,time_876016,execs_2476722,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004939,src_004554,time_878922,execs_2480385,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004939,src_004554,time_878922,execs_2480385,op_havoc,rep_2 new file mode 100644 index 00000000000..e0ef7b7b571 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004939,src_004554,time_878922,execs_2480385,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004940,src_003837,time_879068,execs_2481465,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004940,src_003837,time_879068,execs_2481465,op_havoc,rep_2 new file mode 100644 index 00000000000..b87b8894f81 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004940,src_003837,time_879068,execs_2481465,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004941,src_003837,time_879089,execs_2481629,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004941,src_003837,time_879089,execs_2481629,op_havoc,rep_3 new file mode 100644 index 00000000000..9a02071a1ff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004941,src_003837,time_879089,execs_2481629,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004942,src_003847,time_879582,execs_2485039,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_004942,src_003847,time_879582,execs_2485039,op_havoc,rep_8 new file mode 100644 index 00000000000..82df5cb5f4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004942,src_003847,time_879582,execs_2485039,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004945,src_002901,time_880186,execs_2488367,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004945,src_002901,time_880186,execs_2488367,op_havoc,rep_13 new file mode 100644 index 00000000000..4a932e512e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004945,src_002901,time_880186,execs_2488367,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004946,src_004810,time_880543,execs_2489174,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004946,src_004810,time_880543,execs_2489174,op_havoc,rep_6 new file mode 100644 index 00000000000..8696a711115 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004946,src_004810,time_880543,execs_2489174,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004947,src_004810,time_880954,execs_2489329,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004947,src_004810,time_880954,execs_2489329,op_havoc,rep_6 new file mode 100644 index 00000000000..fa5b414dea9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004947,src_004810,time_880954,execs_2489329,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004948,src_004619,time_881921,execs_2489694,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004948,src_004619,time_881921,execs_2489694,op_havoc,rep_5 new file mode 100644 index 00000000000..0b9100a6b02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004948,src_004619,time_881921,execs_2489694,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004950,src_004619,time_883728,execs_2490200,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004950,src_004619,time_883728,execs_2490200,op_havoc,rep_1 new file mode 100644 index 00000000000..895f2faa410 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004950,src_004619,time_883728,execs_2490200,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004951,src_004619,time_883773,execs_2490214,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004951,src_004619,time_883773,execs_2490214,op_havoc,rep_3 new file mode 100644 index 00000000000..4b49d0863ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004951,src_004619,time_883773,execs_2490214,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004952,src_004619,time_885585,execs_2490434,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004952,src_004619,time_885585,execs_2490434,op_havoc,rep_3 new file mode 100644 index 00000000000..fb09a07b335 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004952,src_004619,time_885585,execs_2490434,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004953,src_004619,time_885916,execs_2490520,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004953,src_004619,time_885916,execs_2490520,op_havoc,rep_9 new file mode 100644 index 00000000000..58f0c9e41ca Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004953,src_004619,time_885916,execs_2490520,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004954,src_004619,time_886103,execs_2490565,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004954,src_004619,time_886103,execs_2490565,op_havoc,rep_2 new file mode 100644 index 00000000000..4fae4f27a75 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004954,src_004619,time_886103,execs_2490565,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004955,src_004619,time_886896,execs_2490781,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004955,src_004619,time_886896,execs_2490781,op_havoc,rep_2 new file mode 100644 index 00000000000..72704be9385 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004955,src_004619,time_886896,execs_2490781,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004956,src_004619,time_887064,execs_2490830,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004956,src_004619,time_887064,execs_2490830,op_havoc,rep_14 new file mode 100644 index 00000000000..2b566bc3159 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004956,src_004619,time_887064,execs_2490830,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004957,src_004619,time_888402,execs_2491210,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004957,src_004619,time_888402,execs_2491210,op_havoc,rep_1 new file mode 100644 index 00000000000..d3f6df3a760 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004957,src_004619,time_888402,execs_2491210,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004958,src_004619,time_889130,execs_2491401,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004958,src_004619,time_889130,execs_2491401,op_havoc,rep_15 new file mode 100644 index 00000000000..bd8164b9ba6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004958,src_004619,time_889130,execs_2491401,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004959,src_004619,time_904297,execs_2495501,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004959,src_004619,time_904297,execs_2495501,op_havoc,rep_2 new file mode 100644 index 00000000000..0e40d6ce034 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004959,src_004619,time_904297,execs_2495501,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004962,src_004774,time_1316520,execs_2499971,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_004962,src_004774,time_1316520,execs_2499971,op_havoc,rep_3 new file mode 100644 index 00000000000..a63a3e1cb8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004962,src_004774,time_1316520,execs_2499971,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004963,src_004774,time_1316713,execs_2500882,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_004963,src_004774,time_1316713,execs_2500882,op_havoc,rep_9 new file mode 100644 index 00000000000..c31f3d807ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004963,src_004774,time_1316713,execs_2500882,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004964,src_004905,time_1318083,execs_2504573,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004964,src_004905,time_1318083,execs_2504573,op_havoc,rep_2 new file mode 100644 index 00000000000..c3a0c48d903 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004964,src_004905,time_1318083,execs_2504573,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004967,src_004960,time_1319914,execs_2505297,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_004967,src_004960,time_1319914,execs_2505297,op_havoc,rep_14 new file mode 100644 index 00000000000..f37a189f805 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004967,src_004960,time_1319914,execs_2505297,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004968,src_004960,time_1320537,execs_2505448,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004968,src_004960,time_1320537,execs_2505448,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..9d067cb6b38 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004968,src_004960,time_1320537,execs_2505448,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004970,src_004960,time_1322746,execs_2505996,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_004970,src_004960,time_1322746,execs_2505996,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..5aeb444cd05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004970,src_004960,time_1322746,execs_2505996,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004971,src_004960,time_1323325,execs_2506135,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004971,src_004960,time_1323325,execs_2506135,op_havoc,rep_11 new file mode 100644 index 00000000000..1e62bf4b19a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004971,src_004960,time_1323325,execs_2506135,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004973,src_004960,time_1326371,execs_2506851,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004973,src_004960,time_1326371,execs_2506851,op_havoc,rep_10 new file mode 100644 index 00000000000..4c93773b94d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004973,src_004960,time_1326371,execs_2506851,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004974,src_004960,time_1327064,execs_2507018,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004974,src_004960,time_1327064,execs_2507018,op_havoc,rep_10 new file mode 100644 index 00000000000..5ac22f628b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004974,src_004960,time_1327064,execs_2507018,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004975,src_004960,time_1330487,execs_2507849,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_004975,src_004960,time_1330487,execs_2507849,op_havoc,rep_11 new file mode 100644 index 00000000000..f85a367af18 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004975,src_004960,time_1330487,execs_2507849,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004976,src_004433,time_1358432,execs_2515261,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004976,src_004433,time_1358432,execs_2515261,op_havoc,rep_1 new file mode 100644 index 00000000000..8795764d220 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004976,src_004433,time_1358432,execs_2515261,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004977,src_004791,time_1358734,execs_2516704,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004977,src_004791,time_1358734,execs_2516704,op_havoc,rep_7 new file mode 100644 index 00000000000..22c2695a4b8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004977,src_004791,time_1358734,execs_2516704,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004978,src_004791,time_1359042,execs_2517290,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_004978,src_004791,time_1359042,execs_2517290,op_havoc,rep_16 new file mode 100644 index 00000000000..fcadc1254b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004978,src_004791,time_1359042,execs_2517290,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004979,src_004791,time_1359255,execs_2517708,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_004979,src_004791,time_1359255,execs_2517708,op_havoc,rep_13 new file mode 100644 index 00000000000..e63b29bdb64 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004979,src_004791,time_1359255,execs_2517708,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004980,src_004791,time_1359787,execs_2518739,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004980,src_004791,time_1359787,execs_2518739,op_havoc,rep_7 new file mode 100644 index 00000000000..dc3e2184792 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004980,src_004791,time_1359787,execs_2518739,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004984,src_004791,time_1361204,execs_2521048,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_004984,src_004791,time_1361204,execs_2521048,op_havoc,rep_12 new file mode 100644 index 00000000000..c2102472d53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004984,src_004791,time_1361204,execs_2521048,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004985,src_004791,time_1362613,execs_2523898,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004985,src_004791,time_1362613,execs_2523898,op_havoc,rep_10 new file mode 100644 index 00000000000..f902102793e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004985,src_004791,time_1362613,execs_2523898,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004986,src_004791,time_1362624,execs_2523907,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_004986,src_004791,time_1362624,execs_2523907,op_havoc,rep_5 new file mode 100644 index 00000000000..1391503b4b9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004986,src_004791,time_1362624,execs_2523907,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004987,src_004791,time_1363307,execs_2525082,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_004987,src_004791,time_1363307,execs_2525082,op_havoc,rep_6 new file mode 100644 index 00000000000..fa0d8bcdebd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004987,src_004791,time_1363307,execs_2525082,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004988,src_004791,time_1364210,execs_2526772,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_004988,src_004791,time_1364210,execs_2526772,op_havoc,rep_15 new file mode 100644 index 00000000000..38d517bf808 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004988,src_004791,time_1364210,execs_2526772,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004994,src_003900,time_1365464,execs_2533089,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_004994,src_003900,time_1365464,execs_2533089,op_havoc,rep_2 new file mode 100644 index 00000000000..39dc3fe449e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004994,src_003900,time_1365464,execs_2533089,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004995,src_003900,time_1365550,execs_2533721,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_004995,src_003900,time_1365550,execs_2533721,op_havoc,rep_1 new file mode 100644 index 00000000000..b0656867334 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004995,src_003900,time_1365550,execs_2533721,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004996,src_003902,time_1366145,execs_2537900,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_004996,src_003902,time_1366145,execs_2537900,op_havoc,rep_7 new file mode 100644 index 00000000000..3f805301835 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004996,src_003902,time_1366145,execs_2537900,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_004997,src_004335,time_1366242,execs_2538470,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_004997,src_004335,time_1366242,execs_2538470,op_havoc,rep_10 new file mode 100644 index 00000000000..8550719c094 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_004997,src_004335,time_1366242,execs_2538470,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005001,src_004732,time_1366975,execs_2540779,op_int16,pos_49,val_+0 b/test/fuzz-libghostty/corpus/stream-cmin/id_005001,src_004732,time_1366975,execs_2540779,op_int16,pos_49,val_+0 new file mode 100644 index 00000000000..51e844d6738 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005001,src_004732,time_1366975,execs_2540779,op_int16,pos_49,val_+0 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005002,src_004732,time_1367114,execs_2541029,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005002,src_004732,time_1367114,execs_2541029,op_havoc,rep_7 new file mode 100644 index 00000000000..9cb8b31f033 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005002,src_004732,time_1367114,execs_2541029,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005003,src_004732,time_1367124,execs_2541051,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005003,src_004732,time_1367124,execs_2541051,op_havoc,rep_5 new file mode 100644 index 00000000000..4d5181e540c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005003,src_004732,time_1367124,execs_2541051,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005008,src_004732,time_1367481,execs_2541773,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005008,src_004732,time_1367481,execs_2541773,op_havoc,rep_7 new file mode 100644 index 00000000000..e179085c675 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005008,src_004732,time_1367481,execs_2541773,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005009,src_004732,time_1367559,execs_2541921,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005009,src_004732,time_1367559,execs_2541921,op_havoc,rep_6 new file mode 100644 index 00000000000..da61f8f24c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005009,src_004732,time_1367559,execs_2541921,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005011,src_004732,time_1368401,execs_2543570,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005011,src_004732,time_1368401,execs_2543570,op_havoc,rep_6 new file mode 100644 index 00000000000..ac560f2e7ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005011,src_004732,time_1368401,execs_2543570,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005013,src_004732,time_1370154,execs_2547206,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005013,src_004732,time_1370154,execs_2547206,op_havoc,rep_6 new file mode 100644 index 00000000000..b0affde5e3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005013,src_004732,time_1370154,execs_2547206,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005019,src_004732,time_1373742,execs_2554580,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005019,src_004732,time_1373742,execs_2554580,op_havoc,rep_5 new file mode 100644 index 00000000000..06ae803e143 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005019,src_004732,time_1373742,execs_2554580,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005020,src_004732,time_1376132,execs_2559516,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005020,src_004732,time_1376132,execs_2559516,op_havoc,rep_6 new file mode 100644 index 00000000000..ef6318d9d24 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005020,src_004732,time_1376132,execs_2559516,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005021,src_004732,time_1376290,execs_2559765,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005021,src_004732,time_1376290,execs_2559765,op_havoc,rep_5 new file mode 100644 index 00000000000..89b7ffc198f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005021,src_004732,time_1376290,execs_2559765,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005022,src_004732,time_1376898,execs_2560977,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005022,src_004732,time_1376898,execs_2560977,op_havoc,rep_7 new file mode 100644 index 00000000000..637cb3d437d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005022,src_004732,time_1376898,execs_2560977,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005023,src_004732,time_1378854,execs_2564760,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005023,src_004732,time_1378854,execs_2564760,op_havoc,rep_6 new file mode 100644 index 00000000000..3b441302173 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005023,src_004732,time_1378854,execs_2564760,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005024,src_004732,time_1379696,execs_2566472,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005024,src_004732,time_1379696,execs_2566472,op_havoc,rep_5 new file mode 100644 index 00000000000..a56ee7ca2ea Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005024,src_004732,time_1379696,execs_2566472,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005025,src_004732,time_1382890,execs_2572774,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005025,src_004732,time_1382890,execs_2572774,op_havoc,rep_5 new file mode 100644 index 00000000000..3df18a89ea9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005025,src_004732,time_1382890,execs_2572774,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005026,src_003910,time_1386238,execs_2579626,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005026,src_003910,time_1386238,execs_2579626,op_havoc,rep_9 new file mode 100644 index 00000000000..38ffa95afb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005026,src_003910,time_1386238,execs_2579626,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005027,src_003910,time_1386261,execs_2579734,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005027,src_003910,time_1386261,execs_2579734,op_havoc,rep_14 new file mode 100644 index 00000000000..b57b2b8ff4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005027,src_003910,time_1386261,execs_2579734,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005028,src_003910,time_1386645,execs_2581783,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005028,src_003910,time_1386645,execs_2581783,op_havoc,rep_9 new file mode 100644 index 00000000000..17dfca860d1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005028,src_003910,time_1386645,execs_2581783,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005029,src_003910,time_1386740,execs_2582278,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005029,src_003910,time_1386740,execs_2582278,op_havoc,rep_13 new file mode 100644 index 00000000000..d8fb38e266e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005029,src_003910,time_1386740,execs_2582278,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005030,src_003910,time_1386877,execs_2582961,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005030,src_003910,time_1386877,execs_2582961,op_havoc,rep_13 new file mode 100644 index 00000000000..27986d51769 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005030,src_003910,time_1386877,execs_2582961,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005031,src_003910,time_1386937,execs_2583308,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005031,src_003910,time_1386937,execs_2583308,op_havoc,rep_16 new file mode 100644 index 00000000000..15ed2758534 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005031,src_003910,time_1386937,execs_2583308,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005032,src_003910,time_1387043,execs_2583929,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005032,src_003910,time_1387043,execs_2583929,op_havoc,rep_15 new file mode 100644 index 00000000000..5adda9514e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005032,src_003910,time_1387043,execs_2583929,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005033,src_003910,time_1387281,execs_2585445,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005033,src_003910,time_1387281,execs_2585445,op_havoc,rep_4 new file mode 100644 index 00000000000..88956db7d55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005033,src_003910,time_1387281,execs_2585445,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005034,src_003910,time_1387442,execs_2586398,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005034,src_003910,time_1387442,execs_2586398,op_havoc,rep_12 new file mode 100644 index 00000000000..5aed18423bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005034,src_003910,time_1387442,execs_2586398,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005035,src_004149,time_1388520,execs_2589512,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005035,src_004149,time_1388520,execs_2589512,op_havoc,rep_10 new file mode 100644 index 00000000000..df07ae552c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005035,src_004149,time_1388520,execs_2589512,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005036,src_003972,time_1388770,execs_2591076,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005036,src_003972,time_1388770,execs_2591076,op_havoc,rep_1 new file mode 100644 index 00000000000..26a8ca7e589 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005036,src_003972,time_1388770,execs_2591076,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005037,src_004008,time_1388902,execs_2592002,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005037,src_004008,time_1388902,execs_2592002,op_havoc,rep_7 new file mode 100644 index 00000000000..8a5c29fd084 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005037,src_004008,time_1388902,execs_2592002,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005039,src_004008,time_1389312,execs_2593865,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005039,src_004008,time_1389312,execs_2593865,op_havoc,rep_4 new file mode 100644 index 00000000000..3659a809dd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005039,src_004008,time_1389312,execs_2593865,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005040,src_004008,time_1389394,execs_2594270,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005040,src_004008,time_1389394,execs_2594270,op_havoc,rep_2 new file mode 100644 index 00000000000..9d8c67f8a54 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005040,src_004008,time_1389394,execs_2594270,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005041,src_004008,time_1389565,execs_2594949,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005041,src_004008,time_1389565,execs_2594949,op_havoc,rep_6 new file mode 100644 index 00000000000..17c9cd95243 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005041,src_004008,time_1389565,execs_2594949,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005042,src_004008,time_1389754,execs_2595786,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005042,src_004008,time_1389754,execs_2595786,op_havoc,rep_2 new file mode 100644 index 00000000000..86ba524a7c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005042,src_004008,time_1389754,execs_2595786,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005043,src_004008,time_1390297,execs_2598280,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005043,src_004008,time_1390297,execs_2598280,op_havoc,rep_8 new file mode 100644 index 00000000000..317df780f9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005043,src_004008,time_1390297,execs_2598280,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005048,src_004847,time_1393739,execs_2603666,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005048,src_004847,time_1393739,execs_2603666,op_havoc,rep_1 new file mode 100644 index 00000000000..7bae89f7498 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005048,src_004847,time_1393739,execs_2603666,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005050,src_004847,time_1394844,execs_2604545,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005050,src_004847,time_1394844,execs_2604545,op_havoc,rep_14 new file mode 100644 index 00000000000..8dc2f6751c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005050,src_004847,time_1394844,execs_2604545,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005052,src_004847,time_1397527,execs_2606938,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005052,src_004847,time_1397527,execs_2606938,op_havoc,rep_4 new file mode 100644 index 00000000000..ef528748f87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005052,src_004847,time_1397527,execs_2606938,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005055,src_004847,time_1401881,execs_2610734,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005055,src_004847,time_1401881,execs_2610734,op_havoc,rep_16 new file mode 100644 index 00000000000..e646a256a72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005055,src_004847,time_1401881,execs_2610734,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005057,src_004847,time_1404851,execs_2613267,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005057,src_004847,time_1404851,execs_2613267,op_havoc,rep_16 new file mode 100644 index 00000000000..91ec2291faa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005057,src_004847,time_1404851,execs_2613267,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005060,src_004847,time_1414119,execs_2621320,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005060,src_004847,time_1414119,execs_2621320,op_havoc,rep_13 new file mode 100644 index 00000000000..f26445b8e4c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005060,src_004847,time_1414119,execs_2621320,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005062,src_004847,time_1414844,execs_2621930,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005062,src_004847,time_1414844,execs_2621930,op_havoc,rep_14 new file mode 100644 index 00000000000..9a723fc2fad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005062,src_004847,time_1414844,execs_2621930,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005063,src_004847,time_1416598,execs_2623403,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005063,src_004847,time_1416598,execs_2623403,op_havoc,rep_6 new file mode 100644 index 00000000000..08eedfa4f75 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005063,src_004847,time_1416598,execs_2623403,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005066,src_004847,time_1420742,execs_2626960,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005066,src_004847,time_1420742,execs_2626960,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..7b9eedca6da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005066,src_004847,time_1420742,execs_2626960,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005067,src_004847,time_1424419,execs_2630224,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005067,src_004847,time_1424419,execs_2630224,op_havoc,rep_3 new file mode 100644 index 00000000000..89d374f6e1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005067,src_004847,time_1424419,execs_2630224,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005068,src_004847,time_1426085,execs_2631697,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005068,src_004847,time_1426085,execs_2631697,op_havoc,rep_2 new file mode 100644 index 00000000000..f67ca19135a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005068,src_004847,time_1426085,execs_2631697,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005069,src_004847,time_1434746,execs_2639152,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005069,src_004847,time_1434746,execs_2639152,op_havoc,rep_14 new file mode 100644 index 00000000000..059d0e72462 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005069,src_004847,time_1434746,execs_2639152,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005070,src_004847,time_1434984,execs_2639350,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005070,src_004847,time_1434984,execs_2639350,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..4161f985996 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005070,src_004847,time_1434984,execs_2639350,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005071,src_004847,time_1435750,execs_2640006,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005071,src_004847,time_1435750,execs_2640006,op_havoc,rep_13 new file mode 100644 index 00000000000..b5dafa7976a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005071,src_004847,time_1435750,execs_2640006,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005072,src_001224,time_1436629,execs_2641260,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005072,src_001224,time_1436629,execs_2641260,op_havoc,rep_2 new file mode 100644 index 00000000000..52ae22de655 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005072,src_001224,time_1436629,execs_2641260,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005073,src_004014,time_1437167,execs_2643548,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005073,src_004014,time_1437167,execs_2643548,op_havoc,rep_2 new file mode 100644 index 00000000000..79372f17f41 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005073,src_004014,time_1437167,execs_2643548,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005081,src_005064,time_1439221,execs_2645317,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005081,src_005064,time_1439221,execs_2645317,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..c425c27ae5e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005081,src_005064,time_1439221,execs_2645317,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005082,src_005064,time_1439266,execs_2645330,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005082,src_005064,time_1439266,execs_2645330,op_havoc,rep_4 new file mode 100644 index 00000000000..fa09d24d66b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005082,src_005064,time_1439266,execs_2645330,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005086,src_005064,time_1440564,execs_2645774,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005086,src_005064,time_1440564,execs_2645774,op_havoc,rep_1 new file mode 100644 index 00000000000..3d53e7684a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005086,src_005064,time_1440564,execs_2645774,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005087,src_005064,time_1440731,execs_2645835,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005087,src_005064,time_1440731,execs_2645835,op_havoc,rep_4 new file mode 100644 index 00000000000..247e16c7253 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005087,src_005064,time_1440731,execs_2645835,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005089,src_005064,time_1442267,execs_2646358,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005089,src_005064,time_1442267,execs_2646358,op_havoc,rep_4 new file mode 100644 index 00000000000..67c40640975 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005089,src_005064,time_1442267,execs_2646358,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005090,src_005064,time_1442388,execs_2646395,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005090,src_005064,time_1442388,execs_2646395,op_havoc,rep_2 new file mode 100644 index 00000000000..100cf9c6861 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005090,src_005064,time_1442388,execs_2646395,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005095,src_005064,time_1446573,execs_2647881,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005095,src_005064,time_1446573,execs_2647881,op_havoc,rep_3 new file mode 100644 index 00000000000..7844ca0a626 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005095,src_005064,time_1446573,execs_2647881,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005098,src_005064,time_1449846,execs_2649018,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005098,src_005064,time_1449846,execs_2649018,op_havoc,rep_3 new file mode 100644 index 00000000000..70518ab4e38 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005098,src_005064,time_1449846,execs_2649018,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005100,src_005064,time_1451630,execs_2649650,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005100,src_005064,time_1451630,execs_2649650,op_havoc,rep_2 new file mode 100644 index 00000000000..05ccc3b3e95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005100,src_005064,time_1451630,execs_2649650,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005101,src_005064,time_1452545,execs_2649967,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005101,src_005064,time_1452545,execs_2649967,op_havoc,rep_3 new file mode 100644 index 00000000000..448792d724d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005101,src_005064,time_1452545,execs_2649967,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005102,src_005064,time_1452726,execs_2650028,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005102,src_005064,time_1452726,execs_2650028,op_havoc,rep_4 new file mode 100644 index 00000000000..d875a7b3ad5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005102,src_005064,time_1452726,execs_2650028,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005104,src_005064,time_1453507,execs_2650300,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005104,src_005064,time_1453507,execs_2650300,op_havoc,rep_4 new file mode 100644 index 00000000000..86c9f380594 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005104,src_005064,time_1453507,execs_2650300,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005107,src_005064,time_1457006,execs_2651538,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005107,src_005064,time_1457006,execs_2651538,op_havoc,rep_4 new file mode 100644 index 00000000000..b1f08af8aa7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005107,src_005064,time_1457006,execs_2651538,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005109,src_005064,time_1464114,execs_2654051,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005109,src_005064,time_1464114,execs_2654051,op_havoc,rep_3 new file mode 100644 index 00000000000..dcc70efe7be Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005109,src_005064,time_1464114,execs_2654051,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005110,src_004062,time_1465934,execs_2654717,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005110,src_004062,time_1465934,execs_2654717,op_havoc,rep_3 new file mode 100644 index 00000000000..ae58c8a5002 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005110,src_004062,time_1465934,execs_2654717,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005111,src_004067,time_1466140,execs_2656216,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005111,src_004067,time_1466140,execs_2656216,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..32ea4c1246c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005111,src_004067,time_1466140,execs_2656216,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005112,src_004067,time_1466209,execs_2656732,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005112,src_004067,time_1466209,execs_2656732,op_havoc,rep_4 new file mode 100644 index 00000000000..fb799dcb751 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005112,src_004067,time_1466209,execs_2656732,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005113,src_004067,time_1466461,execs_2658284,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005113,src_004067,time_1466461,execs_2658284,op_havoc,rep_4 new file mode 100644 index 00000000000..25670b1fff8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005113,src_004067,time_1466461,execs_2658284,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005114,src_004071,time_1466919,execs_2661471,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005114,src_004071,time_1466919,execs_2661471,op_havoc,rep_4 new file mode 100644 index 00000000000..a4d242c3404 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005114,src_004071,time_1466919,execs_2661471,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005116,src_004071,time_1466964,execs_2661787,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005116,src_004071,time_1466964,execs_2661787,op_havoc,rep_2 new file mode 100644 index 00000000000..9dfc2a99dbc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005116,src_004071,time_1466964,execs_2661787,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005117,src_004090,time_1467290,execs_2664011,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005117,src_004090,time_1467290,execs_2664011,op_havoc,rep_9 new file mode 100644 index 00000000000..5348fa3527f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005117,src_004090,time_1467290,execs_2664011,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005119,src_004090,time_1467628,execs_2665888,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005119,src_004090,time_1467628,execs_2665888,op_havoc,rep_7 new file mode 100644 index 00000000000..7dcae8d0897 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005119,src_004090,time_1467628,execs_2665888,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005124,src_004925,time_1468841,execs_2670090,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005124,src_004925,time_1468841,execs_2670090,op_havoc,rep_2 new file mode 100644 index 00000000000..4deab2260ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005124,src_004925,time_1468841,execs_2670090,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005126,src_004925,time_1470209,execs_2670872,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005126,src_004925,time_1470209,execs_2670872,op_havoc,rep_4 new file mode 100644 index 00000000000..c47b78eccb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005126,src_004925,time_1470209,execs_2670872,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005127,src_004925,time_1471966,execs_2671686,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005127,src_004925,time_1471966,execs_2671686,op_havoc,rep_2 new file mode 100644 index 00000000000..d3f8f8ffa6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005127,src_004925,time_1471966,execs_2671686,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005128,src_004925,time_1472576,execs_2672046,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005128,src_004925,time_1472576,execs_2672046,op_havoc,rep_3 new file mode 100644 index 00000000000..4026459f676 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005128,src_004925,time_1472576,execs_2672046,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005129,src_004925,time_1474919,execs_2673518,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005129,src_004925,time_1474919,execs_2673518,op_havoc,rep_1 new file mode 100644 index 00000000000..21f711e6938 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005129,src_004925,time_1474919,execs_2673518,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005130,src_004925,time_1478253,execs_2675123,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005130,src_004925,time_1478253,execs_2675123,op_havoc,rep_3 new file mode 100644 index 00000000000..3afa05f666e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005130,src_004925,time_1478253,execs_2675123,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005131,src_004925,time_1481504,execs_2676898,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005131,src_004925,time_1481504,execs_2676898,op_havoc,rep_4 new file mode 100644 index 00000000000..734d4a1e170 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005131,src_004925,time_1481504,execs_2676898,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005132,src_004176,time_1481824,execs_2677187,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005132,src_004176,time_1481824,execs_2677187,op_havoc,rep_7 new file mode 100644 index 00000000000..651c1edd85e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005132,src_004176,time_1481824,execs_2677187,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005133,src_004761,time_1482020,execs_2678486,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005133,src_004761,time_1482020,execs_2678486,op_havoc,rep_2 new file mode 100644 index 00000000000..fe5367cd0f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005133,src_004761,time_1482020,execs_2678486,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005134,src_004195,time_1483015,execs_2680046,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005134,src_004195,time_1483015,execs_2680046,op_havoc,rep_3 new file mode 100644 index 00000000000..158811eeb87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005134,src_004195,time_1483015,execs_2680046,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005135,src_003393,time_1483668,execs_2682107,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005135,src_003393,time_1483668,execs_2682107,op_havoc,rep_8 new file mode 100644 index 00000000000..275e7796b2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005135,src_003393,time_1483668,execs_2682107,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005137,src_001869,time_1484131,execs_2684219,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005137,src_001869,time_1484131,execs_2684219,op_havoc,rep_11 new file mode 100644 index 00000000000..1b1bf9e9639 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005137,src_001869,time_1484131,execs_2684219,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005138,src_004309,time_1484247,execs_2684886,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005138,src_004309,time_1484247,execs_2684886,op_havoc,rep_2 new file mode 100644 index 00000000000..fc4c7a9431f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005138,src_004309,time_1484247,execs_2684886,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005140,src_004544,time_1484737,execs_2686985,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005140,src_004544,time_1484737,execs_2686985,op_havoc,rep_7 new file mode 100644 index 00000000000..4c011d10a09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005140,src_004544,time_1484737,execs_2686985,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005142,src_004544,time_1484758,execs_2687132,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005142,src_004544,time_1484758,execs_2687132,op_havoc,rep_5 new file mode 100644 index 00000000000..446bd58a3cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005142,src_004544,time_1484758,execs_2687132,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005143,src_004544,time_1484784,execs_2687323,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005143,src_004544,time_1484784,execs_2687323,op_havoc,rep_6 new file mode 100644 index 00000000000..f3f0195d953 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005143,src_004544,time_1484784,execs_2687323,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005144,src_004212,time_1486133,execs_2696949,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005144,src_004212,time_1486133,execs_2696949,op_havoc,rep_1 new file mode 100644 index 00000000000..2dc9e681e7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005144,src_004212,time_1486133,execs_2696949,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005145,src_004974,time_1486280,execs_2697415,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005145,src_004974,time_1486280,execs_2697415,op_havoc,rep_6 new file mode 100644 index 00000000000..041a61ade5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005145,src_004974,time_1486280,execs_2697415,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005146,src_004216,time_1486606,execs_2697846,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005146,src_004216,time_1486606,execs_2697846,op_havoc,rep_7 new file mode 100644 index 00000000000..3a31eaef77d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005146,src_004216,time_1486606,execs_2697846,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005147,src_004216,time_1486610,execs_2697868,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005147,src_004216,time_1486610,execs_2697868,op_havoc,rep_3 new file mode 100644 index 00000000000..575210ea6eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005147,src_004216,time_1486610,execs_2697868,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005149,src_004216,time_1486634,execs_2698029,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005149,src_004216,time_1486634,execs_2698029,op_havoc,rep_9 new file mode 100644 index 00000000000..7c6f7836646 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005149,src_004216,time_1486634,execs_2698029,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005150,src_004216,time_1486674,execs_2698235,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005150,src_004216,time_1486674,execs_2698235,op_havoc,rep_7 new file mode 100644 index 00000000000..a707093740f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005150,src_004216,time_1486674,execs_2698235,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005151,src_004216,time_1486709,execs_2698479,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005151,src_004216,time_1486709,execs_2698479,op_havoc,rep_8 new file mode 100644 index 00000000000..271f57eebef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005151,src_004216,time_1486709,execs_2698479,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005152,src_004216,time_1486926,execs_2699595,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005152,src_004216,time_1486926,execs_2699595,op_havoc,rep_7 new file mode 100644 index 00000000000..47678fe17e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005152,src_004216,time_1486926,execs_2699595,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005153,src_004216,time_1486947,execs_2699728,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005153,src_004216,time_1486947,execs_2699728,op_havoc,rep_9 new file mode 100644 index 00000000000..fc7bc651121 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005153,src_004216,time_1486947,execs_2699728,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005154,src_004216,time_1486987,execs_2699999,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005154,src_004216,time_1486987,execs_2699999,op_havoc,rep_2 new file mode 100644 index 00000000000..db957fec1bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005154,src_004216,time_1486987,execs_2699999,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005155,src_004216,time_1487188,execs_2701268,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005155,src_004216,time_1487188,execs_2701268,op_havoc,rep_4 new file mode 100644 index 00000000000..7a7e3e804a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005155,src_004216,time_1487188,execs_2701268,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005156,src_004216,time_1487948,execs_2706044,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005156,src_004216,time_1487948,execs_2706044,op_havoc,rep_16 new file mode 100644 index 00000000000..308a5bed2df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005156,src_004216,time_1487948,execs_2706044,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005157,src_004238,time_1488199,execs_2707557,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005157,src_004238,time_1488199,execs_2707557,op_havoc,rep_2 new file mode 100644 index 00000000000..9257d904066 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005157,src_004238,time_1488199,execs_2707557,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005158,src_004738,time_1488456,execs_2708984,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005158,src_004738,time_1488456,execs_2708984,op_havoc,rep_10 new file mode 100644 index 00000000000..9890ef58f67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005158,src_004738,time_1488456,execs_2708984,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005163,src_004930,time_1488954,execs_2710173,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005163,src_004930,time_1488954,execs_2710173,op_havoc,rep_9 new file mode 100644 index 00000000000..4722dfdb633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005163,src_004930,time_1488954,execs_2710173,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005164,src_004930,time_1489109,execs_2710261,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005164,src_004930,time_1489109,execs_2710261,op_havoc,rep_8 new file mode 100644 index 00000000000..0d0c6a99fbb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005164,src_004930,time_1489109,execs_2710261,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005165,src_004930,time_1489131,execs_2710276,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005165,src_004930,time_1489131,execs_2710276,op_havoc,rep_10 new file mode 100644 index 00000000000..acad6a4f248 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005165,src_004930,time_1489131,execs_2710276,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005167,src_004930,time_1490050,execs_2710884,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005167,src_004930,time_1490050,execs_2710884,op_havoc,rep_5 new file mode 100644 index 00000000000..8cb3ea46315 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005167,src_004930,time_1490050,execs_2710884,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005168,src_004930,time_1491240,execs_2711598,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005168,src_004930,time_1491240,execs_2711598,op_havoc,rep_2 new file mode 100644 index 00000000000..3cdf39aecd4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005168,src_004930,time_1491240,execs_2711598,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005169,src_004930,time_1491387,execs_2711691,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005169,src_004930,time_1491387,execs_2711691,op_havoc,rep_6 new file mode 100644 index 00000000000..5c404380302 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005169,src_004930,time_1491387,execs_2711691,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005170,src_004930,time_1492246,execs_2712218,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005170,src_004930,time_1492246,execs_2712218,op_havoc,rep_11 new file mode 100644 index 00000000000..fc438f1b35f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005170,src_004930,time_1492246,execs_2712218,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005171,src_004930,time_1492361,execs_2712302,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005171,src_004930,time_1492361,execs_2712302,op_havoc,rep_5 new file mode 100644 index 00000000000..60bd457775c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005171,src_004930,time_1492361,execs_2712302,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005172,src_004930,time_1493173,execs_2712778,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005172,src_004930,time_1493173,execs_2712778,op_havoc,rep_11 new file mode 100644 index 00000000000..5fa68fd3d66 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005172,src_004930,time_1493173,execs_2712778,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005173,src_004930,time_1494698,execs_2713804,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005173,src_004930,time_1494698,execs_2713804,op_havoc,rep_8 new file mode 100644 index 00000000000..f1e621dc11c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005173,src_004930,time_1494698,execs_2713804,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005174,src_004930,time_1495042,execs_2714017,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005174,src_004930,time_1495042,execs_2714017,op_havoc,rep_14 new file mode 100644 index 00000000000..907a72c9ae1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005174,src_004930,time_1495042,execs_2714017,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005175,src_004930,time_1495396,execs_2714235,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005175,src_004930,time_1495396,execs_2714235,op_havoc,rep_16 new file mode 100644 index 00000000000..68c4b069fb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005175,src_004930,time_1495396,execs_2714235,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005177,src_004930,time_1498821,execs_2716423,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005177,src_004930,time_1498821,execs_2716423,op_havoc,rep_13 new file mode 100644 index 00000000000..93c1ff7aacb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005177,src_004930,time_1498821,execs_2716423,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005178,src_004818,time_1500583,execs_2718747,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005178,src_004818,time_1500583,execs_2718747,op_havoc,rep_14 new file mode 100644 index 00000000000..dc811c61f9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005178,src_004818,time_1500583,execs_2718747,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005179,src_004818,time_1500633,execs_2718920,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005179,src_004818,time_1500633,execs_2718920,op_havoc,rep_5 new file mode 100644 index 00000000000..ea59f524a07 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005179,src_004818,time_1500633,execs_2718920,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005180,src_004818,time_1501287,execs_2720960,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005180,src_004818,time_1501287,execs_2720960,op_havoc,rep_15 new file mode 100644 index 00000000000..3d0ab497766 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005180,src_004818,time_1501287,execs_2720960,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005182,src_004821,time_1502183,execs_2723755,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005182,src_004821,time_1502183,execs_2723755,op_havoc,rep_7 new file mode 100644 index 00000000000..0e9935e7a1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005182,src_004821,time_1502183,execs_2723755,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005183,src_004821,time_1502336,execs_2724188,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005183,src_004821,time_1502336,execs_2724188,op_havoc,rep_7 new file mode 100644 index 00000000000..9ceccf9f2e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005183,src_004821,time_1502336,execs_2724188,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005184,src_004821,time_1502695,execs_2725080,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005184,src_004821,time_1502695,execs_2725080,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..a2baf157328 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005184,src_004821,time_1502695,execs_2725080,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005186,src_004370,time_1508555,execs_2736583,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005186,src_004370,time_1508555,execs_2736583,op_havoc,rep_2 new file mode 100644 index 00000000000..0b3942f4d02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005186,src_004370,time_1508555,execs_2736583,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005188,src_004886,time_1509381,execs_2739507,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005188,src_004886,time_1509381,execs_2739507,op_havoc,rep_3 new file mode 100644 index 00000000000..cebf73f591c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005188,src_004886,time_1509381,execs_2739507,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005189,src_004886,time_1509752,execs_2739784,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005189,src_004886,time_1509752,execs_2739784,op_havoc,rep_4 new file mode 100644 index 00000000000..38c288fae79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005189,src_004886,time_1509752,execs_2739784,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005190,src_004468,time_1510628,execs_2740861,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005190,src_004468,time_1510628,execs_2740861,op_havoc,rep_12 new file mode 100644 index 00000000000..f9f3a36d592 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005190,src_004468,time_1510628,execs_2740861,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005191,src_004468,time_1510721,execs_2741142,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005191,src_004468,time_1510721,execs_2741142,op_havoc,rep_13 new file mode 100644 index 00000000000..199d3dd96de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005191,src_004468,time_1510721,execs_2741142,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005192,src_004468,time_1511116,execs_2742451,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005192,src_004468,time_1511116,execs_2742451,op_havoc,rep_15 new file mode 100644 index 00000000000..a6a774ea769 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005192,src_004468,time_1511116,execs_2742451,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005193,src_004442,time_1512108,execs_2746013,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005193,src_004442,time_1512108,execs_2746013,op_havoc,rep_5 new file mode 100644 index 00000000000..06ff248a364 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005193,src_004442,time_1512108,execs_2746013,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005194,src_004653,time_1512327,execs_2747286,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005194,src_004653,time_1512327,execs_2747286,op_havoc,rep_1 new file mode 100644 index 00000000000..e91aef701f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005194,src_004653,time_1512327,execs_2747286,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005195,src_005181,time_1512861,execs_2750115,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005195,src_005181,time_1512861,execs_2750115,op_havoc,rep_11 new file mode 100644 index 00000000000..991c8424e09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005195,src_005181,time_1512861,execs_2750115,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005196,src_005181,time_1512982,execs_2750306,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005196,src_005181,time_1512982,execs_2750306,op_havoc,rep_10 new file mode 100644 index 00000000000..2c64890f437 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005196,src_005181,time_1512982,execs_2750306,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005198,src_005181,time_1514723,execs_2753678,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005198,src_005181,time_1514723,execs_2753678,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..707ff4e1911 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005198,src_005181,time_1514723,execs_2753678,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005199,src_005181,time_1517183,execs_2758642,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005199,src_005181,time_1517183,execs_2758642,op_havoc,rep_7 new file mode 100644 index 00000000000..8eab389b8f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005199,src_005181,time_1517183,execs_2758642,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005200,src_004493,time_1517667,execs_2759672,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005200,src_004493,time_1517667,execs_2759672,op_havoc,rep_3 new file mode 100644 index 00000000000..10217d4caec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005200,src_004493,time_1517667,execs_2759672,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005201,src_004493,time_1517761,execs_2760250,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005201,src_004493,time_1517761,execs_2760250,op_havoc,rep_4 new file mode 100644 index 00000000000..67107befc00 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005201,src_004493,time_1517761,execs_2760250,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005202,src_004502,time_1518327,execs_2762818,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005202,src_004502,time_1518327,execs_2762818,op_havoc,rep_11 new file mode 100644 index 00000000000..71748242d7f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005202,src_004502,time_1518327,execs_2762818,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005203,src_005066,time_1518911,execs_2764020,op_quick,pos_32,val_+8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005203,src_005066,time_1518911,execs_2764020,op_quick,pos_32,val_+8,+cov new file mode 100644 index 00000000000..a2e152dbcbf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005203,src_005066,time_1518911,execs_2764020,op_quick,pos_32,val_+8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005204,src_004124,time_1519721,execs_2765295,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005204,src_004124,time_1519721,execs_2765295,op_havoc,rep_4 new file mode 100644 index 00000000000..80c0876291d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005204,src_004124,time_1519721,execs_2765295,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005205,src_004124,time_1519892,execs_2765477,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005205,src_004124,time_1519892,execs_2765477,op_havoc,rep_3 new file mode 100644 index 00000000000..b26aa0e2a3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005205,src_004124,time_1519892,execs_2765477,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005207,src_004805,time_1522592,execs_2768421,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005207,src_004805,time_1522592,execs_2768421,op_havoc,rep_1 new file mode 100644 index 00000000000..e9b34fef9ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005207,src_004805,time_1522592,execs_2768421,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005208,src_004805,time_1522666,execs_2768989,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005208,src_004805,time_1522666,execs_2768989,op_havoc,rep_1 new file mode 100644 index 00000000000..589c4096f5f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005208,src_004805,time_1522666,execs_2768989,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005210,src_004805,time_1522725,execs_2769429,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005210,src_004805,time_1522725,execs_2769429,op_havoc,rep_2 new file mode 100644 index 00000000000..1afd23a8a81 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005210,src_004805,time_1522725,execs_2769429,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005211,src_002860,time_1523900,execs_2778179,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005211,src_002860,time_1523900,execs_2778179,op_havoc,rep_6 new file mode 100644 index 00000000000..96e433a6aef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005211,src_002860,time_1523900,execs_2778179,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005215,src_004384,time_1525486,execs_2778919,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005215,src_004384,time_1525486,execs_2778919,op_havoc,rep_16 new file mode 100644 index 00000000000..16a5a63588c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005215,src_004384,time_1525486,execs_2778919,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005218,src_004384,time_1533786,execs_2779775,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005218,src_004384,time_1533786,execs_2779775,op_havoc,rep_10 new file mode 100644 index 00000000000..f8f25b54565 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005218,src_004384,time_1533786,execs_2779775,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005219,src_004384,time_1537632,execs_2780508,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005219,src_004384,time_1537632,execs_2780508,op_havoc,rep_7 new file mode 100644 index 00000000000..aaaf7576210 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005219,src_004384,time_1537632,execs_2780508,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005220,src_004384,time_1539261,execs_2780890,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005220,src_004384,time_1539261,execs_2780890,op_havoc,rep_6 new file mode 100644 index 00000000000..ac9dc879f0e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005220,src_004384,time_1539261,execs_2780890,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005223,src_004384,time_1568125,execs_2784882,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005223,src_004384,time_1568125,execs_2784882,op_havoc,rep_10 new file mode 100644 index 00000000000..58833efc1ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005223,src_004384,time_1568125,execs_2784882,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005224,src_004384,time_1581969,execs_2787306,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005224,src_004384,time_1581969,execs_2787306,op_havoc,rep_11 new file mode 100644 index 00000000000..f0415f194ae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005224,src_004384,time_1581969,execs_2787306,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005227,src_004698,time_1612897,execs_2793072,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005227,src_004698,time_1612897,execs_2793072,op_havoc,rep_8 new file mode 100644 index 00000000000..f85706cd0c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005227,src_004698,time_1612897,execs_2793072,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005228,src_004698,time_1612919,execs_2793203,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005228,src_004698,time_1612919,execs_2793203,op_havoc,rep_2 new file mode 100644 index 00000000000..f9355efd1de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005228,src_004698,time_1612919,execs_2793203,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005229,src_004698,time_1612979,execs_2793543,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005229,src_004698,time_1612979,execs_2793543,op_havoc,rep_7 new file mode 100644 index 00000000000..bd44c92bae3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005229,src_004698,time_1612979,execs_2793543,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005231,src_004698,time_1613037,execs_2793759,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005231,src_004698,time_1613037,execs_2793759,op_havoc,rep_7 new file mode 100644 index 00000000000..cd371a097ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005231,src_004698,time_1613037,execs_2793759,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005233,src_004698,time_1613329,execs_2795455,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005233,src_004698,time_1613329,execs_2795455,op_havoc,rep_8 new file mode 100644 index 00000000000..3d0d2542785 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005233,src_004698,time_1613329,execs_2795455,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005234,src_004698,time_1613458,execs_2796095,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005234,src_004698,time_1613458,execs_2796095,op_havoc,rep_7 new file mode 100644 index 00000000000..c88e3e5acfc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005234,src_004698,time_1613458,execs_2796095,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005235,src_004698,time_1613871,execs_2798438,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005235,src_004698,time_1613871,execs_2798438,op_havoc,rep_1 new file mode 100644 index 00000000000..09518f9fbae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005235,src_004698,time_1613871,execs_2798438,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005236,src_004698,time_1613895,execs_2798558,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005236,src_004698,time_1613895,execs_2798558,op_havoc,rep_2 new file mode 100644 index 00000000000..3824aa5ea06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005236,src_004698,time_1613895,execs_2798558,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005237,src_004698,time_1613975,execs_2799030,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005237,src_004698,time_1613975,execs_2799030,op_havoc,rep_3 new file mode 100644 index 00000000000..1c10c194e3c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005237,src_004698,time_1613975,execs_2799030,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005238,src_004642,time_1614705,execs_2802855,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005238,src_004642,time_1614705,execs_2802855,op_havoc,rep_7 new file mode 100644 index 00000000000..f0ff702622d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005238,src_004642,time_1614705,execs_2802855,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005239,src_004642,time_1614743,execs_2802913,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005239,src_004642,time_1614743,execs_2802913,op_havoc,rep_10 new file mode 100644 index 00000000000..d3dbac55f67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005239,src_004642,time_1614743,execs_2802913,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005240,src_003950,time_1615304,execs_2804065,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005240,src_003950,time_1615304,execs_2804065,op_havoc,rep_2 new file mode 100644 index 00000000000..1df4a6008a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005240,src_003950,time_1615304,execs_2804065,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005241,src_004743,time_1615418,execs_2804302,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005241,src_004743,time_1615418,execs_2804302,op_havoc,rep_2 new file mode 100644 index 00000000000..96b41889786 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005241,src_004743,time_1615418,execs_2804302,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005243,src_004689,time_1616010,execs_2805813,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005243,src_004689,time_1616010,execs_2805813,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..ec2b8b84537 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005243,src_004689,time_1616010,execs_2805813,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005246,src_004913,time_1619376,execs_2809580,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005246,src_004913,time_1619376,execs_2809580,op_havoc,rep_2 new file mode 100644 index 00000000000..a031e16b24e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005246,src_004913,time_1619376,execs_2809580,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005247,src_004725,time_1619943,execs_2810139,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005247,src_004725,time_1619943,execs_2810139,op_havoc,rep_3 new file mode 100644 index 00000000000..527c837c42d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005247,src_004725,time_1619943,execs_2810139,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005248,src_004725,time_1619966,execs_2810310,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005248,src_004725,time_1619966,execs_2810310,op_havoc,rep_3 new file mode 100644 index 00000000000..76686954575 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005248,src_004725,time_1619966,execs_2810310,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005249,src_004742,time_1620544,execs_2813118,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005249,src_004742,time_1620544,execs_2813118,op_havoc,rep_4 new file mode 100644 index 00000000000..ac45713b12d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005249,src_004742,time_1620544,execs_2813118,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005250,src_004742,time_1620814,execs_2813642,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005250,src_004742,time_1620814,execs_2813642,op_havoc,rep_8 new file mode 100644 index 00000000000..2e598b220e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005250,src_004742,time_1620814,execs_2813642,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005252,src_004742,time_1621487,execs_2814313,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005252,src_004742,time_1621487,execs_2814313,op_havoc,rep_3 new file mode 100644 index 00000000000..5b523dc9b21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005252,src_004742,time_1621487,execs_2814313,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005253,src_004742,time_1623447,execs_2817808,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005253,src_004742,time_1623447,execs_2817808,op_havoc,rep_5 new file mode 100644 index 00000000000..e14fcc25a1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005253,src_004742,time_1623447,execs_2817808,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005254,src_004742,time_1623499,execs_2817901,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005254,src_004742,time_1623499,execs_2817901,op_havoc,rep_6 new file mode 100644 index 00000000000..699f85f6de5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005254,src_004742,time_1623499,execs_2817901,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005255,src_004786,time_1624796,execs_2820398,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005255,src_004786,time_1624796,execs_2820398,op_havoc,rep_14 new file mode 100644 index 00000000000..7e5c0407882 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005255,src_004786,time_1624796,execs_2820398,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005256,src_004786,time_1624811,execs_2820500,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005256,src_004786,time_1624811,execs_2820500,op_havoc,rep_2 new file mode 100644 index 00000000000..38387a078a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005256,src_004786,time_1624811,execs_2820500,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005257,src_004786,time_1624836,execs_2820664,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005257,src_004786,time_1624836,execs_2820664,op_havoc,rep_6 new file mode 100644 index 00000000000..0c3828f222f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005257,src_004786,time_1624836,execs_2820664,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005258,src_004786,time_1624844,execs_2820713,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005258,src_004786,time_1624844,execs_2820713,op_havoc,rep_3 new file mode 100644 index 00000000000..dd7407b10b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005258,src_004786,time_1624844,execs_2820713,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005259,src_004786,time_1625057,execs_2822001,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005259,src_004786,time_1625057,execs_2822001,op_havoc,rep_16 new file mode 100644 index 00000000000..6b68adec24f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005259,src_004786,time_1625057,execs_2822001,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005260,src_004786,time_1625258,execs_2823065,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005260,src_004786,time_1625258,execs_2823065,op_havoc,rep_1 new file mode 100644 index 00000000000..8ae96d55b95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005260,src_004786,time_1625258,execs_2823065,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005261,src_004786,time_1625385,execs_2823834,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005261,src_004786,time_1625385,execs_2823834,op_havoc,rep_3 new file mode 100644 index 00000000000..a82f12339fd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005261,src_004786,time_1625385,execs_2823834,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005262,src_004786,time_1625693,execs_2825682,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005262,src_004786,time_1625693,execs_2825682,op_havoc,rep_8 new file mode 100644 index 00000000000..f5f6df78d2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005262,src_004786,time_1625693,execs_2825682,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005263,src_004797,time_1626197,execs_2827750,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005263,src_004797,time_1626197,execs_2827750,op_havoc,rep_6 new file mode 100644 index 00000000000..37503d435c0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005263,src_004797,time_1626197,execs_2827750,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005264,src_004797,time_1626304,execs_2827845,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005264,src_004797,time_1626304,execs_2827845,op_havoc,rep_8 new file mode 100644 index 00000000000..27aa3fcd9a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005264,src_004797,time_1626304,execs_2827845,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005267,src_004797,time_1630352,execs_2831830,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005267,src_004797,time_1630352,execs_2831830,op_havoc,rep_3 new file mode 100644 index 00000000000..6904f41e8a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005267,src_004797,time_1630352,execs_2831830,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005268,src_004797,time_1631437,execs_2832781,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005268,src_004797,time_1631437,execs_2832781,op_havoc,rep_1 new file mode 100644 index 00000000000..8ef59eac0d6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005268,src_004797,time_1631437,execs_2832781,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005269,src_005138,time_1633802,execs_2835045,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005269,src_005138,time_1633802,execs_2835045,op_havoc,rep_4 new file mode 100644 index 00000000000..4e6fbf21972 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005269,src_005138,time_1633802,execs_2835045,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005270,src_005138,time_1633818,execs_2835145,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005270,src_005138,time_1633818,execs_2835145,op_havoc,rep_2 new file mode 100644 index 00000000000..49aff5ecad6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005270,src_005138,time_1633818,execs_2835145,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005271,src_004800,time_1634825,execs_2838777,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005271,src_004800,time_1634825,execs_2838777,op_havoc,rep_6 new file mode 100644 index 00000000000..0d718d13666 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005271,src_004800,time_1634825,execs_2838777,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005272,src_001015,time_1635158,execs_2840437,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005272,src_001015,time_1635158,execs_2840437,op_havoc,rep_7 new file mode 100644 index 00000000000..afb3702d0ea --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005272,src_001015,time_1635158,execs_2840437,op_havoc,rep_7 @@ -0,0 +1 @@ +ü[?25lQ±±±±±eKh5]9;4;1;0000000±±±±±±±±HHHH[?25h[]9;4;1;0000000±±±±±±±?"049h?25l[?1049h[?25h[?"049h[?05h[?1049l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005273,src_003997,time_1635340,execs_2840781,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005273,src_003997,time_1635340,execs_2840781,op_havoc,rep_1 new file mode 100644 index 00000000000..2cd66b59d3e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005273,src_003997,time_1635340,execs_2840781,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005274,src_005016,time_1636543,execs_2841789,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005274,src_005016,time_1636543,execs_2841789,op_havoc,rep_2 new file mode 100644 index 00000000000..5760ffd87f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005274,src_005016,time_1636543,execs_2841789,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005275,src_005016,time_1636648,execs_2841849,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005275,src_005016,time_1636648,execs_2841849,op_havoc,rep_3 new file mode 100644 index 00000000000..2f65efb6388 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005275,src_005016,time_1636648,execs_2841849,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005276,src_005016,time_1636665,execs_2841861,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005276,src_005016,time_1636665,execs_2841861,op_havoc,rep_1 new file mode 100644 index 00000000000..6d41a59a029 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005276,src_005016,time_1636665,execs_2841861,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005277,src_005016,time_1638162,execs_2842666,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005277,src_005016,time_1638162,execs_2842666,op_havoc,rep_4 new file mode 100644 index 00000000000..dc95039641c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005277,src_005016,time_1638162,execs_2842666,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005278,src_003037,time_1645463,execs_2845589,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005278,src_003037,time_1645463,execs_2845589,op_havoc,rep_2 new file mode 100644 index 00000000000..7bcaeb89ac1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005278,src_003037,time_1645463,execs_2845589,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005279,src_005198,time_1647684,execs_2846516,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005279,src_005198,time_1647684,execs_2846516,op_havoc,rep_4 new file mode 100644 index 00000000000..52eb902061c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005279,src_005198,time_1647684,execs_2846516,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005284,src_004862,time_1655803,execs_2850918,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005284,src_004862,time_1655803,execs_2850918,op_havoc,rep_6 new file mode 100644 index 00000000000..dc47dcb1959 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005284,src_004862,time_1655803,execs_2850918,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005286,src_005281,time_1661502,execs_2852371,op_quick,pos_170,val_+6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005286,src_005281,time_1661502,execs_2852371,op_quick,pos_170,val_+6 new file mode 100644 index 00000000000..15ceb475756 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005286,src_005281,time_1661502,execs_2852371,op_quick,pos_170,val_+6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005289,src_005281,time_1662732,execs_2852502,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005289,src_005281,time_1662732,execs_2852502,op_havoc,rep_4 new file mode 100644 index 00000000000..42f9fb053e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005289,src_005281,time_1662732,execs_2852502,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005291,src_005281,time_1663965,execs_2852658,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005291,src_005281,time_1663965,execs_2852658,op_havoc,rep_7 new file mode 100644 index 00000000000..57387ae46a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005291,src_005281,time_1663965,execs_2852658,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005294,src_005281,time_1668233,execs_2853215,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005294,src_005281,time_1668233,execs_2853215,op_havoc,rep_13 new file mode 100644 index 00000000000..cbce951c7bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005294,src_005281,time_1668233,execs_2853215,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005296,src_005281,time_1671126,execs_2853586,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005296,src_005281,time_1671126,execs_2853586,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..f48803bb656 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005296,src_005281,time_1671126,execs_2853586,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005297,src_005281,time_1674474,execs_2854071,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005297,src_005281,time_1674474,execs_2854071,op_havoc,rep_10 new file mode 100644 index 00000000000..9f04cc00ed9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005297,src_005281,time_1674474,execs_2854071,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005300,src_005281,time_1676697,execs_2854349,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005300,src_005281,time_1676697,execs_2854349,op_havoc,rep_4 new file mode 100644 index 00000000000..c3972537607 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005300,src_005281,time_1676697,execs_2854349,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005303,src_005281,time_1683959,execs_2855375,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005303,src_005281,time_1683959,execs_2855375,op_havoc,rep_16 new file mode 100644 index 00000000000..455bc8d1d76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005303,src_005281,time_1683959,execs_2855375,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005304,src_005281,time_1684721,execs_2855475,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005304,src_005281,time_1684721,execs_2855475,op_havoc,rep_12 new file mode 100644 index 00000000000..74defeeac1d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005304,src_005281,time_1684721,execs_2855475,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005306,src_005281,time_1686786,execs_2855735,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005306,src_005281,time_1686786,execs_2855735,op_havoc,rep_15 new file mode 100644 index 00000000000..837582c98ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005306,src_005281,time_1686786,execs_2855735,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005310,src_005281,time_1692807,execs_2856532,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005310,src_005281,time_1692807,execs_2856532,op_havoc,rep_10 new file mode 100644 index 00000000000..2e8914a80dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005310,src_005281,time_1692807,execs_2856532,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005312,src_005281,time_1694918,execs_2856799,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005312,src_005281,time_1694918,execs_2856799,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..7128e7fefc4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005312,src_005281,time_1694918,execs_2856799,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005315,src_005281,time_1707300,execs_2858512,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005315,src_005281,time_1707300,execs_2858512,op_havoc,rep_2 new file mode 100644 index 00000000000..9625c30f7ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005315,src_005281,time_1707300,execs_2858512,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005316,src_005281,time_1708683,execs_2858694,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005316,src_005281,time_1708683,execs_2858694,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..2f3e343930b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005316,src_005281,time_1708683,execs_2858694,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005317,src_005281,time_1709489,execs_2858802,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005317,src_005281,time_1709489,execs_2858802,op_havoc,rep_6 new file mode 100644 index 00000000000..4485683de51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005317,src_005281,time_1709489,execs_2858802,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005320,src_005115,time_1725134,execs_2861723,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005320,src_005115,time_1725134,execs_2861723,op_havoc,rep_4 new file mode 100644 index 00000000000..8d3929daa30 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005320,src_005115,time_1725134,execs_2861723,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005321,src_005115,time_1725266,execs_2862609,op_havoc,rep_4,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005321,src_005115,time_1725266,execs_2862609,op_havoc,rep_4,+cov new file mode 100644 index 00000000000..ae702d9927e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005321,src_005115,time_1725266,execs_2862609,op_havoc,rep_4,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005322,src_005115,time_1725368,execs_2863281,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005322,src_005115,time_1725368,execs_2863281,op_havoc,rep_3 new file mode 100644 index 00000000000..8e6a183c9d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005322,src_005115,time_1725368,execs_2863281,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005323,src_004968,time_1728778,execs_2868960,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005323,src_004968,time_1728778,execs_2868960,op_havoc,rep_4 new file mode 100644 index 00000000000..6bc6363e7c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005323,src_004968,time_1728778,execs_2868960,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005324,src_005256,time_1732840,execs_2870011,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005324,src_005256,time_1732840,execs_2870011,op_havoc,rep_5 new file mode 100644 index 00000000000..55093f62988 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005324,src_005256,time_1732840,execs_2870011,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005326,src_005092,time_1733902,execs_2871926,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005326,src_005092,time_1733902,execs_2871926,op_havoc,rep_9 new file mode 100644 index 00000000000..9cf4eb3d063 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005326,src_005092,time_1733902,execs_2871926,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005327,src_005092,time_1734765,execs_2872228,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005327,src_005092,time_1734765,execs_2872228,op_havoc,rep_3 new file mode 100644 index 00000000000..938ec5810ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005327,src_005092,time_1734765,execs_2872228,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005329,src_005092,time_1735027,execs_2872305,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005329,src_005092,time_1735027,execs_2872305,op_havoc,rep_2 new file mode 100644 index 00000000000..b41202c53bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005329,src_005092,time_1735027,execs_2872305,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005330,src_005092,time_1735590,execs_2872512,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005330,src_005092,time_1735590,execs_2872512,op_havoc,rep_10 new file mode 100644 index 00000000000..dcd27436843 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005330,src_005092,time_1735590,execs_2872512,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005331,src_005092,time_1737056,execs_2873048,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005331,src_005092,time_1737056,execs_2873048,op_havoc,rep_13 new file mode 100644 index 00000000000..b53b5ae64a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005331,src_005092,time_1737056,execs_2873048,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005332,src_005092,time_1738166,execs_2873485,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005332,src_005092,time_1738166,execs_2873485,op_havoc,rep_16 new file mode 100644 index 00000000000..329dd3dacd4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005332,src_005092,time_1738166,execs_2873485,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005334,src_005092,time_1739037,execs_2873814,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005334,src_005092,time_1739037,execs_2873814,op_havoc,rep_4 new file mode 100644 index 00000000000..4db24c6a9d6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005334,src_005092,time_1739037,execs_2873814,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005335,src_005092,time_1739538,execs_2873978,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005335,src_005092,time_1739538,execs_2873978,op_havoc,rep_10 new file mode 100644 index 00000000000..d63d9a57b47 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005335,src_005092,time_1739538,execs_2873978,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005340,src_005092,time_1750348,execs_2878041,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005340,src_005092,time_1750348,execs_2878041,op_havoc,rep_4 new file mode 100644 index 00000000000..1c31a1a41a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005340,src_005092,time_1750348,execs_2878041,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005341,src_005092,time_1753460,execs_2879215,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005341,src_005092,time_1753460,execs_2879215,op_havoc,rep_13 new file mode 100644 index 00000000000..f12b36547fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005341,src_005092,time_1753460,execs_2879215,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005342,src_005092,time_1755870,execs_2880146,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005342,src_005092,time_1755870,execs_2880146,op_havoc,rep_5 new file mode 100644 index 00000000000..03889ab408f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005342,src_005092,time_1755870,execs_2880146,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005343,src_005092,time_1757526,execs_2880760,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005343,src_005092,time_1757526,execs_2880760,op_havoc,rep_11 new file mode 100644 index 00000000000..a126973c297 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005343,src_005092,time_1757526,execs_2880760,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005346,src_005111,time_1760995,execs_2884819,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005346,src_005111,time_1760995,execs_2884819,op_havoc,rep_1 new file mode 100644 index 00000000000..19f19dfba04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005346,src_005111,time_1760995,execs_2884819,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005348,src_005244,time_1761310,execs_2886985,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005348,src_005244,time_1761310,execs_2886985,op_havoc,rep_4 new file mode 100644 index 00000000000..2892aa6154a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005348,src_005244,time_1761310,execs_2886985,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005349,src_005244,time_1761868,execs_2889006,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005349,src_005244,time_1761868,execs_2889006,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..5301802765d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005349,src_005244,time_1761868,execs_2889006,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005350,src_005349,time_1763302,execs_2892595,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005350,src_005349,time_1763302,execs_2892595,op_havoc,rep_4 new file mode 100644 index 00000000000..cdf853d94a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005350,src_005349,time_1763302,execs_2892595,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005352,src_004091,time_1765072,execs_2896653,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005352,src_004091,time_1765072,execs_2896653,op_havoc,rep_16 new file mode 100644 index 00000000000..9c7595cb97f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005352,src_004091,time_1765072,execs_2896653,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005353,src_004640,time_1765467,execs_2897977,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005353,src_004640,time_1765467,execs_2897977,op_havoc,rep_1 new file mode 100644 index 00000000000..5d2d066c70c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005353,src_004640,time_1765467,execs_2897977,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005355,src_005338,time_1767804,execs_2899623,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005355,src_005338,time_1767804,execs_2899623,op_havoc,rep_2 new file mode 100644 index 00000000000..8ebcf8cca84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005355,src_005338,time_1767804,execs_2899623,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005357,src_005338,time_1768517,execs_2899873,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005357,src_005338,time_1768517,execs_2899873,op_havoc,rep_1 new file mode 100644 index 00000000000..afacb495d4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005357,src_005338,time_1768517,execs_2899873,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005358,src_005338,time_1768691,execs_2899944,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005358,src_005338,time_1768691,execs_2899944,op_havoc,rep_5 new file mode 100644 index 00000000000..5b30109a298 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005358,src_005338,time_1768691,execs_2899944,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005360,src_005338,time_1768957,execs_2900028,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005360,src_005338,time_1768957,execs_2900028,op_havoc,rep_6 new file mode 100644 index 00000000000..53136d6e83e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005360,src_005338,time_1768957,execs_2900028,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005362,src_005338,time_1769926,execs_2900412,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005362,src_005338,time_1769926,execs_2900412,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..4d9a8f8dc0a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005362,src_005338,time_1769926,execs_2900412,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005363,src_005338,time_1770044,execs_2900456,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005363,src_005338,time_1770044,execs_2900456,op_havoc,rep_5 new file mode 100644 index 00000000000..99f03a6cfa5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005363,src_005338,time_1770044,execs_2900456,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005366,src_005338,time_1771759,execs_2901105,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005366,src_005338,time_1771759,execs_2901105,op_havoc,rep_4 new file mode 100644 index 00000000000..4cb97e9eb46 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005366,src_005338,time_1771759,execs_2901105,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005368,src_005338,time_1774192,execs_2902063,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005368,src_005338,time_1774192,execs_2902063,op_havoc,rep_6 new file mode 100644 index 00000000000..4cfb8108008 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005368,src_005338,time_1774192,execs_2902063,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005370,src_005338,time_1776823,execs_2903097,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005370,src_005338,time_1776823,execs_2903097,op_havoc,rep_1 new file mode 100644 index 00000000000..dbcae4eed7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005370,src_005338,time_1776823,execs_2903097,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005371,src_005338,time_1778364,execs_2903698,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005371,src_005338,time_1778364,execs_2903698,op_havoc,rep_6 new file mode 100644 index 00000000000..22ca066eec6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005371,src_005338,time_1778364,execs_2903698,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005372,src_005338,time_1780898,execs_2904719,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005372,src_005338,time_1780898,execs_2904719,op_havoc,rep_3 new file mode 100644 index 00000000000..6760036549a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005372,src_005338,time_1780898,execs_2904719,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005373,src_005338,time_1783964,execs_2905934,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005373,src_005338,time_1783964,execs_2905934,op_havoc,rep_8 new file mode 100644 index 00000000000..fc07bd9cf48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005373,src_005338,time_1783964,execs_2905934,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005375,src_005338,time_1785219,execs_2906452,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005375,src_005338,time_1785219,execs_2906452,op_havoc,rep_5 new file mode 100644 index 00000000000..a49af7c0192 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005375,src_005338,time_1785219,execs_2906452,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005376,src_005173,time_1786843,execs_2907228,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005376,src_005173,time_1786843,execs_2907228,op_havoc,rep_12 new file mode 100644 index 00000000000..e306093f324 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005376,src_005173,time_1786843,execs_2907228,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005377,src_005197,time_1787268,execs_2907848,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005377,src_005197,time_1787268,execs_2907848,op_havoc,rep_1 new file mode 100644 index 00000000000..80e891dfc13 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005377,src_005197,time_1787268,execs_2907848,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005378,src_002356,time_1787592,execs_2909603,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005378,src_002356,time_1787592,execs_2909603,op_havoc,rep_1 new file mode 100644 index 00000000000..34c7b1b2427 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005378,src_002356,time_1787592,execs_2909603,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005381,src_005308,time_1790136,execs_2911995,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005381,src_005308,time_1790136,execs_2911995,op_havoc,rep_1 new file mode 100644 index 00000000000..976927b873d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005381,src_005308,time_1790136,execs_2911995,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005384,src_005308,time_1792369,execs_2912231,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005384,src_005308,time_1792369,execs_2912231,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..04897b8b2e3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005384,src_005308,time_1792369,execs_2912231,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005387,src_005308,time_1797029,execs_2912717,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005387,src_005308,time_1797029,execs_2912717,op_havoc,rep_8 new file mode 100644 index 00000000000..561206faec2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005387,src_005308,time_1797029,execs_2912717,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005388,src_005308,time_1798175,execs_2912845,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005388,src_005308,time_1798175,execs_2912845,op_havoc,rep_8 new file mode 100644 index 00000000000..e58148783bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005388,src_005308,time_1798175,execs_2912845,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005392,src_005308,time_1801820,execs_2913235,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005392,src_005308,time_1801820,execs_2913235,op_havoc,rep_6 new file mode 100644 index 00000000000..5951d6fab2b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005392,src_005308,time_1801820,execs_2913235,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005394,src_005308,time_1817297,execs_2915045,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005394,src_005308,time_1817297,execs_2915045,op_havoc,rep_7 new file mode 100644 index 00000000000..7a92f593630 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005394,src_005308,time_1817297,execs_2915045,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005395,src_005308,time_1833851,execs_2916948,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005395,src_005308,time_1833851,execs_2916948,op_havoc,rep_4 new file mode 100644 index 00000000000..8c451960423 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005395,src_005308,time_1833851,execs_2916948,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005396,src_005308,time_1840609,execs_2917732,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005396,src_005308,time_1840609,execs_2917732,op_havoc,rep_4 new file mode 100644 index 00000000000..fc0d13451ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005396,src_005308,time_1840609,execs_2917732,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005397,src_005308,time_1844977,execs_2918224,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005397,src_005308,time_1844977,execs_2918224,op_havoc,rep_3 new file mode 100644 index 00000000000..b1d920604fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005397,src_005308,time_1844977,execs_2918224,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005398,src_005308,time_1853701,execs_2919216,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005398,src_005308,time_1853701,execs_2919216,op_havoc,rep_6 new file mode 100644 index 00000000000..4b99fb53633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005398,src_005308,time_1853701,execs_2919216,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005399,src_005245,time_1858167,execs_2919882,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005399,src_005245,time_1858167,execs_2919882,op_havoc,rep_13 new file mode 100644 index 00000000000..dea92f41c85 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005399,src_005245,time_1858167,execs_2919882,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005400,src_005245,time_1858190,execs_2920016,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005400,src_005245,time_1858190,execs_2920016,op_havoc,rep_10 new file mode 100644 index 00000000000..984a222a60c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005400,src_005245,time_1858190,execs_2920016,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005401,src_005245,time_1858339,execs_2920974,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005401,src_005245,time_1858339,execs_2920974,op_havoc,rep_13 new file mode 100644 index 00000000000..6ce5cd5a728 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005401,src_005245,time_1858339,execs_2920974,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005403,src_005245,time_1858824,execs_2924011,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005403,src_005245,time_1858824,execs_2924011,op_havoc,rep_16 new file mode 100644 index 00000000000..44210dfe1ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005403,src_005245,time_1858824,execs_2924011,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005404,src_005245,time_1859444,execs_2927860,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005404,src_005245,time_1859444,execs_2927860,op_havoc,rep_9 new file mode 100644 index 00000000000..e38047bf1fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005404,src_005245,time_1859444,execs_2927860,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005405,src_005248,time_1859703,execs_2929530,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005405,src_005248,time_1859703,execs_2929530,op_havoc,rep_1 new file mode 100644 index 00000000000..7740e4674bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005405,src_005248,time_1859703,execs_2929530,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005406,src_005288,time_1861241,execs_2930828,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005406,src_005288,time_1861241,execs_2930828,op_havoc,rep_1 new file mode 100644 index 00000000000..d15ce9975eb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005406,src_005288,time_1861241,execs_2930828,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005407,src_004456,time_1863304,execs_2931394,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005407,src_004456,time_1863304,execs_2931394,op_havoc,rep_11 new file mode 100644 index 00000000000..81c3d47205b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005407,src_004456,time_1863304,execs_2931394,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005409,src_005347,time_1864480,execs_2935080,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005409,src_005347,time_1864480,execs_2935080,op_havoc,rep_2 new file mode 100644 index 00000000000..9d7f6ca5839 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005409,src_005347,time_1864480,execs_2935080,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005410,src_003446,time_1864888,execs_2937323,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005410,src_003446,time_1864888,execs_2937323,op_havoc,rep_11 new file mode 100644 index 00000000000..ec89b27e686 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005410,src_003446,time_1864888,execs_2937323,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005411,src_004820,time_1865066,execs_2938082,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005411,src_004820,time_1865066,execs_2938082,op_havoc,rep_4 new file mode 100644 index 00000000000..0af474ea433 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005411,src_004820,time_1865066,execs_2938082,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005412,src_005377,time_1866140,execs_2941280,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005412,src_005377,time_1866140,execs_2941280,op_havoc,rep_2 new file mode 100644 index 00000000000..bc1cb1a3db8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005412,src_005377,time_1866140,execs_2941280,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005413,src_005377,time_1866236,execs_2941867,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005413,src_005377,time_1866236,execs_2941867,op_havoc,rep_2 new file mode 100644 index 00000000000..0273da5b39b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005413,src_005377,time_1866236,execs_2941867,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005414,src_004815,time_1868404,execs_2945082,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005414,src_004815,time_1868404,execs_2945082,op_havoc,rep_6 new file mode 100644 index 00000000000..22b1555d498 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005414,src_004815,time_1868404,execs_2945082,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005418,src_004815,time_1869251,execs_2949137,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005418,src_004815,time_1869251,execs_2949137,op_havoc,rep_9 new file mode 100644 index 00000000000..bd6b606af09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005418,src_004815,time_1869251,execs_2949137,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005420,src_004815,time_1869580,execs_2950999,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005420,src_004815,time_1869580,execs_2950999,op_havoc,rep_9 new file mode 100644 index 00000000000..4d7be230bee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005420,src_004815,time_1869580,execs_2950999,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005421,src_005385,time_1877546,execs_2957286,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005421,src_005385,time_1877546,execs_2957286,op_havoc,rep_2 new file mode 100644 index 00000000000..50f24aee93a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005421,src_005385,time_1877546,execs_2957286,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005424,src_005369,time_1882437,execs_2958305,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005424,src_005369,time_1882437,execs_2958305,op_havoc,rep_2 new file mode 100644 index 00000000000..5153182ac18 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005424,src_005369,time_1882437,execs_2958305,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005425,src_005369,time_1882511,execs_2958367,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005425,src_005369,time_1882511,execs_2958367,op_havoc,rep_2 new file mode 100644 index 00000000000..6a06aa29b51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005425,src_005369,time_1882511,execs_2958367,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005426,src_005369,time_1884247,execs_2959760,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005426,src_005369,time_1884247,execs_2959760,op_havoc,rep_2 new file mode 100644 index 00000000000..99ba5ecb586 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005426,src_005369,time_1884247,execs_2959760,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005427,src_005369,time_1886571,execs_2961618,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005427,src_005369,time_1886571,execs_2961618,op_havoc,rep_2 new file mode 100644 index 00000000000..d7a40c82af6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005427,src_005369,time_1886571,execs_2961618,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005428,src_005390,time_1892234,execs_2965400,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005428,src_005390,time_1892234,execs_2965400,op_havoc,rep_2 new file mode 100644 index 00000000000..278e39158ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005428,src_005390,time_1892234,execs_2965400,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005430,src_005390,time_1893888,execs_2965580,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005430,src_005390,time_1893888,execs_2965580,op_havoc,rep_6 new file mode 100644 index 00000000000..5466b3988dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005430,src_005390,time_1893888,execs_2965580,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005431,src_005390,time_1894457,execs_2965649,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005431,src_005390,time_1894457,execs_2965649,op_havoc,rep_4 new file mode 100644 index 00000000000..ee0b593dc3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005431,src_005390,time_1894457,execs_2965649,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005432,src_005390,time_1895955,execs_2965814,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005432,src_005390,time_1895955,execs_2965814,op_havoc,rep_2 new file mode 100644 index 00000000000..886c7fee57b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005432,src_005390,time_1895955,execs_2965814,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005433,src_005390,time_1897574,execs_2965991,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005433,src_005390,time_1897574,execs_2965991,op_havoc,rep_2 new file mode 100644 index 00000000000..f75ea8047b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005433,src_005390,time_1897574,execs_2965991,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005434,src_005390,time_1920677,execs_2968613,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005434,src_005390,time_1920677,execs_2968613,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..429e5284302 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005434,src_005390,time_1920677,execs_2968613,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005435,src_005390,time_1921925,execs_2968756,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005435,src_005390,time_1921925,execs_2968756,op_havoc,rep_5 new file mode 100644 index 00000000000..c35f1168911 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005435,src_005390,time_1921925,execs_2968756,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005436,src_005390,time_1924294,execs_2969025,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005436,src_005390,time_1924294,execs_2969025,op_havoc,rep_7 new file mode 100644 index 00000000000..bf1bdb65461 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005436,src_005390,time_1924294,execs_2969025,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005437,src_005390,time_1927729,execs_2969395,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005437,src_005390,time_1927729,execs_2969395,op_havoc,rep_8 new file mode 100644 index 00000000000..fcd5351f0da Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005437,src_005390,time_1927729,execs_2969395,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005438,src_005390,time_1929732,execs_2969622,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005438,src_005390,time_1929732,execs_2969622,op_havoc,rep_5 new file mode 100644 index 00000000000..daffcff5ae4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005438,src_005390,time_1929732,execs_2969622,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005439,src_005390,time_1933344,execs_2970030,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005439,src_005390,time_1933344,execs_2970030,op_havoc,rep_6 new file mode 100644 index 00000000000..d52b08a1393 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005439,src_005390,time_1933344,execs_2970030,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005440,src_005390,time_1943615,execs_2971157,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005440,src_005390,time_1943615,execs_2971157,op_havoc,rep_7 new file mode 100644 index 00000000000..2d6ddeb3693 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005440,src_005390,time_1943615,execs_2971157,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005441,src_005390,time_1954954,execs_2972324,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005441,src_005390,time_1954954,execs_2972324,op_havoc,rep_6 new file mode 100644 index 00000000000..1fcfd23af34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005441,src_005390,time_1954954,execs_2972324,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005442,src_005401,time_1962516,execs_2973284,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005442,src_005401,time_1962516,execs_2973284,op_havoc,rep_7 new file mode 100644 index 00000000000..469a8862f0c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005442,src_005401,time_1962516,execs_2973284,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005445,src_005422,time_1968664,execs_2974872,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005445,src_005422,time_1968664,execs_2974872,op_havoc,rep_6 new file mode 100644 index 00000000000..4912008e570 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005445,src_005422,time_1968664,execs_2974872,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005449,src_005422,time_1974894,execs_2975370,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005449,src_005422,time_1974894,execs_2975370,op_havoc,rep_12 new file mode 100644 index 00000000000..917841510dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005449,src_005422,time_1974894,execs_2975370,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005451,src_005422,time_1986643,execs_2976358,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005451,src_005422,time_1986643,execs_2976358,op_havoc,rep_5 new file mode 100644 index 00000000000..4cd3d4983aa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005451,src_005422,time_1986643,execs_2976358,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005454,src_005422,time_2221401,execs_2977398,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005454,src_005422,time_2221401,execs_2977398,op_havoc,rep_5 new file mode 100644 index 00000000000..ccb8a89f8c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005454,src_005422,time_2221401,execs_2977398,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005455,src_005422,time_2222024,execs_2977457,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005455,src_005422,time_2222024,execs_2977457,op_havoc,rep_5 new file mode 100644 index 00000000000..26d19325300 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005455,src_005422,time_2222024,execs_2977457,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005456,src_005422,time_2224301,execs_2977662,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005456,src_005422,time_2224301,execs_2977662,op_havoc,rep_9 new file mode 100644 index 00000000000..0fb39697860 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005456,src_005422,time_2224301,execs_2977662,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005457,src_005422,time_2229130,execs_2978065,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005457,src_005422,time_2229130,execs_2978065,op_havoc,rep_7 new file mode 100644 index 00000000000..d7f825c8cbe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005457,src_005422,time_2229130,execs_2978065,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005458,src_005422,time_2232774,execs_2978361,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005458,src_005422,time_2232774,execs_2978361,op_havoc,rep_15 new file mode 100644 index 00000000000..09a52ed1237 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005458,src_005422,time_2232774,execs_2978361,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005459,src_005422,time_2236627,execs_2978713,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005459,src_005422,time_2236627,execs_2978713,op_havoc,rep_5 new file mode 100644 index 00000000000..12c0e507490 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005459,src_005422,time_2236627,execs_2978713,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005460,src_005422,time_2241181,execs_2979101,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005460,src_005422,time_2241181,execs_2979101,op_havoc,rep_7 new file mode 100644 index 00000000000..3fe90ac3069 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005460,src_005422,time_2241181,execs_2979101,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005464,src_005422,time_2258187,execs_2980580,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005464,src_005422,time_2258187,execs_2980580,op_havoc,rep_16 new file mode 100644 index 00000000000..adb69fb013e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005464,src_005422,time_2258187,execs_2980580,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005465,src_005422,time_2260939,execs_2980812,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005465,src_005422,time_2260939,execs_2980812,op_havoc,rep_9 new file mode 100644 index 00000000000..c1488633a05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005465,src_005422,time_2260939,execs_2980812,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005466,src_005422,time_2263747,execs_2981049,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005466,src_005422,time_2263747,execs_2981049,op_havoc,rep_11 new file mode 100644 index 00000000000..449750c2b6b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005466,src_005422,time_2263747,execs_2981049,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005467,src_005422,time_2264559,execs_2981112,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005467,src_005422,time_2264559,execs_2981112,op_havoc,rep_9 new file mode 100644 index 00000000000..af87bbc0efc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005467,src_005422,time_2264559,execs_2981112,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005468,src_005422,time_2279710,execs_2982393,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005468,src_005422,time_2279710,execs_2982393,op_havoc,rep_9 new file mode 100644 index 00000000000..e3caa047965 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005468,src_005422,time_2279710,execs_2982393,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005469,src_005422,time_2283315,execs_2982687,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005469,src_005422,time_2283315,execs_2982687,op_havoc,rep_11 new file mode 100644 index 00000000000..0522afa0bc3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005469,src_005422,time_2283315,execs_2982687,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005470,src_005422,time_2283480,execs_2982700,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005470,src_005422,time_2283480,execs_2982700,op_havoc,rep_14 new file mode 100644 index 00000000000..47f895c5919 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005470,src_005422,time_2283480,execs_2982700,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005471,src_005422,time_2305233,execs_2984561,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005471,src_005422,time_2305233,execs_2984561,op_havoc,rep_12 new file mode 100644 index 00000000000..0ea7039949a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005471,src_005422,time_2305233,execs_2984561,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005472,src_005422,time_2307334,execs_2984739,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005472,src_005422,time_2307334,execs_2984739,op_havoc,rep_6 new file mode 100644 index 00000000000..760001df548 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005472,src_005422,time_2307334,execs_2984739,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005473,src_005422,time_2334372,execs_2987075,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005473,src_005422,time_2334372,execs_2987075,op_havoc,rep_5 new file mode 100644 index 00000000000..0b04cff6036 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005473,src_005422,time_2334372,execs_2987075,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005476,src_005143,time_2342978,execs_2990263,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005476,src_005143,time_2342978,execs_2990263,op_havoc,rep_5 new file mode 100644 index 00000000000..47bb3689902 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005476,src_005143,time_2342978,execs_2990263,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005479,src_003529,time_2347458,execs_2998252,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005479,src_003529,time_2347458,execs_2998252,op_havoc,rep_1 new file mode 100644 index 00000000000..6f23d1c47f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005479,src_003529,time_2347458,execs_2998252,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005480,src_005452,time_2349489,execs_2999878,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005480,src_005452,time_2349489,execs_2999878,op_havoc,rep_4 new file mode 100644 index 00000000000..70dc419c7cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005480,src_005452,time_2349489,execs_2999878,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005481,src_005452,time_2350994,execs_3000236,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005481,src_005452,time_2350994,execs_3000236,op_havoc,rep_3 new file mode 100644 index 00000000000..c3d028d01dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005481,src_005452,time_2350994,execs_3000236,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005483,src_003804,time_2354878,execs_3003939,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005483,src_003804,time_2354878,execs_3003939,op_havoc,rep_2 new file mode 100644 index 00000000000..889e37a1a19 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005483,src_003804,time_2354878,execs_3003939,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005484,src_005483,time_2355162,execs_3005839,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005484,src_005483,time_2355162,execs_3005839,op_havoc,rep_1 new file mode 100644 index 00000000000..f5c5abd06d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005484,src_005483,time_2355162,execs_3005839,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005485,src_002259,time_2358690,execs_3008033,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005485,src_002259,time_2358690,execs_3008033,op_havoc,rep_2 new file mode 100644 index 00000000000..cf5cef66ad2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005485,src_002259,time_2358690,execs_3008033,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005486,src_002967,time_2359843,execs_3011136,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005486,src_002967,time_2359843,execs_3011136,op_havoc,rep_3 new file mode 100644 index 00000000000..a4ffa91de3b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005486,src_002967,time_2359843,execs_3011136,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005487,src_001228,time_2359898,execs_3011533,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005487,src_001228,time_2359898,execs_3011533,op_havoc,rep_4 new file mode 100644 index 00000000000..470c020b678 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005487,src_001228,time_2359898,execs_3011533,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005488,src_004014,time_2360117,execs_3012828,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005488,src_004014,time_2360117,execs_3012828,op_havoc,rep_4 new file mode 100644 index 00000000000..dbe2849e83a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005488,src_004014,time_2360117,execs_3012828,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005489,src_005488,time_2360418,execs_3014038,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005489,src_005488,time_2360418,execs_3014038,op_havoc,rep_1 new file mode 100644 index 00000000000..befdcce818a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005489,src_005488,time_2360418,execs_3014038,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005491,src_003806,time_2362481,execs_3018554,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005491,src_003806,time_2362481,execs_3018554,op_havoc,rep_14 new file mode 100644 index 00000000000..f3e99ed1936 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005491,src_003806,time_2362481,execs_3018554,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005493,src_004886,time_2363169,execs_3020822,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005493,src_004886,time_2363169,execs_3020822,op_havoc,rep_1 new file mode 100644 index 00000000000..15021ca3e5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005493,src_004886,time_2363169,execs_3020822,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005494,src_002321,time_2364035,execs_3022205,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005494,src_002321,time_2364035,execs_3022205,op_havoc,rep_4 new file mode 100644 index 00000000000..22d2be95926 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005494,src_002321,time_2364035,execs_3022205,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005495,src_002321,time_2364059,execs_3022372,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005495,src_002321,time_2364059,execs_3022372,op_havoc,rep_3 new file mode 100644 index 00000000000..4bcdd66eeff Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005495,src_002321,time_2364059,execs_3022372,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005497,src_004811,time_2365998,execs_3027220,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005497,src_004811,time_2365998,execs_3027220,op_havoc,rep_6 new file mode 100644 index 00000000000..307b79a4b17 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005497,src_004811,time_2365998,execs_3027220,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005499,src_004811,time_2366200,execs_3027279,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005499,src_004811,time_2366200,execs_3027279,op_havoc,rep_16 new file mode 100644 index 00000000000..c2072a125b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005499,src_004811,time_2366200,execs_3027279,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005501,src_004811,time_2366874,execs_3027456,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005501,src_004811,time_2366874,execs_3027456,op_havoc,rep_10 new file mode 100644 index 00000000000..f9e46eaa5e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005501,src_004811,time_2366874,execs_3027456,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005502,src_004811,time_2368175,execs_3027803,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005502,src_004811,time_2368175,execs_3027803,op_havoc,rep_10 new file mode 100644 index 00000000000..9dadafa67f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005502,src_004811,time_2368175,execs_3027803,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005503,src_004811,time_2368528,execs_3027897,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005503,src_004811,time_2368528,execs_3027897,op_havoc,rep_14 new file mode 100644 index 00000000000..ad47b852d9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005503,src_004811,time_2368528,execs_3027897,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005505,src_004811,time_2383782,execs_3032051,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005505,src_004811,time_2383782,execs_3032051,op_havoc,rep_12 new file mode 100644 index 00000000000..e819b9648f3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005505,src_004811,time_2383782,execs_3032051,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005506,src_004811,time_2385828,execs_3032639,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005506,src_004811,time_2385828,execs_3032639,op_havoc,rep_7 new file mode 100644 index 00000000000..e4fc5303e19 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005506,src_004811,time_2385828,execs_3032639,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005507,src_004811,time_2388289,execs_3033297,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005507,src_004811,time_2388289,execs_3033297,op_havoc,rep_9 new file mode 100644 index 00000000000..921cfc1dd53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005507,src_004811,time_2388289,execs_3033297,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005508,src_004811,time_2399028,execs_3036238,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005508,src_004811,time_2399028,execs_3036238,op_havoc,rep_13 new file mode 100644 index 00000000000..51f36c37334 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005508,src_004811,time_2399028,execs_3036238,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005509,src_004811,time_2408526,execs_3038844,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005509,src_004811,time_2408526,execs_3038844,op_havoc,rep_7 new file mode 100644 index 00000000000..133569b65c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005509,src_004811,time_2408526,execs_3038844,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005510,src_005248,time_2417773,execs_3046546,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005510,src_005248,time_2417773,execs_3046546,op_havoc,rep_5 new file mode 100644 index 00000000000..a43632dbcf2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005510,src_005248,time_2417773,execs_3046546,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005511,src_002889,time_2418955,execs_3049153,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005511,src_002889,time_2418955,execs_3049153,op_havoc,rep_2 new file mode 100644 index 00000000000..c5f263753d3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005511,src_002889,time_2418955,execs_3049153,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005512,src_003247,time_2419030,execs_3049702,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005512,src_003247,time_2419030,execs_3049702,op_havoc,rep_1 new file mode 100644 index 00000000000..70a117126a3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005512,src_003247,time_2419030,execs_3049702,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005513,src_004955,time_2419688,execs_3050762,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005513,src_004955,time_2419688,execs_3050762,op_havoc,rep_2 new file mode 100644 index 00000000000..abc17d5329c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005513,src_004955,time_2419688,execs_3050762,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005514,src_003974,time_2422966,execs_3053038,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005514,src_003974,time_2422966,execs_3053038,op_havoc,rep_11 new file mode 100644 index 00000000000..53485bc9270 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005514,src_003974,time_2422966,execs_3053038,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005515,src_004607,time_2423952,execs_3055906,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005515,src_004607,time_2423952,execs_3055906,op_havoc,rep_5 new file mode 100644 index 00000000000..3c0120ff086 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005515,src_004607,time_2423952,execs_3055906,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005516,src_004373,time_2425101,execs_3056476,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005516,src_004373,time_2425101,execs_3056476,op_havoc,rep_7 new file mode 100644 index 00000000000..327a2bbc4bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005516,src_004373,time_2425101,execs_3056476,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005517,src_002455,time_2426733,execs_3062072,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005517,src_002455,time_2426733,execs_3062072,op_havoc,rep_8 new file mode 100644 index 00000000000..559026b2717 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005517,src_002455,time_2426733,execs_3062072,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005518,src_002911,time_2427979,execs_3066634,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005518,src_002911,time_2427979,execs_3066634,op_havoc,rep_8 new file mode 100644 index 00000000000..dfd80e57f6f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005518,src_002911,time_2427979,execs_3066634,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005520,src_002911,time_2428156,execs_3067884,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005520,src_002911,time_2428156,execs_3067884,op_havoc,rep_5 new file mode 100644 index 00000000000..3aac4bd3996 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005520,src_002911,time_2428156,execs_3067884,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005526,src_005416,time_2430089,execs_3078091,op_havoc,rep_14,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005526,src_005416,time_2430089,execs_3078091,op_havoc,rep_14,+cov new file mode 100644 index 00000000000..4dc5c34fcf9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005526,src_005416,time_2430089,execs_3078091,op_havoc,rep_14,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005527,src_005416,time_2430240,execs_3078899,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005527,src_005416,time_2430240,execs_3078899,op_havoc,rep_10 new file mode 100644 index 00000000000..3812f3ce65d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005527,src_005416,time_2430240,execs_3078899,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005528,src_005416,time_2430478,execs_3080230,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005528,src_005416,time_2430478,execs_3080230,op_havoc,rep_13 new file mode 100644 index 00000000000..8b608367763 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005528,src_005416,time_2430478,execs_3080230,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005529,src_005416,time_2430620,execs_3081042,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005529,src_005416,time_2430620,execs_3081042,op_havoc,rep_9 new file mode 100644 index 00000000000..8c87fbc03ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005529,src_005416,time_2430620,execs_3081042,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005530,src_005525,time_2431095,execs_3083852,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005530,src_005525,time_2431095,execs_3083852,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..246613e031d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005530,src_005525,time_2431095,execs_3083852,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005531,src_005526,time_2431139,execs_3084110,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005531,src_005526,time_2431139,execs_3084110,op_havoc,rep_3 new file mode 100644 index 00000000000..d66eb5b1f6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005531,src_005526,time_2431139,execs_3084110,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005534,src_004785,time_2431487,execs_3085411,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005534,src_004785,time_2431487,execs_3085411,op_havoc,rep_2 new file mode 100644 index 00000000000..703d7a1aaf4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005534,src_004785,time_2431487,execs_3085411,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005535,src_004321,time_2431791,execs_3085904,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005535,src_004321,time_2431791,execs_3085904,op_havoc,rep_1 new file mode 100644 index 00000000000..a469ebd8d33 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005535,src_004321,time_2431791,execs_3085904,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005536,src_003781,time_2431966,execs_3086751,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005536,src_003781,time_2431966,execs_3086751,op_havoc,rep_5 new file mode 100644 index 00000000000..333baa69a51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005536,src_003781,time_2431966,execs_3086751,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005537,src_000668,time_2432651,execs_3088667,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005537,src_000668,time_2432651,execs_3088667,op_havoc,rep_5 new file mode 100644 index 00000000000..139f20908f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005537,src_000668,time_2432651,execs_3088667,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005539,src_004660,time_2433020,execs_3090650,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005539,src_004660,time_2433020,execs_3090650,op_havoc,rep_2 new file mode 100644 index 00000000000..a83c11da95d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005539,src_004660,time_2433020,execs_3090650,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005540,src_004660,time_2433142,execs_3091147,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005540,src_004660,time_2433142,execs_3091147,op_havoc,rep_2 new file mode 100644 index 00000000000..ad789779d72 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005540,src_004660,time_2433142,execs_3091147,op_havoc,rep_2 @@ -0,0 +1 @@ +J[[[[[[[†J[[[ [[[22J[22G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005541,src_005532,time_2434128,execs_3095170,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005541,src_005532,time_2434128,execs_3095170,op_havoc,rep_13 new file mode 100644 index 00000000000..d111d5aa6b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005541,src_005532,time_2434128,execs_3095170,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005543,src_005532,time_2434263,execs_3095838,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005543,src_005532,time_2434263,execs_3095838,op_havoc,rep_15 new file mode 100644 index 00000000000..8e80d3d22c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005543,src_005532,time_2434263,execs_3095838,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005544,src_005532,time_2434600,execs_3097382,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005544,src_005532,time_2434600,execs_3097382,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..d26274e7b01 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005544,src_005532,time_2434600,execs_3097382,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005546,src_005532,time_2434872,execs_3098664,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005546,src_005532,time_2434872,execs_3098664,op_havoc,rep_14 new file mode 100644 index 00000000000..32a153f9ae4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005546,src_005532,time_2434872,execs_3098664,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005547,src_005533,time_2435694,execs_3102436,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005547,src_005533,time_2435694,execs_3102436,op_havoc,rep_3 new file mode 100644 index 00000000000..135d5f2019a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005547,src_005533,time_2435694,execs_3102436,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005548,src_003719,time_2436135,execs_3105011,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005548,src_003719,time_2436135,execs_3105011,op_havoc,rep_4 new file mode 100644 index 00000000000..f916592d031 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005548,src_003719,time_2436135,execs_3105011,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005549,src_003496,time_2436190,execs_3105371,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005549,src_003496,time_2436190,execs_3105371,op_havoc,rep_5 new file mode 100644 index 00000000000..5916bb6b4ab Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005549,src_003496,time_2436190,execs_3105371,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005550,src_003496,time_2436254,execs_3105783,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005550,src_003496,time_2436254,execs_3105783,op_havoc,rep_4 new file mode 100644 index 00000000000..e1f86bd3264 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005550,src_003496,time_2436254,execs_3105783,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005551,src_003496,time_2436356,execs_3106469,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005551,src_003496,time_2436356,execs_3106469,op_havoc,rep_5 new file mode 100644 index 00000000000..8c9357eb4f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005551,src_003496,time_2436356,execs_3106469,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005552,src_004466,time_2439734,execs_3112184,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005552,src_004466,time_2439734,execs_3112184,op_havoc,rep_1 new file mode 100644 index 00000000000..b788e3332c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005552,src_004466,time_2439734,execs_3112184,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005555,src_005541,time_2440961,execs_3117468,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005555,src_005541,time_2440961,execs_3117468,op_havoc,rep_4 new file mode 100644 index 00000000000..27cbff2ac7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005555,src_005541,time_2440961,execs_3117468,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005556,src_005541,time_2441148,execs_3118590,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005556,src_005541,time_2441148,execs_3118590,op_havoc,rep_4 new file mode 100644 index 00000000000..523771ba73c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005556,src_005541,time_2441148,execs_3118590,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005557,src_005541,time_2441412,execs_3120180,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005557,src_005541,time_2441412,execs_3120180,op_havoc,rep_4 new file mode 100644 index 00000000000..630da8a13f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005557,src_005541,time_2441412,execs_3120180,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005558,src_005402,time_2442203,execs_3125066,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005558,src_005402,time_2442203,execs_3125066,op_havoc,rep_5 new file mode 100644 index 00000000000..cc7053225f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005558,src_005402,time_2442203,execs_3125066,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005559,src_005402,time_2442236,execs_3125243,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005559,src_005402,time_2442236,execs_3125243,op_havoc,rep_4 new file mode 100644 index 00000000000..6c5a49cbe09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005559,src_005402,time_2442236,execs_3125243,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005561,src_004991,time_2443857,execs_3129020,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005561,src_004991,time_2443857,execs_3129020,op_havoc,rep_8 new file mode 100644 index 00000000000..ea4ea4ac972 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005561,src_004991,time_2443857,execs_3129020,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005564,src_004991,time_2444224,execs_3130872,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005564,src_004991,time_2444224,execs_3130872,op_havoc,rep_6 new file mode 100644 index 00000000000..60d62724785 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005564,src_004991,time_2444224,execs_3130872,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005565,src_004991,time_2444317,execs_3131432,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005565,src_004991,time_2444317,execs_3131432,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..cd3f1fea73b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005565,src_004991,time_2444317,execs_3131432,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005566,src_004991,time_2444372,execs_3131679,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005566,src_004991,time_2444372,execs_3131679,op_havoc,rep_1 new file mode 100644 index 00000000000..8881feedce9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005566,src_004991,time_2444372,execs_3131679,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005567,src_004991,time_2444410,execs_3131837,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005567,src_004991,time_2444410,execs_3131837,op_havoc,rep_7 new file mode 100644 index 00000000000..ded404afd56 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005567,src_004991,time_2444410,execs_3131837,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005569,src_004991,time_2444497,execs_3132306,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005569,src_004991,time_2444497,execs_3132306,op_havoc,rep_9 new file mode 100644 index 00000000000..338006e55e7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005569,src_004991,time_2444497,execs_3132306,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005571,src_004991,time_2445156,execs_3134973,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005571,src_004991,time_2445156,execs_3134973,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..e9aec9283b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005571,src_004991,time_2445156,execs_3134973,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005572,src_005544,time_2445788,execs_3138168,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005572,src_005544,time_2445788,execs_3138168,op_havoc,rep_1 new file mode 100644 index 00000000000..66b4563fe47 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005572,src_005544,time_2445788,execs_3138168,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005574,src_005554,time_2446094,execs_3140193,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005574,src_005554,time_2446094,execs_3140193,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..f89dac3932a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005574,src_005554,time_2446094,execs_3140193,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005575,src_003764,time_2447641,execs_3148090,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005575,src_003764,time_2447641,execs_3148090,op_havoc,rep_2 new file mode 100644 index 00000000000..e3a5fc1343f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005575,src_003764,time_2447641,execs_3148090,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005576,src_003359,time_2447896,execs_3149286,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005576,src_003359,time_2447896,execs_3149286,op_havoc,rep_5 new file mode 100644 index 00000000000..98cb9fe50cd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005576,src_003359,time_2447896,execs_3149286,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005577,src_005274,time_2448395,execs_3151453,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005577,src_005274,time_2448395,execs_3151453,op_havoc,rep_3 new file mode 100644 index 00000000000..2d6335496b6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005577,src_005274,time_2448395,execs_3151453,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005579,src_005578,time_2450092,execs_3153305,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005579,src_005578,time_2450092,execs_3153305,op_havoc,rep_4 new file mode 100644 index 00000000000..13ff0f60c4d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005579,src_005578,time_2450092,execs_3153305,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005586,src_005578,time_2450438,execs_3153791,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005586,src_005578,time_2450438,execs_3153791,op_havoc,rep_5 new file mode 100644 index 00000000000..a4c6e58771e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005586,src_005578,time_2450438,execs_3153791,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005589,src_005578,time_2451145,execs_3155454,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005589,src_005578,time_2451145,execs_3155454,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..2c0378a1a3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005589,src_005578,time_2451145,execs_3155454,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005592,src_005578,time_2451834,execs_3156814,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005592,src_005578,time_2451834,execs_3156814,op_havoc,rep_4 new file mode 100644 index 00000000000..16de21ee779 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005592,src_005578,time_2451834,execs_3156814,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005593,src_005578,time_2451924,execs_3157035,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005593,src_005578,time_2451924,execs_3157035,op_havoc,rep_4 new file mode 100644 index 00000000000..da57b3c75c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005593,src_005578,time_2451924,execs_3157035,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005594,src_005578,time_2452255,execs_3157825,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005594,src_005578,time_2452255,execs_3157825,op_havoc,rep_3 new file mode 100644 index 00000000000..ca5e93b31fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005594,src_005578,time_2452255,execs_3157825,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005595,src_005578,time_2452819,execs_3159065,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005595,src_005578,time_2452819,execs_3159065,op_havoc,rep_8 new file mode 100644 index 00000000000..e44ab407a43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005595,src_005578,time_2452819,execs_3159065,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005596,src_005578,time_2453340,execs_3160293,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005596,src_005578,time_2453340,execs_3160293,op_havoc,rep_6 new file mode 100644 index 00000000000..7d281fd03f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005596,src_005578,time_2453340,execs_3160293,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005602,src_005578,time_2454771,execs_3163544,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005602,src_005578,time_2454771,execs_3163544,op_havoc,rep_8 new file mode 100644 index 00000000000..af44d99b8e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005602,src_005578,time_2454771,execs_3163544,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005605,src_005583,time_2456049,execs_3166393,op_quick,pos_29,val_+7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005605,src_005583,time_2456049,execs_3166393,op_quick,pos_29,val_+7,+cov new file mode 100644 index 00000000000..3ab85d94b3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005605,src_005583,time_2456049,execs_3166393,op_quick,pos_29,val_+7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005607,src_005583,time_2456274,execs_3166657,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005607,src_005583,time_2456274,execs_3166657,op_havoc,rep_6 new file mode 100644 index 00000000000..faad5a2aabb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005607,src_005583,time_2456274,execs_3166657,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005610,src_005583,time_2456332,execs_3166716,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005610,src_005583,time_2456332,execs_3166716,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..b2d1c1db761 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005610,src_005583,time_2456332,execs_3166716,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005611,src_005583,time_2456370,execs_3166777,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005611,src_005583,time_2456370,execs_3166777,op_havoc,rep_6 new file mode 100644 index 00000000000..03f6e52e3bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005611,src_005583,time_2456370,execs_3166777,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005613,src_005583,time_2456548,execs_3166925,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005613,src_005583,time_2456548,execs_3166925,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..343ab5634fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005613,src_005583,time_2456548,execs_3166925,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005615,src_005583,time_2456596,execs_3167019,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005615,src_005583,time_2456596,execs_3167019,op_havoc,rep_6 new file mode 100644 index 00000000000..697a442a3b3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005615,src_005583,time_2456596,execs_3167019,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005617,src_005583,time_2456722,execs_3167188,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005617,src_005583,time_2456722,execs_3167188,op_havoc,rep_1 new file mode 100644 index 00000000000..7e18331e0ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005617,src_005583,time_2456722,execs_3167188,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005619,src_005583,time_2456792,execs_3167294,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005619,src_005583,time_2456792,execs_3167294,op_havoc,rep_6 new file mode 100644 index 00000000000..7bf5c674fa3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005619,src_005583,time_2456792,execs_3167294,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005621,src_005583,time_2457041,execs_3167690,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005621,src_005583,time_2457041,execs_3167690,op_havoc,rep_6 new file mode 100644 index 00000000000..c5309f4072e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005621,src_005583,time_2457041,execs_3167690,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005622,src_005583,time_2457054,execs_3167706,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005622,src_005583,time_2457054,execs_3167706,op_havoc,rep_8 new file mode 100644 index 00000000000..e472a4d4b67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005622,src_005583,time_2457054,execs_3167706,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005624,src_005583,time_2457273,execs_3167945,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005624,src_005583,time_2457273,execs_3167945,op_havoc,rep_4 new file mode 100644 index 00000000000..651eed0cb4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005624,src_005583,time_2457273,execs_3167945,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005630,src_005583,time_2458153,execs_3168589,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005630,src_005583,time_2458153,execs_3168589,op_havoc,rep_5 new file mode 100644 index 00000000000..204f16025cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005630,src_005583,time_2458153,execs_3168589,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005632,src_005583,time_2458379,execs_3168971,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005632,src_005583,time_2458379,execs_3168971,op_havoc,rep_6 new file mode 100644 index 00000000000..d3f2f0e0426 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005632,src_005583,time_2458379,execs_3168971,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005633,src_005583,time_2458444,execs_3168985,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005633,src_005583,time_2458444,execs_3168985,op_havoc,rep_1 new file mode 100644 index 00000000000..632863a16fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005633,src_005583,time_2458444,execs_3168985,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005635,src_005583,time_2458803,execs_3169491,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005635,src_005583,time_2458803,execs_3169491,op_havoc,rep_5 new file mode 100644 index 00000000000..87ce55d386f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005635,src_005583,time_2458803,execs_3169491,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005636,src_005583,time_2458975,execs_3169569,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005636,src_005583,time_2458975,execs_3169569,op_havoc,rep_6 new file mode 100644 index 00000000000..26cc661bf7e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005636,src_005583,time_2458975,execs_3169569,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005639,src_005583,time_2459666,execs_3170491,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005639,src_005583,time_2459666,execs_3170491,op_havoc,rep_1 new file mode 100644 index 00000000000..d4c021d89cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005639,src_005583,time_2459666,execs_3170491,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005641,src_005583,time_2460573,execs_3171688,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005641,src_005583,time_2460573,execs_3171688,op_havoc,rep_3 new file mode 100644 index 00000000000..4b233c98a2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005641,src_005583,time_2460573,execs_3171688,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005642,src_005583,time_2460620,execs_3171731,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005642,src_005583,time_2460620,execs_3171731,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..55388ccf238 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005642,src_005583,time_2460620,execs_3171731,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005644,src_005583,time_2460833,execs_3172117,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005644,src_005583,time_2460833,execs_3172117,op_havoc,rep_2 new file mode 100644 index 00000000000..f2233081a2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005644,src_005583,time_2460833,execs_3172117,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005645,src_005583,time_2461131,execs_3172576,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005645,src_005583,time_2461131,execs_3172576,op_havoc,rep_6 new file mode 100644 index 00000000000..59635b81c5b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005645,src_005583,time_2461131,execs_3172576,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005647,src_005583,time_2461511,execs_3172973,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005647,src_005583,time_2461511,execs_3172973,op_havoc,rep_3 new file mode 100644 index 00000000000..a337a179e52 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005647,src_005583,time_2461511,execs_3172973,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005648,src_005583,time_2462636,execs_3174709,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005648,src_005583,time_2462636,execs_3174709,op_havoc,rep_4 new file mode 100644 index 00000000000..b682cafe3d6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005648,src_005583,time_2462636,execs_3174709,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005649,src_005583,time_2462669,execs_3174733,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005649,src_005583,time_2462669,execs_3174733,op_havoc,rep_8 new file mode 100644 index 00000000000..19e90a73410 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005649,src_005583,time_2462669,execs_3174733,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005650,src_005583,time_2462682,execs_3174763,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005650,src_005583,time_2462682,execs_3174763,op_havoc,rep_8 new file mode 100644 index 00000000000..73a5615f3d4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005650,src_005583,time_2462682,execs_3174763,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005651,src_005583,time_2462724,execs_3174847,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005651,src_005583,time_2462724,execs_3174847,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..93d30c4569d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005651,src_005583,time_2462724,execs_3174847,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005652,src_005583,time_2462806,execs_3174990,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005652,src_005583,time_2462806,execs_3174990,op_havoc,rep_7 new file mode 100644 index 00000000000..ed1b8d74de9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005652,src_005583,time_2462806,execs_3174990,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005653,src_005583,time_2462834,execs_3175032,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005653,src_005583,time_2462834,execs_3175032,op_havoc,rep_2 new file mode 100644 index 00000000000..99600ceea70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005653,src_005583,time_2462834,execs_3175032,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005654,src_005583,time_2462866,execs_3175078,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005654,src_005583,time_2462866,execs_3175078,op_havoc,rep_8 new file mode 100644 index 00000000000..03798f3f332 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005654,src_005583,time_2462866,execs_3175078,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005656,src_005583,time_2463345,execs_3175832,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005656,src_005583,time_2463345,execs_3175832,op_havoc,rep_2 new file mode 100644 index 00000000000..eb360ae1eb3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005656,src_005583,time_2463345,execs_3175832,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005658,src_005583,time_2463866,execs_3176558,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005658,src_005583,time_2463866,execs_3176558,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..bf584ad7a02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005658,src_005583,time_2463866,execs_3176558,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005662,src_005591,time_2466606,execs_3180072,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005662,src_005591,time_2466606,execs_3180072,op_havoc,rep_7 new file mode 100644 index 00000000000..6b94cd55380 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005662,src_005591,time_2466606,execs_3180072,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005663,src_005591,time_2467296,execs_3180326,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005663,src_005591,time_2467296,execs_3180326,op_havoc,rep_1 new file mode 100644 index 00000000000..35f7f256bb0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005663,src_005591,time_2467296,execs_3180326,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005664,src_005591,time_2467565,execs_3180429,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005664,src_005591,time_2467565,execs_3180429,op_havoc,rep_6 new file mode 100644 index 00000000000..beede6b78b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005664,src_005591,time_2467565,execs_3180429,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005667,src_005591,time_2468837,execs_3180900,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005667,src_005591,time_2468837,execs_3180900,op_havoc,rep_4 new file mode 100644 index 00000000000..ac4d0067a8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005667,src_005591,time_2468837,execs_3180900,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005676,src_005591,time_2476406,execs_3184423,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005676,src_005591,time_2476406,execs_3184423,op_havoc,rep_8 new file mode 100644 index 00000000000..8c1b6b49f5c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005676,src_005591,time_2476406,execs_3184423,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005684,src_005591,time_2484400,execs_3188028,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005684,src_005591,time_2484400,execs_3188028,op_havoc,rep_5 new file mode 100644 index 00000000000..4c34a036ca6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005684,src_005591,time_2484400,execs_3188028,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005686,src_005591,time_2487792,execs_3189556,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005686,src_005591,time_2487792,execs_3189556,op_havoc,rep_5 new file mode 100644 index 00000000000..04acc381250 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005686,src_005591,time_2487792,execs_3189556,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005687,src_005591,time_2489142,execs_3190093,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005687,src_005591,time_2489142,execs_3190093,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..299bcdea129 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005687,src_005591,time_2489142,execs_3190093,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005689,src_005591,time_2490297,execs_3190624,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005689,src_005591,time_2490297,execs_3190624,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..8adc771af1f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005689,src_005591,time_2490297,execs_3190624,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005691,src_004739,time_2497913,execs_3198472,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005691,src_004739,time_2497913,execs_3198472,op_havoc,rep_2 new file mode 100644 index 00000000000..e648a3eda77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005691,src_004739,time_2497913,execs_3198472,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005692,src_004739,time_2497961,execs_3198528,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005692,src_004739,time_2497961,execs_3198528,op_havoc,rep_2 new file mode 100644 index 00000000000..0a38ce9173a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005692,src_004739,time_2497961,execs_3198528,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005693,src_005638,time_2498698,execs_3199304,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005693,src_005638,time_2498698,execs_3199304,op_havoc,rep_7 new file mode 100644 index 00000000000..1903e2491f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005693,src_005638,time_2498698,execs_3199304,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005697,src_005638,time_2500038,execs_3200132,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005697,src_005638,time_2500038,execs_3200132,op_havoc,rep_7 new file mode 100644 index 00000000000..18a8a345d9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005697,src_005638,time_2500038,execs_3200132,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005699,src_005638,time_2502725,execs_3201970,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005699,src_005638,time_2502725,execs_3201970,op_havoc,rep_8 new file mode 100644 index 00000000000..46400840068 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005699,src_005638,time_2502725,execs_3201970,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005700,src_005638,time_2503185,execs_3202281,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005700,src_005638,time_2503185,execs_3202281,op_havoc,rep_8 new file mode 100644 index 00000000000..cd6f90cbd61 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005700,src_005638,time_2503185,execs_3202281,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005701,src_005638,time_2504120,execs_3202898,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005701,src_005638,time_2504120,execs_3202898,op_havoc,rep_5 new file mode 100644 index 00000000000..2ee2058f58b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005701,src_005638,time_2504120,execs_3202898,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005704,src_005638,time_2505064,execs_3203510,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005704,src_005638,time_2505064,execs_3203510,op_havoc,rep_7 new file mode 100644 index 00000000000..4322685d7c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005704,src_005638,time_2505064,execs_3203510,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005705,src_005638,time_2505690,execs_3203991,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005705,src_005638,time_2505690,execs_3203991,op_havoc,rep_9 new file mode 100644 index 00000000000..ff79022f954 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005705,src_005638,time_2505690,execs_3203991,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005706,src_005638,time_2509320,execs_3206614,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005706,src_005638,time_2509320,execs_3206614,op_havoc,rep_5 new file mode 100644 index 00000000000..9bef1cd50a5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005706,src_005638,time_2509320,execs_3206614,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005708,src_005638,time_2509849,execs_3206967,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005708,src_005638,time_2509849,execs_3206967,op_havoc,rep_16 new file mode 100644 index 00000000000..6a0838c98db Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005708,src_005638,time_2509849,execs_3206967,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005709,src_005638,time_2511874,execs_3208399,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005709,src_005638,time_2511874,execs_3208399,op_havoc,rep_9 new file mode 100644 index 00000000000..6e56f5ba343 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005709,src_005638,time_2511874,execs_3208399,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005711,src_005618,time_2513038,execs_3209304,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005711,src_005618,time_2513038,execs_3209304,op_havoc,rep_9 new file mode 100644 index 00000000000..b4917bb0fe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005711,src_005618,time_2513038,execs_3209304,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005712,src_005618,time_2514282,execs_3210342,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005712,src_005618,time_2514282,execs_3210342,op_havoc,rep_15 new file mode 100644 index 00000000000..771d761b6df Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005712,src_005618,time_2514282,execs_3210342,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005714,src_005618,time_2517568,execs_3212946,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005714,src_005618,time_2517568,execs_3212946,op_havoc,rep_5 new file mode 100644 index 00000000000..cd91a055d21 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005714,src_005618,time_2517568,execs_3212946,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005715,src_005618,time_2518093,execs_3213331,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005715,src_005618,time_2518093,execs_3213331,op_havoc,rep_10 new file mode 100644 index 00000000000..038a81f00bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005715,src_005618,time_2518093,execs_3213331,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005716,src_005618,time_2520833,execs_3215739,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005716,src_005618,time_2520833,execs_3215739,op_havoc,rep_6 new file mode 100644 index 00000000000..fcbe37dc42a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005716,src_005618,time_2520833,execs_3215739,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005717,src_005618,time_2524442,execs_3218656,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005717,src_005618,time_2524442,execs_3218656,op_havoc,rep_4 new file mode 100644 index 00000000000..4c1d8314ae2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005717,src_005618,time_2524442,execs_3218656,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005719,src_005582,time_2529348,execs_3221083,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005719,src_005582,time_2529348,execs_3221083,op_havoc,rep_2 new file mode 100644 index 00000000000..17c66da9bae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005719,src_005582,time_2529348,execs_3221083,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005722,src_005582,time_2532109,execs_3221441,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005722,src_005582,time_2532109,execs_3221441,op_havoc,rep_3 new file mode 100644 index 00000000000..91424a209f4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005722,src_005582,time_2532109,execs_3221441,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005724,src_005582,time_2538055,execs_3222250,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005724,src_005582,time_2538055,execs_3222250,op_havoc,rep_4 new file mode 100644 index 00000000000..70ce2800959 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005724,src_005582,time_2538055,execs_3222250,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005725,src_005582,time_2543121,execs_3222963,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005725,src_005582,time_2543121,execs_3222963,op_havoc,rep_4 new file mode 100644 index 00000000000..1df6e1688c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005725,src_005582,time_2543121,execs_3222963,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005728,src_005582,time_2568590,execs_3226408,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005728,src_005582,time_2568590,execs_3226408,op_havoc,rep_4 new file mode 100644 index 00000000000..f4f7c8b071d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005728,src_005582,time_2568590,execs_3226408,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005731,src_005582,time_2578724,execs_3227757,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005731,src_005582,time_2578724,execs_3227757,op_havoc,rep_3 new file mode 100644 index 00000000000..79e9f981edc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005731,src_005582,time_2578724,execs_3227757,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005732,src_005716,time_2582313,execs_3229288,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005732,src_005716,time_2582313,execs_3229288,op_havoc,rep_4 new file mode 100644 index 00000000000..75ddeee0e64 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005732,src_005716,time_2582313,execs_3229288,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005734,src_005716,time_2587069,execs_3230500,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005734,src_005716,time_2587069,execs_3230500,op_havoc,rep_3 new file mode 100644 index 00000000000..696a75dcc50 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005734,src_005716,time_2587069,execs_3230500,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005735,src_002097,time_2593138,execs_3233556,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005735,src_002097,time_2593138,execs_3233556,op_havoc,rep_1 new file mode 100644 index 00000000000..a11d2e5031b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005735,src_002097,time_2593138,execs_3233556,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005736,src_005576,time_2593701,execs_3235057,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005736,src_005576,time_2593701,execs_3235057,op_havoc,rep_2 new file mode 100644 index 00000000000..32e5218bbcc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005736,src_005576,time_2593701,execs_3235057,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005737,src_005655,time_2593934,execs_3236470,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005737,src_005655,time_2593934,execs_3236470,op_havoc,rep_6 new file mode 100644 index 00000000000..bfa68020586 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005737,src_005655,time_2593934,execs_3236470,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005739,src_005655,time_2594295,execs_3237358,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005739,src_005655,time_2594295,execs_3237358,op_havoc,rep_7 new file mode 100644 index 00000000000..e91b72bbf61 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005739,src_005655,time_2594295,execs_3237358,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005740,src_005655,time_2594759,execs_3238387,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005740,src_005655,time_2594759,execs_3238387,op_havoc,rep_7 new file mode 100644 index 00000000000..5739123e493 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005740,src_005655,time_2594759,execs_3238387,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005741,src_005655,time_2595037,execs_3238787,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005741,src_005655,time_2595037,execs_3238787,op_havoc,rep_3 new file mode 100644 index 00000000000..b19d228b634 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005741,src_005655,time_2595037,execs_3238787,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005742,src_005655,time_2595096,execs_3238920,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005742,src_005655,time_2595096,execs_3238920,op_havoc,rep_5 new file mode 100644 index 00000000000..69843e663f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005742,src_005655,time_2595096,execs_3238920,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005744,src_005655,time_2597103,execs_3243432,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005744,src_005655,time_2597103,execs_3243432,op_havoc,rep_3 new file mode 100644 index 00000000000..6e71a3cb238 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005744,src_005655,time_2597103,execs_3243432,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005748,src_005671,time_2599385,execs_3244720,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005748,src_005671,time_2599385,execs_3244720,op_havoc,rep_4 new file mode 100644 index 00000000000..cc2fe898c04 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005748,src_005671,time_2599385,execs_3244720,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005750,src_005671,time_2604458,execs_3247107,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005750,src_005671,time_2604458,execs_3247107,op_havoc,rep_3 new file mode 100644 index 00000000000..828b4733915 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005750,src_005671,time_2604458,execs_3247107,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005752,src_005674,time_2612569,execs_3251152,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005752,src_005674,time_2612569,execs_3251152,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..2d860053b48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005752,src_005674,time_2612569,execs_3251152,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005753,src_005674,time_2612580,execs_3251217,op_havoc,rep_6,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005753,src_005674,time_2612580,execs_3251217,op_havoc,rep_6,+cov new file mode 100644 index 00000000000..351398f1b9c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005753,src_005674,time_2612580,execs_3251217,op_havoc,rep_6,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005754,src_005674,time_2612591,execs_3251236,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005754,src_005674,time_2612591,execs_3251236,op_havoc,rep_1 new file mode 100644 index 00000000000..f3a6682d552 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005754,src_005674,time_2612591,execs_3251236,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005755,src_005674,time_2612623,execs_3251356,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005755,src_005674,time_2612623,execs_3251356,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..3b03d407432 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005755,src_005674,time_2612623,execs_3251356,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005756,src_005674,time_2612644,execs_3251462,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005756,src_005674,time_2612644,execs_3251462,op_havoc,rep_6 new file mode 100644 index 00000000000..f9cd59acc9d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005756,src_005674,time_2612644,execs_3251462,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005760,src_005674,time_2612851,execs_3252312,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005760,src_005674,time_2612851,execs_3252312,op_havoc,rep_7 new file mode 100644 index 00000000000..ee9768de1fc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005760,src_005674,time_2612851,execs_3252312,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005761,src_005674,time_2612895,execs_3252477,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005761,src_005674,time_2612895,execs_3252477,op_havoc,rep_8 new file mode 100644 index 00000000000..349e8261570 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005761,src_005674,time_2612895,execs_3252477,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005762,src_005674,time_2612935,execs_3252670,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005762,src_005674,time_2612935,execs_3252670,op_havoc,rep_5 new file mode 100644 index 00000000000..aeaf224fbac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005762,src_005674,time_2612935,execs_3252670,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005764,src_005674,time_2613054,execs_3253236,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005764,src_005674,time_2613054,execs_3253236,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..d0b64b7f3d9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005764,src_005674,time_2613054,execs_3253236,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005765,src_005674,time_2613058,execs_3253264,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005765,src_005674,time_2613058,execs_3253264,op_havoc,rep_7 new file mode 100644 index 00000000000..2888ec999f9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005765,src_005674,time_2613058,execs_3253264,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005766,src_005674,time_2613141,execs_3253649,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005766,src_005674,time_2613141,execs_3253649,op_havoc,rep_7 new file mode 100644 index 00000000000..da3caa3b36d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005766,src_005674,time_2613141,execs_3253649,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005767,src_005674,time_2613157,execs_3253700,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005767,src_005674,time_2613157,execs_3253700,op_havoc,rep_5 new file mode 100644 index 00000000000..d83a13aac1f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005767,src_005674,time_2613157,execs_3253700,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005768,src_005674,time_2613300,execs_3254458,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005768,src_005674,time_2613300,execs_3254458,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..31a42157a8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005768,src_005674,time_2613300,execs_3254458,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005769,src_005674,time_2613394,execs_3254945,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005769,src_005674,time_2613394,execs_3254945,op_havoc,rep_8 new file mode 100644 index 00000000000..b4af186b44a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005769,src_005674,time_2613394,execs_3254945,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005770,src_005703,time_2615592,execs_3259001,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005770,src_005703,time_2615592,execs_3259001,op_havoc,rep_2 new file mode 100644 index 00000000000..3df9b3ec696 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005770,src_005703,time_2615592,execs_3259001,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005772,src_005703,time_2616257,execs_3259315,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005772,src_005703,time_2616257,execs_3259315,op_havoc,rep_2 new file mode 100644 index 00000000000..5db804a6a18 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005772,src_005703,time_2616257,execs_3259315,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005775,src_005703,time_2618771,execs_3260865,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005775,src_005703,time_2618771,execs_3260865,op_havoc,rep_2 new file mode 100644 index 00000000000..5e01f3225c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005775,src_005703,time_2618771,execs_3260865,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005776,src_005703,time_2618973,execs_3261019,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005776,src_005703,time_2618973,execs_3261019,op_havoc,rep_2 new file mode 100644 index 00000000000..2d299a9d073 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005776,src_005703,time_2618973,execs_3261019,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005777,src_005703,time_2620374,execs_3261924,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005777,src_005703,time_2620374,execs_3261924,op_havoc,rep_1 new file mode 100644 index 00000000000..86d3a2668ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005777,src_005703,time_2620374,execs_3261924,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005778,src_005703,time_2621375,execs_3262496,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005778,src_005703,time_2621375,execs_3262496,op_havoc,rep_2 new file mode 100644 index 00000000000..16de3add1c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005778,src_005703,time_2621375,execs_3262496,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005779,src_005703,time_2622774,execs_3263389,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005779,src_005703,time_2622774,execs_3263389,op_havoc,rep_2 new file mode 100644 index 00000000000..523cef8a6c1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005779,src_005703,time_2622774,execs_3263389,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005781,src_005689,time_2627842,execs_3266478,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005781,src_005689,time_2627842,execs_3266478,op_havoc,rep_7 new file mode 100644 index 00000000000..6d3301669b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005781,src_005689,time_2627842,execs_3266478,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005783,src_005758,time_2629161,execs_3270932,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005783,src_005758,time_2629161,execs_3270932,op_havoc,rep_6 new file mode 100644 index 00000000000..89c8c241a2a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005783,src_005758,time_2629161,execs_3270932,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005784,src_005758,time_2629232,execs_3271215,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005784,src_005758,time_2629232,execs_3271215,op_havoc,rep_3 new file mode 100644 index 00000000000..34f910b4649 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005784,src_005758,time_2629232,execs_3271215,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005785,src_005758,time_2630088,execs_3274017,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005785,src_005758,time_2630088,execs_3274017,op_havoc,rep_6 new file mode 100644 index 00000000000..a9314c50038 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005785,src_005758,time_2630088,execs_3274017,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005786,src_005758,time_2630512,execs_3275265,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005786,src_005758,time_2630512,execs_3275265,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..eb47e5dd4b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005786,src_005758,time_2630512,execs_3275265,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005787,src_005758,time_2630524,execs_3275295,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005787,src_005758,time_2630524,execs_3275295,op_havoc,rep_7 new file mode 100644 index 00000000000..43749e8c59e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005787,src_005758,time_2630524,execs_3275295,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005788,src_005758,time_2630943,execs_3276429,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005788,src_005758,time_2630943,execs_3276429,op_havoc,rep_4 new file mode 100644 index 00000000000..15fbfdd6474 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005788,src_005758,time_2630943,execs_3276429,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005789,src_005758,time_2631118,execs_3276982,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005789,src_005758,time_2631118,execs_3276982,op_havoc,rep_4 new file mode 100644 index 00000000000..8b2dcd0be0a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005789,src_005758,time_2631118,execs_3276982,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005792,src_005765,time_2632665,execs_3280548,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005792,src_005765,time_2632665,execs_3280548,op_havoc,rep_2 new file mode 100644 index 00000000000..090f9731c26 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005792,src_005765,time_2632665,execs_3280548,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005793,src_005765,time_2634190,execs_3284477,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005793,src_005765,time_2634190,execs_3284477,op_havoc,rep_2 new file mode 100644 index 00000000000..20df8f7c0d7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005793,src_005765,time_2634190,execs_3284477,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005794,src_005713,time_2635664,execs_3286788,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005794,src_005713,time_2635664,execs_3286788,op_havoc,rep_1 new file mode 100644 index 00000000000..1780d7d9c9b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005794,src_005713,time_2635664,execs_3286788,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005795,src_005743,time_2637580,execs_3289014,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005795,src_005743,time_2637580,execs_3289014,op_havoc,rep_7 new file mode 100644 index 00000000000..cc027133091 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005795,src_005743,time_2637580,execs_3289014,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005796,src_004238,time_2638538,execs_3291382,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005796,src_004238,time_2638538,execs_3291382,op_havoc,rep_7 new file mode 100644 index 00000000000..0d999a66fad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005796,src_004238,time_2638538,execs_3291382,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005798,src_005763,time_2639912,execs_3295956,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005798,src_005763,time_2639912,execs_3295956,op_havoc,rep_2 new file mode 100644 index 00000000000..fe0796d01fc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005798,src_005763,time_2639912,execs_3295956,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005799,src_005768,time_2640367,execs_3298008,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005799,src_005768,time_2640367,execs_3298008,op_havoc,rep_2 new file mode 100644 index 00000000000..627249bc7d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005799,src_005768,time_2640367,execs_3298008,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005800,src_005784,time_2641023,execs_3300078,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005800,src_005784,time_2641023,execs_3300078,op_havoc,rep_11 new file mode 100644 index 00000000000..3d1374a5c1b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005800,src_005784,time_2641023,execs_3300078,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005802,src_004629,time_2644003,execs_3303987,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005802,src_004629,time_2644003,execs_3303987,op_havoc,rep_3 new file mode 100644 index 00000000000..326336d5961 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005802,src_004629,time_2644003,execs_3303987,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005803,src_005800,time_2645706,execs_3306865,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005803,src_005800,time_2645706,execs_3306865,op_havoc,rep_4 new file mode 100644 index 00000000000..3c285c51cbf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005803,src_005800,time_2645706,execs_3306865,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005804,src_005791,time_2646579,execs_3309417,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005804,src_005791,time_2646579,execs_3309417,op_havoc,rep_4 new file mode 100644 index 00000000000..7f8c0a1c984 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005804,src_005791,time_2646579,execs_3309417,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005805,src_005791,time_2647266,execs_3310669,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005805,src_005791,time_2647266,execs_3310669,op_havoc,rep_4 new file mode 100644 index 00000000000..80f8b970499 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005805,src_005791,time_2647266,execs_3310669,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005806,src_005791,time_2647507,execs_3311127,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005806,src_005791,time_2647507,execs_3311127,op_havoc,rep_4 new file mode 100644 index 00000000000..c320bb8a16f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005806,src_005791,time_2647507,execs_3311127,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005807,src_005791,time_2648225,execs_3312497,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005807,src_005791,time_2648225,execs_3312497,op_havoc,rep_1 new file mode 100644 index 00000000000..d4529c55e3f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005807,src_005791,time_2648225,execs_3312497,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005808,src_003199,time_2651231,execs_3318274,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005808,src_003199,time_2651231,execs_3318274,op_havoc,rep_3 new file mode 100644 index 00000000000..2ec700c8b05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005808,src_003199,time_2651231,execs_3318274,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005809,src_001228,time_2651498,execs_3319859,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005809,src_001228,time_2651498,execs_3319859,op_havoc,rep_10 new file mode 100644 index 00000000000..f1ccd0573f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005809,src_001228,time_2651498,execs_3319859,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005810,src_004394,time_2651719,execs_3320934,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005810,src_004394,time_2651719,execs_3320934,op_havoc,rep_3 new file mode 100644 index 00000000000..4ec6dbc54db Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005810,src_004394,time_2651719,execs_3320934,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005811,src_000579,time_2652802,execs_3325302,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005811,src_000579,time_2652802,execs_3325302,op_havoc,rep_3 new file mode 100644 index 00000000000..22b212b6dbd --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005811,src_000579,time_2652802,execs_3325302,op_havoc,rep_3 @@ -0,0 +1 @@ +ln,[1;3Lü04åln,[1;3Lü04å™0inen,[1;3Lü04å™0ine™0™0ine \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005812,src_003109,time_2653846,execs_3328196,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005812,src_003109,time_2653846,execs_3328196,op_havoc,rep_3 new file mode 100644 index 00000000000..f10027f6b0b --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005812,src_003109,time_2653846,execs_3328196,op_havoc,rep_3 @@ -0,0 +1 @@ +]52;;SGVs\b]5]Vs\b]52;;SGVsb52;;SG]Vs\b]52;;SGVsb52;;SGVsVsb§8=Ç8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005813,src_003109,time_2653878,execs_3328418,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005813,src_003109,time_2653878,execs_3328418,op_havoc,rep_8 new file mode 100644 index 00000000000..35068bf6ec3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005813,src_003109,time_2653878,execs_3328418,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005815,src_005296,time_2655705,execs_3330923,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005815,src_005296,time_2655705,execs_3330923,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..6f150d965f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005815,src_005296,time_2655705,execs_3330923,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005816,src_004653,time_2662482,execs_3332616,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005816,src_004653,time_2662482,execs_3332616,op_havoc,rep_3 new file mode 100644 index 00000000000..3f843fa32c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005816,src_004653,time_2662482,execs_3332616,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005817,src_002416,time_2664984,execs_3337397,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005817,src_002416,time_2664984,execs_3337397,op_havoc,rep_7 new file mode 100644 index 00000000000..ea339f17aad --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005817,src_002416,time_2664984,execs_3337397,op_havoc,rep_7 @@ -0,0 +1,4 @@ +5: ì +ì ! ó:5 +ì ! ó:5::020ì ð ! ó:5ì +ì ! ó:5:00ì /020 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005818,src_000692,time_2665220,execs_3338893,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005818,src_000692,time_2665220,execs_3338893,op_havoc,rep_2 new file mode 100644 index 00000000000..431c6135385 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005818,src_000692,time_2665220,execs_3338893,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005819,src_003991,time_2665409,execs_3340126,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005819,src_003991,time_2665409,execs_3340126,op_havoc,rep_2 new file mode 100644 index 00000000000..1a77f54427f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005819,src_003991,time_2665409,execs_3340126,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005820,src_001684,time_2665733,execs_3340883,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005820,src_001684,time_2665733,execs_3340883,op_havoc,rep_2 new file mode 100644 index 00000000000..9a21f864d4a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005820,src_001684,time_2665733,execs_3340883,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005821,src_000785,time_2667441,execs_3345668,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005821,src_000785,time_2667441,execs_3345668,op_havoc,rep_8 new file mode 100644 index 00000000000..479a557f86c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005821,src_000785,time_2667441,execs_3345668,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005822,src_004556,time_2671684,execs_3356625,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005822,src_004556,time_2671684,execs_3356625,op_havoc,rep_2 new file mode 100644 index 00000000000..fcdd4b18e63 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005822,src_004556,time_2671684,execs_3356625,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005823,src_004407,time_2673641,execs_3362186,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005823,src_004407,time_2673641,execs_3362186,op_havoc,rep_1 new file mode 100644 index 00000000000..14a4647d33e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005823,src_004407,time_2673641,execs_3362186,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005825,src_004439,time_2677016,execs_3372011,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005825,src_004439,time_2677016,execs_3372011,op_havoc,rep_3 new file mode 100644 index 00000000000..3ca7ac77a7c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005825,src_004439,time_2677016,execs_3372011,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005826,src_004439,time_2677094,execs_3372390,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005826,src_004439,time_2677094,execs_3372390,op_havoc,rep_3 new file mode 100644 index 00000000000..89b12be2cd0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005826,src_004439,time_2677094,execs_3372390,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005827,src_004439,time_2677301,execs_3373323,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005827,src_004439,time_2677301,execs_3373323,op_havoc,rep_12 new file mode 100644 index 00000000000..0ffffdce9e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005827,src_004439,time_2677301,execs_3373323,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005828,src_004439,time_2677447,execs_3374005,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005828,src_004439,time_2677447,execs_3374005,op_havoc,rep_14 new file mode 100644 index 00000000000..9053ad1bc83 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005828,src_004439,time_2677447,execs_3374005,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005829,src_004439,time_2677452,execs_3374021,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005829,src_004439,time_2677452,execs_3374021,op_havoc,rep_13 new file mode 100644 index 00000000000..e5bcdc6ba58 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005829,src_004439,time_2677452,execs_3374021,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005830,src_004439,time_2677864,execs_3375891,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005830,src_004439,time_2677864,execs_3375891,op_havoc,rep_12 new file mode 100644 index 00000000000..85c5c6c1fd1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005830,src_004439,time_2677864,execs_3375891,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005831,src_004439,time_2677995,execs_3376487,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005831,src_004439,time_2677995,execs_3376487,op_havoc,rep_16 new file mode 100644 index 00000000000..704965242f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005831,src_004439,time_2677995,execs_3376487,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005832,src_004439,time_2678379,execs_3378240,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005832,src_004439,time_2678379,execs_3378240,op_havoc,rep_3 new file mode 100644 index 00000000000..912d353221a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005832,src_004439,time_2678379,execs_3378240,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005833,src_005832,time_2678483,execs_3378739,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005833,src_005832,time_2678483,execs_3378739,op_havoc,rep_2 new file mode 100644 index 00000000000..98fa426cc01 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005833,src_005832,time_2678483,execs_3378739,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005834,src_004814,time_2679639,execs_3384630,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005834,src_004814,time_2679639,execs_3384630,op_havoc,rep_10 new file mode 100644 index 00000000000..17ae65c09a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005834,src_004814,time_2679639,execs_3384630,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005835,src_004814,time_2679665,execs_3384785,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005835,src_004814,time_2679665,execs_3384785,op_havoc,rep_15 new file mode 100644 index 00000000000..bf7beb2847c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005835,src_004814,time_2679665,execs_3384785,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005836,src_001868,time_2680216,execs_3387324,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005836,src_001868,time_2680216,execs_3387324,op_havoc,rep_4 new file mode 100644 index 00000000000..826a11dae36 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005836,src_001868,time_2680216,execs_3387324,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005837,src_004482,time_2680805,execs_3390491,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005837,src_004482,time_2680805,execs_3390491,op_havoc,rep_6 new file mode 100644 index 00000000000..1cd8b8d305d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005837,src_004482,time_2680805,execs_3390491,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005838,src_004482,time_2680904,execs_3391056,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005838,src_004482,time_2680904,execs_3391056,op_havoc,rep_5 new file mode 100644 index 00000000000..7c4ba28042d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005838,src_004482,time_2680904,execs_3391056,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005839,src_002204,time_2686226,execs_3402621,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005839,src_002204,time_2686226,execs_3402621,op_havoc,rep_16 new file mode 100644 index 00000000000..91684f99122 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005839,src_002204,time_2686226,execs_3402621,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005843,src_005771,time_2689866,execs_3405510,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005843,src_005771,time_2689866,execs_3405510,op_havoc,rep_6 new file mode 100644 index 00000000000..4674556ccd0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005843,src_005771,time_2689866,execs_3405510,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005847,src_005771,time_2702089,execs_3406434,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005847,src_005771,time_2702089,execs_3406434,op_havoc,rep_6 new file mode 100644 index 00000000000..2c9a39fdf09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005847,src_005771,time_2702089,execs_3406434,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005848,src_005771,time_2704015,execs_3406588,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005848,src_005771,time_2704015,execs_3406588,op_havoc,rep_3 new file mode 100644 index 00000000000..3b64988623f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005848,src_005771,time_2704015,execs_3406588,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005849,src_005771,time_2708220,execs_3406920,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005849,src_005771,time_2708220,execs_3406920,op_havoc,rep_6 new file mode 100644 index 00000000000..06ad577f702 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005849,src_005771,time_2708220,execs_3406920,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005850,src_005771,time_2720162,execs_3407860,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005850,src_005771,time_2720162,execs_3407860,op_havoc,rep_4 new file mode 100644 index 00000000000..4a8520d09d5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005850,src_005771,time_2720162,execs_3407860,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005851,src_005771,time_2720312,execs_3407874,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005851,src_005771,time_2720312,execs_3407874,op_havoc,rep_4 new file mode 100644 index 00000000000..de6cd0766ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005851,src_005771,time_2720312,execs_3407874,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005852,src_005771,time_2724410,execs_3408196,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005852,src_005771,time_2724410,execs_3408196,op_havoc,rep_8 new file mode 100644 index 00000000000..faf746c9633 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005852,src_005771,time_2724410,execs_3408196,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005853,src_005771,time_2731251,execs_3408733,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005853,src_005771,time_2731251,execs_3408733,op_havoc,rep_4 new file mode 100644 index 00000000000..e621f62eee7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005853,src_005771,time_2731251,execs_3408733,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005854,src_005771,time_2771692,execs_3411914,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005854,src_005771,time_2771692,execs_3411914,op_havoc,rep_7 new file mode 100644 index 00000000000..93a8232d581 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005854,src_005771,time_2771692,execs_3411914,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005855,src_005771,time_2779290,execs_3412497,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005855,src_005771,time_2779290,execs_3412497,op_havoc,rep_7 new file mode 100644 index 00000000000..832ae08190b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005855,src_005771,time_2779290,execs_3412497,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005856,src_004103,time_2782877,execs_3413978,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005856,src_004103,time_2782877,execs_3413978,op_havoc,rep_15 new file mode 100644 index 00000000000..94c14ea74a3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005856,src_004103,time_2782877,execs_3413978,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005857,src_004502,time_2785395,execs_3418866,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005857,src_004502,time_2785395,execs_3418866,op_havoc,rep_6 new file mode 100644 index 00000000000..51626a5145e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005857,src_004502,time_2785395,execs_3418866,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005858,src_005652,time_2787584,execs_3423179,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005858,src_005652,time_2787584,execs_3423179,op_havoc,rep_5 new file mode 100644 index 00000000000..32c22d1ccac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005858,src_005652,time_2787584,execs_3423179,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005859,src_005791,time_2789032,execs_3426270,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005859,src_005791,time_2789032,execs_3426270,op_havoc,rep_3 new file mode 100644 index 00000000000..2b59f774b5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005859,src_005791,time_2789032,execs_3426270,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005860,src_002707,time_2790272,execs_3430201,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005860,src_002707,time_2790272,execs_3430201,op_havoc,rep_2 new file mode 100644 index 00000000000..4549f790358 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005860,src_002707,time_2790272,execs_3430201,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005861,src_003421,time_2790401,execs_3430964,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005861,src_003421,time_2790401,execs_3430964,op_havoc,rep_7 new file mode 100644 index 00000000000..0485b396c55 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005861,src_003421,time_2790401,execs_3430964,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005862,src_003421,time_2790422,execs_3431046,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005862,src_003421,time_2790422,execs_3431046,op_havoc,rep_4 new file mode 100644 index 00000000000..6c546a63063 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005862,src_003421,time_2790422,execs_3431046,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005863,src_003169,time_2791183,execs_3434482,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005863,src_003169,time_2791183,execs_3434482,op_havoc,rep_2 new file mode 100644 index 00000000000..2b752709fc5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005863,src_003169,time_2791183,execs_3434482,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005864,src_005221,time_2791634,execs_3435866,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005864,src_005221,time_2791634,execs_3435866,op_havoc,rep_4 new file mode 100644 index 00000000000..a7ba0f48bf7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005864,src_005221,time_2791634,execs_3435866,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005865,src_005221,time_2792222,execs_3436424,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005865,src_005221,time_2792222,execs_3436424,op_havoc,rep_8 new file mode 100644 index 00000000000..41bee31bcbf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005865,src_005221,time_2792222,execs_3436424,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005867,src_002432,time_2796242,execs_3438940,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005867,src_002432,time_2796242,execs_3438940,op_havoc,rep_12 new file mode 100644 index 00000000000..c933bceb148 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005867,src_002432,time_2796242,execs_3438940,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005868,src_003835,time_2798825,execs_3442894,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005868,src_003835,time_2798825,execs_3442894,op_havoc,rep_11 new file mode 100644 index 00000000000..84a2df41c95 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005868,src_003835,time_2798825,execs_3442894,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005869,src_003858,time_2802334,execs_3453720,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005869,src_003858,time_2802334,execs_3453720,op_havoc,rep_4 new file mode 100644 index 00000000000..8f288fc1e90 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005869,src_003858,time_2802334,execs_3453720,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005870,src_002080,time_2803095,execs_3457391,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005870,src_002080,time_2803095,execs_3457391,op_havoc,rep_1 new file mode 100644 index 00000000000..64fa75fd92d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005870,src_002080,time_2803095,execs_3457391,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005871,src_004300,time_2803443,execs_3459356,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005871,src_004300,time_2803443,execs_3459356,op_havoc,rep_11 new file mode 100644 index 00000000000..7f27b2ca204 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005871,src_004300,time_2803443,execs_3459356,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005872,src_004300,time_2803459,execs_3459454,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005872,src_004300,time_2803459,execs_3459454,op_havoc,rep_11 new file mode 100644 index 00000000000..54000d7d778 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005872,src_004300,time_2803459,execs_3459454,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005873,src_004300,time_2803679,execs_3460509,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005873,src_004300,time_2803679,execs_3460509,op_havoc,rep_16 new file mode 100644 index 00000000000..bcc3cb7f64d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005873,src_004300,time_2803679,execs_3460509,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005874,src_004300,time_2803915,execs_3461721,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005874,src_004300,time_2803915,execs_3461721,op_havoc,rep_13 new file mode 100644 index 00000000000..7091f885aae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005874,src_004300,time_2803915,execs_3461721,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005875,src_004300,time_2803930,execs_3461756,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005875,src_004300,time_2803930,execs_3461756,op_havoc,rep_9 new file mode 100644 index 00000000000..ce4cffbf57b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005875,src_004300,time_2803930,execs_3461756,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005876,src_004300,time_2804030,execs_3462132,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005876,src_004300,time_2804030,execs_3462132,op_havoc,rep_10 new file mode 100644 index 00000000000..e7e301440dd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005876,src_004300,time_2804030,execs_3462132,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005877,src_004300,time_2804445,execs_3464177,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005877,src_004300,time_2804445,execs_3464177,op_havoc,rep_8 new file mode 100644 index 00000000000..a4555b31dac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005877,src_004300,time_2804445,execs_3464177,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005878,src_004300,time_2804449,execs_3464197,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005878,src_004300,time_2804449,execs_3464197,op_havoc,rep_13 new file mode 100644 index 00000000000..f983fec9798 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005878,src_004300,time_2804449,execs_3464197,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005879,src_003855,time_2805990,execs_3470619,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005879,src_003855,time_2805990,execs_3470619,op_havoc,rep_1 new file mode 100644 index 00000000000..dc29f9323e4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005879,src_003855,time_2805990,execs_3470619,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005880,src_003192,time_2807224,execs_3478167,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005880,src_003192,time_2807224,execs_3478167,op_havoc,rep_3 new file mode 100644 index 00000000000..6f41bd6bf44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005880,src_003192,time_2807224,execs_3478167,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005881,src_000842,time_2807428,execs_3479595,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005881,src_000842,time_2807428,execs_3479595,op_havoc,rep_5 new file mode 100644 index 00000000000..90bd345dbb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005881,src_000842,time_2807428,execs_3479595,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005883,src_002009,time_2808677,execs_3481091,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005883,src_002009,time_2808677,execs_3481091,op_havoc,rep_2 new file mode 100644 index 00000000000..2ac9e01e772 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005883,src_002009,time_2808677,execs_3481091,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005884,src_005599,time_2810285,execs_3484579,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005884,src_005599,time_2810285,execs_3484579,op_havoc,rep_4 new file mode 100644 index 00000000000..56613b21eef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005884,src_005599,time_2810285,execs_3484579,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005885,src_005599,time_2810423,execs_3485157,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005885,src_005599,time_2810423,execs_3485157,op_havoc,rep_3 new file mode 100644 index 00000000000..ab78e71d1e6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005885,src_005599,time_2810423,execs_3485157,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005886,src_005599,time_2811623,execs_3489884,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005886,src_005599,time_2811623,execs_3489884,op_havoc,rep_1 new file mode 100644 index 00000000000..c473fa4b27c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005886,src_005599,time_2811623,execs_3489884,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005887,src_004503,time_2813132,execs_3495590,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005887,src_004503,time_2813132,execs_3495590,op_havoc,rep_2 new file mode 100644 index 00000000000..44ba7df890a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005887,src_004503,time_2813132,execs_3495590,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005888,src_001907,time_2816292,execs_3503541,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005888,src_001907,time_2816292,execs_3503541,op_havoc,rep_4 new file mode 100644 index 00000000000..2ae973a2691 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005888,src_001907,time_2816292,execs_3503541,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005889,src_001907,time_2816299,execs_3503594,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005889,src_001907,time_2816299,execs_3503594,op_havoc,rep_6 new file mode 100644 index 00000000000..41d8d3937f1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005889,src_001907,time_2816299,execs_3503594,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005890,src_005187,time_2816739,execs_3506338,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005890,src_005187,time_2816739,execs_3506338,op_havoc,rep_1 new file mode 100644 index 00000000000..89edf4df208 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005890,src_005187,time_2816739,execs_3506338,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005891,src_005187,time_2816974,execs_3507289,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005891,src_005187,time_2816974,execs_3507289,op_havoc,rep_1 new file mode 100644 index 00000000000..308e4f092a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005891,src_005187,time_2816974,execs_3507289,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005892,src_004456,time_2821724,execs_3516737,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_005892,src_004456,time_2821724,execs_3516737,op_havoc,rep_14 new file mode 100644 index 00000000000..05b624b450d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005892,src_004456,time_2821724,execs_3516737,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005893,src_005207,time_2823178,execs_3519940,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005893,src_005207,time_2823178,execs_3519940,op_havoc,rep_4 new file mode 100644 index 00000000000..0f52af1805b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005893,src_005207,time_2823178,execs_3519940,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005894,src_003860,time_2823771,execs_3523830,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005894,src_003860,time_2823771,execs_3523830,op_havoc,rep_6 new file mode 100644 index 00000000000..61c83b302bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005894,src_003860,time_2823771,execs_3523830,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005895,src_004942,time_2825925,execs_3527368,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005895,src_004942,time_2825925,execs_3527368,op_havoc,rep_7 new file mode 100644 index 00000000000..e6eb92b7afc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005895,src_004942,time_2825925,execs_3527368,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005896,src_005780,time_2826431,execs_3528777,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005896,src_005780,time_2826431,execs_3528777,op_havoc,rep_2 new file mode 100644 index 00000000000..26da34449a8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005896,src_005780,time_2826431,execs_3528777,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005897,src_005780,time_2828378,execs_3530146,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005897,src_005780,time_2828378,execs_3530146,op_havoc,rep_1 new file mode 100644 index 00000000000..44412563116 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005897,src_005780,time_2828378,execs_3530146,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005898,src_002698,time_2831728,execs_3533206,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005898,src_002698,time_2831728,execs_3533206,op_havoc,rep_6 new file mode 100644 index 00000000000..fcd47e5f26e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005898,src_002698,time_2831728,execs_3533206,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005899,src_003882,time_2832253,execs_3536446,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005899,src_003882,time_2832253,execs_3536446,op_havoc,rep_1 new file mode 100644 index 00000000000..ca9e6a0d271 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005899,src_003882,time_2832253,execs_3536446,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005900,src_002395,time_2832730,execs_3539797,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005900,src_002395,time_2832730,execs_3539797,op_havoc,rep_6 new file mode 100644 index 00000000000..031226d576a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005900,src_002395,time_2832730,execs_3539797,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005901,src_003673,time_2833024,execs_3541867,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005901,src_003673,time_2833024,execs_3541867,op_havoc,rep_1 new file mode 100644 index 00000000000..e933fcb4314 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005901,src_003673,time_2833024,execs_3541867,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005902,src_003673,time_2833100,execs_3542253,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005902,src_003673,time_2833100,execs_3542253,op_havoc,rep_16 new file mode 100644 index 00000000000..31b53d031cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005902,src_003673,time_2833100,execs_3542253,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005903,src_004389,time_2834190,execs_3548304,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005903,src_004389,time_2834190,execs_3548304,op_havoc,rep_11 new file mode 100644 index 00000000000..cd5d944b561 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005903,src_004389,time_2834190,execs_3548304,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005904,src_004389,time_2834253,execs_3548690,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005904,src_004389,time_2834253,execs_3548690,op_havoc,rep_3 new file mode 100644 index 00000000000..7abf8e5d68b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005904,src_004389,time_2834253,execs_3548690,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005906,src_004389,time_2834390,execs_3549419,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005906,src_004389,time_2834390,execs_3549419,op_havoc,rep_11 new file mode 100644 index 00000000000..44dbf781b6d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005906,src_004389,time_2834390,execs_3549419,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005907,src_004389,time_2835052,execs_3552877,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005907,src_004389,time_2835052,execs_3552877,op_havoc,rep_10 new file mode 100644 index 00000000000..778d94a78d2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005907,src_004389,time_2835052,execs_3552877,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005908,src_004389,time_2835081,execs_3553069,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005908,src_004389,time_2835081,execs_3553069,op_havoc,rep_16 new file mode 100644 index 00000000000..2f7cfec1ee6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005908,src_004389,time_2835081,execs_3553069,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005909,src_002178,time_2836067,execs_3558579,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005909,src_002178,time_2836067,execs_3558579,op_havoc,rep_2 new file mode 100644 index 00000000000..13068cf7d5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005909,src_002178,time_2836067,execs_3558579,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005910,src_005777,time_2837657,execs_3563768,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_005910,src_005777,time_2837657,execs_3563768,op_havoc,rep_16 new file mode 100644 index 00000000000..64b6f030381 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005910,src_005777,time_2837657,execs_3563768,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005911,src_005777,time_2839763,execs_3564125,op_havoc,rep_7,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005911,src_005777,time_2839763,execs_3564125,op_havoc,rep_7,+cov new file mode 100644 index 00000000000..5d80400d474 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005911,src_005777,time_2839763,execs_3564125,op_havoc,rep_7,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005912,src_005777,time_2840922,execs_3564304,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005912,src_005777,time_2840922,execs_3564304,op_havoc,rep_7 new file mode 100644 index 00000000000..53083821e14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005912,src_005777,time_2840922,execs_3564304,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005913,src_005777,time_2843909,execs_3564814,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005913,src_005777,time_2843909,execs_3564814,op_havoc,rep_13 new file mode 100644 index 00000000000..d361e4bbbc5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005913,src_005777,time_2843909,execs_3564814,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005914,src_005911,time_2862914,execs_3567867,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005914,src_005911,time_2862914,execs_3567867,op_havoc,rep_11 new file mode 100644 index 00000000000..6bba3d147d8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005914,src_005911,time_2862914,execs_3567867,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005915,src_005914,time_2864618,execs_3568268,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005915,src_005914,time_2864618,execs_3568268,op_havoc,rep_9 new file mode 100644 index 00000000000..97072255a34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005915,src_005914,time_2864618,execs_3568268,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005916,src_005914,time_2864636,execs_3568283,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005916,src_005914,time_2864636,execs_3568283,op_havoc,rep_13 new file mode 100644 index 00000000000..d6e6a0bcefa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005916,src_005914,time_2864636,execs_3568283,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005917,src_005914,time_2864662,execs_3568340,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005917,src_005914,time_2864662,execs_3568340,op_havoc,rep_8 new file mode 100644 index 00000000000..26db926d430 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005917,src_005914,time_2864662,execs_3568340,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005918,src_005914,time_2865106,execs_3568802,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005918,src_005914,time_2865106,execs_3568802,op_havoc,rep_8 new file mode 100644 index 00000000000..6ac35ef65ef Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005918,src_005914,time_2865106,execs_3568802,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005919,src_005914,time_2865432,execs_3569257,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005919,src_005914,time_2865432,execs_3569257,op_havoc,rep_11 new file mode 100644 index 00000000000..8461b844ab1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005919,src_005914,time_2865432,execs_3569257,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005922,src_003283,time_2871985,execs_3574555,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005922,src_003283,time_2871985,execs_3574555,op_havoc,rep_9 new file mode 100644 index 00000000000..62c8b6b143c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005922,src_003283,time_2871985,execs_3574555,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005923,src_003283,time_2872371,execs_3576792,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005923,src_003283,time_2872371,execs_3576792,op_havoc,rep_9 new file mode 100644 index 00000000000..74a580bddc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005923,src_003283,time_2872371,execs_3576792,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005925,src_003283,time_2872907,execs_3580100,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005925,src_003283,time_2872907,execs_3580100,op_havoc,rep_12 new file mode 100644 index 00000000000..ca68b56f422 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005925,src_003283,time_2872907,execs_3580100,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005926,src_003902,time_2876872,execs_3594178,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005926,src_003902,time_2876872,execs_3594178,op_havoc,rep_3 new file mode 100644 index 00000000000..9e939ca29e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005926,src_003902,time_2876872,execs_3594178,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005927,src_003812,time_2879425,execs_3598769,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005927,src_003812,time_2879425,execs_3598769,op_havoc,rep_5 new file mode 100644 index 00000000000..c9b809f5a42 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005927,src_003812,time_2879425,execs_3598769,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005929,src_003812,time_2879703,execs_3600275,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005929,src_003812,time_2879703,execs_3600275,op_havoc,rep_15 new file mode 100644 index 00000000000..0c6b150665d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005929,src_003812,time_2879703,execs_3600275,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005930,src_004374,time_2880492,execs_3605052,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005930,src_004374,time_2880492,execs_3605052,op_havoc,rep_1 new file mode 100644 index 00000000000..aadfa2845e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005930,src_004374,time_2880492,execs_3605052,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005931,src_004374,time_2880585,execs_3605529,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005931,src_004374,time_2880585,execs_3605529,op_havoc,rep_3 new file mode 100644 index 00000000000..682a457c426 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005931,src_004374,time_2880585,execs_3605529,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005932,src_004374,time_2880611,execs_3605660,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005932,src_004374,time_2880611,execs_3605660,op_havoc,rep_2 new file mode 100644 index 00000000000..f5d79fa4bd6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005932,src_004374,time_2880611,execs_3605660,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005933,src_003905,time_2881575,execs_3610641,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005933,src_003905,time_2881575,execs_3610641,op_havoc,rep_9 new file mode 100644 index 00000000000..310b1054826 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005933,src_003905,time_2881575,execs_3610641,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005936,src_002973,time_2883663,execs_3620006,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005936,src_002973,time_2883663,execs_3620006,op_havoc,rep_4 new file mode 100644 index 00000000000..554d30fd1af Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005936,src_002973,time_2883663,execs_3620006,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005937,src_001332,time_2885302,execs_3625150,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005937,src_001332,time_2885302,execs_3625150,op_havoc,rep_1 new file mode 100644 index 00000000000..d2406227195 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005937,src_001332,time_2885302,execs_3625150,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005938,src_001332,time_2885319,execs_3625268,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005938,src_001332,time_2885319,execs_3625268,op_havoc,rep_1 new file mode 100644 index 00000000000..16b6852369e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005938,src_001332,time_2885319,execs_3625268,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005939,src_003158,time_2885509,execs_3626485,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_005939,src_003158,time_2885509,execs_3626485,op_havoc,rep_13 new file mode 100644 index 00000000000..264b086daaf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005939,src_003158,time_2885509,execs_3626485,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005941,src_005934,time_2892726,execs_3636153,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005941,src_005934,time_2892726,execs_3636153,op_havoc,rep_2 new file mode 100644 index 00000000000..7314c9aa5c3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005941,src_005934,time_2892726,execs_3636153,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005942,src_005361,time_2895078,execs_3643857,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005942,src_005361,time_2895078,execs_3643857,op_havoc,rep_9 new file mode 100644 index 00000000000..abc73fb2817 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005942,src_005361,time_2895078,execs_3643857,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005943,src_002833,time_2896101,execs_3645927,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005943,src_002833,time_2896101,execs_3645927,op_havoc,rep_2 new file mode 100644 index 00000000000..f1155ac3155 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005943,src_002833,time_2896101,execs_3645927,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005944,src_003704,time_2896245,execs_3646951,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005944,src_003704,time_2896245,execs_3646951,op_havoc,rep_6 new file mode 100644 index 00000000000..12c6f377293 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005944,src_003704,time_2896245,execs_3646951,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005945,src_004716,time_2896554,execs_3648863,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005945,src_004716,time_2896554,execs_3648863,op_havoc,rep_4 new file mode 100644 index 00000000000..d336c358895 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005945,src_004716,time_2896554,execs_3648863,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005946,src_003518,time_2898227,execs_3654039,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005946,src_003518,time_2898227,execs_3654039,op_havoc,rep_1 new file mode 100644 index 00000000000..27b1c6bc408 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005946,src_003518,time_2898227,execs_3654039,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005947,src_004094,time_2898988,execs_3655023,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005947,src_004094,time_2898988,execs_3655023,op_havoc,rep_2 new file mode 100644 index 00000000000..31fce804445 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005947,src_004094,time_2898988,execs_3655023,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005948,src_004094,time_2899020,execs_3655241,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005948,src_004094,time_2899020,execs_3655241,op_havoc,rep_3 new file mode 100644 index 00000000000..577cb18f2ba Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005948,src_004094,time_2899020,execs_3655241,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005949,src_000721,time_2902456,execs_3660506,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005949,src_000721,time_2902456,execs_3660506,op_havoc,rep_6 new file mode 100644 index 00000000000..196a009a815 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005949,src_000721,time_2902456,execs_3660506,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005950,src_001720,time_2902824,execs_3662618,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005950,src_001720,time_2902824,execs_3662618,op_havoc,rep_7 new file mode 100644 index 00000000000..edc31e15ecf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005950,src_001720,time_2902824,execs_3662618,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005951,src_000216,time_2904759,execs_3665842,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005951,src_000216,time_2904759,execs_3665842,op_havoc,rep_8 new file mode 100644 index 00000000000..d91a4868665 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005951,src_000216,time_2904759,execs_3665842,op_havoc,rep_8 @@ -0,0 +1 @@ +àààHelloàHeoolloàH\˜Ÿ]4;5;g¢[Hliom,1111111047éààHeeàHelloàHeoooàHéààHeeàHelloàHelloàHàL \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005952,src_000968,time_2908939,execs_3672861,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005952,src_000968,time_2908939,execs_3672861,op_havoc,rep_6 new file mode 100644 index 00000000000..8ae05f3a014 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005952,src_000968,time_2908939,execs_3672861,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005953,src_002924,time_2909941,execs_3679037,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005953,src_002924,time_2909941,execs_3679037,op_havoc,rep_8 new file mode 100644 index 00000000000..b917080c265 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005953,src_002924,time_2909941,execs_3679037,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005954,src_003678,time_2910377,execs_3681536,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005954,src_003678,time_2910377,execs_3681536,op_havoc,rep_4 new file mode 100644 index 00000000000..b93424ea24b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005954,src_003678,time_2910377,execs_3681536,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005955,src_004657,time_2910653,execs_3683178,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_005955,src_004657,time_2910653,execs_3683178,op_havoc,rep_6 new file mode 100644 index 00000000000..41126b0d448 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005955,src_004657,time_2910653,execs_3683178,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005956,src_004162,time_2914681,execs_3691254,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_005956,src_004162,time_2914681,execs_3691254,op_havoc,rep_11 new file mode 100644 index 00000000000..8fd8801485a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005956,src_004162,time_2914681,execs_3691254,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005957,src_004581,time_2916043,execs_3693747,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005957,src_004581,time_2916043,execs_3693747,op_havoc,rep_15 new file mode 100644 index 00000000000..01d1c323c06 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005957,src_004581,time_2916043,execs_3693747,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005958,src_004581,time_2916061,execs_3693866,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_005958,src_004581,time_2916061,execs_3693866,op_havoc,rep_12 new file mode 100644 index 00000000000..8d89688673b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005958,src_004581,time_2916061,execs_3693866,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005959,src_000660,time_3947252,execs_3698620,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_005959,src_000660,time_3947252,execs_3698620,op_havoc,rep_9 new file mode 100644 index 00000000000..394c1cdd84f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005959,src_000660,time_3947252,execs_3698620,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005961,src_002138,time_3948507,execs_3705222,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005961,src_002138,time_3948507,execs_3705222,op_havoc,rep_8 new file mode 100644 index 00000000000..cac01afd28e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005961,src_002138,time_3948507,execs_3705222,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005962,src_000510,time_3949058,execs_3708327,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005962,src_000510,time_3949058,execs_3708327,op_havoc,rep_2 new file mode 100644 index 00000000000..7f7c37c64a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005962,src_000510,time_3949058,execs_3708327,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005963,src_005935,time_3954340,execs_3712375,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005963,src_005935,time_3954340,execs_3712375,op_havoc,rep_4 new file mode 100644 index 00000000000..29f6b9bb1d5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005963,src_005935,time_3954340,execs_3712375,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005964,src_004150,time_3959751,execs_3715480,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005964,src_004150,time_3959751,execs_3715480,op_havoc,rep_8 new file mode 100644 index 00000000000..087db91f3c9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005964,src_004150,time_3959751,execs_3715480,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005965,src_003708,time_3963027,execs_3720735,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005965,src_003708,time_3963027,execs_3720735,op_havoc,rep_2 new file mode 100644 index 00000000000..1058a3c80ad Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005965,src_003708,time_3963027,execs_3720735,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005967,src_002994,time_3969786,execs_3735348,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005967,src_002994,time_3969786,execs_3735348,op_havoc,rep_4 new file mode 100644 index 00000000000..800135c5175 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005967,src_002994,time_3969786,execs_3735348,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005968,src_005967,time_3969970,execs_3735810,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005968,src_005967,time_3969970,execs_3735810,op_havoc,rep_8 new file mode 100644 index 00000000000..6aa475773b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005968,src_005967,time_3969970,execs_3735810,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005969,src_005574,time_3973621,execs_3741317,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_005969,src_005574,time_3973621,execs_3741317,op_havoc,rep_15 new file mode 100644 index 00000000000..2c48c87a247 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005969,src_005574,time_3973621,execs_3741317,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005970,src_005123,time_3974876,execs_3747066,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005970,src_005123,time_3974876,execs_3747066,op_havoc,rep_1 new file mode 100644 index 00000000000..6fef80623f2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005970,src_005123,time_3974876,execs_3747066,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005971,src_001862,time_3975458,execs_3747752,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005971,src_001862,time_3975458,execs_3747752,op_havoc,rep_2 new file mode 100644 index 00000000000..63441506cb0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005971,src_001862,time_3975458,execs_3747752,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005972,src_003519,time_3978374,execs_3750443,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005972,src_003519,time_3978374,execs_3750443,op_havoc,rep_2 new file mode 100644 index 00000000000..fcafe0b4479 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005972,src_003519,time_3978374,execs_3750443,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005973,src_005288,time_3979103,execs_3751997,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005973,src_005288,time_3979103,execs_3751997,op_havoc,rep_4 new file mode 100644 index 00000000000..27e13c18af8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005973,src_005288,time_3979103,execs_3751997,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005974,src_002641,time_3982358,execs_3755564,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005974,src_002641,time_3982358,execs_3755564,op_havoc,rep_2 new file mode 100644 index 00000000000..97feb428351 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005974,src_002641,time_3982358,execs_3755564,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005975,src_005743,time_3983266,execs_3757726,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005975,src_005743,time_3983266,execs_3757726,op_havoc,rep_3 new file mode 100644 index 00000000000..99113cc7889 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005975,src_005743,time_3983266,execs_3757726,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005976,src_002355,time_3985378,execs_3765411,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005976,src_002355,time_3985378,execs_3765411,op_havoc,rep_1 new file mode 100644 index 00000000000..ef093a49d4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005976,src_002355,time_3985378,execs_3765411,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005977,src_002355,time_3985435,execs_3765813,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005977,src_002355,time_3985435,execs_3765813,op_havoc,rep_2 new file mode 100644 index 00000000000..083d5e54d4e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005977,src_002355,time_3985435,execs_3765813,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005978,src_002023,time_3985615,execs_3766743,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_005978,src_002023,time_3985615,execs_3766743,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..31dfbe0e1ce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005978,src_002023,time_3985615,execs_3766743,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005979,src_005070,time_3985901,execs_3767837,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005979,src_005070,time_3985901,execs_3767837,op_havoc,rep_7 new file mode 100644 index 00000000000..32e3c4c37a1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005979,src_005070,time_3985901,execs_3767837,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005980,src_003944,time_3986607,execs_3768785,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005980,src_003944,time_3986607,execs_3768785,op_havoc,rep_7 new file mode 100644 index 00000000000..1d7b75e5fd2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005980,src_003944,time_3986607,execs_3768785,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005981,src_003488,time_3987276,execs_3771295,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005981,src_003488,time_3987276,execs_3771295,op_havoc,rep_4 new file mode 100644 index 00000000000..828d70ecc44 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005981,src_003488,time_3987276,execs_3771295,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005982,src_004375,time_3988140,execs_3775669,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005982,src_004375,time_3988140,execs_3775669,op_havoc,rep_5 new file mode 100644 index 00000000000..2beb6fd4ab8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005982,src_004375,time_3988140,execs_3775669,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005984,src_005538,time_3988809,execs_3777967,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005984,src_005538,time_3988809,execs_3777967,op_havoc,rep_2 new file mode 100644 index 00000000000..3369044e5ee --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005984,src_005538,time_3988809,execs_3777967,op_havoc,rep_2 @@ -0,0 +1 @@ +J[[[[[2[[[[22J[22G[Óè2l[21þ[[[[2[[J[[[ [[[J[[[2l \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005985,src_005538,time_3989186,execs_3778389,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005985,src_005538,time_3989186,execs_3778389,op_havoc,rep_1 new file mode 100644 index 00000000000..c6222eec8ad --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005985,src_005538,time_3989186,execs_3778389,op_havoc,rep_1 @@ -0,0 +1 @@ +[[[[[[[J[[[22J[Óè2l[21þ[[[[2[[J[[[ [[[22J[22G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005986,src_005538,time_3989321,execs_3778538,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005986,src_005538,time_3989321,execs_3778538,op_havoc,rep_2 new file mode 100644 index 00000000000..b339c114fe2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_005986,src_005538,time_3989321,execs_3778538,op_havoc,rep_2 @@ -0,0 +1,2 @@ +J[[[[J[[[22J[Óè2l[21þ[[[2J[J[[[ [2 +[[J[[[ [[[22J[22G \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005987,src_005573,time_4049958,execs_3783481,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_005987,src_005573,time_4049958,execs_3783481,op_havoc,rep_10 new file mode 100644 index 00000000000..bf11a6ecb98 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005987,src_005573,time_4049958,execs_3783481,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005988,src_005814,time_4053190,execs_3786282,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_005988,src_005814,time_4053190,execs_3786282,op_havoc,rep_5 new file mode 100644 index 00000000000..33238630d05 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005988,src_005814,time_4053190,execs_3786282,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005989,src_003884,time_4056019,execs_3790780,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005989,src_003884,time_4056019,execs_3790780,op_havoc,rep_2 new file mode 100644 index 00000000000..1c90ce37aeb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005989,src_003884,time_4056019,execs_3790780,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005990,src_004100,time_4059336,execs_3793497,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_005990,src_004100,time_4059336,execs_3793497,op_havoc,rep_7 new file mode 100644 index 00000000000..8e27bd47396 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005990,src_004100,time_4059336,execs_3793497,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005991,src_003870,time_4062337,execs_3803268,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_005991,src_003870,time_4062337,execs_3803268,op_havoc,rep_4 new file mode 100644 index 00000000000..592f3f7344d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005991,src_003870,time_4062337,execs_3803268,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005992,src_001299,time_4062589,execs_3804499,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005992,src_001299,time_4062589,execs_3804499,op_havoc,rep_1 new file mode 100644 index 00000000000..3c144dfd999 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005992,src_001299,time_4062589,execs_3804499,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005993,src_003347,time_4062775,execs_3805436,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_005993,src_003347,time_4062775,execs_3805436,op_havoc,rep_8 new file mode 100644 index 00000000000..933684b8bf4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005993,src_003347,time_4062775,execs_3805436,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005994,src_005323,time_4069957,execs_3812651,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005994,src_005323,time_4069957,execs_3812651,op_havoc,rep_2 new file mode 100644 index 00000000000..b007c7a74b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005994,src_005323,time_4069957,execs_3812651,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005995,src_003574,time_4073043,execs_3817202,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005995,src_003574,time_4073043,execs_3817202,op_havoc,rep_2 new file mode 100644 index 00000000000..c48ae23fe53 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005995,src_003574,time_4073043,execs_3817202,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005996,src_003574,time_4073174,execs_3817250,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_005996,src_003574,time_4073174,execs_3817250,op_havoc,rep_2 new file mode 100644 index 00000000000..219ad767e88 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005996,src_003574,time_4073174,execs_3817250,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005997,src_005647,time_4075124,execs_3818818,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_005997,src_005647,time_4075124,execs_3818818,op_havoc,rep_1 new file mode 100644 index 00000000000..c616552452a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005997,src_005647,time_4075124,execs_3818818,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_005998,src_003690,time_4075988,execs_3819902,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_005998,src_003690,time_4075988,execs_3819902,op_havoc,rep_3 new file mode 100644 index 00000000000..b388810253f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_005998,src_003690,time_4075988,execs_3819902,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006000,src_003314,time_4080231,execs_3826235,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006000,src_003314,time_4080231,execs_3826235,op_havoc,rep_6 new file mode 100644 index 00000000000..19ab7f315c1 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006000,src_003314,time_4080231,execs_3826235,op_havoc,rep_6 @@ -0,0 +1,2 @@ +Â1Q25lT?ŠŠŠŠŠŠŠŠ]9;1;97]9;1;97 +Ç‘ŠŠŠŠŠ]9;1;97ÇÇÂ1Q25lT?ŠŠŠŠŠŠŠŠ]9;1;97Ç‘ŠŠŠŠŠ]9;1;ú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006001,src_003314,time_4080255,execs_3826383,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006001,src_003314,time_4080255,execs_3826383,op_havoc,rep_8 new file mode 100644 index 00000000000..3924f7240f5 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006001,src_003314,time_4080255,execs_3826383,op_havoc,rep_8 @@ -0,0 +1 @@ +Â1QŠŠŠ]9;1;ŠŠŠŠŠŠŠ]9;1;ŠŠT?ŠŠŠŠŠŠŠ]9;1;ŠŠŠŠŠŠŠ]9;1;ŠŠ[ŠŠŠŠŠŠl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006002,src_001885,time_4081025,execs_3831018,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006002,src_001885,time_4081025,execs_3831018,op_havoc,rep_3 new file mode 100644 index 00000000000..5be7d0fc625 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006002,src_001885,time_4081025,execs_3831018,op_havoc,rep_3 @@ -0,0 +1,4 @@ +ÂA% +o rú)0049h[,% +o rú)0049h[;Ûg-;Ûg- WoÂÂ}}ú)0049h% +o }}ÂÁú \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006004,src_002172,time_4084626,execs_3842565,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006004,src_002172,time_4084626,execs_3842565,op_havoc,rep_6 new file mode 100644 index 00000000000..e012029af6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006004,src_002172,time_4084626,execs_3842565,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006005,src_001721,time_4086805,execs_3847365,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006005,src_001721,time_4086805,execs_3847365,op_havoc,rep_1 new file mode 100644 index 00000000000..c9196fd6d72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006005,src_001721,time_4086805,execs_3847365,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006006,src_005440,time_4094205,execs_3855398,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006006,src_005440,time_4094205,execs_3855398,op_havoc,rep_1 new file mode 100644 index 00000000000..5dc7fe3d040 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006006,src_005440,time_4094205,execs_3855398,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006007,src_004203,time_4140854,execs_3870060,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006007,src_004203,time_4140854,execs_3870060,op_havoc,rep_2 new file mode 100644 index 00000000000..876577ac903 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006007,src_004203,time_4140854,execs_3870060,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006008,src_005216,time_4142394,execs_3873313,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006008,src_005216,time_4142394,execs_3873313,op_havoc,rep_6 new file mode 100644 index 00000000000..0931bfc61c4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006008,src_005216,time_4142394,execs_3873313,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006009,src_005216,time_4142471,execs_3873328,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006009,src_005216,time_4142471,execs_3873328,op_havoc,rep_7 new file mode 100644 index 00000000000..70208b457b7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006009,src_005216,time_4142471,execs_3873328,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006010,src_005216,time_4142740,execs_3873386,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006010,src_005216,time_4142740,execs_3873386,op_havoc,rep_8 new file mode 100644 index 00000000000..310446d500c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006010,src_005216,time_4142740,execs_3873386,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006011,src_005216,time_4143764,execs_3873578,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006011,src_005216,time_4143764,execs_3873578,op_havoc,rep_8 new file mode 100644 index 00000000000..0de24c65f98 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006011,src_005216,time_4143764,execs_3873578,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006013,src_005216,time_4152664,execs_3874878,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006013,src_005216,time_4152664,execs_3874878,op_havoc,rep_7 new file mode 100644 index 00000000000..cdcf91b67b5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006013,src_005216,time_4152664,execs_3874878,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006014,src_005216,time_4157660,execs_3875910,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006014,src_005216,time_4157660,execs_3875910,op_havoc,rep_4 new file mode 100644 index 00000000000..cc17e458ed9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006014,src_005216,time_4157660,execs_3875910,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006015,src_005216,time_4162335,execs_3876824,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006015,src_005216,time_4162335,execs_3876824,op_havoc,rep_2 new file mode 100644 index 00000000000..d597496d1e9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006015,src_005216,time_4162335,execs_3876824,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006016,src_005216,time_4165088,execs_3877141,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006016,src_005216,time_4165088,execs_3877141,op_havoc,rep_6 new file mode 100644 index 00000000000..65c387501f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006016,src_005216,time_4165088,execs_3877141,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006017,src_005216,time_4173115,execs_3878748,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006017,src_005216,time_4173115,execs_3878748,op_havoc,rep_4 new file mode 100644 index 00000000000..35dcbbf53a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006017,src_005216,time_4173115,execs_3878748,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006018,src_005216,time_5071007,execs_3881199,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006018,src_005216,time_5071007,execs_3881199,op_havoc,rep_6 new file mode 100644 index 00000000000..ae40b60cae7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006018,src_005216,time_5071007,execs_3881199,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006019,src_005216,time_5077644,execs_3882332,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006019,src_005216,time_5077644,execs_3882332,op_havoc,rep_4 new file mode 100644 index 00000000000..6b43ad25916 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006019,src_005216,time_5077644,execs_3882332,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006020,src_004267,time_5097699,execs_3892255,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006020,src_004267,time_5097699,execs_3892255,op_havoc,rep_1 new file mode 100644 index 00000000000..b4e204464ff --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006020,src_004267,time_5097699,execs_3892255,op_havoc,rep_1 @@ -0,0 +1 @@ +***heKhD5]9;4;2]66;6¢¢¢¢¢¢Š¢¢l::::::::::::::::::::::::::::::::5:200m]9;4;20ù[KhD5]9;4;0ù[ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006021,src_005518,time_5099869,execs_3895453,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006021,src_005518,time_5099869,execs_3895453,op_havoc,rep_2 new file mode 100644 index 00000000000..5ef3eabec5a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006021,src_005518,time_5099869,execs_3895453,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006022,src_002371,time_5102935,execs_3902446,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006022,src_002371,time_5102935,execs_3902446,op_havoc,rep_7 new file mode 100644 index 00000000000..76a00a092b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006022,src_002371,time_5102935,execs_3902446,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006024,src_005489,time_5104654,execs_3908721,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006024,src_005489,time_5104654,execs_3908721,op_havoc,rep_1 new file mode 100644 index 00000000000..387db7ea9f0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006024,src_005489,time_5104654,execs_3908721,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006025,src_005490,time_5106760,execs_3913642,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006025,src_005490,time_5106760,execs_3913642,op_havoc,rep_2 new file mode 100644 index 00000000000..3a89443675f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006025,src_005490,time_5106760,execs_3913642,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006028,src_005490,time_5106894,execs_3913875,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006028,src_005490,time_5106894,execs_3913875,op_havoc,rep_2 new file mode 100644 index 00000000000..ff83795a2b2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006028,src_005490,time_5106894,execs_3913875,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006029,src_005490,time_5106980,execs_3914165,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006029,src_005490,time_5106980,execs_3914165,op_havoc,rep_2 new file mode 100644 index 00000000000..831beb8cf1c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006029,src_005490,time_5106980,execs_3914165,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006031,src_005490,time_5108156,execs_3916804,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006031,src_005490,time_5108156,execs_3916804,op_havoc,rep_2 new file mode 100644 index 00000000000..9f2a813ff34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006031,src_005490,time_5108156,execs_3916804,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006032,src_005490,time_5108649,execs_3918298,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006032,src_005490,time_5108649,execs_3918298,op_havoc,rep_2 new file mode 100644 index 00000000000..3cfaf7cd5ec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006032,src_005490,time_5108649,execs_3918298,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006034,src_005490,time_5108927,execs_3919144,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006034,src_005490,time_5108927,execs_3919144,op_havoc,rep_2 new file mode 100644 index 00000000000..050caca8de0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006034,src_005490,time_5108927,execs_3919144,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006035,src_005490,time_5109643,execs_3921279,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006035,src_005490,time_5109643,execs_3921279,op_havoc,rep_1 new file mode 100644 index 00000000000..b761a91dd89 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006035,src_005490,time_5109643,execs_3921279,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006036,src_004798,time_5112244,execs_3924263,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006036,src_004798,time_5112244,execs_3924263,op_havoc,rep_6 new file mode 100644 index 00000000000..b8e6e2aed99 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006036,src_004798,time_5112244,execs_3924263,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006037,src_000535,time_5117151,execs_3930428,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006037,src_000535,time_5117151,execs_3930428,op_havoc,rep_8 new file mode 100644 index 00000000000..d412a4a7c70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006037,src_000535,time_5117151,execs_3930428,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006038,src_002848,time_5117715,execs_3932854,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006038,src_002848,time_5117715,execs_3932854,op_havoc,rep_7 new file mode 100644 index 00000000000..e032e471cb1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006038,src_002848,time_5117715,execs_3932854,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006039,src_003214,time_5117965,execs_3934382,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006039,src_003214,time_5117965,execs_3934382,op_havoc,rep_1 new file mode 100644 index 00000000000..5e2d973cd70 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006039,src_003214,time_5117965,execs_3934382,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006040,src_001133,time_5120665,execs_3946950,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006040,src_001133,time_5120665,execs_3946950,op_havoc,rep_6 new file mode 100644 index 00000000000..a6a173463b4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006040,src_001133,time_5120665,execs_3946950,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006041,src_001133,time_5120714,execs_3947238,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006041,src_001133,time_5120714,execs_3947238,op_havoc,rep_7 new file mode 100644 index 00000000000..ede7249c92a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006041,src_001133,time_5120714,execs_3947238,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006042,src_001572,time_5120935,execs_3948276,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006042,src_001572,time_5120935,execs_3948276,op_havoc,rep_3 new file mode 100644 index 00000000000..c0b3b6ad806 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006042,src_001572,time_5120935,execs_3948276,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006043,src_005835,time_5121972,execs_3949316,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_006043,src_005835,time_5121972,execs_3949316,op_havoc,rep_11 new file mode 100644 index 00000000000..10c34dfe137 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006043,src_005835,time_5121972,execs_3949316,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006044,src_004592,time_5122086,execs_3950001,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006044,src_004592,time_5122086,execs_3950001,op_havoc,rep_1 new file mode 100644 index 00000000000..3206459d705 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006044,src_004592,time_5122086,execs_3950001,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006045,src_004592,time_5122216,execs_3950928,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006045,src_004592,time_5122216,execs_3950928,op_havoc,rep_2 new file mode 100644 index 00000000000..347c146eb76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006045,src_004592,time_5122216,execs_3950928,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006046,src_005062,time_5123081,execs_3952592,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006046,src_005062,time_5123081,execs_3952592,op_havoc,rep_2 new file mode 100644 index 00000000000..fdd8850824d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006046,src_005062,time_5123081,execs_3952592,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006047,src_005916,time_5124058,execs_3953720,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006047,src_005916,time_5124058,execs_3953720,op_havoc,rep_2 new file mode 100644 index 00000000000..3cf278d1d91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006047,src_005916,time_5124058,execs_3953720,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006048,src_003553,time_5125248,execs_3956423,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006048,src_003553,time_5125248,execs_3956423,op_havoc,rep_2 new file mode 100644 index 00000000000..37eae3d375d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006048,src_003553,time_5125248,execs_3956423,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006049,src_005979,time_5126048,execs_3958696,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006049,src_005979,time_5126048,execs_3958696,op_havoc,rep_2 new file mode 100644 index 00000000000..9e4bd529577 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006049,src_005979,time_5126048,execs_3958696,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006051,src_001753,time_5133860,execs_3966747,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006051,src_001753,time_5133860,execs_3966747,op_havoc,rep_6 new file mode 100644 index 00000000000..fb4cc0eca2e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006051,src_001753,time_5133860,execs_3966747,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006052,src_000629,time_5135352,execs_3974873,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006052,src_000629,time_5135352,execs_3974873,op_havoc,rep_5 new file mode 100644 index 00000000000..771a7fc8237 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006052,src_000629,time_5135352,execs_3974873,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006053,src_004500,time_5139005,execs_3989096,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006053,src_004500,time_5139005,execs_3989096,op_havoc,rep_7 new file mode 100644 index 00000000000..b32419883dc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006053,src_004500,time_5139005,execs_3989096,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006054,src_005474,time_5139656,execs_3991473,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006054,src_005474,time_5139656,execs_3991473,op_havoc,rep_3 new file mode 100644 index 00000000000..fada445833d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006054,src_005474,time_5139656,execs_3991473,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006055,src_004212,time_5140084,execs_3994202,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006055,src_004212,time_5140084,execs_3994202,op_havoc,rep_4 new file mode 100644 index 00000000000..f86bfe8c73f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006055,src_004212,time_5140084,execs_3994202,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006056,src_003818,time_5141165,execs_3999378,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006056,src_003818,time_5141165,execs_3999378,op_havoc,rep_2 new file mode 100644 index 00000000000..fff9b0cc27b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006056,src_003818,time_5141165,execs_3999378,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006057,src_003968,time_5147196,execs_4010749,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006057,src_003968,time_5147196,execs_4010749,op_havoc,rep_5 new file mode 100644 index 00000000000..869898f35bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006057,src_003968,time_5147196,execs_4010749,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006058,src_005968,time_5147601,execs_4012666,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006058,src_005968,time_5147601,execs_4012666,op_havoc,rep_1 new file mode 100644 index 00000000000..38b613ac136 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006058,src_005968,time_5147601,execs_4012666,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006059,src_005968,time_5147779,execs_4012861,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006059,src_005968,time_5147779,execs_4012861,op_havoc,rep_1 new file mode 100644 index 00000000000..29f444f0f83 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006059,src_005968,time_5147779,execs_4012861,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006060,src_002663,time_5152030,execs_4017943,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006060,src_002663,time_5152030,execs_4017943,op_havoc,rep_7 new file mode 100644 index 00000000000..f8d54785b56 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006060,src_002663,time_5152030,execs_4017943,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006061,src_005604,time_5154311,execs_4023043,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_006061,src_005604,time_5154311,execs_4023043,op_havoc,rep_15 new file mode 100644 index 00000000000..5f07d97e527 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006061,src_005604,time_5154311,execs_4023043,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006062,src_001350,time_5155874,execs_4027170,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006062,src_001350,time_5155874,execs_4027170,op_havoc,rep_2 new file mode 100644 index 00000000000..6c20935509f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006062,src_001350,time_5155874,execs_4027170,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006063,src_002509,time_5156089,execs_4027802,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006063,src_002509,time_5156089,execs_4027802,op_havoc,rep_7 new file mode 100644 index 00000000000..80f3f8ec91b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006063,src_002509,time_5156089,execs_4027802,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006064,src_005541,time_5163449,execs_4033265,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006064,src_005541,time_5163449,execs_4033265,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..70f185cdc76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006064,src_005541,time_5163449,execs_4033265,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006065,src_006064,time_5163817,execs_4035337,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006065,src_006064,time_5163817,execs_4035337,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..75df5feb7cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006065,src_006064,time_5163817,execs_4035337,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006066,src_006064,time_5163844,execs_4035509,op_havoc,rep_5,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006066,src_006064,time_5163844,execs_4035509,op_havoc,rep_5,+cov new file mode 100644 index 00000000000..d558058701f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006066,src_006064,time_5163844,execs_4035509,op_havoc,rep_5,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006067,src_003554,time_5166835,execs_4040373,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006067,src_003554,time_5166835,execs_4040373,op_havoc,rep_1 new file mode 100644 index 00000000000..7f06a00846f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006067,src_003554,time_5166835,execs_4040373,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006068,src_003554,time_5166861,execs_4040558,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006068,src_003554,time_5166861,execs_4040558,op_havoc,rep_2 new file mode 100644 index 00000000000..fdcacad837f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006068,src_003554,time_5166861,execs_4040558,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006069,src_005530,time_5167360,execs_4043990,op_havoc,rep_10,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006069,src_005530,time_5167360,execs_4043990,op_havoc,rep_10,+cov new file mode 100644 index 00000000000..14a73730bc6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006069,src_005530,time_5167360,execs_4043990,op_havoc,rep_10,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006070,src_005530,time_5167365,execs_4044015,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_006070,src_005530,time_5167365,execs_4044015,op_havoc,rep_9 new file mode 100644 index 00000000000..ad7dda469fb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006070,src_005530,time_5167365,execs_4044015,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006071,src_005530,time_5167834,execs_4046317,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_006071,src_005530,time_5167834,execs_4046317,op_havoc,rep_10 new file mode 100644 index 00000000000..c3bdf21e155 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006071,src_005530,time_5167834,execs_4046317,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006072,src_005530,time_5168337,execs_4047655,op_havoc,rep_16,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006072,src_005530,time_5168337,execs_4047655,op_havoc,rep_16,+cov new file mode 100644 index 00000000000..1f5146ded7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006072,src_005530,time_5168337,execs_4047655,op_havoc,rep_16,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006073,src_005530,time_5168985,execs_4050748,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_006073,src_005530,time_5168985,execs_4050748,op_havoc,rep_15 new file mode 100644 index 00000000000..792ddf6196c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006073,src_005530,time_5168985,execs_4050748,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006074,src_006072,time_5169114,execs_4051462,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006074,src_006072,time_5169114,execs_4051462,op_havoc,rep_4 new file mode 100644 index 00000000000..d49595bc603 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006074,src_006072,time_5169114,execs_4051462,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006075,src_003280,time_5170199,execs_4054552,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006075,src_003280,time_5170199,execs_4054552,op_havoc,rep_8 new file mode 100644 index 00000000000..0ce9f0b39c6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006075,src_003280,time_5170199,execs_4054552,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006076,src_004281,time_5171300,execs_4061114,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_006076,src_004281,time_5171300,execs_4061114,op_havoc,rep_15 new file mode 100644 index 00000000000..781e5b07f3a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006076,src_004281,time_5171300,execs_4061114,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006077,src_004281,time_5171330,execs_4061234,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_006077,src_004281,time_5171330,execs_4061234,op_havoc,rep_9 new file mode 100644 index 00000000000..ffdf74df666 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006077,src_004281,time_5171330,execs_4061234,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006078,src_004281,time_5171544,execs_4062154,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006078,src_004281,time_5171544,execs_4062154,op_havoc,rep_6 new file mode 100644 index 00000000000..49757d603b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006078,src_004281,time_5171544,execs_4062154,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006079,src_005134,time_5172046,execs_4064544,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006079,src_005134,time_5172046,execs_4064544,op_havoc,rep_5 new file mode 100644 index 00000000000..46e0ae07e8d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006079,src_005134,time_5172046,execs_4064544,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006080,src_005134,time_5172051,execs_4064574,op_havoc,rep_14 b/test/fuzz-libghostty/corpus/stream-cmin/id_006080,src_005134,time_5172051,execs_4064574,op_havoc,rep_14 new file mode 100644 index 00000000000..6ed3aa7dbf4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006080,src_005134,time_5172051,execs_4064574,op_havoc,rep_14 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006081,src_004427,time_5173135,execs_4071044,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006081,src_004427,time_5173135,execs_4071044,op_havoc,rep_4 new file mode 100644 index 00000000000..52d83457fc8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006081,src_004427,time_5173135,execs_4071044,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006082,src_003059,time_5173337,execs_4072389,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006082,src_003059,time_5173337,execs_4072389,op_havoc,rep_2 new file mode 100644 index 00000000000..b825899fac6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006082,src_003059,time_5173337,execs_4072389,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006083,src_003472,time_5173478,execs_4073326,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_006083,src_003472,time_5173478,execs_4073326,op_havoc,rep_15 new file mode 100644 index 00000000000..4513753cd2c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006083,src_003472,time_5173478,execs_4073326,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006084,src_001917,time_5175080,execs_4077363,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006084,src_001917,time_5175080,execs_4077363,op_havoc,rep_4 new file mode 100644 index 00000000000..77fc5a6cd86 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006084,src_001917,time_5175080,execs_4077363,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006085,src_006039,time_5181870,execs_4082630,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006085,src_006039,time_5181870,execs_4082630,op_havoc,rep_8 new file mode 100644 index 00000000000..d682c0a97bd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006085,src_006039,time_5181870,execs_4082630,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006087,src_003147,time_5185502,execs_4091437,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006087,src_003147,time_5185502,execs_4091437,op_havoc,rep_4 new file mode 100644 index 00000000000..77866ae29bf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006087,src_003147,time_5185502,execs_4091437,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006088,src_003086,time_5185900,execs_4093938,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006088,src_003086,time_5185900,execs_4093938,op_havoc,rep_7 new file mode 100644 index 00000000000..ccba3fc3310 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006088,src_003086,time_5185900,execs_4093938,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006089,src_003737,time_5188787,execs_4106952,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006089,src_003737,time_5188787,execs_4106952,op_havoc,rep_4 new file mode 100644 index 00000000000..1303a2fa6a2 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006089,src_003737,time_5188787,execs_4106952,op_havoc,rep_4 @@ -0,0 +1 @@ +Woĵþµþ#90]8o]]#]#9]#90]8o]]6]#90î ]66]#90]8o]]]6]#90î ]66]]”]#9ð66]#90]80;=8o] JLH90î ]66]#90]8o]]]6]#90îli J]#] ]]#90J]#] ]]#90]]]]]]]]]]]]]loĵ´ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006090,src_004706,time_5194379,execs_4112160,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006090,src_004706,time_5194379,execs_4112160,op_havoc,rep_2 new file mode 100644 index 00000000000..08c8314de09 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006090,src_004706,time_5194379,execs_4112160,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006091,src_004319,time_5196546,execs_4118853,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_006091,src_004319,time_5196546,execs_4118853,op_havoc,rep_9 new file mode 100644 index 00000000000..b259e77ab9f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006091,src_004319,time_5196546,execs_4118853,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006092,src_005510,time_5196774,execs_4120183,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006092,src_005510,time_5196774,execs_4120183,op_havoc,rep_5 new file mode 100644 index 00000000000..d7e73ed5102 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006092,src_005510,time_5196774,execs_4120183,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006093,src_005936,time_5199828,execs_4128469,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006093,src_005936,time_5199828,execs_4128469,op_havoc,rep_2 new file mode 100644 index 00000000000..df238fa3003 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006093,src_005936,time_5199828,execs_4128469,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006094,src_000721,time_5200024,execs_4129878,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006094,src_000721,time_5200024,execs_4129878,op_havoc,rep_1 new file mode 100644 index 00000000000..108381984f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006094,src_000721,time_5200024,execs_4129878,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006095,src_002399,time_5206294,execs_4134370,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006095,src_002399,time_5206294,execs_4134370,op_havoc,rep_1 new file mode 100644 index 00000000000..578818c2588 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006095,src_002399,time_5206294,execs_4134370,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006096,src_000861,time_5206548,execs_4134907,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006096,src_000861,time_5206548,execs_4134907,op_havoc,rep_1 new file mode 100644 index 00000000000..450e78321a4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006096,src_000861,time_5206548,execs_4134907,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006097,src_004949,time_5207444,execs_4136637,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006097,src_004949,time_5207444,execs_4136637,op_havoc,rep_4 new file mode 100644 index 00000000000..1e3b67a2824 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006097,src_004949,time_5207444,execs_4136637,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006099,src_005987,time_5208542,execs_4137180,op_havoc,rep_13 b/test/fuzz-libghostty/corpus/stream-cmin/id_006099,src_005987,time_5208542,execs_4137180,op_havoc,rep_13 new file mode 100644 index 00000000000..ad0461fb108 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006099,src_005987,time_5208542,execs_4137180,op_havoc,rep_13 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006100,src_005987,time_5208622,execs_4137521,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006100,src_005987,time_5208622,execs_4137521,op_havoc,rep_12 new file mode 100644 index 00000000000..4f0cfba68de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006100,src_005987,time_5208622,execs_4137521,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006101,src_005987,time_5209361,execs_4140458,op_havoc,rep_8,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006101,src_005987,time_5209361,execs_4140458,op_havoc,rep_8,+cov new file mode 100644 index 00000000000..5590d28a147 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006101,src_005987,time_5209361,execs_4140458,op_havoc,rep_8,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006102,src_001565,time_5213242,execs_4145383,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006102,src_001565,time_5213242,execs_4145383,op_havoc,rep_3 new file mode 100644 index 00000000000..cc7600fddeb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006102,src_001565,time_5213242,execs_4145383,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006103,src_001565,time_5213355,execs_4145552,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006103,src_001565,time_5213355,execs_4145552,op_havoc,rep_8 new file mode 100644 index 00000000000..5d7d79044c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006103,src_001565,time_5213355,execs_4145552,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006104,src_005013,time_5215782,execs_4149163,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006104,src_005013,time_5215782,execs_4149163,op_havoc,rep_2 new file mode 100644 index 00000000000..85d8b2be1f6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006104,src_005013,time_5215782,execs_4149163,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006105,src_003417,time_5217327,execs_4151282,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006105,src_003417,time_5217327,execs_4151282,op_havoc,rep_12 new file mode 100644 index 00000000000..d1333fe8da6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006105,src_003417,time_5217327,execs_4151282,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006106,src_003481,time_5225046,execs_4169898,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006106,src_003481,time_5225046,execs_4169898,op_havoc,rep_7 new file mode 100644 index 00000000000..108e3edec6a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006106,src_003481,time_5225046,execs_4169898,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006108,src_003447,time_5231973,execs_4181973,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006108,src_003447,time_5231973,execs_4181973,op_havoc,rep_12 new file mode 100644 index 00000000000..8e2519a576c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006108,src_003447,time_5231973,execs_4181973,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006109,src_006064,time_5232329,execs_4183060,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006109,src_006064,time_5232329,execs_4183060,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..b4c26d8306d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006109,src_006064,time_5232329,execs_4183060,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006110,src_006064,time_5232411,execs_4183535,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006110,src_006064,time_5232411,execs_4183535,op_havoc,rep_1 new file mode 100644 index 00000000000..3b332a53f72 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006110,src_006064,time_5232411,execs_4183535,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006111,src_006064,time_5232678,execs_4184966,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006111,src_006064,time_5232678,execs_4184966,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..dddb8d605ae Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006111,src_006064,time_5232678,execs_4184966,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006112,src_006064,time_5232949,execs_4186679,op_havoc,rep_2,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006112,src_006064,time_5232949,execs_4186679,op_havoc,rep_2,+cov new file mode 100644 index 00000000000..89a49c7ce83 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006112,src_006064,time_5232949,execs_4186679,op_havoc,rep_2,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006113,src_006064,time_5233007,execs_4187045,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006113,src_006064,time_5233007,execs_4187045,op_havoc,rep_3 new file mode 100644 index 00000000000..dd8b630f9a0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006113,src_006064,time_5233007,execs_4187045,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006114,src_005347,time_5239039,execs_4196135,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006114,src_005347,time_5239039,execs_4196135,op_havoc,rep_8 new file mode 100644 index 00000000000..bc34547ffa8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006114,src_005347,time_5239039,execs_4196135,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006115,src_005347,time_5239121,execs_4196459,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006115,src_005347,time_5239121,execs_4196459,op_havoc,rep_7 new file mode 100644 index 00000000000..4a4aacaab7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006115,src_005347,time_5239121,execs_4196459,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006116,src_005140,time_5241022,execs_4202859,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006116,src_005140,time_5241022,execs_4202859,op_havoc,rep_4 new file mode 100644 index 00000000000..8f4b0117cd3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006116,src_005140,time_5241022,execs_4202859,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006117,src_005196,time_5242026,execs_4206112,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006117,src_005196,time_5242026,execs_4206112,op_havoc,rep_7 new file mode 100644 index 00000000000..d04115c6ac3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006117,src_005196,time_5242026,execs_4206112,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006118,src_004421,time_5243340,execs_4208870,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006118,src_004421,time_5243340,execs_4208870,op_havoc,rep_1 new file mode 100644 index 00000000000..6ef9653fe8c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006118,src_004421,time_5243340,execs_4208870,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006119,src_003605,time_5243532,execs_4210238,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006119,src_003605,time_5243532,execs_4210238,op_havoc,rep_4 new file mode 100644 index 00000000000..94ffe3b8316 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006119,src_003605,time_5243532,execs_4210238,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006120,src_004203,time_5244112,execs_4213065,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006120,src_004203,time_5244112,execs_4213065,op_havoc,rep_5 new file mode 100644 index 00000000000..11feef13b6b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006120,src_004203,time_5244112,execs_4213065,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006121,src_005149,time_5244919,execs_4216044,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006121,src_005149,time_5244919,execs_4216044,op_havoc,rep_3 new file mode 100644 index 00000000000..3b970559155 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006121,src_005149,time_5244919,execs_4216044,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006122,src_005149,time_5244921,execs_4216053,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006122,src_005149,time_5244921,execs_4216053,op_havoc,rep_3 new file mode 100644 index 00000000000..45974cd8e3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006122,src_005149,time_5244921,execs_4216053,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006123,src_005149,time_5245242,execs_4217728,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_006123,src_005149,time_5245242,execs_4217728,op_havoc,rep_16 new file mode 100644 index 00000000000..36af7277b67 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006123,src_005149,time_5245242,execs_4217728,op_havoc,rep_16 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006124,src_005149,time_5245485,execs_4219033,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_006124,src_005149,time_5245485,execs_4219033,op_havoc,rep_9 new file mode 100644 index 00000000000..01739ec0831 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006124,src_005149,time_5245485,execs_4219033,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006125,src_002812,time_5247748,execs_4226692,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006125,src_002812,time_5247748,execs_4226692,op_havoc,rep_6 new file mode 100644 index 00000000000..b493c63c3e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006125,src_002812,time_5247748,execs_4226692,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006126,src_004535,time_5248105,execs_4228002,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006126,src_004535,time_5248105,execs_4228002,op_havoc,rep_5 new file mode 100644 index 00000000000..dfd6afffd11 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006126,src_004535,time_5248105,execs_4228002,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006127,src_002460,time_5248490,execs_4230650,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006127,src_002460,time_5248490,execs_4230650,op_havoc,rep_1 new file mode 100644 index 00000000000..e3122af8198 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006127,src_002460,time_5248490,execs_4230650,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006128,src_004319,time_5248732,execs_4232214,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006128,src_004319,time_5248732,execs_4232214,op_havoc,rep_2 new file mode 100644 index 00000000000..80377338cee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006128,src_004319,time_5248732,execs_4232214,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006129,src_006069,time_5446891,execs_4233584,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006129,src_006069,time_5446891,execs_4233584,op_havoc,rep_4 new file mode 100644 index 00000000000..d9a277091e5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006129,src_006069,time_5446891,execs_4233584,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006130,src_006082,time_5447976,execs_4236677,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006130,src_006082,time_5447976,execs_4236677,op_havoc,rep_2 new file mode 100644 index 00000000000..204c2e21bb6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006130,src_006082,time_5447976,execs_4236677,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006131,src_001357,time_5448157,execs_4237573,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006131,src_001357,time_5448157,execs_4237573,op_havoc,rep_5 new file mode 100644 index 00000000000..ac7c091a69e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006131,src_001357,time_5448157,execs_4237573,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006132,src_001357,time_5448235,execs_4238058,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006132,src_001357,time_5448235,execs_4238058,op_havoc,rep_7 new file mode 100644 index 00000000000..d5e7c9acb26 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006132,src_001357,time_5448235,execs_4238058,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006133,src_003906,time_5448587,execs_4240312,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006133,src_003906,time_5448587,execs_4240312,op_havoc,rep_1 new file mode 100644 index 00000000000..948ed9d3839 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006133,src_003906,time_5448587,execs_4240312,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006135,src_003411,time_5449009,execs_4242852,op_havoc,rep_11 b/test/fuzz-libghostty/corpus/stream-cmin/id_006135,src_003411,time_5449009,execs_4242852,op_havoc,rep_11 new file mode 100644 index 00000000000..76fa4888d30 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006135,src_003411,time_5449009,execs_4242852,op_havoc,rep_11 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006136,src_003340,time_5449704,execs_4246764,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006136,src_003340,time_5449704,execs_4246764,op_havoc,rep_6 new file mode 100644 index 00000000000..0a55e238ca0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006136,src_003340,time_5449704,execs_4246764,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006137,src_004462,time_5454225,execs_4258213,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006137,src_004462,time_5454225,execs_4258213,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..7c50add3c48 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006137,src_004462,time_5454225,execs_4258213,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006138,src_004462,time_5454233,execs_4258253,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006138,src_004462,time_5454233,execs_4258253,op_havoc,rep_3 new file mode 100644 index 00000000000..e3a54a3711b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006138,src_004462,time_5454233,execs_4258253,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006139,src_004822,time_5454836,execs_4261457,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006139,src_004822,time_5454836,execs_4261457,op_havoc,rep_1 new file mode 100644 index 00000000000..3030c3feac2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006139,src_004822,time_5454836,execs_4261457,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006140,src_005824,time_5458976,execs_4268654,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006140,src_005824,time_5458976,execs_4268654,op_havoc,rep_6 new file mode 100644 index 00000000000..34426e0df93 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006140,src_005824,time_5458976,execs_4268654,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006141,src_005797,time_5462973,execs_4269618,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006141,src_005797,time_5462973,execs_4269618,op_havoc,rep_3 new file mode 100644 index 00000000000..0002654576d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006141,src_005797,time_5462973,execs_4269618,op_havoc,rep_3 @@ -0,0 +1 @@ +//tW5;¸¸¸¸/tW5;¸¸­ €)ÌA!¸¸®­ €)ÌA! )ÌA! €)ÌA! €)ÌA! »)Ì)ÌA! »)ÌB­ )ÌA! €)€)B­ €)ÌA! €)ÌA! €A)ÌA »ÌA! €)B­ÌA! €)ÌA! »)Ì)ÌA! ») €)€)ÌA! €)ÌA! €)ÌA! »ÌA! €)ÌA! €)ÌA! »)ÌB \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006142,src_002034,time_5464038,execs_4274523,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006142,src_002034,time_5464038,execs_4274523,op_havoc,rep_2 new file mode 100644 index 00000000000..d25b80cdd79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006142,src_002034,time_5464038,execs_4274523,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006143,src_000320,time_5465503,execs_4278546,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006143,src_000320,time_5465503,execs_4278546,op_havoc,rep_8 new file mode 100644 index 00000000000..db5d2864236 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006143,src_000320,time_5465503,execs_4278546,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006144,src_003409,time_5465638,execs_4279355,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006144,src_003409,time_5465638,execs_4279355,op_havoc,rep_8 new file mode 100644 index 00000000000..2694db3b1bb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006144,src_003409,time_5465638,execs_4279355,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006145,src_003409,time_5465641,execs_4279371,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006145,src_003409,time_5465641,execs_4279371,op_havoc,rep_6 new file mode 100644 index 00000000000..787b0ab446a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006145,src_003409,time_5465641,execs_4279371,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006146,src_004563,time_5467831,execs_4287180,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006146,src_004563,time_5467831,execs_4287180,op_havoc,rep_2 new file mode 100644 index 00000000000..e5c96c625c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006146,src_004563,time_5467831,execs_4287180,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006147,src_002135,time_5472544,execs_4298269,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006147,src_002135,time_5472544,execs_4298269,op_havoc,rep_2 new file mode 100644 index 00000000000..0b04c328012 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006147,src_002135,time_5472544,execs_4298269,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006148,src_004078,time_5472759,execs_4299718,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006148,src_004078,time_5472759,execs_4299718,op_havoc,rep_1 new file mode 100644 index 00000000000..32808b75235 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006148,src_004078,time_5472759,execs_4299718,op_havoc,rep_1 @@ -0,0 +1 @@ +0;1ord;3;2;5;6lo,3m[4:m3mo,3m[4:m3m[4:mhm[4:mhell;14ell;14:mhell;14;15;16 \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006149,src_006033,time_5474499,execs_4302411,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006149,src_006033,time_5474499,execs_4302411,op_havoc,rep_7 new file mode 100644 index 00000000000..26d1a4c48ac Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006149,src_006033,time_5474499,execs_4302411,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006150,src_006033,time_5474518,execs_4302424,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006150,src_006033,time_5474518,execs_4302424,op_havoc,rep_3 new file mode 100644 index 00000000000..85dae69b785 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006150,src_006033,time_5474518,execs_4302424,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006154,src_006033,time_5474946,execs_4302719,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006154,src_006033,time_5474946,execs_4302719,op_havoc,rep_7 new file mode 100644 index 00000000000..5bc55bdfaaa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006154,src_006033,time_5474946,execs_4302719,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006155,src_006033,time_5475264,execs_4303044,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006155,src_006033,time_5475264,execs_4303044,op_havoc,rep_7 new file mode 100644 index 00000000000..9c3ad72fadd Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006155,src_006033,time_5475264,execs_4303044,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006156,src_006033,time_5476086,execs_4303475,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006156,src_006033,time_5476086,execs_4303475,op_havoc,rep_2 new file mode 100644 index 00000000000..bc5354f75b0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006156,src_006033,time_5476086,execs_4303475,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006158,src_006033,time_5476733,execs_4304109,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006158,src_006033,time_5476733,execs_4304109,op_havoc,rep_5 new file mode 100644 index 00000000000..208f8ab9d91 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006158,src_006033,time_5476733,execs_4304109,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006159,src_006033,time_5478346,execs_4305269,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006159,src_006033,time_5478346,execs_4305269,op_havoc,rep_6 new file mode 100644 index 00000000000..1e99da42446 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006159,src_006033,time_5478346,execs_4305269,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006160,src_006033,time_5478718,execs_4305530,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006160,src_006033,time_5478718,execs_4305530,op_havoc,rep_5 new file mode 100644 index 00000000000..0a091643120 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006160,src_006033,time_5478718,execs_4305530,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006161,src_006033,time_5479191,execs_4305949,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006161,src_006033,time_5479191,execs_4305949,op_havoc,rep_5 new file mode 100644 index 00000000000..2aaa8196f62 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006161,src_006033,time_5479191,execs_4305949,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006162,src_006033,time_5480930,execs_4307136,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006162,src_006033,time_5480930,execs_4307136,op_havoc,rep_5 new file mode 100644 index 00000000000..c63856f7ad4 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006162,src_006033,time_5480930,execs_4307136,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006163,src_006033,time_5481010,execs_4307216,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006163,src_006033,time_5481010,execs_4307216,op_havoc,rep_7 new file mode 100644 index 00000000000..3a3eca8c94b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006163,src_006033,time_5481010,execs_4307216,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006164,src_006033,time_5481688,execs_4307574,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006164,src_006033,time_5481688,execs_4307574,op_havoc,rep_8 new file mode 100644 index 00000000000..76a60ff52a7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006164,src_006033,time_5481688,execs_4307574,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006165,src_006033,time_5481933,execs_4307806,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006165,src_006033,time_5481933,execs_4307806,op_havoc,rep_4 new file mode 100644 index 00000000000..b6c7ae61e83 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006165,src_006033,time_5481933,execs_4307806,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006166,src_006033,time_5483017,execs_4308666,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006166,src_006033,time_5483017,execs_4308666,op_havoc,rep_7 new file mode 100644 index 00000000000..c02a21f990e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006166,src_006033,time_5483017,execs_4308666,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006167,src_006033,time_5487633,execs_4312094,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006167,src_006033,time_5487633,execs_4312094,op_havoc,rep_7 new file mode 100644 index 00000000000..e4d8c4aa692 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006167,src_006033,time_5487633,execs_4312094,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006169,src_006152,time_5491875,execs_4315493,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006169,src_006152,time_5491875,execs_4315493,op_havoc,rep_1 new file mode 100644 index 00000000000..0e049320b43 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006169,src_006152,time_5491875,execs_4315493,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006171,src_006168,time_5492568,execs_4315783,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006171,src_006168,time_5492568,execs_4315783,op_havoc,rep_3 new file mode 100644 index 00000000000..8dab432ebc3 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006171,src_006168,time_5492568,execs_4315783,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006172,src_006168,time_5492807,execs_4315866,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006172,src_006168,time_5492807,execs_4315866,op_havoc,rep_4 new file mode 100644 index 00000000000..8f43adf6b20 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006172,src_006168,time_5492807,execs_4315866,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006173,src_006168,time_5493024,execs_4315914,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006173,src_006168,time_5493024,execs_4315914,op_havoc,rep_4 new file mode 100644 index 00000000000..50b8818b79f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006173,src_006168,time_5493024,execs_4315914,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006174,src_006168,time_5493063,execs_4315930,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006174,src_006168,time_5493063,execs_4315930,op_havoc,rep_2 new file mode 100644 index 00000000000..8c0416096ed Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006174,src_006168,time_5493063,execs_4315930,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006177,src_006168,time_5597335,execs_4316561,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006177,src_006168,time_5597335,execs_4316561,op_havoc,rep_4 new file mode 100644 index 00000000000..d7af26c925e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006177,src_006168,time_5597335,execs_4316561,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006178,src_006168,time_5597375,execs_4316585,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006178,src_006168,time_5597375,execs_4316585,op_havoc,rep_3 new file mode 100644 index 00000000000..6a4206e6c79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006178,src_006168,time_5597375,execs_4316585,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006179,src_006168,time_5606796,execs_4318643,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006179,src_006168,time_5606796,execs_4318643,op_havoc,rep_2 new file mode 100644 index 00000000000..091477465cb Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006179,src_006168,time_5606796,execs_4318643,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006180,src_006168,time_5607938,execs_4318913,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006180,src_006168,time_5607938,execs_4318913,op_havoc,rep_2 new file mode 100644 index 00000000000..f80d49ce5cc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006180,src_006168,time_5607938,execs_4318913,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006181,src_006168,time_5612221,execs_4319713,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006181,src_006168,time_5612221,execs_4319713,op_havoc,rep_3 new file mode 100644 index 00000000000..fb06e0d9fe8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006181,src_006168,time_5612221,execs_4319713,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006182,src_006168,time_5621963,execs_4322170,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006182,src_006168,time_5621963,execs_4322170,op_havoc,rep_2 new file mode 100644 index 00000000000..3ad842aba47 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006182,src_006168,time_5621963,execs_4322170,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006183,src_006168,time_5635414,execs_4325344,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006183,src_006168,time_5635414,execs_4325344,op_havoc,rep_4 new file mode 100644 index 00000000000..b9e7dc74452 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006183,src_006168,time_5635414,execs_4325344,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006184,src_006168,time_5635945,execs_4325458,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006184,src_006168,time_5635945,execs_4325458,op_havoc,rep_3 new file mode 100644 index 00000000000..53d947f2074 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006184,src_006168,time_5635945,execs_4325458,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006185,src_006169,time_5685724,execs_4328823,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006185,src_006169,time_5685724,execs_4328823,op_havoc,rep_4 new file mode 100644 index 00000000000..9d2e4345a6b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006185,src_006169,time_5685724,execs_4328823,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006186,src_006001,time_5686409,execs_4331747,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006186,src_006001,time_5686409,execs_4331747,op_havoc,rep_6 new file mode 100644 index 00000000000..66d4d4bc902 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006186,src_006001,time_5686409,execs_4331747,op_havoc,rep_6 @@ -0,0 +1 @@ +Â1QŠŠŠ]9;1;ŠŠQŠŠŠ]9;1;ŠŠŠŠŠŠŠ]9;1;ŠŠ[25ŠŠŠŠŠ]9;1;ŠŠT?ŠŠŠŠŠŠ]9;1;ŠŸŠ]9;1;ŠŠŠ]9;1;ŠŠŠŠ9;1;ŠŠŠŠŠŠ{]9;1;ŠŠŠŠŠ]9;1;ŠŠ[ŠŠŠŠŠŠl \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006187,src_001004,time_5687078,execs_4335259,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006187,src_001004,time_5687078,execs_4335259,op_havoc,rep_5 new file mode 100644 index 00000000000..5a51e609e7c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006187,src_001004,time_5687078,execs_4335259,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006188,src_000795,time_5689533,execs_4337027,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006188,src_000795,time_5689533,execs_4337027,op_havoc,rep_1 new file mode 100644 index 00000000000..e9457ab8053 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006188,src_000795,time_5689533,execs_4337027,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006189,src_003367,time_5689651,execs_4337784,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006189,src_003367,time_5689651,execs_4337784,op_havoc,rep_5 new file mode 100644 index 00000000000..af241d07841 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006189,src_003367,time_5689651,execs_4337784,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006191,src_005478,time_5689856,execs_4339122,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006191,src_005478,time_5689856,execs_4339122,op_havoc,rep_2 new file mode 100644 index 00000000000..de5ed94e59f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006191,src_005478,time_5689856,execs_4339122,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006192,src_005478,time_5690192,execs_4341632,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006192,src_005478,time_5690192,execs_4341632,op_havoc,rep_2 new file mode 100644 index 00000000000..abccf97f01f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006192,src_005478,time_5690192,execs_4341632,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006193,src_003797,time_5693325,execs_4350679,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006193,src_003797,time_5693325,execs_4350679,op_havoc,rep_2 new file mode 100644 index 00000000000..a77953f715b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006193,src_003797,time_5693325,execs_4350679,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006194,src_005786,time_5694563,execs_4353390,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006194,src_005786,time_5694563,execs_4353390,op_havoc,rep_2 new file mode 100644 index 00000000000..cb7e2f0b4b1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006194,src_005786,time_5694563,execs_4353390,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006195,src_003488,time_5695003,execs_4356145,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006195,src_003488,time_5695003,execs_4356145,op_havoc,rep_12 new file mode 100644 index 00000000000..97daecc8c0f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006195,src_003488,time_5695003,execs_4356145,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006196,src_003488,time_5695112,execs_4356812,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006196,src_003488,time_5695112,execs_4356812,op_havoc,rep_4 new file mode 100644 index 00000000000..a3ec719e706 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006196,src_003488,time_5695112,execs_4356812,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006197,src_002865,time_5701168,execs_4364165,op_havoc,rep_10 b/test/fuzz-libghostty/corpus/stream-cmin/id_006197,src_002865,time_5701168,execs_4364165,op_havoc,rep_10 new file mode 100644 index 00000000000..c5453202cce Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006197,src_002865,time_5701168,execs_4364165,op_havoc,rep_10 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006198,src_005927,time_5701402,execs_4364902,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006198,src_005927,time_5701402,execs_4364902,op_havoc,rep_4 new file mode 100644 index 00000000000..10d6ea141f8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006198,src_005927,time_5701402,execs_4364902,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006199,src_005927,time_5701468,execs_4365074,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006199,src_005927,time_5701468,execs_4365074,op_havoc,rep_4 new file mode 100644 index 00000000000..b0e3baeaaec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006199,src_005927,time_5701468,execs_4365074,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006200,src_000911,time_5702001,execs_4366647,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006200,src_000911,time_5702001,execs_4366647,op_havoc,rep_7 new file mode 100644 index 00000000000..302f4c41442 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006200,src_000911,time_5702001,execs_4366647,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006201,src_001377,time_5704311,execs_4373518,op_havoc,rep_16 b/test/fuzz-libghostty/corpus/stream-cmin/id_006201,src_001377,time_5704311,execs_4373518,op_havoc,rep_16 new file mode 100644 index 00000000000..d170eed769d --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-cmin/id_006201,src_001377,time_5704311,execs_4373518,op_havoc,rep_16 @@ -0,0 +1 @@ +ldo#90]8WWWllĵ,ÿÿ ;#908 ;,90lĵ,WWWl;#908 ;,90lĵ,WWWllĵ,ÿÿÿ€,WWWlpW \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006202,src_006026,time_5706697,execs_4379376,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006202,src_006026,time_5706697,execs_4379376,op_havoc,rep_6 new file mode 100644 index 00000000000..e006f73a034 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006202,src_006026,time_5706697,execs_4379376,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006203,src_003563,time_5708420,execs_4384579,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006203,src_003563,time_5708420,execs_4384579,op_havoc,rep_3 new file mode 100644 index 00000000000..201ce9a0605 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006203,src_003563,time_5708420,execs_4384579,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006204,src_004632,time_5708792,execs_4386814,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006204,src_004632,time_5708792,execs_4386814,op_havoc,rep_12 new file mode 100644 index 00000000000..947eaaadc02 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006204,src_004632,time_5708792,execs_4386814,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006205,src_004943,time_5709374,execs_4389774,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006205,src_004943,time_5709374,execs_4389774,op_havoc,rep_2 new file mode 100644 index 00000000000..cfd7a1f8d51 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006205,src_004943,time_5709374,execs_4389774,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006206,src_004943,time_5709399,execs_4389796,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006206,src_004943,time_5709399,execs_4389796,op_havoc,rep_1 new file mode 100644 index 00000000000..dc369215abe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006206,src_004943,time_5709399,execs_4389796,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006207,src_004943,time_5709475,execs_4389884,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006207,src_004943,time_5709475,execs_4389884,op_havoc,rep_1 new file mode 100644 index 00000000000..d2aad8f5d9a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006207,src_004943,time_5709475,execs_4389884,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006208,src_004943,time_5710223,execs_4390698,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006208,src_004943,time_5710223,execs_4390698,op_havoc,rep_2 new file mode 100644 index 00000000000..051e04329c0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006208,src_004943,time_5710223,execs_4390698,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006209,src_004943,time_5710370,execs_4390740,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006209,src_004943,time_5710370,execs_4390740,op_havoc,rep_4 new file mode 100644 index 00000000000..4c650b8b15c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006209,src_004943,time_5710370,execs_4390740,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006210,src_004943,time_5710599,execs_4390973,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006210,src_004943,time_5710599,execs_4390973,op_havoc,rep_2 new file mode 100644 index 00000000000..702d5c1d9e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006210,src_004943,time_5710599,execs_4390973,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006212,src_005691,time_5721675,execs_4403641,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006212,src_005691,time_5721675,execs_4403641,op_havoc,rep_2 new file mode 100644 index 00000000000..19b6224bde5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006212,src_005691,time_5721675,execs_4403641,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006213,src_005691,time_5721709,execs_4403676,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006213,src_005691,time_5721709,execs_4403676,op_havoc,rep_5 new file mode 100644 index 00000000000..661b3fc1ea6 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006213,src_005691,time_5721709,execs_4403676,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006214,src_005691,time_5722020,execs_4403935,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006214,src_005691,time_5722020,execs_4403935,op_havoc,rep_6 new file mode 100644 index 00000000000..e9fc80b91a2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006214,src_005691,time_5722020,execs_4403935,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006215,src_005691,time_5722088,execs_4404016,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006215,src_005691,time_5722088,execs_4404016,op_havoc,rep_7 new file mode 100644 index 00000000000..e129a5d7e77 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006215,src_005691,time_5722088,execs_4404016,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006216,src_005691,time_5722259,execs_4404176,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006216,src_005691,time_5722259,execs_4404176,op_havoc,rep_3 new file mode 100644 index 00000000000..5c932beb144 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006216,src_005691,time_5722259,execs_4404176,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006217,src_005691,time_5722445,execs_4404320,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006217,src_005691,time_5722445,execs_4404320,op_havoc,rep_7 new file mode 100644 index 00000000000..f13f7483b34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006217,src_005691,time_5722445,execs_4404320,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006218,src_005691,time_5722678,execs_4404576,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006218,src_005691,time_5722678,execs_4404576,op_havoc,rep_8 new file mode 100644 index 00000000000..9f7b4849b23 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006218,src_005691,time_5722678,execs_4404576,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006219,src_005691,time_5723558,execs_4405662,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006219,src_005691,time_5723558,execs_4405662,op_havoc,rep_4 new file mode 100644 index 00000000000..6e1467a525c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006219,src_005691,time_5723558,execs_4405662,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006220,src_005691,time_5723809,execs_4405981,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006220,src_005691,time_5723809,execs_4405981,op_havoc,rep_7 new file mode 100644 index 00000000000..c6e0be436e1 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006220,src_005691,time_5723809,execs_4405981,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006221,src_006123,time_5869932,execs_4420270,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006221,src_006123,time_5869932,execs_4420270,op_havoc,rep_6 new file mode 100644 index 00000000000..d5b88aeb71c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006221,src_006123,time_5869932,execs_4420270,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006222,src_005519,time_5874037,execs_4434757,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006222,src_005519,time_5874037,execs_4434757,op_havoc,rep_4 new file mode 100644 index 00000000000..e20f07b7b3d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006222,src_005519,time_5874037,execs_4434757,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006223,src_006137,time_5880725,execs_4443011,op_havoc,rep_9 b/test/fuzz-libghostty/corpus/stream-cmin/id_006223,src_006137,time_5880725,execs_4443011,op_havoc,rep_9 new file mode 100644 index 00000000000..a60f4785e79 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006223,src_006137,time_5880725,execs_4443011,op_havoc,rep_9 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006224,src_006151,time_5884175,execs_4450413,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006224,src_006151,time_5884175,execs_4450413,op_havoc,rep_5 new file mode 100644 index 00000000000..764716c78e2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006224,src_006151,time_5884175,execs_4450413,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006225,src_005571,time_5887514,execs_4453613,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006225,src_005571,time_5887514,execs_4453613,op_havoc,rep_1 new file mode 100644 index 00000000000..a05192e7288 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006225,src_005571,time_5887514,execs_4453613,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006228,src_005571,time_5888056,execs_4456722,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006228,src_005571,time_5888056,execs_4456722,op_havoc,rep_5 new file mode 100644 index 00000000000..5af9351e69b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006228,src_005571,time_5888056,execs_4456722,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006229,src_005571,time_5888262,execs_4457921,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006229,src_005571,time_5888262,execs_4457921,op_havoc,rep_5 new file mode 100644 index 00000000000..21a0ec85453 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006229,src_005571,time_5888262,execs_4457921,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006230,src_005571,time_5888313,execs_4458246,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006230,src_005571,time_5888313,execs_4458246,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..178deb76307 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006230,src_005571,time_5888313,execs_4458246,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006231,src_003324,time_5889905,execs_4466490,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006231,src_003324,time_5889905,execs_4466490,op_havoc,rep_3 new file mode 100644 index 00000000000..705f0075f5d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006231,src_003324,time_5889905,execs_4466490,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006232,src_006065,time_5891922,execs_4473992,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006232,src_006065,time_5891922,execs_4473992,op_havoc,rep_5 new file mode 100644 index 00000000000..f3d1cec3927 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006232,src_006065,time_5891922,execs_4473992,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006233,src_006065,time_5892119,execs_4475223,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006233,src_006065,time_5892119,execs_4475223,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..1a94033df76 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006233,src_006065,time_5892119,execs_4475223,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006234,src_002340,time_5892586,execs_4477625,op_havoc,rep_3,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006234,src_002340,time_5892586,execs_4477625,op_havoc,rep_3,+cov new file mode 100644 index 00000000000..476c8aad9fa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006234,src_002340,time_5892586,execs_4477625,op_havoc,rep_3,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006237,src_006234,time_5893036,execs_4478112,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006237,src_006234,time_5893036,execs_4478112,op_havoc,rep_1 new file mode 100644 index 00000000000..dafc43aa811 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006237,src_006234,time_5893036,execs_4478112,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006238,src_005815,time_5895187,execs_4480568,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006238,src_005815,time_5895187,execs_4480568,op_havoc,rep_6 new file mode 100644 index 00000000000..2fbf89c01c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006238,src_005815,time_5895187,execs_4480568,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006239,src_005130,time_5897054,execs_4481432,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006239,src_005130,time_5897054,execs_4481432,op_havoc,rep_3 new file mode 100644 index 00000000000..6c5b59b8df7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006239,src_005130,time_5897054,execs_4481432,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006240,src_006201,time_5900966,execs_4492591,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006240,src_006201,time_5900966,execs_4492591,op_havoc,rep_2 new file mode 100644 index 00000000000..b2d66300629 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006240,src_006201,time_5900966,execs_4492591,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006242,src_005570,time_5901365,execs_4495169,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006242,src_005570,time_5901365,execs_4495169,op_havoc,rep_3 new file mode 100644 index 00000000000..a95f09838f7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006242,src_005570,time_5901365,execs_4495169,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006243,src_005570,time_5901385,execs_4495277,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006243,src_005570,time_5901385,execs_4495277,op_havoc,rep_2 new file mode 100644 index 00000000000..1bb50a66a14 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006243,src_005570,time_5901385,execs_4495277,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006244,src_006230,time_5902072,execs_4498492,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006244,src_006230,time_5902072,execs_4498492,op_havoc,rep_2 new file mode 100644 index 00000000000..29fdf363749 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006244,src_006230,time_5902072,execs_4498492,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006245,src_006230,time_5902079,execs_4498532,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006245,src_006230,time_5902079,execs_4498532,op_havoc,rep_1 new file mode 100644 index 00000000000..227a1148cb9 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006245,src_006230,time_5902079,execs_4498532,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006246,src_004506,time_5903220,execs_4504510,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006246,src_004506,time_5903220,execs_4504510,op_havoc,rep_8 new file mode 100644 index 00000000000..4d7b99b161a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006246,src_004506,time_5903220,execs_4504510,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006247,src_006241,time_5906919,execs_4514091,op_havoc,rep_5 b/test/fuzz-libghostty/corpus/stream-cmin/id_006247,src_006241,time_5906919,execs_4514091,op_havoc,rep_5 new file mode 100644 index 00000000000..9af58eb7452 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006247,src_006241,time_5906919,execs_4514091,op_havoc,rep_5 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006248,src_005566,time_5907462,execs_4517217,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006248,src_005566,time_5907462,execs_4517217,op_havoc,rep_1 new file mode 100644 index 00000000000..68560c18cbe Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006248,src_005566,time_5907462,execs_4517217,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006249,src_005566,time_5907552,execs_4517802,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006249,src_005566,time_5907552,execs_4517802,op_havoc,rep_1 new file mode 100644 index 00000000000..b3fe60152c2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006249,src_005566,time_5907552,execs_4517802,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006250,src_004366,time_5907966,execs_4520424,op_havoc,rep_8 b/test/fuzz-libghostty/corpus/stream-cmin/id_006250,src_004366,time_5907966,execs_4520424,op_havoc,rep_8 new file mode 100644 index 00000000000..72b74678a8d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006250,src_004366,time_5907966,execs_4520424,op_havoc,rep_8 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006252,src_004135,time_5908557,execs_4523817,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006252,src_004135,time_5908557,execs_4523817,op_havoc,rep_7 new file mode 100644 index 00000000000..c4e0c08c0e8 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006252,src_004135,time_5908557,execs_4523817,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006253,src_002849,time_5934733,execs_4534673,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006253,src_002849,time_5934733,execs_4534673,op_havoc,rep_7 new file mode 100644 index 00000000000..9b60da5168f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006253,src_002849,time_5934733,execs_4534673,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006254,src_002849,time_5934792,execs_4534981,op_havoc,rep_15 b/test/fuzz-libghostty/corpus/stream-cmin/id_006254,src_002849,time_5934792,execs_4534981,op_havoc,rep_15 new file mode 100644 index 00000000000..fa1a44b8962 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006254,src_002849,time_5934792,execs_4534981,op_havoc,rep_15 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006255,src_003716,time_5937363,execs_4541968,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006255,src_003716,time_5937363,execs_4541968,op_havoc,rep_2 new file mode 100644 index 00000000000..31972651b4b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006255,src_003716,time_5937363,execs_4541968,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006256,src_003716,time_5937444,execs_4542464,op_havoc,rep_15,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006256,src_003716,time_5937444,execs_4542464,op_havoc,rep_15,+cov new file mode 100644 index 00000000000..0d32a80bbfa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006256,src_003716,time_5937444,execs_4542464,op_havoc,rep_15,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006257,src_002028,time_5938093,execs_4545998,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006257,src_002028,time_5938093,execs_4545998,op_havoc,rep_3 new file mode 100644 index 00000000000..38e2a7930de Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006257,src_002028,time_5938093,execs_4545998,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006258,src_003250,time_5938394,execs_4547170,op_havoc,rep_1,+cov b/test/fuzz-libghostty/corpus/stream-cmin/id_006258,src_003250,time_5938394,execs_4547170,op_havoc,rep_1,+cov new file mode 100644 index 00000000000..deb5f9a666c Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006258,src_003250,time_5938394,execs_4547170,op_havoc,rep_1,+cov differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006259,src_006258,time_5938465,execs_4547617,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006259,src_006258,time_5938465,execs_4547617,op_havoc,rep_3 new file mode 100644 index 00000000000..13ce7b9b73a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006259,src_006258,time_5938465,execs_4547617,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006260,src_006119,time_5942938,execs_4555788,op_havoc,rep_7 b/test/fuzz-libghostty/corpus/stream-cmin/id_006260,src_006119,time_5942938,execs_4555788,op_havoc,rep_7 new file mode 100644 index 00000000000..5b9d3d0ecd2 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006260,src_006119,time_5942938,execs_4555788,op_havoc,rep_7 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006261,src_004970,time_5947078,execs_4562662,op_havoc,rep_3 b/test/fuzz-libghostty/corpus/stream-cmin/id_006261,src_004970,time_5947078,execs_4562662,op_havoc,rep_3 new file mode 100644 index 00000000000..39e0a3add61 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006261,src_004970,time_5947078,execs_4562662,op_havoc,rep_3 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006262,src_005362,time_5950230,execs_4570127,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006262,src_005362,time_5950230,execs_4570127,op_havoc,rep_6 new file mode 100644 index 00000000000..0ae5c8968c7 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006262,src_005362,time_5950230,execs_4570127,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006263,src_004105,time_5957818,execs_4581653,op_havoc,rep_12 b/test/fuzz-libghostty/corpus/stream-cmin/id_006263,src_004105,time_5957818,execs_4581653,op_havoc,rep_12 new file mode 100644 index 00000000000..0e6c14f8a84 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006263,src_004105,time_5957818,execs_4581653,op_havoc,rep_12 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006264,src_003532,time_5958587,execs_4585492,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006264,src_003532,time_5958587,execs_4585492,op_havoc,rep_4 new file mode 100644 index 00000000000..05b3baaa864 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006264,src_003532,time_5958587,execs_4585492,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006265,src_004040,time_5961882,execs_4594644,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006265,src_004040,time_5961882,execs_4594644,op_havoc,rep_2 new file mode 100644 index 00000000000..1f1886754aa Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006265,src_004040,time_5961882,execs_4594644,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006266,src_005184,time_5962169,execs_4596747,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006266,src_005184,time_5962169,execs_4596747,op_havoc,rep_4 new file mode 100644 index 00000000000..8d3b17b0c80 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006266,src_005184,time_5962169,execs_4596747,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006267,src_002336,time_5963801,execs_4600245,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006267,src_002336,time_5963801,execs_4600245,op_havoc,rep_1 new file mode 100644 index 00000000000..b2da9114315 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006267,src_002336,time_5963801,execs_4600245,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006268,src_004566,time_5964030,execs_4601632,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006268,src_004566,time_5964030,execs_4601632,op_havoc,rep_1 new file mode 100644 index 00000000000..362dde9000f Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006268,src_004566,time_5964030,execs_4601632,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006271,src_005333,time_5966545,execs_4605403,op_havoc,rep_1 b/test/fuzz-libghostty/corpus/stream-cmin/id_006271,src_005333,time_5966545,execs_4605403,op_havoc,rep_1 new file mode 100644 index 00000000000..4c766707cdc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006271,src_005333,time_5966545,execs_4605403,op_havoc,rep_1 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006272,src_005333,time_5966766,execs_4605456,op_havoc,rep_4 b/test/fuzz-libghostty/corpus/stream-cmin/id_006272,src_005333,time_5966766,execs_4605456,op_havoc,rep_4 new file mode 100644 index 00000000000..a3798de7224 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006272,src_005333,time_5966766,execs_4605456,op_havoc,rep_4 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006273,src_005333,time_5966950,execs_4605491,op_havoc,rep_2 b/test/fuzz-libghostty/corpus/stream-cmin/id_006273,src_005333,time_5966950,execs_4605491,op_havoc,rep_2 new file mode 100644 index 00000000000..d80692e66f5 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006273,src_005333,time_5966950,execs_4605491,op_havoc,rep_2 differ diff --git a/test/fuzz-libghostty/corpus/stream-cmin/id_006274,src_005333,time_5967133,execs_4605512,op_havoc,rep_6 b/test/fuzz-libghostty/corpus/stream-cmin/id_006274,src_005333,time_5967133,execs_4605512,op_havoc,rep_6 new file mode 100644 index 00000000000..56c7d7276bc Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-cmin/id_006274,src_005333,time_5967133,execs_4605512,op_havoc,rep_6 differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/01-plain-text-slice b/test/fuzz-libghostty/corpus/stream-initial/01-plain-text-slice new file mode 100644 index 00000000000..be111345f7d Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/01-plain-text-slice differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/02-plain-text-scalar b/test/fuzz-libghostty/corpus/stream-initial/02-plain-text-scalar new file mode 100644 index 00000000000..9970aba9125 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/02-plain-text-scalar @@ -0,0 +1 @@ +Hello, World! diff --git a/test/fuzz-libghostty/corpus/stream-initial/03-csi-cursor-sgr b/test/fuzz-libghostty/corpus/stream-initial/03-csi-cursor-sgr new file mode 100644 index 00000000000..3c2e99cc4cf Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/03-csi-cursor-sgr differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/04-csi-erase b/test/fuzz-libghostty/corpus/stream-initial/04-csi-erase new file mode 100644 index 00000000000..ce1416a30ee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/04-csi-erase differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/05-osc-title-bel b/test/fuzz-libghostty/corpus/stream-initial/05-osc-title-bel new file mode 100644 index 00000000000..c580d915158 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/05-osc-title-bel differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/06-osc-title-st b/test/fuzz-libghostty/corpus/stream-initial/06-osc-title-st new file mode 100644 index 00000000000..792485f09d0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/06-osc-title-st differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/07-dcs-decrqss b/test/fuzz-libghostty/corpus/stream-initial/07-dcs-decrqss new file mode 100644 index 00000000000..9e9a56b3043 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/07-dcs-decrqss @@ -0,0 +1 @@ +P$q"p\ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/08-apc b/test/fuzz-libghostty/corpus/stream-initial/08-apc new file mode 100644 index 00000000000..7972be99c7b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/08-apc differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/09-mixed-text-csi b/test/fuzz-libghostty/corpus/stream-initial/09-mixed-text-csi new file mode 100644 index 00000000000..a01d1ca9ec4 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/09-mixed-text-csi @@ -0,0 +1,2 @@ +ABCDhello +world \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/10-sgr-256-rgb b/test/fuzz-libghostty/corpus/stream-initial/10-sgr-256-rgb new file mode 100644 index 00000000000..5439f26a41b Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/10-sgr-256-rgb differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/11-utf8-multibyte b/test/fuzz-libghostty/corpus/stream-initial/11-utf8-multibyte new file mode 100644 index 00000000000..73c12259432 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/11-utf8-multibyte differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/12-malformed-utf8 b/test/fuzz-libghostty/corpus/stream-initial/12-malformed-utf8 new file mode 100644 index 00000000000..8ad0930da71 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/12-malformed-utf8 @@ -0,0 +1 @@ +ÿþ€À¯í € \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/13-incomplete-csi b/test/fuzz-libghostty/corpus/stream-initial/13-incomplete-csi new file mode 100644 index 00000000000..03b80010cec Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/13-incomplete-csi differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/14-decset-decrst b/test/fuzz-libghostty/corpus/stream-initial/14-decset-decrst new file mode 100644 index 00000000000..d540d67f52a Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/14-decset-decrst differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/15-scroll-region b/test/fuzz-libghostty/corpus/stream-initial/15-scroll-region new file mode 100644 index 00000000000..79554c7c909 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/15-scroll-region @@ -0,0 +1 @@ +DDDM \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/16-c1-controls b/test/fuzz-libghostty/corpus/stream-initial/16-c1-controls new file mode 100644 index 00000000000..aa8ead46eee Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/16-c1-controls differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/17-tab-backspace b/test/fuzz-libghostty/corpus/stream-initial/17-tab-backspace new file mode 100644 index 00000000000..9ace2ee6df0 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/17-tab-backspace differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/18-insert-delete b/test/fuzz-libghostty/corpus/stream-initial/18-insert-delete new file mode 100644 index 00000000000..3b6ad631b45 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/18-insert-delete @@ -0,0 +1 @@ +[3@ \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/19-many-params b/test/fuzz-libghostty/corpus/stream-initial/19-many-params new file mode 100644 index 00000000000..756ad9d9a34 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/19-many-params differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/20-csi-subparams b/test/fuzz-libghostty/corpus/stream-initial/20-csi-subparams new file mode 100644 index 00000000000..571617bc37e Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/20-csi-subparams differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/21-osc-hyperlink b/test/fuzz-libghostty/corpus/stream-initial/21-osc-hyperlink new file mode 100644 index 00000000000..b5f539b6e87 Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/21-osc-hyperlink differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/22-osc-clipboard b/test/fuzz-libghostty/corpus/stream-initial/22-osc-clipboard new file mode 100644 index 00000000000..9d6a4873c56 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/22-osc-clipboard @@ -0,0 +1 @@ +]52;c;SGVsbG8= \ No newline at end of file diff --git a/test/fuzz-libghostty/corpus/stream-initial/23-empty b/test/fuzz-libghostty/corpus/stream-initial/23-empty new file mode 100644 index 00000000000..f76dd238ade Binary files /dev/null and b/test/fuzz-libghostty/corpus/stream-initial/23-empty differ diff --git a/test/fuzz-libghostty/corpus/stream-initial/24-esc-misc b/test/fuzz-libghostty/corpus/stream-initial/24-esc-misc new file mode 100644 index 00000000000..93809d0d999 --- /dev/null +++ b/test/fuzz-libghostty/corpus/stream-initial/24-esc-misc @@ -0,0 +1 @@ +78c \ No newline at end of file diff --git a/test/fuzz-libghostty/replay-crashes.nu b/test/fuzz-libghostty/replay-crashes.nu new file mode 100755 index 00000000000..a3b206d54c1 --- /dev/null +++ b/test/fuzz-libghostty/replay-crashes.nu @@ -0,0 +1,126 @@ +#!/usr/bin/env nu + +# Replay AFL++ crash files against their corresponding fuzzer binaries. +# +# AFL++ stores crashing inputs as raw byte files under: +# afl-out//default/crashes/ +# +# Each file's name encodes metadata about how the crash was found, e.g.: +# id:000001,sig:06,src:004129,time:690036,execs:1989720,op:havoc,rep:4 +# +# The fuzzer binaries (fuzz-parser, fuzz-stream) read input from stdin, +# so each crash file is replayed by piping it into the binary: +# open --raw | fuzz- +# +# Modes: +# (default) Replay every crash file and report pass/fail. +# --list Print crash file paths, one per line (no replay). +# --json Emit structured JSON with fuzzer name, file path, +# binary path, and a ready-to-run replay command. +# Useful for LLM agents that need to enumerate and +# selectively replay specific crashes. +# --fuzzer Restrict to a single fuzzer target (e.g. "stream"). + +def main [ + afl_out: string = "afl-out" # Path to the AFL++ output directory + --list (-l) # List crash files without replaying + --json (-j) # Output as JSON (implies --list) + --fuzzer (-f): string # Only process this fuzzer (e.g. "stream" or "parser") +] { + # Directory where `zig build` places the instrumented fuzzer binaries. + let bin_dir = "zig-out/bin" + + # All known fuzzer targets. Each one has a corresponding binary + # named fuzz- and AFL++ output under afl-out//. + let all_fuzzers = [parser stream] + + # If --fuzzer is given, restrict to just that target; otherwise run all. + let fuzzers = if $fuzzer != null { [$fuzzer] } else { $all_fuzzers } + + # --json implies --list (we never replay in JSON mode). + let list_only = $list or $json + + # Accumulator for --list/--json output records. + mut results = [] + + # Counter for crash files that still reproduce (non-zero exit from binary). + mut failures = 0 + + for fuzz in $fuzzers { + # AFL++ writes crash inputs to //default/crashes/. + let crashes_dir = $"($afl_out)/($fuzz)/default/crashes" + + # The replay binary for this fuzzer target. + let binary = $"($bin_dir)/fuzz-($fuzz)" + + # Skip this fuzzer if no crashes directory exists (fuzzer may not + # have been run, or it found no crashes). + if not ($crashes_dir | path exists) { + continue + } + + # Gather all crash files, filtering out: + # - Directories (AFL++ may create subdirs like .synced/) + # - README.txt (AFL++ places a README in the crashes dir) + let crash_files = (ls $crashes_dir + | where type == file + | where { |f| ($f.name | path basename) != "README.txt" } + | get name) + + # In list-only mode, collect metadata about each crash file + # without actually replaying it. This lets an LLM enumerate + # crashes and decide which ones to investigate. + if $list_only { + for crash_file in $crash_files { + $results = ($results | append { + fuzzer: $fuzz, + file: $crash_file, + binary: $binary, + replay_cmd: $"open --raw ($crash_file) | ($binary)", + }) + } + continue + } + + # In replay mode, we need the binary to exist. + if not ($binary | path exists) { + print -e $"WARNING: binary ($binary) not found, skipping ($fuzz)" + continue + } + + # Replay each crash file by piping its raw bytes into the fuzzer + # binary via stdin. The binary exits non-zero if the crash + # reproduces (e.g. SIGABRT / signal 6). + for crash_file in $crash_files { + print $"==> ($crash_file)" + let result = do -i { open --raw $crash_file | run-external $binary } + if $result != null { + $failures += 1 + } + } + } + + # Emit collected results in the requested format. + if $list_only { + if $json { + # JSON output: array of objects, each with fuzzer, file, + # binary, and a replay_cmd string an LLM can execute directly. + print ($results | to json) + } else { + # Plain text: one file path per line. + for r in $results { + print $r.file + } + } + return + } + + # Summary: exit 1 if any crashes still reproduce so CI / scripts + # can detect regressions. + if $failures > 0 { + print $"FAILED: ($failures) crash\(es\) still reproduce" + exit 1 + } + + print "All crash files replayed." +} diff --git a/test/fuzz-libghostty/src/fuzz_osc.zig b/test/fuzz-libghostty/src/fuzz_osc.zig new file mode 100644 index 00000000000..51a04ec8255 --- /dev/null +++ b/test/fuzz-libghostty/src/fuzz_osc.zig @@ -0,0 +1,45 @@ +const std = @import("std"); +const ghostty_vt = @import("ghostty-vt"); +const mem = @import("mem.zig"); +const osc = ghostty_vt.osc; + +/// Use a single global allocator for simplicity and to avoid heap +/// allocation overhead in the fuzzer. The allocator is backed by a fixed +/// buffer, and every fuzz input resets the bump pointer to the start. +var fuzz_alloc: mem.FuzzAllocator(8 * 1024 * 1024) = .{}; + +pub export fn zig_fuzz_init() callconv(.c) void { + fuzz_alloc.init(); +} + +pub export fn zig_fuzz_test( + buf: [*]const u8, + len: usize, +) callconv(.c) void { + // Need at least one byte for the terminator selector. + if (len == 0) return; + + fuzz_alloc.reset(); + const alloc = fuzz_alloc.allocator(); + const input = buf[0..len]; + + // Use the first byte to select the terminator variant. + const selector = input[0]; + const payload = input[1..]; + + var p = osc.Parser.init(alloc); + defer p.deinit(); + for (payload) |byte| p.next(byte); + + // Exercise all three terminator paths: + // 0 -> BEL (0x07) + // 1 -> ST (0x9c) + // 2 -> missing terminator (null) + const terminator: ?u8 = switch (selector % 3) { + 0 => 0x07, + 1 => 0x9c, + else => null, + }; + + _ = p.end(terminator); +} diff --git a/test/fuzz-libghostty/src/fuzz_parser.zig b/test/fuzz-libghostty/src/fuzz_parser.zig new file mode 100644 index 00000000000..b00f180aa54 --- /dev/null +++ b/test/fuzz-libghostty/src/fuzz_parser.zig @@ -0,0 +1,15 @@ +const std = @import("std"); +const ghostty_vt = @import("ghostty-vt"); + +pub export fn zig_fuzz_init() callconv(.c) void { + // Nothing to do +} + +pub export fn zig_fuzz_test( + buf: [*]const u8, + len: usize, +) callconv(.c) void { + var p: ghostty_vt.Parser = .init(); + defer p.deinit(); + for (buf[0..@intCast(len)]) |byte| _ = p.next(byte); +} diff --git a/test/fuzz-libghostty/src/fuzz_stream.zig b/test/fuzz-libghostty/src/fuzz_stream.zig new file mode 100644 index 00000000000..17f63766fd3 --- /dev/null +++ b/test/fuzz-libghostty/src/fuzz_stream.zig @@ -0,0 +1,53 @@ +const std = @import("std"); +const ghostty_vt = @import("ghostty-vt"); +const mem = @import("mem.zig"); +const Terminal = ghostty_vt.Terminal; +const ReadonlyStream = ghostty_vt.ReadonlyStream; + +/// Use a single global allocator for simplicity and to avoid heap +/// allocation overhead in the fuzzer. The allocator is backed by a fixed +/// buffer, and every fuzz input resets the bump pointer to the start. +var fuzz_alloc: mem.FuzzAllocator(64 * 1024 * 1024) = .{}; + +pub export fn zig_fuzz_init() callconv(.c) void { + fuzz_alloc.init(); +} + +pub export fn zig_fuzz_test( + buf: [*]const u8, + len: usize, +) callconv(.c) void { + // Do not test zero-length input paths. + if (len == 0) return; + + fuzz_alloc.reset(); + const alloc = fuzz_alloc.allocator(); + const input = buf[0..len]; + + // Allocate a terminal; if we run out of fixed-buffer space just + // skip this input (not a bug, just a very large allocation). + var t = Terminal.init(alloc, .{ + .cols = 80, + .rows = 24, + .max_scrollback = 100, + }) catch return; + defer t.deinit(alloc); + + var stream: ReadonlyStream = t.vtStream(); + defer stream.deinit(); + + // Use the first byte to decide between the scalar and slice paths + // so both code paths get exercised by the fuzzer. + const mode = input[0]; + const data = input[1..]; + + if (mode & 1 == 0) { + // Slice path — exercises SIMD fast-path if enabled + stream.nextSlice(data) catch |err| + std.debug.panic("nextSlice: {}", .{err}); + } else { + // Scalar path — exercises byte-at-a-time UTF-8 decoding + for (data) |byte| _ = stream.next(byte) catch |err| + std.debug.panic("next: {}", .{err}); + } +} diff --git a/test/fuzz-libghostty/src/mem.zig b/test/fuzz-libghostty/src/mem.zig new file mode 100644 index 00000000000..b5b81598eac --- /dev/null +++ b/test/fuzz-libghostty/src/mem.zig @@ -0,0 +1,26 @@ +const std = @import("std"); + +/// Fixed-capacity allocator that avoids heap allocation and gives the +/// fuzzer deterministic, bounded memory behaviour. Backed by a single +/// fixed buffer; every `reset()` returns the bump pointer to the start +/// so the same memory is reused across iterations. +pub fn FuzzAllocator(comptime mem_size: usize) type { + return struct { + buf: [mem_size]u8 = undefined, + state: std.heap.FixedBufferAllocator = undefined, + + const Self = @This(); + + pub fn init(self: *Self) void { + self.state = .init(&self.buf); + } + + pub fn allocator(self: *Self) std.mem.Allocator { + return self.state.allocator(); + } + + pub fn reset(self: *Self) void { + self.state.reset(); + } + }; +} diff --git a/test/run-all.sh b/test/run-all.sh deleted file mode 100755 index d4a785a443c..00000000000 --- a/test/run-all.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -# -# Run all of the test cases. All test cases are found by traversing -# the "cases" directory, finding all shell files, and executing the -# "./run-host.sh" command for each. - -DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) - -# We always copy the bin in case it was rebuilt -cp ${DIR}/../zig-out/bin/ghostty ${DIR}/ - -# Unix shortcut to just execute ./run-host for each one. We can do -# this less esoterically if we ever wanted. -find ${DIR}/cases \ - -type f \ - -name '*.sh' | \ - sort | \ - parallel \ - --will-cite \ - ${DIR}/run-host.sh \ - --case '{}' \ - --rewrite-abs-path \ - "$@" diff --git a/test/run-host.sh b/test/run-host.sh deleted file mode 100755 index da9dbe2e52b..00000000000 --- a/test/run-host.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -# This runs a single test case from the host (not from Docker itself). The -# arguments are the same as run.sh but this wraps it in docker. - -DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) -IMAGE=$(docker build --file ${DIR}/Dockerfile -q ${DIR}) - -docker run \ - --init \ - --rm \ - -v ${DIR}:/src \ - --entrypoint "xvfb-run" \ - $IMAGE \ - --server-args="-screen 0, 1600x900x24" \ - /entrypoint.sh "$@" diff --git a/test/run.sh b/test/run.sh deleted file mode 100755 index db05ede7635..00000000000 --- a/test/run.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/env bash -# -# This script runs a given test case and captures a screenshot. This script -# expects to run in the Docker image so it just captures the full screen rather -# than a specific window. -# -# This script also compares the output to the expected value. The expected -# value is the case file with ".png" appended. If the "--update" flag is -# appended, the test case is updated. - -#-------------------------------------------------------------------- -# Helpers - -function has_func() { - declare -f -F $1 > /dev/null - return $? -} - -# Colors -export BOLD="\\e[1m" -export RED="\\e[1;31m" -export GREEN="\\e[1;32m" -export YELLOW="\\e[1;33m" -export WHITE="\\e[1;37m" -export RESET="\\e[0;39m" - -#-------------------------------------------------------------------- -# Flag parsing - -ARG_REWRITE=0 -ARG_UPDATE=0 -while [[ "$#" -gt 0 ]]; do - case $1 in - -e|--exec) ARG_EXEC="$2"; shift ;; - -c|--case) ARG_CASE="$2"; shift ;; - -o|--output) ARG_OUT="$2"; shift ;; - -u|--update) ARG_UPDATE=1 ;; - --rewrite-abs-path) ARG_REWRITE=1 ;; - *) echo "Unknown parameter passed: $1"; exit 1 ;; - esac - shift -done - -# Rewrite the path to be valid for us. This regex can be fooled in many ways -# but its good enough for my PC (mitchellh) and CI. Contributors feel free -# to harden it. -if [ "$ARG_REWRITE" -eq 1 ]; then - ARG_CASE=$(echo $ARG_CASE | sed -e 's/.*cases/\/src\/cases/') -fi - -# If we're updating, then just update the file in-place -GOLDEN_OUT="${ARG_CASE}.${ARG_EXEC}.png" -ARG_OUT="${ARG_CASE}.${ARG_EXEC}.actual.png" -if [ "$ARG_UPDATE" -eq 1 ]; then ARG_OUT=$GOLDEN_OUT; fi - -bad=0 -if [ -z "$ARG_EXEC" ]; then bad=1; fi -if [ -z "$ARG_CASE" ]; then bad=1; fi -if [ -z "$ARG_OUT" ]; then bad=1; fi -if [ $bad -ne 0 ]; then - echo "Usage: run.sh --exec --case --output " - exit 1 -fi - -# Load our test case -# shellcheck disable=SC1090 -source ${ARG_CASE} -if ! has_func "test_do"; then - echo "Test case is invalid." - exit 1 -fi - -# NOTE: This is a huge hack right now. -if [ "$ARG_EXEC" = "ghostty" ]; then - ARG_EXEC="/tmp/ghostty"; - - # Copy so we don't read/write race when running in parallel - cp /src/ghostty ${ARG_EXEC} - - # We build in Nix (maybe). To be sure, we replace the interpreter so - # it doesn't point to a Nix path. If we don't build in Nix, this should - # still be safe. - patchelf --set-interpreter /lib/ld-linux-"$(uname -m)".so.1 ${ARG_EXEC} -fi - -#-------------------------------------------------------------------- -# Some terminals require XDG be properly setup. We create a new -# set of XDG directories for this. -export XDG_BASE_DIR="/work/xdg" -export XDG_RUNTIME_DIR="${XDG_BASE_DIR}/runtime" -mkdir -p ${XDG_BASE_DIR} ${XDG_RUNTIME_DIR} -chmod 0700 $XDG_RUNTIME_DIR - -# Configure i3 -cat <${XDG_BASE_DIR}/i3.cfg -# i3 config file (v4) - -exec ${ARG_EXEC} - -bar { - mode invisible -} -EOF - -#-------------------------------------------------------------------- - -printf "${RESET}${BOLD}[$(basename $ARG_EXEC)]${RESET} $ARG_CASE ... ${RESET}" - -# Start up the program under test by launching i3. We use i3 so we can -# more carefully control the window settings, test resizing, etc. -WM_LOG="${XDG_BASE_DIR}/wm.log" -i3 -c ${XDG_BASE_DIR}/i3.cfg >${WM_LOG} 2>&1 & - -# Wait for startup -# TODO: we can probably use xdotool or wmctrl or something to detect if any -# windows actually launched and make error handling here better. -sleep 2 - -# Run our test case (should be defined in test case file) -test_do - -# Sleep a second to let it render -sleep 1 - -# Uncomment this and use run-host.sh to get logs of the terminal emulator -# cat $WM_LOG - -import -window root ${ARG_OUT} - -DIFF=$(compare -metric AE ${ARG_OUT} ${GOLDEN_OUT} null: 2>&1) -if [ $? -eq 2 ] ; then - printf "${RED}ERROR${RESET}\n" - exit 1 -else - if [ $DIFF -gt 0 ]; then - printf "${RED}Fail (Diff: ${WHITE}${DIFF}${RED})${RESET}\n" - exit 1 - else - printf "${GREEN}Pass (Diff: ${WHITE}${DIFF}${GREEN})${RESET}\n" - fi -fi - diff --git a/typos.toml b/typos.toml index ad167f06eaf..408d58f73de 100644 --- a/typos.toml +++ b/typos.toml @@ -26,6 +26,8 @@ extend-exclude = [ "*.icns", # Valgrind nonsense "valgrind.supp", + # Fuzz corpus (binary test inputs) + "test/fuzz-libghostty/corpus/*", # Other "*.pdf", "*.data", @@ -42,6 +44,11 @@ extend-ignore-re = [ "draw[0-9A-F]+(_[0-9A-F]+)?\\(", # Ignore test data in src/input/paste.zig "\"hel\\\\x", + # Ignore long hex-like IDs such as 815E26BA2EF1E00F005C67B1 + "[0-9A-F]{12,}", + # Ignore Apple four char codes + 'code="[A-Za-z]{4,8}"', + '"[A-Za-z]{4}"\.fourCharCode', ] [default.extend-words]