614d143
Less scoping and lifetimes for workers
Piotr Osiewicz created
614d143
Less scoping and lifetimes for workers
Piotr Osiewicz created
5871c6c
Fix project benchmarks build
Piotr Osiewicz created
88e497e
search: Make search cancellation more responsive (again)
Piotr Osiewicz created
4ef5d2c
Fix relative line numbers in sticky headers (#45164)
Closes #42586 This includes a rewrite of `calculate_relative_line_numbers()`. Now it's linear-time with respect to the number of rows displayed, instead of linear time with respect to the number of rows displayed _plus_ the distance to the base row. Release Notes: - Improved performance when using relative line numbers in large files - Fixed relative line numbers not appearing in sticky headers
Andrew Farkas created
bfe3c66
docs: Automatic Documentation Github Action using Droid (#45374)
Adds a multi-step agentic loop to github actions for opening a once-daily documentation PR that can be merged only be a Zedi Release Notes: - N/A --------- Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
morgankrey and factory-droid[bot] created
361b8e0
Fix sticky header scroll offset (#45377)
Closes #43319 Release Notes: - Sticky headers no longer obscure the cursor when it moves. --------- Co-authored-by: HactarCE <6060305+HactarCE@users.noreply.github.com>
Julia Ryan and HactarCE created
d7e41f7
search: Respect macOS' find pasteboard (#45311)
Closes #17467 Release Notes: - On macOS, buffer search now syncs with the system find pasteboard, allowing <kbd>⌘E</kbd> and <kbd>⌘G</kbd> to work seamlessly across Zed and other apps.
Agus Zubiaga created
e05dcec
Make `pane::CloseAllItems` best effort (#45368)
Closes #ISSUE Release Notes: - Fixed an issue where the `pane: close all items` action would give up if you hit "Cancel" on the prompt for what to do with a dirty buffer
Ben Kunkle created
32600f2
gpui: Fix truncation flickering (#45373)
It's been a little that we've noticed some flickering and other weird resizing behavior with text truncation in Zed: https://github.com/user-attachments/assets/4d5691a3-cd3d-45e0-8b96-74a4e0e273d2 https://github.com/user-attachments/assets/d1d0e587-7676-4da0-8818-f4e50f0e294e Initially, we suspected this could be due to how we calculate the length of a line to insert truncation, which is based first on the length of each individual character, and then second goes through a pass calculating the line length as a whole. This could cause mismatch and culminate in our bug. However, even though that felt like a reasonable suspicion, I realized something rather simple at some point: the `truncate` and `truncate_start` methods in the `Label` didn't use `whitespace_nowrap`. If you take Tailwind as an example, their `truncate` utility class takes `overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`. This pointed out to a potential bug with `whitespace_nowrap` where that was blocking truncation entirely, even though that's technically part of what's necessary to truncate as you don't want text that will be truncated to wrap. Ultimately, what was happening was that the text element was caching its layout based on its `wrap_width` but not considering its `truncate_width`. The truncate width is essentially the new definitive width of the text based on the available space, which was never being computed. So the fix here was to add `truncate_width.is_none()` to the cache validation check, so that it only uses the cached text element size _if the truncation width is untouched_. But if that changes, we need to account for the new width. Then, in the Label component, we added `min_w_0` to allow the label div to shrink below its original size, and finally, we added `whitespace_nowrap()` as the cache check fundamentally fixed that method's problem. In a future PR, we can basically remove the `single_line()` label method because: 1) whenever you want a single label, you most likely want it to truncate, and 2) most instances of `truncate` are already followed by `single_line` in Zed today, so we can cut that part. Result is no flickering with truncated labels! https://github.com/user-attachments/assets/ae17cbde-0de7-42ca-98a4-22fcb452016b Release Notes: - Fixed a bug in GPUI where truncated text would flicker as you resized the container in which the text was in. Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Danilo Leal and Lukas Wirth created
a7e0701
editor: Add automatic markdown list continuation on newline and indent on tab (#42800)
Closes #5089 Release notes: - Markdown lists now continue automatically when you press Enter (unordered, ordered, and task lists). This can be configured with `extend_list_on_newline` (default: true). - You can now indent list markers with Tab to quickly create nested lists. This can be configured with `indent_list_on_tab` (default: true). --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
Raduan A. , Claude , and Smit Barmase created
ea34cc5
Fix terminal doesn't switch to project directory when opening remote project on Windows (#45328)
Closes #45253 Release Notes: - Fixed terminal doesn't switch to project directory when opening remote project on Windows
feeiyu created
a7d4306
workspace: Make title bar pickers render nearby the trigger when mouse-triggered (#45361)
From Zed's title bar, you can click on buttons to open three modal pickers: remote projects, projects, and branches. All of these pickers use the modal layer, which by default, renders them centered on the UI. However, a UX issue we've been bothered by is that when you _click_ to open them, they show up just way too far from where your mouse likely is (nearby the trigger you just clicked). So, this PR introduces a `ModalPlacement` enum to the modal layer, so that we can pick between the "centered" and "anchored" options to render the picker. This way, we can make the pickers use anchored positioning when triggered through a mouse click and use the default centered positioning when triggered through the keybinding. One thing to note is that the anchored positioning here is not as polished as regular popovers/dropdowns, because it simply uses the x and y coordinates of the click to place the picker as opposed to using GPUI's `Corner` enum, thus making them more connected to their triggers. I chose to do it this way for now because it's a simpler and more contained change, given it wouldn't require a tighter connection at the code level between trigger and picker. But maybe we will want to do that in the near future because we can bake in some other related behaviors like automatically hiding the button trigger tooltip if the picker is open and changing its text color to communicate which button triggered the open picker. https://github.com/user-attachments/assets/30d9c26a-24de-4702-8b7d-018b397f77e1 Release Notes: - Improved the UX of title bar modal pickers (remote projects, projects, and branches) by making them open closer to the trigger when triggering them with the mouse.
Danilo Leal created
8001877
vim: Add `:r[ead] [name]` command (#45332)
This adds the following Vim commands:
- `:r[ead] [name]`
- `:{range}r[ead] [name]`
The most important parts of this feature are outlined
[here](https://vimhelp.org/insert.txt.html#%3Ar).
The only intentional difference between this and Vim is that Vim only
allows `:read` (no filename) for buffers with a file attached. I am
allowing it for all buffers because I think that could be useful.
Release Notes:
- vim: Added the [`:r[ead] [name]` Vim
command](https://vimhelp.org/insert.txt.html#:read)
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
AidanV and Ben Kunkle created
b603372
Reduce GPU usage by activating VRR optimization only during high-rate input (#45369)
Fixes #29073 This PR reduces unnecessary GPU usage by being more selective about when we present frames to prevent display underclocking (VRR optimization). ## Problem Previously, we would keep presenting frames for 1 second after *any* input event, regardless of whether it triggered a re-render. This caused unnecessary GPU work when the user was idle or during low-frequency interactions. ## Solution 1. **Only track input that triggers re-renders**: We now only record input timestamps when the input actually causes the window to become dirty, rather than on every input event. 2. **Rate-based activation**: The VRR optimization now only activates when input arrives at a high rate (≥ 60fps over the last 100ms). This means casual mouse movements or occasional keystrokes won't trigger continuous frame presentation. 3. **Sustained optimization**: Once high-rate input is detected (e.g., during scrolling or dragging), we sustain frame presentation for 1 second to prevent display underclocking, even if input briefly pauses. ## Implementation Added `InputRateTracker` which: - Tracks input timestamps in a 100ms sliding window - Activates when the window contains ≥ 6 events (60fps × 0.1s) - Extends a `sustain_until` timestamp by 1 second each time high rate is detected Release Notes: - Reduced GPU usage when idle by only presenting frames during bursts of high-frequency input.
Antonio Scandurra created
7427924
adjusted scheduler prioritization algorithm (#45367)
This fixes a number of issues where zed depends on the order of polling which changed when switching scheduler. We have adjusted the algorithm so it matches the previous order while keeping the prioritization feature. Release Notes: - N/A
Yara 🏳️⚧️ created
ae44c3c
Fix extra terminal being created when a task replaces a terminal in the center pane (#45317)
Closes https://github.com/zed-industries/zed/issues/21144 Release Notes: - Fixed spawned tasks creating an extra terminal in the dock in some cases.
Cole Miller created
4e0471c
git panel: Truncate file paths from the left (#43462)
https://github.com/user-attachments/assets/758e1ec9-6c34-4e13-b605-cf00c18ca16f Release Notes: - Improved: Git panel now truncates long file paths from the left, showing "…path/filename" when space is limited, keeping filenames always visible. @cole-miller @mattermill --------- Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
ozzy , Danilo Leal , and Danilo Leal created
62d36b2
gpui: Add `text_ellipsis_start` method (#45122)
This PR is an additive change introducing the `truncate_start` method to labels, which gives us the ability to add an ellipsis at the beginning of the text as opposed to the regular `truncate`. This will be generally used for truncating file paths, where the end is typically more relevant than the beginning, but given it's a general method, there's the possibility to be used anywhere else, too. <img width="500" height="690" alt="Screenshot 2025-12-17 at 12 35@2x" src="https://github.com/user-attachments/assets/f853f5a3-60b3-4380-a11c-bb47868a4470" /> Release Notes: - N/A --------- Co-authored-by: Lukas Wirth <lukas@zed.dev>
Danilo Leal and Lukas Wirth created
69f6eea
toolchains: Fix persistence by not relying on unstable worktree id (#45357)
Closes #42268 We've migrated user selections when a given workspace has a single worktree (as then we could determine what the target worktree is). Release Notes: - python: Fixed selected virtual environments not being persisted/deserialized correctly within long-running Zed sessions (where multiple different projects might've been opened). This is a breaking change for users of multi-worktree projects - your selected toolchain for those projects will be reset. Co-authored-by: Dino <dino@zed.dev>
Piotr Osiewicz and Dino created
1dc5de4
workspace: Auto-switch git context when focus changed (#45354)
Closes #44955 Release Notes: - Fixed workspace incorrectly automatically switching Git repository/branch context in multi-repository projects when repo/branch switched manually from the Git panel.
Jakub Konka created
b9aef75
Turn on the fixed stalebot (#45355)
It will run weekly and it promised not to touch issues of the wrong types anymore. Release Notes: - N/A
Lena created
95ae388
Fix title bar spacing when building on the macOS Tahoe SDK (#45351)
The size and spacing around the traffic light buttons changes after macOS SDK 26. Our official builds aren't using this SDK yet, but dev builds sometimes are and the official will in the future. <table> <tr> <th>Before</th> <th>After</th> </tr> <tr> <td> <img width="582" height="146" alt="CleanShot 2025-12-19 at 08 58 53@2x" src="https://github.com/user-attachments/assets/1a28d74a-98a3-49d0-98d6-ab05b0580665" /> </td> <td> <img width="610" height="156" alt="CleanShot 2025-12-19 at 08 57 02@2x" src="https://github.com/user-attachments/assets/7b7693b3-baa1-4d7e-9fc1-bd7a7bfacd36" /> </td> </tr> <tr> <td> <img width="532" height="154" alt="CleanShot 2025-12-19 at 08 59 40@2x" src="https://github.com/user-attachments/assets/df7f40e7-7576-44f2-9cf3-047a5d00bb4e" /> </td> <td> <img width="520" height="150" alt="CleanShot 2025-12-19 at 09 01 17@2x" src="https://github.com/user-attachments/assets/b0fbdeb6-1b1d-4e7a-95d0-3c78f0569df1" /> </td> </tr> </table> Release Notes: - N/A
Agus Zubiaga created
1ac170e
Upgrade stalebot and make testing it easier (#45350)
- adjust wording for the upcoming simplified process - upgrade to the github action version that has a fix for configuring issue types the bot should look at - add two inputs for the manual runs of stalebot that help testing it in a safe and controlled manner Release Notes: - N/A
Lena created
3104482
languages: Detect `.bst` files as YAML (#45015)
These files are used by the BuildStream build project: https://buildstream.build/index.html Release Notes: - Added recognition for .bst files as yaml.
Angelo Verlain created
7ee56e1
chore: Add worktree_benchmarks to cargo workspace (#45344)
Idk why it was missing, but Release Notes: - N/A
Piotr Osiewicz created
f2495a6
Add Restore File action in project_panel for git modified files (#42490)
Co-authored-by: cameron <cameron.studdstreet@gmail.com>
Korbin de Man and cameron created
6d776c3
project: Sanitize single-line completions from trailing newlines (#44965)
Closes #43991 trim documentation string to prevent completion overlap previous [Screencast from 2025-12-16 14-55-58.webm](https://github.com/user-attachments/assets/d7674d82-63b0-4a85-a90f-b5c5091e4a82) after change [Screencast from 2025-12-16 14-50-05.webm](https://github.com/user-attachments/assets/109c22b5-3fff-49c8-a2ec-b1af467d6320) Release Notes: - Fixed an issue where completions in the completion menu would span multiple lines.
prayansh_chhablani created
596826f
editor: Strip trailing newlines from completion documentation (#45342)
Closes #45337
Release Notes:
- Fixed broken completion menu layout caused by trailing newlines in ty
documentation
<table>
<tr>
<td>Before</td>
<td>After</td>
</tr>
<tr>
<td>
<img width="756" height="875" alt="before"
src="https://github.com/user-attachments/assets/1d9da7d8-437a-4f03-8158-32ff1af9a428"
/>
</td>
<td>
<img width="755" height="875" alt="after"
src="https://github.com/user-attachments/assets/dca31af3-e571-445a-b4a9-c300bb4c63fa"
/>
</td>
</tr>
</table>
Mayank Verma created
e44529e
Hide inline overlays when context menu is open (#45266)
Closes #23367 **Summary** - Prevents inline diagnostics, code actions, blame annotations, and hover popovers from overlapping with the right-click context menu by checking for `mouse_context_menu` presence before rendering these UI elements. PS: Same behaviour is present in other editors like VS Code. **Screen recording** https://github.com/user-attachments/assets/8290412b-0f86-4985-8c70-13440686e530 Release Notes: - N/A *or* Added/Fixed/Improved ...
Mustaque Ahmed created
e052127
terminal: Prevent scrollbar arithmetic underflow panic (#45282)
## Summary Fixes arithmetic underflow panics in `terminal_scrollbar.rs` by converting unsafe subtractions to `saturating_sub`. Closes #45281 ## Problem Two locations perform raw subtraction on `usize` values that panic when underflow occurs: - `offset()`: `state.total_lines - state.viewport_lines - state.display_offset` - `set_offset()`: `state.total_lines - state.viewport_lines` This happens when `total_lines < viewport_lines + display_offset`, which can occur during terminal creation, with small window sizes, or when display state becomes stale. ## Solution Replace the two unsafe subtractions with `saturating_sub`, which returns 0 on underflow instead of panicking. Also standardizes the existing `checked_sub().unwrap_or(0)` in `max_offset()` to `saturating_sub` for consistency across the file. ## Changes - N/A
rabsef-bicrym created
0531035
docs: Fix link to Anthropic prompt engineering resource (#45329)
Ryan Steil created
05ce34e
ci: Fix docs build post #45130 (#45330)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
63c4406
git: Add git clone open listener (#41669)
Alvaro Parker created
3f67c52
Remove `zed` dependency from `docs_preprocessor` (#45130)
Closes #ISSUE Uses the existing `--dump-all-actions` arg on the Zed binary to generate an asset of all of our actions so that the `docs_preprocessor` can injest it, rather than depending on the Zed crate itself to collect all action names Release Notes: - N/A *or* Added/Fixed/Improved ... --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Ben Kunkle and Zed Zippy created
435d4c5
vim: Make `vaf` include const for arrow functions in JS/TS/TSX (#45327)
Closes #24264 Release Notes: - N/A *or* Added/Fixed/Improved ...
Ben Kunkle created
e0ff995
agent ui: Make some UI elements more consistent (#45319)
- Both the mode, profile, and model selectors have the option to cycle through its options with a keybinding. In the tooltip that shows it, in some of them the "Cycle Through..." label was at the top, and in others at the bottom. Now it's all at the bottom. - We used different language in different places for "going to a file". The tool call edit card's header said "_Jump_ to File" while the edit files list said "_Go_ to File". Now it's both "Go to File". Release Notes: - N/A
Danilo Leal created
6976208
Move autofix stuff to zippy (#45304)
Although I wanted to avoid the dependency, it's hard to get github to do what we want. Release Notes: - N/A
Conrad Irwin created
6055b45
Add support for provider extensions (but no extensions yet) (#45277)
This adds support for provider extensions but doesn't actually add any yet. Release Notes: - N/A
Richard Feldman created
88f90c1
Add language server version in a tooltip on language server hover (#45302)
I wanted a way to make it easy to figure out which version of a language server Zed is running. Now, you get a tooltip when hovering on a language server in the Language Servers popover. <img width="498" height="168" alt="SCR-20251218-ovln" src="https://github.com/user-attachments/assets/1ced4214-b868-4405-8881-eb7c0b75a53e" /> This PR also fixes a bug. We had existing code to open a tooltip on these language server entrees and display the language server message, which was never fully wired up for `CustomEntry`s. Now, in this PR, we will show show either version, message, or both, in the documentation aside, depending on what the server has given us. Mostly done with Droid (using GPT-5.2), with manual review and multiple follow ups to guide it into using existing patterns in the codebase, when it did something abnormal. Release Notes: - Added language server version in a tooltip on language server hover --------- Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Joseph T. Lyons and factory-droid[bot] created
0d74f98
danger: Upgrade `danger-plugin-pr-hygiene` to v0.7.1 (#45303)
This PR upgrades `danger-plugin-pr-hygiene` to v0.7.1. Release Notes: - N/A
Marshall Bowers created
ca90b85
docs: Remove local collaboration docs (#45301)
This PR removes the docs for running Collab locally, as they are outdated and don't reflect the current state of affairs. Release Notes: - N/A
Marshall Bowers created
8516d81
Fix display name for Ollama models (#45287)
Closes #43646 Release Notes: - Fixed display name for Ollama models
Richard Feldman created
af589ff
agent_ui: Simplify timestamp display (#45296)
This PR simplifies how we display thread timestamps in the agent panel's history view. For threads that are older-than-yesterday, we just show how many days ago that thread was had in. Hovering over the thread item shows you both the title and the full date, if needed (time and date). <img width="450" height="786" alt="Screenshot 2025-12-18 at 5 24@2x" src="https://github.com/user-attachments/assets/11416e9b-f1b0-4307-9db0-988a95a316a1" /> Release Notes: - N/A
Danilo Leal created
d2bbfbb
lsp: Broadcast our capability for `MessageActionItem`s (#45047)
Closes #37902 Release Notes: - Enable LSP Message action items for more language servers. These are interactive prompts, often for things like downloading build inputs for a project.
Julia Ryan created
413f4ea
Redact environment variables from language server spawn errors (#44783)
Redact environment variables from zed logs when lsp fails to spawn. Release Notes: - N/A
Peter Tripp created
1b6d588
danger: Deny conventional commits in PR titles (#45283)
This PR upgrades `danger-plugin-pr-hygiene` to v0.7.0 so that we can have Danger deny conventional commits in PR titles. Release Notes: - N/A
Marshall Bowers created
334ca21
Truncate code actions with a long label and show full label aside (#45268)
Closes #43355 Fixes the issue were code actions with long labels would get cut off without being able to see the full description. We now properly truncate those labels with an ellipsis and show the full description in an aside. Release Notes: - Added ellipsis to truncated code actions and an aside showing the full action description.
Gaauwe Rombouts created
f58278a
glossary: Fix grammar and typo (#45267)
Fixes grammar and a typo in `Picker` description. Release Notes: - N/A
Emmanuel Amoah created
e10b9b7
git: Add global git integration enable/disable setting (#43326)
Closes #13304 Release Notes: - Add global `git status` and `git diff` on/off in one place instead of control everywhere We can first review to ensure this change meets both `Zed` and user requirements, as well as code rules. Currently, we only support user-level settings. We can wait for this PR: https://github.com/zed-industries/zed/pull/43173 to be merged, then modify it to support both user and project levels.
Leo created
098adf3
gpui: Enable direct-to-display optimization for metal (#44334)
When profiling Zed with Instruments, a warning appears indicating that surfaces cannot be pushed directly to the display as they are non-opaque. This happens because the metal layer is currently marked as non-opaque by default, even though the window itself is not transparent. <img width="590" height="55" alt="image" src="https://github.com/user-attachments/assets/2647733e-c75b-4aec-aa19-e8b2ffd6194b" /> Metal on macOS can bypass compositing and present frames directly to the display when several conditions are met. One of those conditions is that the backing layer must be declared opaque. Apple’s documentation notes that marking layers as opaque allows the system to avoid unnecessary compositing work, reducing GPU load and improving frame pacing Ref: https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos This PR updates the Metal renderer to mark the layer as opaque whenever the window does not use transparency. This makes Zed eligible for macOS’s direct-to-display optimization in scenarios where the system can apply it. Release Notes: - gpui: Mark metal layers opaque for non-transparent windows to allow direct-to-display when supported --------- Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Marco Mihai Condrache created