Conversation
…systems (ghostty-org#11152)" This reverts commit ee4c6f8.
…systems" This reverts commit 89f9dd7.
Fixes ghostty-org#8208 Split-tree updates currently clear `tree_bin` and then wait for every surface to become parentless before rebuilding. That leaves the split area blank for one or more frames, which is the visible flicker during split create/close/ resize/equalize actions. Keep the previous widget tree attached until the idle rebuild runs, then swap in the rebuilt tree in one step. During rebuild, reuse existing leaf widgets by detaching and reparenting them into the new `GtkPaned` hierarchy instead of recreating wrappers for every leaf. This removes the parent-settling rebuild path and avoids transient blank frames while preserving debounced rebuild behavior.
…-org#11170) Fixes ghostty-org#8208 Split-tree updates currently clear `tree_bin` and then wait for every surface to become parentless before rebuilding. That leaves the split area blank for one or more frames, which is the visible flicker during split create/close/ resize/equalize actions. Keep the previous widget tree attached until the idle rebuild runs, then swap in the rebuilt tree in one step. During rebuild, reuse existing leaf widgets by detaching and reparenting them into the new `GtkPaned` hierarchy instead of recreating wrappers for every leaf. This removes the parent-settling rebuild path and avoids transient blank frames while preserving debounced rebuild behavior.
…ty-org#10809) Fixes: ghostty-org#8862 Fixes: ghostty-org#10716 This adds the machinery to pass configuration settings received over DBus down to the GObject Surface so that that configuration information can be used to override some settings from the current "live" config when creating a new window. Currently it's only possible to override `--working-directory`, `--command`, and `--title`. `-e` on the `ghostty +new-window` CLI works as well. Adding more overridable settings is possible, but being able to fully override any possible setting would better be served with a major revamp of how Ghostty handles configs, which is way out of scope at the moment.
Triggered by [comment](ghostty-org#11175 (comment)) from @jcollie. Vouch: @douglas Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Triggered by [discussion comment](ghostty-org#11164 (comment)) from @mitchellh. Vouch: @Michielvk Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This was introduced in ghostty-org#10611. This doesn't fix all of the current Windows build problems, but at least fixes one that I introduced.
This was introduced in ghostty-org#10611. This doesn't fix all of the current Windows build problems, but at least fixes one that I introduced.
Fixes ghostty-org#11177 Use per-search Oniguruma match params (retry_limit_in_search) in StringMap-backed link detection to avoid pathological backtracking hangs on very long lines. The units are ticks in the internal loop so its kind of opaque but this seems to still match some very long URLs. The test case in question was a 169K character line (which is now rejected).
…hostty-org#11181) Fixes ghostty-org#11177 Use per-search Oniguruma match params (retry_limit_in_search) in StringMap-backed link detection to avoid pathological backtracking hangs on very long lines. The units are ticks in the internal loop so its kind of opaque but this seems to still match some very long URLs. The test case in question was a 169K character line (which is now rejected).
Adds support for the Vietnamese language
…hostty-org#11185) I encountered an issue related to ghostty-org#8641 and ghostty-org#8647, but in `zsh` instead of `bash`. One of my aliases is: ```bash alias sudo='sudo ' ``` Which causes following error when sourcing the zsh shell integrations: ```shell source /usr/share/ghostty/shell-integration/zsh/ghostty-integration /usr/share/ghostty/shell-integration/zsh/ghostty-integration:149: defining function based on alias `sudo' /usr/share/ghostty/shell-integration/zsh/ghostty-integration:233: parse error near `()' ```
Triggered by [comment](ghostty-org#11190 (comment)) from @00-kat. Vouch: @AnthonyZhOon Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Triggered by [discussion comment](ghostty-org#11184 (comment)) from @mitchellh. Vouch: @mac0ne Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Some more fixes to get Windows building again. `zig build` on x64_64-windows now succeeds but `zig build test` fails in `src/terminal/page.zig` because Zig/Windows lacks a POSIX `mmap` implementation.
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.19.2 to 7.0.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](docker/build-push-action@10e90e3...d08e5c3) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…tty-org#11199) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.19.2 to 7.0.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/build-push-action/releases">docker/build-push-action's releases</a>.</em></p> <blockquote> <h2>v7.0.0</h2> <ul> <li>Node 24 as default runtime (requires <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions Runner v2.327.1</a> or later) by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/build-push-action/pull/1470">docker/build-push-action#1470</a></li> <li>Remove deprecated <code>DOCKER_BUILD_NO_SUMMARY</code> and <code>DOCKER_BUILD_EXPORT_RETENTION_DAYS</code> envs by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/build-push-action/pull/1473">docker/build-push-action#1473</a></li> <li>Remove legacy export-build tool support for build summary by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/build-push-action/pull/1474">docker/build-push-action#1474</a></li> <li>Switch to ESM and update config/test wiring by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/build-push-action/pull/1466">docker/build-push-action#1466</a></li> <li>Bump <code>@actions/core</code> from 1.11.1 to 3.0.0 in <a href="https://redirect.github.com/docker/build-push-action/pull/1454">docker/build-push-action#1454</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.62.1 to 0.79.0 in <a href="https://redirect.github.com/docker/build-push-action/pull/1453">docker/build-push-action#1453</a> <a href="https://redirect.github.com/docker/build-push-action/pull/1472">docker/build-push-action#1472</a> <a href="https://redirect.github.com/docker/build-push-action/pull/1479">docker/build-push-action#1479</a></li> <li>Bump minimatch from 3.1.2 to 3.1.5 in <a href="https://redirect.github.com/docker/build-push-action/pull/1463">docker/build-push-action#1463</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/build-push-action/compare/v6.19.2...v7.0.0">https://github.com/docker/build-push-action/compare/v6.19.2...v7.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/build-push-action/commit/d08e5c354a6adb9ed34480a06d141179aa583294"><code>d08e5c3</code></a> Merge pull request <a href="https://redirect.github.com/docker/build-push-action/issues/1479">#1479</a> from docker/dependabot/npm_and_yarn/docker/actions-t...</li> <li><a href="https://github.com/docker/build-push-action/commit/cbd2dff9a0f0ef650dcce9c635bb2f877ab37be5"><code>cbd2dff</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/build-push-action/commit/f76f51f12900bb84aa9d1a498f35870ef1f76675"><code>f76f51f</code></a> chore(deps): Bump <code>@docker/actions-toolkit</code> from 0.78.0 to 0.79.0</li> <li><a href="https://github.com/docker/build-push-action/commit/7d03e66b5f24d6b390ab64b132795fd3ef4152c8"><code>7d03e66</code></a> Merge pull request <a href="https://redirect.github.com/docker/build-push-action/issues/1473">#1473</a> from crazy-max/rm-deprecated-envs</li> <li><a href="https://github.com/docker/build-push-action/commit/98f853d923dd281a3bcbbb98a0712a91aa913322"><code>98f853d</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/build-push-action/commit/cadccf6e8c7385c86d9cb0800cf07672645cc238"><code>cadccf6</code></a> remove deprecated envs</li> <li><a href="https://github.com/docker/build-push-action/commit/03fe8775e325e34fffbda44c73316f8287aea372"><code>03fe877</code></a> Merge pull request <a href="https://redirect.github.com/docker/build-push-action/issues/1478">#1478</a> from docker/dependabot/github_actions/docker/setup-b...</li> <li><a href="https://github.com/docker/build-push-action/commit/827e36650e1fa7386d09422b5ba3c068fdbe0a1d"><code>827e366</code></a> chore(deps): Bump docker/setup-buildx-action from 3 to 4</li> <li><a href="https://github.com/docker/build-push-action/commit/e25db879d025485a4eebd64fea9bb88a43632da6"><code>e25db87</code></a> Merge pull request <a href="https://redirect.github.com/docker/build-push-action/issues/1474">#1474</a> from crazy-max/rm-export-build-tool</li> <li><a href="https://github.com/docker/build-push-action/commit/1ac2573b5c8b4e4621d5453ab2a99e83725242bd"><code>1ac2573</code></a> Merge pull request <a href="https://redirect.github.com/docker/build-push-action/issues/1470">#1470</a> from crazy-max/node24</li> <li>Additional commits viewable in <a href="https://github.com/docker/build-push-action/compare/10e90e3645eae34f1e60eeb005ba3a3d33f178e8...d08e5c354a6adb9ed34480a06d141179aa583294">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details>
This is an update to address common agentic issues I run into, but the `build.nu` script may be generally helpful to people using the Nix env since `xcodebuild` is broken by default in Nix due to the compiler/linker overrides Nix shell does.
) This adds an initial C API for terminals and formatting. There is a new example that shows how to use this. With these APIs in place, users of the C API can now create a terminal, pass raw VT streams to it, and dump the terminal viewport to various formats. As noted in the docs, **the formatter API is not a rendering API**, it isn't high performance enough for that. But it's a simpler API to implement than the render state API so I started with that. Both APIs are purposely fairly minimal, we're just setting the stage for future functionality. ## Example ```c #include <ghostty/vt.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { GhosttyTerminal term; GhosttyTerminalOptions opts = { .cols = 80, .rows = 24, .max_scrollback = 0 }; ghostty_terminal_new(NULL, &term, opts); const char *input = "Hello, \033[1mBold\033[0m World!\r\nLine 2\r\n"; ghostty_terminal_vt_write(term, (const uint8_t *)input, strlen(input)); GhosttyFormatterTerminalOptions fmt = GHOSTTY_INIT_SIZED(GhosttyFormatterTerminalOptions); fmt.emit = GHOSTTY_FORMATTER_FORMAT_PLAIN; fmt.trim = true; GhosttyFormatter fmtr; ghostty_formatter_terminal_new(NULL, &fmtr, term, fmt); uint8_t *buf; size_t len; ghostty_formatter_format_alloc(fmtr, NULL, &buf, &len); fwrite(buf, 1, len, stdout); free(buf); ghostty_formatter_free(fmtr); ghostty_terminal_free(term); } ``` ## New APIs | Function | Description | |----------|-------------| | `ghostty_terminal_new` | Create a new terminal instance | | `ghostty_terminal_free` | Free a terminal instance | | `ghostty_terminal_reset` | Full reset of the terminal (RIS) | | `ghostty_terminal_resize` | Resize the terminal to given dimensions | | `ghostty_terminal_vt_write` | Write VT-encoded data to the terminal | | `ghostty_terminal_scroll_viewport` | Scroll the terminal viewport | | `ghostty_formatter_terminal_new` | Create a formatter for a terminal's active screen | | `ghostty_formatter_format_buf` | Format into a caller-provided buffer | | `ghostty_formatter_format_alloc` | Format into an allocated buffer | | `ghostty_formatter_free` | Free a formatter instance | ## Future - Obviously need to expose a lot more from the terminal: * Read current set modes * Read cursor information * Read screen information * etc... - Need an optional callback system so that `vt_write` can invoke callbacks for side effect sequences like clipboards, title setting, responses, etc. - `terminal.RenderState` C API so that people can build high performance renderers on top of libghostty-vt And so on...
Change `window-padding-balance` from `bool` to an enum with three values: - `false` - no balancing (default, unchanged) - `true` - balance with vshift that caps top padding and shifts excess to bottom (existing behavior, unchanged) - `equal` - balance whitespace equally on all four sides This gives users who prefer truly equal padding a way to opt in without changing the default behavior.
…1491) Change `window-padding-balance` from `bool` to an enum with three values: - `false` - no balancing (default, unchanged) - `true` - balance with vshift that caps top padding and shifts excess to bottom (existing behavior, unchanged) - `equal` - balance whitespace equally on all four sides This gives users who prefer truly equal padding a way to opt in without changing the default behavior.
Expose the key encoder Options.fromTerminal function to the C API as ghostty_key_encoder_setopt_from_terminal. This lets C callers sync all terminal-derived encoding options (cursor key application mode, keypad mode, alt escape prefix, modifyOtherKeys, and Kitty flags) in a single call instead of setting each option individually.
Expose the key encoder Options.fromTerminal function to the C API as ghostty_key_encoder_setopt_from_terminal. This lets C callers sync all terminal-derived encoding options (cursor key application mode, keypad mode, alt escape prefix, modifyOtherKeys, and Kitty flags) in a single call instead of setting each option individually.
Triggered by [discussion comment](ghostty-org#11041 (comment)) from @mitchellh. Vouch: @davidsanchez222 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Triggered by [discussion comment](ghostty-org#11250 (comment)) from @mitchellh. Vouch: @PowerUser64 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Triggered by [discussion comment](ghostty-org#11237 (comment)) from @mitchellh. Vouch: @cadebrown Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Move mouse event encoding logic from Surface.zig into a new input/mouse_encode.zig file. The new file encapsulates event filtering (shouldReport), button code computation, viewport bounds checking, motion deduplication, and all five wire formats (X10, UTF-8, SGR, urxvt, SGR-pixels). This makes the encoding independently testable and adds unit tests covering each format and edge case. Additionally, Surface `mouseReport` can no longer fail, since the only failure mode is no buffer space which should be impossible. Updated the signature to remove the error set.
…1538) Move mouse event encoding logic from Surface.zig into a new input/mouse_encode.zig file. The new file encapsulates event filtering (shouldReport), button code computation, viewport bounds checking, motion deduplication, and all five wire formats (X10, UTF-8, SGR, urxvt, SGR-pixels). This makes the encoding independently testable and adds unit tests covering each format and edge case. Additionally, Surface `mouseReport` can no longer fail, since the only failure mode is no buffer space which should be impossible. Updated the signature to remove the error set.
Triggered by [comment](ghostty-org#11518 (comment)) from @jparise. Vouch: @j0hnm4r5 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
Important Review skippedToo many files! This PR contains 298 files, which is 148 over the limit of 150. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (298)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 51ba49a4bb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| .cmux_preview_light = if (cmux) |value| value.initial_light else null, | ||
| .cmux_preview_dark = if (cmux) |value| value.initial_dark else null, | ||
| .cmux_applied_light = if (cmux) |value| value.initial_light else null, | ||
| .cmux_applied_dark = if (cmux) |value| value.initial_dark else null, |
There was a problem hiding this comment.
Sync cmux preview with initial selection
Initializing cmux_preview_* from environment without applying the current list selection leaves the live preview state out of sync with what the UI highlights at startup. In cmux mode, if the user opens the picker and presses Enter immediately (or before moving selection), outcome = .apply exits with the old theme values still in cmux_preview_*, so the highlighted theme is not actually applied. Triggering applyCmuxSelectionForCurrentTheme() once after filtering/initial selection would avoid this no-op apply path.
Useful? React with 👍 / 👎.
| if (payload_kind == .ignore) { | ||
| return null; |
There was a problem hiding this comment.
Clear pending OSC 99 chunks on ignored payload kinds
Returning early for p=close/p=alive skips any reset of kitty_notification_pending, so partial title/body data from an earlier d=0 chunk remains buffered. If the same notification id is reused afterward, the old buffered fields are concatenated into the next completed notification, producing incorrect title/body content. Ignored payload kinds should clear pending state for their id to avoid stale chunk carryover.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
5 issues found across 3000 files
Note: This PR contains a large number of files. cubic only reviews up to 75 files per PR, so some files may not have been reviewed.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="include/ghostty/vt/sgr.h">
<violation number="1" location="include/ghostty/vt/sgr.h:112">
P1: Renumbering public `GhosttySgrAttributeTag` values breaks numeric tag compatibility for existing consumers. Keep previous numeric IDs stable when removing entries.</violation>
</file>
<file name="macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift">
<violation number="1" location="macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift:8">
P2: Malformed modifier strings with empty entries are silently accepted because empty parts are dropped during split.</violation>
</file>
<file name="macos/Ghostty.xcodeproj/project.pbxproj">
<violation number="1" location="macos/Ghostty.xcodeproj/project.pbxproj:869">
P2: DockTilePlugin leaves `NSPrincipalClass` empty, so the system may not load the intended `NSDockTilePlugIn` class.</violation>
</file>
<file name="macos/GhosttyUITests/GhosttyWindowPositionUITests.swift">
<violation number="1" location="macos/GhosttyUITests/GhosttyWindowPositionUITests.swift:44">
P2: `firstMatch.waitForExistence` here does not reliably verify a newly opened window. Select/await a distinct window (for example by waiting for window count to increase) before asserting its frame.</violation>
</file>
<file name="macos/Sources/Features/About/CyclingIconView.swift">
<violation number="1" location="macos/Sources/Features/About/CyclingIconView.swift:7">
P3: This new `@EnvironmentObject` dependency causes `AboutView` previews to crash because no `AboutViewModel` is injected.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| 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, |
There was a problem hiding this comment.
P1: Renumbering public GhosttySgrAttributeTag values breaks numeric tag compatibility for existing consumers. Keep previous numeric IDs stable when removing entries.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At include/ghostty/vt/sgr.h, line 112:
<comment>Renumbering public `GhosttySgrAttributeTag` values breaks numeric tag compatibility for existing consumers. Keep previous numeric IDs stable when removing entries.</comment>
<file context>
@@ -109,30 +109,29 @@ typedef enum {
- 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,
</file context>
| /// Returns `nil` if any unrecognized modifier name is encountered. | ||
| init?(scriptModifiers string: String) { | ||
| self = [] | ||
| for part in string.split(separator: ",") { |
There was a problem hiding this comment.
P2: Malformed modifier strings with empty entries are silently accepted because empty parts are dropped during split.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At macos/Sources/Features/AppleScript/Ghostty.Input.Mods+AppleScript.swift, line 8:
<comment>Malformed modifier strings with empty entries are silently accepted because empty parts are dropped during split.</comment>
<file context>
@@ -0,0 +1,18 @@
+ /// 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)
</file context>
| for part in string.split(separator: ",") { | |
| for part in string.split(separator: ",", omittingEmptySubsequences: false) { |
| GENERATE_INFOPLIST_FILE = YES; | ||
| INFOPLIST_KEY_CFBundleDisplayName = "Ghostty Dock Tile Plugin"; | ||
| INFOPLIST_KEY_NSHumanReadableCopyright = ""; | ||
| INFOPLIST_KEY_NSPrincipalClass = ""; |
There was a problem hiding this comment.
P2: DockTilePlugin leaves NSPrincipalClass empty, so the system may not load the intended NSDockTilePlugIn class.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At macos/Ghostty.xcodeproj/project.pbxproj, line 869:
<comment>DockTilePlugin leaves `NSPrincipalClass` empty, so the system may not load the intended `NSDockTilePlugIn` class.</comment>
<file context>
@@ -712,6 +854,93 @@
+ 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;
</file context>
|
|
||
| app.typeKey("n", modifierFlags: [.command]) | ||
|
|
||
| let window2 = app.windows.firstMatch |
There was a problem hiding this comment.
P2: firstMatch.waitForExistence here does not reliably verify a newly opened window. Select/await a distinct window (for example by waiting for window count to increase) before asserting its frame.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At macos/GhosttyUITests/GhosttyWindowPositionUITests.swift, line 44:
<comment>`firstMatch.waitForExistence` here does not reliably verify a newly opened window. Select/await a distinct window (for example by waiting for window count to increase) before asserting its frame.</comment>
<file context>
@@ -0,0 +1,331 @@
+
+ app.typeKey("n", modifierFlags: [.command])
+
+ let window2 = app.windows.firstMatch
+ XCTAssertTrue(window2.waitForExistence(timeout: 5), "New window should appear")
+ let windowFrame2 = window2.frame
</file context>
| .xray, | ||
| ] | ||
| private let timerPublisher = Timer.publish(every: 3, on: .main, in: .common) | ||
| @EnvironmentObject var viewModel: AboutViewModel |
There was a problem hiding this comment.
P3: This new @EnvironmentObject dependency causes AboutView previews to crash because no AboutViewModel is injected.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At macos/Sources/Features/About/CyclingIconView.swift, line 7:
<comment>This new `@EnvironmentObject` dependency causes `AboutView` previews to crash because no `AboutViewModel` is injected.</comment>
<file context>
@@ -1,50 +1,38 @@
- .xray,
- ]
- private let timerPublisher = Timer.publish(every: 3, on: .main, in: .common)
+ @EnvironmentObject var viewModel: AboutViewModel
var body: some View {
</file context>
Summary
ghostty-org/ghosttymainata2b2b883emaindirectlyTesting
zig build -Demit-xcframework=true -Demit-macos-app=false -Dxcframework-target=universal -Doptimize=ReleaseFastSummary by cubic
Rebased the cmux Ghostty fork onto upstream
ghostty-org/ghosttymain and reapplied our patch stack (OSC 99, resize stale-frame, keyboard copy-mode, Pure prompt redraws, theme picker helpers). Changes are staged on this review branch;mainis unchanged.New Features
ghostty-vtterminal and formatter C APIs with examples (C and Zig).SwiftLintconfig.Migration
include/ghostty/vt/result.hreplaced byinclude/ghostty/vt/types.h(update includes).GHOSTTY_FULLSCREEN_MACOS_*; SGR attribute tags realigned.Written for commit 51ba49a. Summary will update on new commits.