a6b7af3
Make LiveKit source use audio priority (#44881)
Click to expand commit body
Release Notes: - N/A
Yara 🏳️⚧️ created
a6b7af3
Make LiveKit source use audio priority (#44881)
Release Notes: - N/A
Yara 🏳️⚧️ created
7889aaf
lsp: Support on-type formatting request with newlines (#44882)
We called out to `request_on_type_formatting` only in handle_input function, but newlines are actually handled by editor::Newline action. Closes #12383 Release Notes: - Added support for on-type formatting with newlines.
Piotr Osiewicz created
3bf57dc
Revert "extension_api: Add `digest` to `GithubReleaseAsset`" (#44880)
Reverts zed-industries/zed#44399
Finn Evers created
a3ac595
gpui: Make refining a `Style` properly refine the `TextStyle` (#42852)
## Motivating problem
The gpui API currently has this counter intuitive behaviour
```rust
div()
.id("hallo")
.cursor_pointer()
.text_color(white())
.font_weight(FontWeight::SEMIBOLD)
.text_size(px(20.0))
.child("hallo")
.active(|this| this.text_color(red()))
```
By changing the text_color when the div is active, the current behaviour
is to overwrite all of the text styling rather than do a proper
refinement of the existing text styling leading to this odd result:
The button being active inadvertently changes the font size.
https://github.com/user-attachments/assets/1ff51169-0d76-4ee5-bbb0-004eb9ffdf2c
## Solution
Previously refining a Style would not recursively refine the TextStyle
inside of it, leading to this behaviour:
```rust
let mut style = Style::default();
style.refine(&StyleRefinement::default().text_size(px(20.0)));
style.refine(&StyleRefinement::default().font_weight(FontWeight::SEMIBOLD));
assert!(style.text_style().unwrap().font_size.is_none());
//assertion passes
```
(As best as I can tell) Style deliberately has `pub text:
TextStyleRefinement` storing the `TextStyleRefinement` rather than the
absolute `TextStyle` so that these refinements can be elsewhere used in
cascading text styles down to element's children. But a consequence of
that is that the refine macro was not properly recursively refining the
`text` field as it ought to.
I've modified the refine macro so that the `#[refineable]` attribute
works with `TextStyleRefinement` as well as the usual `TextStyle`.
(Perhaps a little bit haphazardly by simply checking whether the name
ends in Refinement - there may be a better solution there).
This PR resolves the motivating problem and triggers the assertion in
the above code as you'd expect. I've compiled zed under these changes
and all seems to be in order there.
Release Notes:
- N/A
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Serophots and Antonio Scandurra created
63bfb61
scheduler: Fix background threads ending early (#44878)
Release Notes: - N/A Co-authored-by: kate <work@localcc.cc>
Yara 🏳️⚧️ and kate created
5fe7fd9
editor: Fix block cursor offset when selecting text (#42837)
Vim visual mode and Helix selection mode both require the cursor to be on the last character of the selection. Until now, this was implemented by offsetting the cursor one character to the left whenever a block cursor is used. (Since the visual modes use a block cursor.) However, this oversees the problem that **some users might want to use the block cursor without being in visual mode**. Meaning that the cursor is offset by one character to the left even though Vim/Helix mode isn't even activated. Since the Vim mode implementation is separate from the `editor` crate the solution is not as straightforward as just checking the current vim mode. Therefore this PR introduces a new `Editor` struct field called `cursor_offset_on_selection`. This field replaces the previous check condition and is set to `true` whenever the Vim mode is changed to a visual mode, and `false` otherwise. Closes #36677 and #20121 Release Notes: - Fixes block and hollow cursor being offset when selecting text --------- Co-authored-by: dino <dinojoaocosta@gmail.com>
Lennart and dino created
a61c14c
Add setting to hide user menu in the title bar (#44466)
Closes #44417 Release Notes: - Added a setting `show_user_menu` (defaulting to true) which shows or hides the user menu (the one with the user avatar) in title bar. --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Jake Go and Danilo Leal created
c996934
Helix: Fix visual/textual line up/down (#42676)
Release Notes: - Make Helix keybinds use visual line movement for `j`, `Down`, `k` and `Up`, and textual line movement for `g j`, `g Down`, `g k` and `g Up`.
Kasper created
5805f62
git_ui: Show missing right border on selected items (#44747)
For folders and files basically any selected item in the git panel we draw a border around it. The issue is that the right side of this border wasn't ever visible. In the project_panel.rs file I've saw that the decision was to make the right side border 2 pixels. And this panel doesn't have this issue, no matter which side of the dock is selected. So it was a very easy `look at how we did x do y`. Before:  After:  I don't think it warrants a release note. Release Notes: - N/A --------- Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Devzeth and Danilo Leal created
bd481de
git_ui: Add dismiss button to status toast (#44813)
Release Notes: - N/A --------- Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com> Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Xiaobo Liu and Danilo Leal created
59b0165
ui: Improve focused border color consistency across panels (#44754)
The issue is that we aren't consistent in using the same `panel_focus_border` color across zed. Might completely fix my issue: #44750 For focused items in: - outline panel - git panel While these: - project panel - keymap editor tab Are actually using the panel_focused_border option. Not sure if this warrants a release note, feel free to adapt. Release Notes: - N/A
Devzeth created
3e8d557
proto: Bump to v0.3.0 (#44866)
Release Notes: - N/A
Finn Evers created
8fb2bde
html: Bump to v0.3.0 (#44865)
Release Notes: - N/A
Finn Evers created
8868322
Fix formatting of default settings (#44867)
Another day, another me wishing for [merge queue](https://github.com/user-attachments/assets/ee1c313b-7d26-4d4a-9cc0-f1faeaac8251) Release Notes: - N/A
Finn Evers created
b633de6
gpui: Improve `cx.on_action` method to support chaining (#44353)
Release Notes: - N/A To let `cx.on_action` support chaining like the `on_action` method of Div. https://github.com/zed-industries/zed/blob/ebcb2b2e646f10006dc40167d16e82ae74caa3a2/crates/agent_ui/src/acp/thread_view.rs#L5867-L5872
Jason Lee created
2f63543
agent: Disable git pager to avoid hangs (#43277)
- Set PAGER='' and GIT_PAGER=cat for agent/terminal commands so pager configs (e.g. delta) don't hang tool output\n\nFixes #42943 Release Notes: - Prevent git pager configs from hanging agent/terminal git commands by forcing PAGER and GIT_PAGER off.
Oscar Villavicencio created
79d4f7d
extension_api: Add `digest` to `GithubReleaseAsset` (#44399)
Release Notes: - N/A
Finn Evers created
693b978
proto: Add two language servers and change used grammar (#44440)
Closes #43784 Closes #44375 Closes #21057 This PR updates the Proto extension to include support for two new language servers as well as an updated grammar for better highlighting. Release Notes: - Improved Proto support to work better out of the box.
Finn Evers created
dd13c95
Make `cmd-click` require the modifier on mousedown (#44579)
Closes #44537 Release Notes: - Improved Cmd+Click behavior. Now requires Cmd to be pressed before the click starts or it doesn't run
Zachiah Sawyer created
a78ffda
search: Retain replace status when re-deploying active search panels (#44862)
Closes https://github.com/zed-industries/zed/issues/15918 Release Notes: - Fixed search bars losing their replace state if you re-focus on them via actions or keybinds
Lukas Wirth created
c952de4
Cleanup helix keymaps (#43735)
Release Notes: - Add search category to helix keymaps - Cleanup unnecessary comments - Indicate non helix keymap
Abderrahmane TAHRI JOUTI created
75c71a9
Kick off agent v2 (#44190)
🔜 TODO: - [x] Add a utility pane to the left and right edges of the workspace - [x] Add a maximize button to the left and right side of the pane - [x] Add a new agents pane - [x] Add a feature flag turning these off POV: You're working agentically <img width="354" height="606" alt="Screenshot 2025-12-13 at 11 50 14 PM" src="https://github.com/user-attachments/assets/ce5469f9-adc2-47f5-a978-a48bf992f5f7" /> Release Notes: - N/A --------- Co-authored-by: Nathan Sobo <nathan@zed.dev> Co-authored-by: Zed <zed@zed.dev>
Mikayla Maki , Nathan Sobo , and Zed created
213c1b2
Add global search keybinding from helix (#43363)
In helix, `space /` activates a global search picker, so I think that it should be the same in zed's helix mode. Release Notes: - Added helix's `space /` keybinding to open a global search menu to zed's helix mode
godalming123 created
be57307
Inline assistant finishing touches (#44851)
Tighten up evals, make assistant less talkative, get them passing a bit more, improve telemetry, stream in failure messages, and turn it on for staff. Release Notes: - N/A
Mikayla Maki created
38f4e21
themes: Improve Gruvbox terminal colors (#38536)
This PR makes zed terminal gruvbox theme consistent with other terminals
themes.
Current ansi colors is broken, by not only not using colors from
original palette, but also by inverting of bright/normal colors...
Currently I took colors from Ghostty (Iterm2 themes), making sure that
they are consistent with palette.
For dim colors I darken them by decreasing "Value" from HSV
representation of colors by 30%.
I am open to discussion and willing to implement those changes for light
theme after receiving feedback.
Examples below:
| Before | After |
| - | - |
| <img width="489" height="472" alt="image"
src="https://github.com/user-attachments/assets/599dd162-6666-4705-adb7-1b62a7800f70"
/> | <img width="490" height="470" alt="image"
src="https://github.com/user-attachments/assets/fee02cc5-6ca8-4daa-88f1-7f37f27f2ce4"
/> |
Script to reproduce:
```bash
#!/bin/bash
echo "Normal ANSI Colors:"
for i in {30..37}; do
printf "\e[${i}m Text \e[0m"
done
echo ""
echo "Bright ANSI Colors (Foreground):"
for i in {90..97}; do
printf "\e[${i}m Text \e[0m"
done
echo ""
echo "Bright ANSI Colors (Background):"
for i in {100..107}; do
printf "\e[${i}m Text \e[0m"
done
echo ""
echo "Foreground and Background Combinations:"
for fg in {30..37}; do
for bg in {40..47}; do
printf "\e[${fg};${bg}m FB \e[0m"
done
echo ""
done
echo "Bright Foreground and Background Combinations:"
for fg in {90..97}; do
for bg in {100..107}; do
printf "\e[${fg};${bg}m FB \e[0m"
done
echo ""
done
```
Release Notes:
- Fixed ANSI colors definitions in the Gruvbox theme (thanks @dangooddd)
---------
Co-authored-by: Oleksiy Syvokon <oleksiy@zed.dev>
Dmitry Nefedov and Oleksiy Syvokon created
6067436
rope: Optimize rope construction (#44345)
I have noticed you care about `SumTree` (and `Rope`) construction
performance, hence using rayon for parallelism and careful `Chunk`
splitting to avoid reallocation in `Rope::push`. It seemed strange to me
that using multi-threading is that beneficial there, so I tried to
investigate why the serial version (`SumTree::from_iter`) is slow in the
first place.
From my analysis I believe there are two main factors here:
1. `SumTree::from_iter` stores temporary `Node<T>` values in a vector
instead of heap-allocating them immediately and storing `SumTree<T>`
directly, as `SumTree::from_par_iter` does.
2. `Chunk::new` is quite slow: for some reason the compiler does not
vectorize it and seems to struggle to optimize u128 shifts (at least on
x86_64).
For (1) the solution is simple: allocate `Node<T>` immediately after
construction, just like `SumTree::from_par_iter`.
For (2) I was able to get better codegen by rewriting it into a simpler
per-byte loop and splitting computation into smaller chunks to avoid
slow u128 shifts.
There was a similar effort recently in #43193 using portable_simd
(currently nightly only) to optimize `Chunk::push_str`. From what I
understand from that discussion, you seem okay with hand-rolled SIMD for
specific architectures. If so, then I also provide sse2 implementation
for x86_64. Feel free to remove it if you think this is unnecessary.
To test performance I used a big CSV file (~1GB, mostly ASCII) and
measured `Rope::from` with this program:
```rust
fn main() {
let text = std::fs::read_to_string("big.csv").unwrap();
let start = std::time::Instant::now();
let rope = rope::Rope::from(text);
println!("{}ms, {}", start.elapsed().as_millis(), rope.len());
}
```
Here are results on my machine (Ryzen 7 4800H)
| | Parallel | Serial |
| ------------ | -------- | ------ |
| Before | 1123ms | 9154ms |
| After | 497ms | 2081ms |
| After (sse2) | 480ms | 1454ms |
Since serial performance is now much closer to parallel, I also
increased `PARALLEL_THRESHOLD` to 1000. In my tests the parallel version
starts to beat serial at around 150 KB strings. This constant might
require more tweaking and testing though, especially on ARM64.
<details>
<summary>cargo bench (SSE2 vs before)</summary>
```
Running benches\rope_benchmark.rs (D:\zed\target\release\deps\rope_benchmark-3f8476f7dfb79154.exe)
Gnuplot not found, using plotters backend
push/4096 time: [43.592 µs 43.658 µs 43.733 µs]
thrpt: [89.320 MiB/s 89.473 MiB/s 89.610 MiB/s]
change:
time: [-78.523% -78.222% -77.854%] (p = 0.00 < 0.05)
thrpt: [+351.56% +359.19% +365.61%]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
push/65536 time: [632.36 µs 634.03 µs 635.76 µs]
thrpt: [98.308 MiB/s 98.576 MiB/s 98.836 MiB/s]
change:
time: [-51.521% -50.850% -50.325%] (p = 0.00 < 0.05)
thrpt: [+101.31% +103.46% +106.28%]
Performance has improved.
Found 18 outliers among 100 measurements (18.00%)
11 (11.00%) low mild
6 (6.00%) high mild
1 (1.00%) high severe
append/4096 time: [11.635 µs 11.664 µs 11.698 µs]
thrpt: [333.92 MiB/s 334.89 MiB/s 335.72 MiB/s]
change:
time: [-24.543% -23.925% -22.660%] (p = 0.00 < 0.05)
thrpt: [+29.298% +31.450% +32.525%]
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
2 (2.00%) low mild
2 (2.00%) high mild
8 (8.00%) high severe
append/65536 time: [1.1287 µs 1.1324 µs 1.1360 µs]
thrpt: [53.727 GiB/s 53.900 GiB/s 54.075 GiB/s]
change:
time: [-44.153% -37.614% -29.834%] (p = 0.00 < 0.05)
thrpt: [+42.518% +60.292% +79.061%]
Performance has improved.
slice/4096 time: [28.340 µs 28.372 µs 28.406 µs]
thrpt: [137.52 MiB/s 137.68 MiB/s 137.83 MiB/s]
change:
time: [-8.0798% -6.3955% -4.4109%] (p = 0.00 < 0.05)
thrpt: [+4.6145% +6.8325% +8.7900%]
Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severe
slice/65536 time: [527.51 µs 528.17 µs 528.90 µs]
thrpt: [118.17 MiB/s 118.33 MiB/s 118.48 MiB/s]
change:
time: [-53.819% -45.431% -34.578%] (p = 0.00 < 0.05)
thrpt: [+52.853% +83.256% +116.54%]
Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
bytes_in_range/4096 time: [3.2545 µs 3.2646 µs 3.2797 µs]
thrpt: [1.1631 GiB/s 1.1685 GiB/s 1.1721 GiB/s]
change:
time: [-3.4829% -2.4391% -1.7166%] (p = 0.00 < 0.05)
thrpt: [+1.7466% +2.5001% +3.6085%]
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
6 (6.00%) high mild
2 (2.00%) high severe
bytes_in_range/65536 time: [80.770 µs 80.832 µs 80.904 µs]
thrpt: [772.52 MiB/s 773.21 MiB/s 773.80 MiB/s]
change:
time: [-1.8710% -1.3843% -0.9044%] (p = 0.00 < 0.05)
thrpt: [+0.9126% +1.4037% +1.9067%]
Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
5 (5.00%) high mild
3 (3.00%) high severe
chars/4096 time: [790.50 ns 791.10 ns 791.88 ns]
thrpt: [4.8173 GiB/s 4.8220 GiB/s 4.8257 GiB/s]
change:
time: [+0.4318% +1.4558% +2.0256%] (p = 0.00 < 0.05)
thrpt: [-1.9854% -1.4349% -0.4299%]
Change within noise threshold.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) low severe
1 (1.00%) low mild
2 (2.00%) high mild
2 (2.00%) high severe
chars/65536 time: [12.672 µs 12.688 µs 12.703 µs]
thrpt: [4.8046 GiB/s 4.8106 GiB/s 4.8164 GiB/s]
change:
time: [-2.7794% -1.2987% -0.2020%] (p = 0.04 < 0.05)
thrpt: [+0.2025% +1.3158% +2.8588%]
Change within noise threshold.
Found 15 outliers among 100 measurements (15.00%)
1 (1.00%) low mild
12 (12.00%) high mild
2 (2.00%) high severe
clip_point/4096 time: [63.009 µs 63.126 µs 63.225 µs]
thrpt: [61.783 MiB/s 61.880 MiB/s 61.995 MiB/s]
change:
time: [+2.0484% +3.2218% +5.2181%] (p = 0.00 < 0.05)
thrpt: [-4.9593% -3.1213% -2.0073%]
Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
12 (12.00%) low mild
1 (1.00%) high severe
Benchmarking clip_point/65536: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.7s, enable flat sampling, or reduce sample count to 50.
clip_point/65536 time: [1.2420 ms 1.2430 ms 1.2439 ms]
thrpt: [50.246 MiB/s 50.283 MiB/s 50.322 MiB/s]
change:
time: [-0.3495% -0.0401% +0.1990%] (p = 0.80 > 0.05)
thrpt: [-0.1986% +0.0401% +0.3507%]
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
6 (6.00%) high mild
1 (1.00%) high severe
point_to_offset/4096 time: [16.104 µs 16.119 µs 16.134 µs]
thrpt: [242.11 MiB/s 242.33 MiB/s 242.56 MiB/s]
change:
time: [-1.3816% -0.2497% +2.2181%] (p = 0.84 > 0.05)
thrpt: [-2.1699% +0.2503% +1.4009%]
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) low mild
1 (1.00%) high mild
2 (2.00%) high severe
point_to_offset/65536 time: [356.28 µs 356.57 µs 356.86 µs]
thrpt: [175.14 MiB/s 175.28 MiB/s 175.42 MiB/s]
change:
time: [-3.7072% -2.3338% -1.4742%] (p = 0.00 < 0.05)
thrpt: [+1.4962% +2.3896% +3.8499%]
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mild
cursor/4096 time: [18.893 µs 18.934 µs 18.974 µs]
thrpt: [205.87 MiB/s 206.31 MiB/s 206.76 MiB/s]
change:
time: [-2.3645% -2.0729% -1.7931%] (p = 0.00 < 0.05)
thrpt: [+1.8259% +2.1168% +2.4218%]
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
12 (12.00%) high mild
cursor/65536 time: [459.97 µs 460.40 µs 461.04 µs]
thrpt: [135.56 MiB/s 135.75 MiB/s 135.88 MiB/s]
change:
time: [-5.7445% -4.2758% -3.1344%] (p = 0.00 < 0.05)
thrpt: [+3.2358% +4.4668% +6.0946%]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
append many/small to large
time: [38.364 ms 38.620 ms 38.907 ms]
thrpt: [313.75 MiB/s 316.08 MiB/s 318.19 MiB/s]
change:
time: [-0.2042% +1.0954% +2.3334%] (p = 0.10 > 0.05)
thrpt: [-2.2802% -1.0836% +0.2046%]
No change in performance detected.
Found 21 outliers among 100 measurements (21.00%)
9 (9.00%) high mild
12 (12.00%) high severe
append many/large to small
time: [48.045 ms 48.322 ms 48.648 ms]
thrpt: [250.92 MiB/s 252.62 MiB/s 254.07 MiB/s]
change:
time: [-6.5298% -5.6919% -4.8532%] (p = 0.00 < 0.05)
thrpt: [+5.1007% +6.0354% +6.9859%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severe
```
</details>
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Vasyl Protsiv created
54c4302
assistant_slash_commands: Fix AI text thread path display bugs on Windows and all platforms (#41880)
## Fix incorrect directory path folding in slash command file collection **Description:** This PR fixes a bug in the `collect_files` function where the directory folding logic (used to compact chains like `.github/workflows`) failed to reset its state when traversing out of a folded branch. **The Issue:** The `folded_directory_names` accumulator was persisting across loop iterations. If the traversal moved from a folded directory (e.g., `.github/workflows`) to a sibling directory (e.g., `.zed`), the sibling would incorrectly inherit the prefix of the previously folded path, resulting in incorrect paths like `.github/.zed`. **The Fix:** * Introduced `folded_directory_path` to track the specific path currently being folded. * Added a check to reset `folded_directory_names` whenever the traversal encounters an entry that is not a child of the currently folded path. * Ensured state is cleared immediately after a folded directory is rendered. **Release Notes:** - Fixed an issue where using slash commands to collect files would sometimes display incorrect directory paths (e.g., showing `.github/.zed` instead of `.zed`) when adjacent directories were automatically folded. --------- Co-authored-by: Lukas Wirth <lukas@zed.dev>
Lay Sheth and Lukas Wirth created
3db2d03
Stop spawning ACP/MCP servers with interactive shells (#44826)
### Summary: - Ensure the external agents with ACP servers start via non-interactive shells to prevent shell startup noise from corrupting JSON-RPC. - Apply the same tweak to MCP stdio transports so remote context servers aren’t affected by prompts or greetings. ### Description: Switch both ACP and MCP stdio launch paths to call `ShellBuilder::non_interactive()` before building the command. This removes `-i` on POSIX shells, suppressing prompt/title sequences that previously prefixed the first JSON line and caused `serde_json` parse failures. No functional regressions are expected: both code paths only need a shell for Windows/npm script compatibility, not for interactivity. Release Notes: - Fixed external agents that hung on “Loading…” when shell startup output broke JSON-RPC initialization.
Xipeng Jin created
63918b8
docs: Document implemented `clangd` extensions (#44308)
Zed currently doesn’t support all protocol extensions implemented by `clangd`, but it does support two: - `textDocument/inactiveRegion` - `textDocument/switchSourceHeader` Release Notes: - N/A --------- Co-authored-by: Kunall Banerjee <hey@kimchiii.space>
Haojian Wu and Kunall Banerjee created
82535a5
gpui: Fix use of `libc::sched_param` on musl (#44846)
Release Notes: - N/A *or* Added/Fixed/Improved ...
Lukas Wirth created
c2c8b4b
terminal: Fix hyperlinks for `file://` schemas windows drive URIs (#44847)
Closes https://github.com/zed-industries/zed/issues/39189 Release Notes: - Fixed terminal hyperlinking not working for `file://` schemes with windows drive letters
Lukas Wirth created
6cab835
terminal: Remove SHLVL from terminal environment to fix incorrect shell level (#44835)
Fixes #33958 ## Problem When opening a terminal in Zed, `SHLVL` incorrectly starts at 2 instead of 1. On `workspace: reload`, it increases by 2 instead of 1. ## Root Cause 1. Zed's `shell_env::capture()` spawns a login shell (`-l -i -c`) to capture the user's environment, which increments `SHLVL` 2. The captured `SHLVL` is passed through to the PTY options 3. When alacritty_terminal spawns the user's shell, it increments `SHLVL` again Result: `SHLVL` = captured value + 1 = 2 (when launched from Finder) ## Solution Remove `SHLVL` from the environment in `TerminalBuilder::new()` before passing it to alacritty_terminal. This allows the spawned shell to initialize `SHLVL` to 1 on its own, matching the behavior of standalone terminal emulators like iTerm2, Kitty, and Alacritty. ## Testing - Launch Zed from Finder → open terminal → `echo $SHLVL` → should output `1` - Launch Zed from shell → open terminal → `echo $SHLVL` → should output `1` - `workspace: reload` → open terminal → `echo $SHLVL` → should remain `1` - Tested with bash, zsh, fish Release Notes: - Fixed terminal `$SHLVL` starting at 2 instead of 1 ([#33958](https://github.com/zed-industries/zed/issues/33958))
rari404 created
0c47984
New evals for inline assistant (#44431)
Also factor out some common code in the evals. Release Notes: - N/A --------- Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Michael Benfield and Mikayla Maki created
b8e40e6
Add an action for capturing your last edit as an edit prediction example (#44841)
This PR adds a staff-only button to the edit prediction menu for capturing your current editing session as edit prediction example file. When you click that button, it opens a markdown tab with the example. By default, the most recent change that you've made is used as the expected patch, and all of the previous events are used as the editing history. <img width="303" height="123" alt="Screenshot 2025-12-14 at 6 58 33 PM" src="https://github.com/user-attachments/assets/600c7bf2-7cf4-4d27-8cd4-8bb70d0b20b0" /> Release Notes: - N/A
Max Brunsfeld created
d7da5d3
Finish inline telemetry changes (#44842)
Closes #ISSUE Release Notes: - N/A
Mikayla Maki created
86aa9ab
git: Avoid removing project excerpts for dirty buffers (#44312)
Imitating the approach of #41829. Prevents e.g. reverting a hunk and having that excerpt yanked out from under the cursor. Release Notes: - git: Improved stability of excerpts when editing in the project diff.
Cole Miller created
a51585d
Fix race condition in test_collaborating_with_completion (#44806)
The test `test_collaborating_with_completion` has a latent race
condition that hasn't manifested on CI yet but could cause hangs with
certain task orderings.
## The Bug
Commit `fd1494c31a` set up LSP request handlers AFTER typing the trigger
character:
```rust
// Type trigger first - spawns async tasks to send completion request
editor_b.update_in(cx_b, |editor, window, cx| {
editor.handle_input(".", window, cx);
});
// THEN set up handlers (race condition!)
fake_language_server
.set_request_handler::<lsp::request::Completion, _, _>(...)
.next().await.unwrap(); // Waits for handler to receive a request
```
Whether this works depends on task scheduling order, which varies by
seed. If the completion request is processed before the handler is
registered, the request goes to `on_unhandled_notification` which claims
to handle it but sends no response, causing a hang.
## Changes
- Move handler setup BEFORE typing the trigger character
- Make `TestDispatcher::spawn_realtime` panic to prevent future
non-determinism from real OS threads
- Add `execution_hash()` and `execution_count()` to TestDispatcher for
debugging
- Add `DEBUG_SCHEDULER=1` logging for task execution tracing
- Document the investigation in `situation.md`
cc @localcc @SomeoneToIgnore (authors of related commits)
Release Notes:
- N/A
---------
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
Nathan Sobo and Kirill Bulatov created
26b261a
Implement Sum trait for Pixels (#44809)
This adds implementations of `std::iter::Sum` for `Pixels`, allowing the use of `.sum()` on iterators of `Pixels` values. ### Changes - Implement `Sum<Pixels>` for `Pixels` (owned values) - Implement `Sum<&Pixels>` for `Pixels` (references) This enables ergonomic patterns like: ```rust let total: Pixels = pixel_values.iter().sum(); ```
Nathan Sobo created
f80ef9a
editor: Fix inlay hovers blinking in sync with cursors (#44822)
This change matches how normal hovers are handled (which early return with `None` in this branch) Release Notes: - Fixed hover boxes for inlays blinking in and out without movement when cursor blinking was enabled
Lukas Wirth created
13594bd
keymap: More default keymap fixes for windows/linux (#44821)
Release Notes: - N/A *or* Added/Fixed/Improved ...
Lukas Wirth created
e9073ec
agent_ui: Fix fallback icon used for external agents (#44777)
When an external agent doesn't provide an icon, we were using different fallback icons in all the places we display icons (settings view, thread new menu, and the thread view toolbar itself). Release Notes: - N/A
Danilo Leal created
00169e0
git: Fix create remote branch (#44805)
Fix a bug where the branch picker would be dismissed before completing the add remote flow, thus making Zed unable to add remote repositories through the branch picker. This bug was caused by the picker always being dismissed on the confirm action, so the fix was stopping the branch modal from being dismissed too early. I also cleaned up the UI a bit and code. 1. Removed the loading field from the Branch delegate because it was never used and the activity indicator will show remote add command if it takes a while. 2. I replaced some async task spawning with the use of `cx.defer`. 3. Added a `add remote name` fake entry when the picker is in the name remote state. I did this so the UI would be consistent with the other states. 4. Added two regression tests. 4.1 One to prevent this bug from occurring again: https://github.com/zed-industries/zed/pull/44742 4.2 Another to prevent the early dismissal bug from occurring 5. Made `init_branch_list_test` param order consistent with Zed's code base ###### Updated UI <img width="1150" height="298" alt="image" src="https://github.com/user-attachments/assets/edead508-381c-4bd8-8a41-394dd5b7b781" /> Release Notes: - N/A
Anthony Eid created
6cc947f
Update `cc` and `cmake` crates (#44797)
This fixes the build when Visual Studio 2026 is installed. Release Notes: - N/A
John Tur created
f2cc24c
docs: Add clarifying note about Vim subword motion (#44535)
Clarify the docs regarding how operators are affected when subword motion in Vim is activated. Ref: https://github.com/zed-industries/zed/issues/23344#issuecomment-3186025873. Release Notes: - N/A --------- Co-authored-by: Kunall Banerjee <hey@kimchiii.space>
Will Garrison and Kunall Banerjee created
488fa02
Streaming tool use for inline assistant (#44751)
Depends on: https://github.com/zed-industries/zed/pull/44753 Release Notes: - N/A --------- Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Michael Benfield and Mikayla Maki created
dad6481
Disambiguate branch name in title bar (#44793)
Add the repository name when: - there's more than one repository, and - the name of the active repository doesn't match the name of the project (to avoid stuttering with the adjacent project switcher button) Release Notes: - The branch name in the title bar now includes the name of the current repository when needed to disambiguate.
Cole Miller created
0283bfb
Enable configuring edit prediction providers through the settings UI (#44505)
- Edit prediction providers can now be configured through the settings UI - Cleaned up the status bar menu to only show _configured_ providers - Added to the status bar icon button tooltip the name of the active provider - Only display the data collection functionality under "Privacy" for the Zed models - Moved the Codestral edit prediction provider out of the Mistral section in the agent panel into the settings UI - Refined and improved UI and states for configuring GitHub Copilot as both an agent and edit prediction provider #### Todos before merge: - [x] UI: Unify with settings UI style and tidy it all up - [x] Unify Copilot modal `impl`s to use separate window - [x] Remove stop light icons from GitHub modal - [x] Make dismiss events work on GitHub modal - [ ] Investigate workarounds to tell if Copilot authenticated even when LSP not running Release Notes: - settings_ui: Added a section for configuring edit prediction providers under AI > Edit Predictions, including Codestral and GitHub Copilot. Once you've updated you can use the following link to open it: zed://settings/edit_predictions.providers --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
Danilo Leal and Ben Kunkle created
56daba2
supports_streaming_tools member (#44753)
Release Notes: - N/A
Michael Benfield created
6e0ecbc
docs: Use `relative_line_numbers` instead of `toggle_relative_line_numbers` (#44749)
Just a small docs change With the deprecation of `toggle_relative_line_numbers` the docs should reflect that Release Notes: - N/A
Josh Ayres created
4754422
Add angled bracket highlighting for C++ (#44735)
Enables rainbow bracket highlighting for angle brackets (< >) in C++. <img width="401" height="46" alt="image" src="https://github.com/user-attachments/assets/169afdaa-c8be-4b78-bf64-9cf08787eb47" /> Release Notes: - Added rainbow bracket coloring for C++ angle brackets (`<>`)
Haojian Wu created