d1e2a1f
gpui: Assert validity of text runs for `StyleText` (#39581)
Click to expand commit body
Should help with figuring out the char boundary panic in text shaping on
windows
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
79a8986
settings ui: Add scrollbar and other design details (#39504)
Click to expand commit body
Release Notes:
- N/A
Danilo Leal
created
d2b91eb
settings ui: Add numeric steppers to settings UI (#39491)
Click to expand commit body
This PR adds the numeric stepper component to the settings ui and
implements some settings that rely on this component as well.
I also switched {buffer/ui}_font_weight to the `gpui::FontWeight` type
and added a manual implementation of the Schemars trait. This allows Zed
to send min, max, and default information to the JSON LSP when a user is
manually editing the settings file.
The numeric stepper elements added to the settings ui are below:
- ui font size
- ui font weight
- Buffer font size
- Buffer font weight
- Scroll sensitivity
- Fast scroll sensitivity
- Vertical scroll margin
- Horizontal scroll margin
- Inline blame padding
- Inline blame delay
- Inline blame min column
- Unnecessary code fade
- Tab Size
- Hover popover delay
Release Notes:
- N/A
Anthony Eid
created
c26937a
zed: Show GPUI Inspector item in Dev build menus (#39287)
Click to expand commit body
# Why
I have find out that this tool exists by browsing Keymap Editor. I think
it would be nice for its discoverability to show it in the app menus in
Dev builds.
# How
Add "GPUI Inspector" app menu item conditionally for Dev builds only.
Release Notes:
- N/A
# Preview
<img width="1014" height="948" alt="Screenshot 2025-10-01 at 14 36 48"
src="https://github.com/user-attachments/assets/c0409e67-1f4d-44f3-90b3-293ad4fe5c73"
/>
Bartosz Kaszubowski
created
da82eec
editor: Fix utf8 boundary panic in `process_completion_for_edit` (#39561)
Click to expand commit body
Fixes ZED-1WH
Release Notes:
- Fixed panic when requesting completions after a multibyte character
Lukas Wirth
created
2bfcd60
editor: Shrink `DisplayMapSnapshot` from `824` to `256` bytes (#39568)
Click to expand commit body
We have unnecessary clones for the fields here as most of the snapshots
contain the others hierarchically.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
9c7369f
terminal: Fix rendering of zero-width combining characters (#39526)
Click to expand commit body
Add support for rendering Unicode combining characters (diacritics) in
the terminal's batched text runs.
- Add append_zero_width_chars() to handle combining marks
- Integrate zero-width chars into all batching code paths
- Update cell extras tracking logic
- Add test for combining character rendering
Fixes display of é, ñ, ô and other diacritics.
Closes #39525
Release Notes:
- Fixed: NFD/NFKD normalized text (e.g., é as e + ◌́) not rendering in
integrated terminal
Before:
<img width="874" height="688" alt="SCR-20251004-udnj"
src="https://github.com/user-attachments/assets/8d9f9c9f-dac4-4382-92c2-8b6c1d817abd"
/>
After:
<img width="873" height="686" alt="SCR-20251004-ulsw"
src="https://github.com/user-attachments/assets/fbd5cdc7-fdd6-44dc-8b05-cc425644f1a0"
/>
The editor settings control module was the first prototype of what a
settings UI could look like in Zed, but the code is outdated now and is
no longer used. So this PR removes it for cleanup.
Release Notes:
- N/A
Anthony Eid
created
ee557fb
Add window close keybindings for Settings UI (#39578)
Click to expand commit body
Closes #ISSUE
Release Notes:
- N/A
Mikayla Maki
created
f9919f9
Swap the start building and login buttons (#39576)
Click to expand commit body
New onboarding screen:
<img width="1027" height="700" alt="Screenshot 2025-10-05 at 10 38
57 PM"
src="https://github.com/user-attachments/assets/5dc49e53-68e7-4559-8ce0-1bada629781d"
/>
This PR also adds a new telemetry event: `Welcome Start Building
Clicked`
Release Notes:
- N/A
I was looking at the rope implementation and some of the existing bugs
that crash in there, and I ran cargo-mutants to inspect test coverage. I
was motivated by bugs like
https://github.com/zed-industries/zed/issues/38556 but this doesn't fix
it and the bug may well be at a higher layer.
This PR adds coverage for a few functions that aren't tested today. I
didn't find any actual bugs yet.
I can see this tree is pretty sparse on docstrings so if you think these
are too verbose I can take them out or drop the whole PR.
Release Notes:
- N/A
Martin Pool
created
d5a4890
remote: Keep full shell path on wsl (#39555)
cd61bfb
docs: Fix path of language extensions on Linux (#39425)
Click to expand commit body
Release Notes:
- N/A
Be
created
469ecfb
Emit less update events for odd FS events (#39557)
Click to expand commit body
When running flycheck, I've noticed that scrolling starts to lag:
https://github.com/user-attachments/assets/b0bef0a3-ccbd-479d-a385-273398086d38
When checking the trace, it is notable that project panel updates its
entire tree multiple times during flycheck:
<img width="2032" height="1136" alt="image"
src="https://github.com/user-attachments/assets/d1935e77-3b00-4be5-a12a-8a17a9d64202"
/>
[scrolling.trace.zip](https://github.com/user-attachments/files/22710852/scrolling.trace.zip)
Turns out, `target/debug` directory is loaded by Zed (presumably,
reported by langserver as there are sources generated by bindgen and
proto that need to be loaded), and `target/debug/build` directory
received multiple events of a `None` kind for Zed, which trigger the
rescans.
Rework the logic to omit the `None`-kind events in Zed, and to avoid
excessive repo updates if not needed.
Release Notes:
- Improved worktree FS event emits in gitignored directories
---------
Co-authored-by: Cole Miller <cole@zed.dev>
Kirill Bulatov
and
Cole Miller
created
46b6ada
markdown: Add HTML `table` element support (#38605)
Click to expand commit body
Follow-up: https://github.com/zed-industries/zed/pull/38590
**Note**: this PR contains changes from the [previous
PR](https://github.com/zed-industries/zed/pull/38590), when that PR gets
merged we should see the real changes.
This PR fixes 4 things in order to make:
1. Add html/markdown minifier to remove all the **\t** and **\n**
characters. This is needed as you cannot create new lines with markdown
by just adding an enter to the source file.
2. The event Event::HTML only contained a chunk of the real html for
multiline HTML code. I fixed this by storing the currently watched HTML
inside a buffer and at the end we parse it into the right elements.
Instead of trying to parse a chunck into multiple elements which would
always fail before.
3. Add support for html tables.
4. Fixed panic that occured when table does not have an header.
I also decided to keep the html minifier inside Zed, because making it a
dependency for just a few 100 lines seems to be an overkill. The
original crate had a few cve in their dependencies, so figured this
would be the best.
**Html table support**
<img width="1439" height="801" alt="Screenshot 2025-09-27 at 12 19 07"
src="https://github.com/user-attachments/assets/a884cc6f-cf47-45a2-81fa-91300c7bbf3f"
/>
**Before & after Zed's README (no changes)**
<img width="3440" height="1378" alt="Screenshot 2025-09-27 at 12 34 47"
src="https://github.com/user-attachments/assets/1273b094-fb24-4abd-bffa-56ef3b44670c"
/>
Release Notes:
- Markdown: Added support for html tables
Remco Smits
created
1a9e9c5
workspace: Add `Close Multibuffers` pane context menu entry (#39199)
## Problem
When splitting a terminal pane, the new pane opens in the root directory
(`/`) instead of preserving the current working directory of the
original terminal.
For example, when working in `/Users/modestnerd/Developer/Projects/zed`
(my pc) and splitting the terminal pane, the new pane would open in `/`
instead of staying in the current directory.
## Solution
Restructured the fallback logic in
`new_pane_with_cloned_active_terminal` (terminal_panel.rs:452-456) to
ensure `default_working_directory(workspace, cx)` is called as a
fallback even when a terminal view exists but its `working_directory()`
returns `None`.
The fix changes the nested `and_then` to use `or_else` for the fallback,
ensuring the working directory is always properly resolved before
entering the async block.
Release Notes:
- Fixed terminal split pane opening in wrong directory instead of
preserving the current working directory
Ngonidzashe Mangudya
created
bcd2d26
Fix CRLF handling in display-only terminals (#39538)
Click to expand commit body
## Before
<img width="558" height="739" alt="Screenshot 2025-10-03 at 11 08 43 PM"
src="https://github.com/user-attachments/assets/5dae7f9d-03b6-48eb-826d-e2be60320546"
/>
## After
<img width="551" height="843" alt="Screenshot 2025-10-04 at 8 29 51 PM"
src="https://github.com/user-attachments/assets/2b06dcec-7758-42ad-acf0-c32a7f50f1b1"
/>
No release notes because we aren't using display-only terminals anywhere
yet (`codex-acp` will be the first to use them, and it's still
feature-flagged right now).
Release Notes:
- N/A
Richard Feldman
created
b32075c
Decouple agent reregistration from settings changes (#39528)
Click to expand commit body
Fixes a `--release`-only bug in feature-flagged agents where the feature
flag isn't picked up in some situations (unless there was a settings
change to go with it - due to an early return when settings didn't
change).
Release Notes:
- N/A
Richard Feldman
created
21e75b8
Pass through `cwd` from ACP extension (#39511)
Click to expand commit body
If we get a `cwd` from ACP (because e.g. `codex-acp` is driving the
terminal rather than our own PTY) then use that to display the `cwd` of
the terminal process.
Release Notes:
- N/A
Richard Feldman
created
978951b
Don't use PTY in the display-only terminal (#39510)
Click to expand commit body
This only affects `codex-acp` for now.
Not using the PTY in display-only terminals means they don't display the
login prompt (or spurious `%`s) at the end of terminal output
renderings.
Release Notes:
- N/A
This pull request adds the ability to configure the setting to hide or
show the status bar, as described in discussion:
https://github.com/zed-industries/zed/discussions/38591
The original [PR
#38974](https://github.com/zed-industries/zed/pull/38974#issuecomment-3362020879)
was merged but reverted due to hidden conflicts. As per @ConradIrwin 's
[request](https://github.com/zed-industries/zed/pull/38974#issuecomment-3362020879),
I am recreating the PR on top of updated main branch.
Release Notes:
- Added an experimental setting `"status_bar": { "experimental.show":
false}` to hide the status bars.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
https://github.com/user-attachments/assets/27bf58df-b8c4-4730-856b-d62ec639a552
Previously the caption buttons (minimize, maximize, close) would
disappear off the right side of the title bar.
Release Notes:
- N/A
Co-authored-by: Julia Ryan <juliaryan3.14@gmail.com>
John Tur
and
Julia Ryan
created
9fe46dc
Fix double-clicking on non-empty title bar area (#39500)
Click to expand commit body
Closes #38685
Release Notes:
- N/A
---------
Co-authored-by: Julia Ryan <juliaryan3.14@gmail.com>
John Tur
and
Julia Ryan
created
aced13b
Fix ordering of multibuffer excerpts (#39476)
Click to expand commit body
The ordering of path-based excerpts in multibuffers regressed with
#38744, because we changed the `path` field of `PathKey` to be a string
(from `std::path::Path`) and used the derived `Ord` implementation,
which doesn't agree with the path-based order of worktree traversals.
This PR fixes that by using `RelPath` for `PathKey`. Instead of using
`File::full_path`, which can be absolute, we always use `File::path` and
distinguish different worktrees using their ID.
Release Notes:
- N/A
---------
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Cole Miller
and
Lukas Wirth
created
2859cbd
Make `ShellBuilder::new` not branch on a remote shell (#39493)
Click to expand commit body
Release Notes:
- Fixed claude code agent login on remotes
Co-authored-by: Max Brunsfeld <max@zed.dev>
Co-authored-by: Cole Miller <cole@zed.dev>
Lukas Wirth
,
Max Brunsfeld
, and
Cole Miller
created
4443f61
x_ai: Add support for Grok 4 Fast (#39492)
Click to expand commit body
This PR adds support for Grok 4 Fast.
Release Notes:
- Added support for Grok 4 Fast models.
Co-authored-by: David Kleingeld <davidsk@zed.dev>
6707ff3
Make outline modal work in channel notes (#39481)
Click to expand commit body
This fixes an issue where the outline modal would not work in editors
that had no explicit workspace attached to them.
Release Notes:
- Enabled the outline modal to work in channel notes.
This is the first step to allowing users to type into a numeric stepper
to set its value. This PR makes the numeric stepper take in a generic
type `T` where T: `NumericStepperType`
```rust
pub trait NumericStepperType:
Display
+ Add<Output = Self>
+ Sub<Output = Self>
+ Copy
+ Clone
+ Sized
+ PartialOrd
+ FromStr
+ 'static
{
fn default_format(value: &Self) -> String {
format!("{}", value)
}
fn default_step() -> Self;
fn large_step() -> Self;
fn small_step() -> Self;
fn min_value() -> Self;
fn max_value() -> Self;
}
```
This allows setting of step sizes and min/max values as well as making
the component easier to use.
cc @danilo-leal
Release Notes:
- N/A
---------
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Co-authored-by: Gaauwe Rombouts <mail@grombouts.nl>
Anthony Eid
,
Mikayla Maki
, and
Gaauwe Rombouts
created
Closes https://github.com/zed-industries/zed/issues/39406
Follow up to https://github.com/zed-industries/zed/pull/38726
This PR introduces the `agent_buffer_font_size` setting and renames
`agent_font_size` to `agent_ui_font_size`. This allows whoever wants
`buffer_font_size` and `agent_buffer_font_size` to match, as well as
folks who want a slightly smaller size only in the agent panel (which...
also looks just better by default!).
Release Notes:
- agent: Introduced the `agent_buffer_font_size` setting and renamed
`agent_font_size` to `agent_ui_font_size`, allowing for granular buffer
font size control in the agent panel vs. regular editors.
Danilo Leal
created
504216c
settings: Fix JSON schema for `ExtensionCapabilityContent` (#39478)
Click to expand commit body
This PR fixes the JSON schema for the `ExtensionCapabilityContent`.
Having the nested structs in the variants caused the `kind` property to
not be generated properly. Inlining the fields into the variants fixes
this.
Release Notes:
- N/A
Marshall Bowers
created
3bf71c6
extension_host: Load granted extension capabilities from settings (#39472)
Click to expand commit body
This PR adds the ability to control the capabilities granted to
extensions by the extension host via the new
`granted_extension_capabilities` setting.
This setting is a list of the capabilities granted to any extension
running in Zed.
The currently available capabilities are:
- `process:exec` - Grants extensions the ability to invoke commands
using
[`zed_extension_api::process::Command`](https://docs.rs/zed_extension_api/latest/zed_extension_api/process/struct.Command.html)
- `download_file` - Grants extensions the ability to download files
using
[`zed_extension_api::download_file`](https://docs.rs/zed_extension_api/latest/zed_extension_api/fn.download_file.html)
- `npm:install` - Grants extensions the ability to install npm packages
using
[`zed_extension_api::npm_install_package`](https://docs.rs/zed_extension_api/latest/zed_extension_api/fn.npm_install_package.html)
Each of these capabilities has parameters that can be used to customize
the permissions.
For instance, to only allow downloads from GitHub, the `download_file`
capability can specify an allowed `host`:
```json
[
{ "kind": "download_file", "host": "github.com", "path": ["**"] }
]
```
The same capability can also be granted multiple times with different
parameters to build up an allowlist:
```json
[
{ "kind": "download_file", "host": "github.com", "path": ["**"] },
{ "kind": "download_file", "host": "gitlab.com", "path": ["**"] }
]
```
When an extension is not granted a capability, the associated extension
APIs protected by that capability will fail.
For instance, trying to use `zed_extension_api::download_file` when the
`download_file` capability is not granted will result in an error that
will be surfaced by the extension:
```
Language server phpactor:
from extension "PHP" version 0.4.3: failed to download file: capability for download_file https://github.com/phpactor/phpactor/releases/download/2025.07.25.0/phpactor.phar is not granted by the extension host
```
Release Notes:
- Added a `granted_extension_capabilities` setting to control the
capabilities granted to extensions.
Marshall Bowers
created
456ba32
macOS: Fix keyboards shortcuts does not work until mouse clicked inside Zed (#39467)
Click to expand commit body
Closes #38258
Regressed in https://github.com/zed-industries/zed/pull/33334
Release Notes:
- Fixed an issue on macOS where keyboard shortcuts wouldn’t work until
you clicked inside Zed.
Smit Barmase
created
9aeb617
Keep folds at cursor open for "fold at level" (#39396)
Click to expand commit body
Closes #39308
Also fixes a possible bug in `apply_selected_diff_hunks()` caused by
reversed selections.
Release Notes:
- Fixed "editor: fold at level" closing regions containing selections
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Andrew Farkas
and
Conrad Irwin
created
fd8bae9
docs: Document `ctrl-b` to toggle left dock not working in Vim mode on Linux and Windows (#39464)
8441aa4
vim: Fix visual block handling of wrapped lines (#39355)
Click to expand commit body
These changes fix an issue with vim's visual block mode when soft
wrapping is enabled. In this situation, if one was to move the cursor
either up or down, the selection would be updated to include visual
(wrapped) rows, instead of only the buffer rows. For example, take the
following contents:
```
1 | And here's a very long line that is wrapping
at this exact point.
2 | And another very long line that is will also
wrap at this exact point.
```
If one was to place the cursor at the start of the first line, character
`A`, trigger visual block mode with `ctrl-v` and then move down one line
with `j`, the selection would end up as (with [X] representing the
selected characters):
```
1 | [A]nd here's a very long line that is wrapping
[a]t this exact point.
2 | [A]nd another very long line that is will also
wrap at this exact point.
```
Instead of the expected:
```
1 | [A]nd here's a very long line that is wrapping
at this exact point.
2 | [A]nd another very long line that is will also
wrap at this exact point.
```
With the changes in this commit, `Vim.visual_block_motion` will now
leverage buffer rows in order to navigate to the next or previous row.
Release Notes:
- Fixed handling of soft wrapped lines in vim's visual block mode
Dino
created
7b96e1c
agent: Add profile description in docs aside (#39412)
Click to expand commit body
This improves the design of the profile picker a bit by making every
item on it have the same height; it also makes it more consistent with
the model selector.
Release Notes:
- N/A
Danilo Leal
created
86322a1
worktree: Prevent background scanner from trying to scan file worktrees (#39277)