c8b363f
gpui: Expose ShapedLine::width() for pen advancement
Nathan Sobo created
c8b363f
gpui: Expose ShapedLine::width() for pen advancement
Nathan Sobo created
47df9d2
chore: update generated cargo manifests
Nathan Sobo created
93ebd24
Merge branch 'ex-pointer-capture' into ex
Nathan Sobo created
c7d55b2
Add pointer capture API for stable drag handling
Add minimal pointer capture API to gpui::Window: - capture_pointer(hitbox_id): starts capture for the given hitbox - release_pointer(): releases capture - captured_hitbox(): returns the captured hitbox, if any When captured, HitboxId::is_hovered() returns true for the captured hitbox regardless of actual hit testing. Capture is automatically released on MouseUpEvent. This enables drag operations (like scrollbar thumb dragging) to continue working even when the pointer moves outside the element's bounds during the drag.
Nathan Sobo created
d49a8e0
Add pointer capture API for stable drag handling
Add minimal pointer capture API to gpui::Window: - capture_pointer(hitbox_id): starts capture for the given hitbox - release_pointer(): releases capture - captured_hitbox(): returns the captured hitbox, if any When captured, HitboxId::is_hovered() returns true for the captured hitbox regardless of actual hit testing. Capture is automatically released on MouseUpEvent. This enables drag operations (like scrollbar thumb dragging) to continue working even when the pointer moves outside the element's bounds during the drag.
Nathan Sobo created
1f34525
Merge origin/main into ex-local
Nathan Sobo created
2d071b0
editor: Fix git-hunk toggling for adjacent hunks (#43187)
Closes #42934 Release Notes: - Fix toggling adjacent git-diff hunks based on the reported behaviour in #42934 --------- Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Sean Hagstrom and Jakub Konka created
bd2b0de
gpui: Add modal dialog window kind (#40291)
Closes #ISSUE A [modal dialog](https://en.wikipedia.org/wiki/Modal_window) window is a window that demands the user's immediate attention and blocks interaction with other parts of the application until it's closed. - On Windows this is done by disabling the parent window when the dialog window is created and re-enabling the parent window when closed. - On Wayland this is done using the [`XdgDialog`](https://wayland.app/protocols/xdg-dialog-v1) protocol, which hints to the compositor that the dialog should be modal. While compositors like GNOME and KDE block parent interaction automatically, the XDG specification does not guarantee this behavior, compositors may deliver events to the parent window unfiltered. Since the specification explicitly requires clients to implement event filtering logic themselves, this PR implements client-side blocking in GPUI to ensure consistent modal behavior across all Wayland compositors, including those like Hyprland that don't block parent interaction. - On X11 this is done by enabling the application window property [`_NET_WM_STATE_MODAL`](https://specifications.freedesktop.org/wm/latest/ar01s05.html#id-1.6.8) state. I'm unable to implement this on MacOS as I lack the experience and the hardware to test it. If anyone is interested on implementing this let me know. |Window|Linux (wayland)| Linux (x11) |MacOS| |-|-|-|-| |<video src="https://github.com/user-attachments/assets/bfd0733a-445d-4b63-ac6b-ebe098a7dc74"></video>|<video src="https://github.com/user-attachments/assets/024cd6ec-ff81-4250-a5be-5d207a023f8c"></video>| N/A | <video src="https://github.com/user-attachments/assets/656e60a5-26b2-4ee2-8368-1fbbe872453c"></video>| TODO: - [x] Block parent interaction client-side on X11 Release Notes: - Added modal dialog window kind on GPUI --------- Co-authored-by: Jason Lee <huacnlee@gmail.com> Co-authored-by: Anthony Eid <anthony@zed.dev> Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Alvaro Parker , Jason Lee , Anthony Eid , and Anthony Eid created
886de8f
agent_ui: Improve UX when pasting code into message editor (#45254)
Follow up to #42982 Release Notes: - agent: Allow pasting code without formatting via ctrl/cmd-shift-v. - agent: Fixed an issue where pasting a single line of code would always insert an @mention
Bennet Bo Fenner created
7a783a9
acp: Update to agent-client-protocol rust sdk v0.9.2 (#45255)
Release Notes: - N/A
Ben Brandt created
f9462da
terminal: Fix pane re-entrancy panic when splitting terminal tabs (#45231)
## Summary Fix panic "cannot update workspace::pane::Pane while it is already being updated" when dragging terminal tabs to split the pane. ## Problem When dragging a terminal tab to create a split, the app panics due to re-entrancy: the drop handler calls `terminal_panel.center.split()` synchronously, which invokes `mark_positions()` that tries to update all panes in the group. When the pane being updated is part of the terminal panel's center group, this causes a re-entrancy panic. ## Solution Defer the split operation using `cx.spawn_in()`, similar to how `move_item` was already deferred in the same handler. This ensures the split (and subsequent `mark_positions()` call) runs after the current pane update completes. ## Test plan - Open terminal panel - Create a terminal tab - Drag the terminal tab to split the pane - Verify no panic occurs and split works correctly
Ahmed M. Ammar created
61dd6a8
agent_ui: Add some fixes to tool calling display (#45252)
- Follow up to https://github.com/zed-industries/zed/pull/45097 — not showing raw inputs for edit and terminal calls - Removing the display of empty Markdown if the model outputs it Release Notes: - N/A --------- Co-authored-by: Agus Zubiaga <hi@aguz.me> Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Danilo Leal , Agus Zubiaga , and Ben Brandt created
abb199c
thread_view: Clearer authentication states (#45230)
Closes #44717 Sometimes, we show the user the agent's auth methods because we got an AuthRequired error. However, there are also several ways a user can choose to re-enter the authentication flow even though they are still logged in. This has caused some confusion with several users, where after logging in, they type /login again to see if anything changed, and they saw an "Authentication Required" warning. So, I made a distinction in the UI if we go to this flow from a concrete error, or if not, made the language less error-like to help avoid confusion. | Before | After | |--------|--------| | <img width="1154" height="446" alt="Screenshot 2025-12-18 at 10 54@2x" src="https://github.com/user-attachments/assets/9df0d59a-2d45-4bfc-ba85-359dd1a4c8ae" /> | <img width="1154" height="446" alt="Screenshot 2025-12-18 at 10 53@2x" src="https://github.com/user-attachments/assets/73a9fb45-4e6f-4594-8795-aaade35b2a72" /> | Release Notes: - N/A --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com> Co-authored-by: Miguel Raz Guzmán Macedo <miguel@zed.dev>
Ben Brandt , Danilo Leal , and Miguel Raz Guzmán Macedo created
cebbf77
gpui(windows): Fix clicks to inactive windows not dispatching to the clicked window (#45237)
Release Notes: - Fixed an issue on windows where clicking buttons on windows in the background would not register as being clicked on that window
Lukas Wirth created
0180f3e
deepseek: Fix for max output tokens blocking completions (#45236)
They count the requested max_output_tokens against the prompt total. Seems like a bug on their end as most other providers don't do this, but now we just default to None for the main models and let the API use its default behavior which works just fine. Closes: #45134 Release Notes: - deepseek: Fix issue with Deepseek API that was causing the token limit to be reached sooner than necessary
Ben Brandt created
5488a19
terminal: Respect RevealStrategy::NoFocus and Never focus settings (#45180)
Closes #45179
## Summary
Fixes the focus behavior when creating terminals with
`RevealStrategy::NoFocus` or `RevealStrategy::Never`. Previously,
terminals would still receive focus if the terminal pane already had
focus, contradicting the documented behavior.
## Changes
- **`add_terminal_task()`**: Changed focus logic to only focus when
`RevealStrategy::Always`
- **`add_terminal_shell()`**: Same fix
The fix changes:
```rust
// Before
let focus = pane.has_focus(window, cx)
|| matches!(reveal_strategy, RevealStrategy::Always);
// After
let focus = matches!(reveal_strategy, RevealStrategy::Always);
```
## Impact
This affects:
- Vim users running `:!command` (uses `NoFocus`)
- Debugger terminal spawning (uses `NoFocus`)
- Any programmatic terminal creation requesting background behavior
Release Notes:
- Fixed terminal focus behavior to respect `RevealStrategy::NoFocus` and
`RevealStrategy::Never` settings when the terminal pane already has
focus.
rabsef-bicrym created
bb1198e
languages: Allow using locally installed `ty` for Python (#45193)
Release Notes: - Allow using locally installed `ty` for Python
Henry Chu created
69fe27f
Keep tab stop-less snippets in completion list (#45227)
Closes https://github.com/zed-industries/zed/issues/45083 cc @agu-z Release Notes: - Fixed certain rust-analyzer snippets not shown
Kirill Bulatov created
469da2f
gpui: Fix Windows credential lookup returning error instead of `None` when credentials don't exist (#45228)
This spams the log with amazon bedrock otherwise Release Notes: - N/A *or* Added/Fixed/Improved ...
Lukas Wirth created
4f87822
gpui: Persist window bounds and display when detaching a workspace session (#45201)
Closes #41246 #45092
Release Notes:
- N/A
**Root Cause**:
Empty local workspaces returned `DetachFromSession` from
`serialize_workspace_location()`, and the `DetachFromSession` handler
only cleared the session_id **without saving window bounds**.
**Fix Applied**:
Modified the `DetachFromSession` handler to save window bounds via
`set_window_open_status()`:
```rust
WorkspaceLocation::DetachFromSession => {
let window_bounds = SerializedWindowBounds(window.window_bounds());
let display = window.display(cx).and_then(|d| d.uuid().ok());
window.spawn(cx, async move |_| {
persistence::DB
.set_window_open_status(database_id, window_bounds, display.unwrap_or_default())
.await.log_err();
persistence::DB.set_session_id(database_id, None).await.log_err();
})
}
```
**Recording**:
https://github.com/user-attachments/assets/2b6564d4-4e1b-40fe-943b-147296340aa7
shibang created
9a69d89
thread_view: Remove unused acp auth method (#45221)
This was from an early iteration and this code path isn't used anymore Release Notes: - N/A
Ben Brandt created
54f360a
Add a test to ensure we invalidate brackets not only on edits (#45219)
Follow-up of https://github.com/zed-industries/zed/pull/45187 Release Notes: - N/A
Kirill Bulatov created
b2a0b78
acp: Change default for gemini back to managed version (#45218)
It seems we unintentionally changed the default behavior of if we use the gemini on the path in #40663 Changing this back so by default we use a managed version of the CLI so we can better control min versions and the like, but still allow people to override if they need to. Release Notes: - N/A
Ben Brandt created
f1ca2f9
workspace: Fix new projects opening with default window size (#45204)
Previously, when opening a new project (one that was never opened before), the window bounds restoration logic would fall through to GPUI's default window sizing instead of using the last known window bounds. This change consolidates the window bounds restoration logic so that both empty workspaces and new projects use the stored default window bounds, making the behavior consistent: any new window will use the last resized window's size and position. Closes #45092 Release Notes: - Fixed new files and projects opening with default window size instead of the last used window size.
MostlyK created
4b34ade
Update Mistral models context length to their recommended values (#45194)
I noticed some of mistral models context lenghts were outdated, they were updated accordingly to mistral documentation. The following models had their context lenght changed: [mistral-large-latest](https://docs.mistral.ai/models/mistral-large-3-25-12) [magistral-medium-latest](https://docs.mistral.ai/models/magistral-medium-1-2-25-09) [magistral-small-latest](https://docs.mistral.ai/models/magistral-small-1-2-25-09) [devstral-medium-latest](https://docs.mistral.ai/models/devstral-2-25-12) [devstral-small-latest](https://docs.mistral.ai/models/devstral-small-2-25-12)
Guilherme do Amaral Alves created
df48294
agent_ui: Remove unnecessary Arc allocation (#45172)
Follow up to https://github.com/zed-industries/zed/pull/44297. Initial implementation in ce884443f1c38ca8da9edf9fbbb8e7fd579452cb used `Arc` to store the reference to the hash map inside the iterator while keeping the lifetime static. The code was later simplified in 5151b22e2ea37fb457cf4f88b88fe4f315306074 to build the list eagerly but the Arc was forgotten, although it became unnecessary. cc @bennetbo Release Notes: - N/A
Oleksii Orlenko created
cdc5cc3
Return back the eager snapshot update (#45210)
Based on https://github.com/zed-industries/zed/pull/45187#discussion_r2630140112 Release Notes: - N/A Co-authored-by: Lukas Wirth <lukas@zed.dev>
Kirill Bulatov and Lukas Wirth created
0f7f540
Always invalidate tree-sitter data on buffer reparse end (#45187)
Also do not eagerly invalidate this data on buffer reparse start Closes https://github.com/zed-industries/zed/issues/45182 Release Notes: - Fixed bracket colorization not applied on initial file open
Kirill Bulatov created
184001b
docs: Add note about conflicting global macOS shortcut (#45186)
This is already noted in our `default-macos.json`, but was never surfaced in our docs for some reason. A user noted their LSP completions were not working because they were not aware of the conflicting global shortcut. Ref: https://github.com/zed-industries/zed/issues/44970#issuecomment-3664118523 Release Notes: - N/A
Kunall Banerjee created
225a2a8
google_ai: Refactor token count methods in Google AI (#45184)
The change simplifies the `max_token_count` and `max_output_tokens` methods by grouping Gemini models with identical token limits. Release Notes: - N/A
Xiaobo Liu created
ea37057
Restore generic modal closing on mouse click (#45183)
Was removed in https://github.com/zed-industries/zed/pull/44887/changes#diff-1de872be76a27a9d574a0b0acec4581797446e60743d23b3e7a5f15088fa7e61 Release Notes: - (Preview only) Fixed certain modals not being dismissed on mouse click outside
Kirill Bulatov created
77cdef3
Attempt to fix the autofix auto scheduler (#45178)
Release Notes: - N/A
Conrad Irwin created
05108c5
agent_ui: Make tool call raw input visible (#45097)
<img width="500" height="1246" alt="Screenshot 2025-12-17 at 9 28@2x" src="https://github.com/user-attachments/assets/eddb290d-d4d0-4ab8-94b3-bcc50ad07157" /> Release Notes: - agent: Made tool calls' raw input visible in the agent UI. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Torstein Sørnes and Danilo Leal created
07538ff
Make sweep and mercury API tokens use `cx.global` instead of `OnceLock` (#45176)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
9073a26
Revert "git: Mark entries as pending when staging a files making the staged highlighting more "optimistic"" (#45175)
Reverts zed-industries/zed#43434 This caused a regression because the additional pending hunks don't get cleared.
Cole Miller created
843a35a
extension api: Make server id types constructible, to ease writing tests (#45174)
Currently, extensions cannot have tests that call methods like `label_for_symbol` and `label_for_completion`, because those methods take a `LanguageServerId`, and that type is opaque, and cannot be constructed outside of the `zed_extension_api` crate. This PR makes it possible to construct those types from strings, so that it's more straightforward to write unit tests for these LSP adapter methods. Release Notes: - N/A
Max Brunsfeld created
aff93f2
More permissions for autofix (#45170)
Release Notes: - N/A
Conrad Irwin created
0c9992c
terminal: Forward Ctrl+V when clipboard contains images (#42258)
When running Codex CLI, Claude Code, or other TUI agents in Zed’s terminal, pasting images wasn’t supported — Zed treated all clipboard content as plain text and simply pushed it into the PTY, so the agent never saw the image data. This change makes terminal pastes behave like they do in a native terminal: if the clipboard contains an image, Zed now emits a raw Ctrl+V to the PTY so the agent can read the system clipboard itself. Release Notes: - Fixed terminal-launched Codex/Claude sessions by forwarding Ctrl+V for clipboard images so agents can attach them
Kingsword created
cec4607
git_ui: Preserve newlines in commit messages (#45167)
Closes #44982 Release Notes: - Fixed Git panel to preserve newlines in commit messages
Mayank Verma created
f9b69ae
Fix Wayland platform resize resulting in non-interactive window (#45153)
Closes #40361 Release Notes: - Linux(Wayland): Fixed an issue where the settings window would not respond to user interaction until resized
Ben Kunkle created
f00cb37
macOS: Bundle placeholder Document.icns so Finder can display Zed file icons (#44833)
Generated by AI. `DocumentTypes.plist` declares `CFBundleTypeIconFile` as `Document` for Zed’s document types, but the macOS bundle did not include `Contents/Resources/Document.icns`, causing Finder to fall back to generic icons. This PR: - Adds `crates/zed/resources/Document.icns` as a placeholder document icon (currently derived from the app icon). - Updates `script/bundle-mac` to copy it into the `.app` at `Contents/Resources/Document.icns` during bundling. - Adds `script/verify-macos-document-icon` for one-command validation. ## How to test (CLI) 1. Build a debug bundle: - `./script/bundle-mac -d aarch64-apple-darwin` 2. Verify the bundle contains the referenced icon: - `./script/verify-macos-document-icon "target/aarch64-apple-darwin/debug/bundle/osx/Zed Dev.app"` ## Optional visual validation in Finder - Pick a file (e.g. `.rs`), Get Info → Open with: Zed Dev → Change All... - Restart Finder: `killall Finder` (or log out/in) @JosephTLyons — would you mind running the steps above and confirming Finder shows Zed’s icon for source files after "Change All" + Finder restart? @danilo-leal — this PR ships a placeholder `Document.icns`. When the real document icon is ready, replace `crates/zed/resources/Document.icns` and the bundling script will include it automatically. Closes #44403. Release Notes: - TODO --------- Co-authored-by: Matt Miller <mattrx@gmail.com>
Nathan Sobo and Matt Miller created
25e1e2e
Don't trigger autosave on focus change in modals (#45166)
Closes #28732
Release Notes:
- Opening the command palette or other modals no longer triggers
auto-save with the `{ "autosave": "on_focus_change" }` setting. This
reduces the chance of unwanted format changes when executing actions,
and fixes a race condition with `:w` in Vim mode
Ben Kunkle created
f2d29f4
Auto-release preview as Zippy (#45163)
I think we're not triggering the after-release workflow because of github's loop detection when you use the default GITHUB_TOKEN Closes #ISSUE Release Notes: - N/A
Conrad Irwin created
623e137
git: Unify commit popups (#38749)
Closes #26424 Supersedes #35328 Originally, `git::blame` uses its own `ParsedCommitMessage` as the source for the commit information, including the PR section. This changes unifies this with `git::repository` and `git_ui::git_panel` by moving this and some other commit-related structs to `git::commit` instead, and making both `git_ui::blame_ui` and `git_ui::git_panel` pull their information from these structs. Release notes : - (Let's Git Together) Fixed the commit tooltip in the git panel not showing information like avatars. --------- Co-authored-by: Cole Miller <cole@zed.dev> Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
LoricAndre , Cole Miller , and Zed Zippy created
302a4bb
git panel: Fix file path truncation and add some UI code clean up (#45161)
This PR ensures truncation works for the file paths, which should set up the stage for when the new GPUI `truncation_start` method lands (https://github.com/zed-industries/zed/pull/45122) so that we can use for them. In the process of doing so and figuring it out why it wasn't working as well before, I noticed some opportunities to clean up some UI code: removing unnecessary styles, making the file easier to navigate given all of the different UI conditions, etc. Note: You might notice a subtle label flashing that comes with the label truncation and that's a standalone GPUI bug that's also visible in other surface areas of the app. I don't think it should block these changes here as it's something we should fix on its own... Release Notes: - N/A
Danilo Leal created
c4f8f2f
Use less generic globs for JSONC to avoid overmatching (#45162)
Otherwise, all *.json files under `zed` directory will be matched as JSONC, e.g `zed/crates/vim/test_data/test_a.json` which is not right. On top, `globset` considers that `zed/crates/vim/test_data/test_a.json` matches `**/zed/*.json` glob (!). Release Notes: - N/A
Kirill Bulatov created
52c7447
gpui: Add Vietnamese chars to `LineWrapper::is_word_char` (#45160)
Cameron Mcloughlin created
65f7412
A couple new inline assistant tests (#45049)
Also adjust the code for streaming tool use to always use a rewrite_section; remove insert_here entirely. Release Notes: - N/A Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Michael Benfield and Max Brunsfeld created
8aab646
terminal: Improve regex hyperlink performance for long lines (#44721)
Related to - #44407 This PR further improves performance for regex hyperlink finding by eliminating unnecessary regex matching. Currently, we repeatedly search for matches from the start of the line until the match contains the hovered point. This is only required to support custom regexes which match strings containing spaces, with multiple matches on a single line. This isn't actually a useful scenario, and is no longer supported. This PR changes to only search twice, the first match starting from the start of the line, and the hovered word (space-delimited). The most dramatic improvement is for long lines with many words. In addition to the above changes, this PR: - Adds test for the scenarios from #44407 and #44510 - Simplifies the logic added in #44407 Performance measurements For the scenario from #44407, this improves the perf test's iteration time from 1.22ms to 0.47ms. main: | Branch | Command | Iter/sec | Mean [ms] | SD [ms] | Iterations | Importance (weight) | |:---|:---|---:|---:|---:|---:|---:| | main | terminal_hyperlinks::tests::path::perf::pr_44407_hyperlink_benchmark | 819.64 | 937.60 | 2.20 | 768 | average (50) | | this PR | terminal_hyperlinks::tests::path::perf::pr_44407_hyperlink_benchmark | 2099.79 | 1463.20 | 7.20 | 3072 | average (50) | Release Notes: - terminal: Improve path hyperlink performance for long lines
Dave Waggoner created
9ad059d
copilot: Add support for Next Edit Suggestion (#44486)
This PR introduces support for Next Edit Suggestions while doing away with calling legacy endpoints. In the process we've also removed support for cycling completions, as NES will give us a single prediction, for the most part. Closes #30124 Release Notes: - Zed now supports Copilot's [Next Edit Suggestions](https://code.visualstudio.com/blogs/2025/02/12/next-edit-suggestions).
Piotr Osiewicz created