Commit log

4cd7f9b clippy

Julia Ryan created

e461d55 Fix shared ownership

Julia Ryan created

e3ed4ac Restart crash handler on disconnect

Julia Ryan created

0ee6ca1 project: Fix inability to open file after save as (#41012)

Click to expand commit body
Update `project::buffer_store::BufferStore.save_buffer_as` in order to
correctly update the `path_to_buffer_id` hash map, ensuring that the
currently open file's path is dissociated from the buffer's id, to
prevent the new buffer from being open when trying to open the original
file.

Closes #29783 

Release Notes:

- Fixed issue where using `workspace: save as` would prevent users from
opening the original file from which the new file was created

---------

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>

Dino and Piotr Osiewicz created

762082b ui_input: Don’t focus previous on decrement in `NumberField` (#41095)

Click to expand commit body
This PR removes the behavior that the number_field changes focus to the
previous element when using the decrement button.

I mainly noticed this while decreasing the tab-size of a language, since
it there closes the page...

Please note that I am unsure what if any purpose this code has.
I was unable to find a use case and since it is not present in the
`increment_handler` I guess it should never have been here

---

Release Notes:

* Fixed wrongly focus previous element on number_field decrement

ToBinio created

fcd690d Enable `source.organizeImports.ruff` by default for Python (#41103)

Click to expand commit body
Release Notes:

- Enabled automatic import organization, via
[ruff](https://github.com/astral-sh/ruff), when saving Python files. To
disable this, use:

```json
"Python": {
  "code_actions_on_format": { "source.organizeImports.ruff": false }
}
```

Joseph T. Lyons created

8de4b36 ACP Extensions (#40663)

Click to expand commit body
Adds the ability to install ACP agents via extensions

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Richard Feldman created

7644e79 agent: Fix edit_agent evals (#40921)

Click to expand commit body
Release Notes:

- N/A

Bennet Fenner created

4fb9113 ui: Use `focus_visible` method for some components (#41077)

Click to expand commit body
Using the cool, [recently
added](https://github.com/zed-industries/zed/pull/40940) `focus-visible`
support in some components. This will be particularly nice in the
settings UI, as it will not display the focus styles if you're
navigating it with a pointer device as opposed to the keyboard.

Release Notes:

- N/A

Danilo Leal created

f45a9b3 git: Branch diff (#40188)

Click to expand commit body
Release Notes:

- git: Adds the ability to view the diff of the current branch since
main

---------

Co-authored-by: Cole Miller <cole@zed.dev>

Conrad Irwin and Cole Miller created

f11a3dc settings_ui: Add small UI adjustments (#41065)

Click to expand commit body
Super tiny changes that impact mostly Windows/Linux.

Release Notes:

- N/A

Danilo Leal created

5aa8288 rules library: Improve empty state & fix quirks on Windows (#41064)

Click to expand commit body
Just got a new Windows machine and realized that the rules library empty
state was completly busted. Ended up also adding some little UI tweaks
to make it better for both Windows and Linux.

Release Notes:

- N/A

Danilo Leal created

fe730e9 Fix typo in Font Features description, s/b "OpenType" (#41058)

Click to expand commit body
Fix typo (regression?), 
"Opentype" should be "OpenType"

Closes #ISSUE

Release Notes:

- N/A

warrenjokinen created

59a98ba Add attribution for code sourced from Windows Terminal (#41061)

Click to expand commit body
Release Notes:

- N/A

John Tur created

1cf765e Revert: Spawn terminal process on background executor (#41060)

Click to expand commit body
Reverts https://github.com/zed-industries/zed/pull/40774 and
https://github.com/zed-industries/zed/pull/40824 since they introduce a
bug where Nushell processes are leaked and Ctrl+C doesn't kill the
current process.

Release Notes:

- Fix a bug where nushell processes wouldn't get killed after closing a
terminal tab

Agus Zubiaga created

79eff1f Make cursor move to duplicated line when duplicating line up (#41004)

Click to expand commit body
![Screen Recording 2025-10-23 at 14 50
26](https://github.com/user-attachments/assets/3427aa06-faf4-4f76-a604-bfc5af30f8ce)

Closes #40919
Follow-up of #39610

Release Notes:
- When duplicating line up, fixed cursor to move to the duplicated line

Tom Planche created

af0d2ad docs: Fix small grammatical typo in JSX section (#41055)

Click to expand commit body
Happened to notice this typo while going through the docs.

Release Notes:

- N/A

---

πŸ’–

Kunall Banerjee created

f0ac54e settings_ui: Fix memory leak (#41036)

Click to expand commit body
Closes #40351

The leak mainly showed up in the appearance page because it had a lot of
dropdown menus. The problem occurred because the drop-down menus were
creating a new entity on each frame instead of using the
`window.use_state...` API.

Release Notes:

- settings ui: Fixed memory leak in UI

---------

Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>

Anthony Eid and Mikayla Maki created

68707ff crashes: Avoid crash handler on detached threads (#40883)

Click to expand commit body
Set a TLS bit to skip invoking the crash handler when a detached thread
panics.

cc @P1n3appl3 - is this at odds with what we need the crash handler to
do?

May close #39289, cannot repro without a nightly build

Release Notes:

- Fixed extension panics crashing Zed on Linux

Co-authored-by: dino <dinojoaocosta@gmail.com>

Nia and dino created

1ce9a85 git: Only save dirty files during staging (#41047)

Click to expand commit body
Closes #40581

Release Notes:

- git: No longer save clean files when staging (to avoid triggering
unnecessary rebuilds in external file watchers like vite)

Conrad Irwin created

1966d4c Add an issue template for Git bugs (#41048)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

b6a1867 settings_ui: Fix settings window doesn't inherit Zed icon (#41031)

Click to expand commit body
Closes #40946

Release Notes:

- N/A

Smit Barmase created

c0ff8ef remote: Do not compress remote by default when building from source (#40994)

Click to expand commit body
Release Notes:

- N/A

Jakub Konka created

66ec0fc Revert zero-width non-joiner insertion in text shaping (#41043)

Click to expand commit body
Reverts parts of https://github.com/zed-industries/zed/pull/39928
Closes https://github.com/zed-industries/zed/issues/40987

Release Notes:

- Fixed some fonts rendering with absurd spacing on MacOS

Lukas Wirth created

435eab6 Fix ESLint linebreak-style errors by preserving line endings in LSP communication (#38773)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/38453

Current `Buffer` API only allows getting buffer text with `\n` line
breaks β€” even if the `\r\n` was used in the original file's text.

This it not correct in certain cases like LSP formatting, where language
servers need to have original document context for e.g. formatting
purposes.

Added new `Buffer` API, replaced all buffer LSP registration places with
the new one and added more tests.

Release Notes: 

- Fixed ESLint linebreak-style errors by preserving line endings in LSP
communication

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>

Devdatta Talele , Claude , and Kirill Bulatov created

55bc679 docs: Ensure macOS and Linux keybindings are escaped in HTML (#39802)

Click to expand commit body
Closes #39654

Release Notes:

- Fixed the formatting of macOS and Linux keybindings in the Zed docs to
escape the backslash character when templating.

Sean Hagstrom created

6aaf19f multi_buffer: Split multi_buffer into more modules (#41033)

Click to expand commit body
There are a of separate APIs in this, partially interleaved making it
difficult to grasp.

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

d83ed4e docs: Update docs for `theme_overrides` setting (#41038)

Click to expand commit body
This PR updates the docs to reference the `theme_overrides` setting
instead of the old `experimental.theme_overrides` setting.

Release Notes:

- N/A

Marshall Bowers created

11eba64 Rename `assistant_context` crate to `assistant_text_thread` (#41024)

Click to expand commit body
Previously we had `Context` and `ContextStore` in both `agent_ui` (used
to store context for the inline assistant) and `assistant_context` (used
for text threads) which is confusing.
This PR makes it so that the `assistant_context` concepts are now called
`TextThread*`, the crate was renamed to `assistant_text_thread`

Release Notes:

- N/A

Bennet Fenner created

63fe1ea Fix overly noisy direnv error notification (#41029)

Click to expand commit body
Updates #40531, restoring the previous behavior which didn't surface an
error when no direnv binary was found.

Release Notes:

- N/A

Cole Miller created

8b6f3ec Fix the project diff sometimes missing updates (#40662)

Click to expand commit body
This PR does two related things:

- First, it gets rid of the undifferentiated `RepositoryEvent::Updated`
in favor of three new events that have clearer definitions:
`BranchChanged`, `StashEntriesChanged`, and `StatusesChanged`. An
implication of this is that we no longer emit a `RepositoryEvent` unless
some git state changed; previously we would emit `RepositoryUpdated`
after doing a git status scan even if no statuses changed.
- Second, it changes the subscription strategy of the project diff to
make it update more robustly. Previously, the project diff only
subscribed to the `GitStore`, so it relied on getting a `GitStoreEvent`
when some buffer's diff hunks changed, even if the git status of the
buffer's file didn't change (e.g. a second hunk in a file that was
already modified). After this PR, it also subscribes to the individual
`BufferDiff` entities for buffers that have a git status, so the
`GitStore` is freed from that responsibility. This also fixes some real
cases where the previous strategy was not effective in keeping the
project diff up to date (captured in a test).

Release Notes:

- Fixed some cases where the project diff would fail to update in
response to git events.

Cole Miller created

a66098b gpui: Revert `reuse_prepaint` change of #40767 (#41025)

Click to expand commit body
https://github.com/zed-industries/zed/pull/40767/files/c95ae84d919462393455d858836f479dd24bd620#r2455674159
Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

b519ab2 rope: Improve chunk slicing panic messages (#41023)

Click to expand commit body
We still see a bunch of panics here but the default slicing panic
doesn't tell which side of the range is bad

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

023ac1b Revert "Use ShellKind::try_quote whenever we need to quote shell args" (#41022)

Click to expand commit body
Reverts zed-industries/zed#40912

Closes https://github.com/zed-industries/zed/issues/41010

Jakub Konka created

738e248 gpui: Small perf optimizations (#40767)

Click to expand commit body
Some random findings based on profiling

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

4f0a448 Fix anchor-related panic when gathering applicable inlay chunks (#41002)

Click to expand commit body
Before, inlay chunks were retrieved from the cache based on actualized
anchor ranges, but using an old buffer snapshot. Now, update all chunks
and snapshot to the actual before returning the applicable ones.

Follow-up of https://github.com/zed-industries/zed/pull/40183

Release Notes:

- N/A

Kirill Bulatov created

9a6397f Add keybindings for menu navigation in vim.json (#40877)

Click to expand commit body
- Added "ctrl-p" for selecting the previous menu item
- Added "ctrl-n" for selecting the next menu item

Closes #40619 

Release Notes:
- Ctrl+P now moves to the previous result; Ctrl+N moves to the next.

Viraj Bhartiya created

93ef194 vim: Fix cursor movement after entering Helix normal mode (#40528)

Click to expand commit body
Closes #40009 

Release Notes:

- `vim::NormalBefore` now enters `helix_normal` correctly.

paneutral created

8c1b4cb Re-order Helix keymaps and add alt-o/i/p/n (#40527)

Click to expand commit body
Release Notes:

- helix: Re-ordered `helix_normal || helix_select` keybindings to follow the
same order as the keymap on the helix-editor
[documentation](https://docs.helix-editor.com/keymap.html).
- helix: Added `alt-o` & `alt-i` to Select larger and smaller syntax node
respectively
- helix: Added `alt-p` & `alt-n` to Select Next Syntax Node and Previous Syntax
Node respectively



--- 

The new main helix normal & select context looks like follows

```jsonc
{
    "context": "(vim_mode == helix_normal || vim_mode == helix_select) && !menu",
    "bindings": {
      // Movement
      "h": "vim::WrappingLeft",
      "left": "vim::WrappingLeft",
      "l": "vim::WrappingRight",
      "right": "vim::WrappingRight",
      "t": ["vim::PushFindForward", { "before": true, "multiline": true }],
      "f": ["vim::PushFindForward", { "before": false, "multiline": true }],
      "shift-t": ["vim::PushFindBackward", { "after": true, "multiline": true }],
      "shift-f": ["vim::PushFindBackward", { "after": false, "multiline": true }],
      "alt-.": "vim::RepeatFind",
      
      // Changes
      "shift-r": "editor::Paste",
      "`": "vim::ConvertToLowerCase",
      "alt-`": "vim::ConvertToUpperCase",
      "insert": "vim::InsertBefore",
      "shift-u": "editor::Redo",
      "ctrl-r": "vim::Redo",
      "y": "vim::HelixYank",
      "p": "vim::HelixPaste",
      "shift-p": ["vim::HelixPaste", { "before": true }],            
      ">": "vim::Indent",
      "<": "vim::Outdent",
      "=": "vim::AutoIndent",
      "d": "vim::HelixDelete",
      "c": "vim::HelixSubstitute",
      "alt-c": "vim::HelixSubstituteNoYank",
      
      // Selection manipulation
      "s": "vim::HelixSelectRegex",
      "alt-s": ["editor::SplitSelectionIntoLines", { "keep_selections": true }],
      ";": "vim::HelixCollapseSelection",
      "alt-;": "vim::OtherEnd",
      ",": "vim::HelixKeepNewestSelection",
      "shift-c": "vim::HelixDuplicateBelow",
      "alt-shift-c": "vim::HelixDuplicateAbove",
      "%": "editor::SelectAll",
      "x": "vim::HelixSelectLine",
      "shift-x": "editor::SelectLine",
      "ctrl-c": "editor::ToggleComments",
      "alt-o": "editor::SelectLargerSyntaxNode",
      "alt-i": "editor::SelectSmallerSyntaxNode",
      "alt-p": "editor::SelectPreviousSyntaxNode",
      "alt-n": "editor::SelectNextSyntaxNode",

      // Goto mode
      "g e": "vim::EndOfDocument",
      "g h": "vim::StartOfLine",
      "g l": "vim::EndOfLine",
      "g s": "vim::FirstNonWhitespace", // "g s" default behavior is "space s"
      "g t": "vim::WindowTop",
      "g c": "vim::WindowMiddle",
      "g b": "vim::WindowBottom",
      "g r": "editor::FindAllReferences", // zed specific
      "g n": "pane::ActivateNextItem",
      "shift-l": "pane::ActivateNextItem",      
      "g p": "pane::ActivatePreviousItem",
      "shift-h": "pane::ActivatePreviousItem",
      "g .": "vim::HelixGotoLastModification", // go to last modification
      
      // Window mode
      "space w h": "workspace::ActivatePaneLeft",
      "space w l": "workspace::ActivatePaneRight",
      "space w k": "workspace::ActivatePaneUp",
      "space w j": "workspace::ActivatePaneDown",
      "space w q": "pane::CloseActiveItem",
      "space w s": "pane::SplitRight",
      "space w r": "pane::SplitRight",
      "space w v": "pane::SplitDown",
      "space w d": "pane::SplitDown",

      // Space mode
      "space f": "file_finder::Toggle",
      "space k": "editor::Hover",
      "space s": "outline::Toggle",
      "space shift-s": "project_symbols::Toggle",
      "space d": "editor::GoToDiagnostic",
      "space r": "editor::Rename",
      "space a": "editor::ToggleCodeActions",
      "space h": "editor::SelectAllMatches",
      "space c": "editor::ToggleComments",
      "space p": "editor::Paste",
      "space y": "editor::Copy",

      // Other
      ":": "command_palette::Toggle",
      "m": "vim::PushHelixMatch",
      "]": ["vim::PushHelixNext", { "around": true }],
      "[": ["vim::PushHelixPrevious", { "around": true }],
      "g q": "vim::PushRewrap",
      "g w": "vim::PushRewrap",
      // "tab": "pane::ActivateNextItem",
      // "shift-tab": "pane::ActivatePrevItem",
    }
  }
  ```

Abderrahmane TAHRI JOUTI created

3bb4c94 Revert "Round the scroll offset in editor to fix jumping text (#40401)" (#40982)

Click to expand commit body
This reverts commit 3da4cddce205d71dcad760c6af66a8985b16ffbe.

The scrolling is ~30% less for the same gesture, and I'm not using
anything lodpi:


https://github.com/user-attachments/assets/b19521fc-9e29-4bfd-9660-dc1e4c8ae846


Release Notes:

- N/A

Kirill Bulatov created

16f7bd0 editor: Translate utf16 to utf8 offsets in `copy_highlight_json` (#40981)

Click to expand commit body
Fixes ZED-2FM

Release Notes:

- Fixed panic in copy highlight json action

Lukas Wirth created

c529a06 gpui: Arc `GlobalElementId` (#40979)

Click to expand commit body
This shrinks it from roughly a ~kilobyte to 8 byte, removing a bunch of
memmoves emitted by the compiler. Also `Arc`'s it instead of boxing as
we do clone it a couple times here and there, making that also a fair
bit cheaper

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

278032c extension_host: Run extensions on the tokio threadpool (#40936)

Click to expand commit body
Fixes ZED-12D

`wasmtime_wasi` might call into tokio futures (to sleep for example)
which requires access to the tokio runtime. So we are required to run
these extensions in the tokio thread pool

Release Notes:

- Fixed extensions causing zed to occasionally panic

Lukas Wirth created

5a05986 debugger: Fix debug scenario picker not showing language subtitles (#40977)

Click to expand commit body
### Before 
<img width="544" height="403" alt="Screenshot 2025-10-23 at 2 58 44β€―AM"
src="https://github.com/user-attachments/assets/f5a69d27-e54a-4c1e-80f7-5cfff5b0bd47"
/>

### After
<img width="550" height="372" alt="Screenshot 2025-10-23 at 3 08 59β€―AM"
src="https://github.com/user-attachments/assets/33dd9c5e-054e-4ed1-ba1e-16746a5a697a"
/>

I also changed the debug picker to use a material list to cover the edge
case where there isn't a subtitle for an entry

Release Notes:

- debugger: Fix debug scenario picker not showing language subtitles

Anthony Eid created

05c2cc0 settings_ui: Enable editing project settings for worktrees without setting file (#40971)

Click to expand commit body
I made three significant changes in this PR. 

1. `SettingsWindow::fetch_files` now creates
`SettingsUiFile::Project(..)` for any worktree that contains no project
settings.
2. `update_settings_file` now creates an empty settings file if a
worktree doesn't contain one.
3. `open_current_settings_file` also creates a settings file if the
current one doesn't exist.

Release Notes:

- settings ui: Enable editing project settings for worktrees that don't
have a project setting file.

Anthony Eid created

1edb1b3 settings ui: Update file headers when adding or removing projects (#40968)

Click to expand commit body
This PR gets the `SettingsWindow` struct to subscribe to all
`Entity<Project>` events and any future project entities that are
created. When a project emits an event that signals a worktree has been
added or removed, the settings window refetches all settings files it
can find.

This fixes a bug where the settings ui would notice some project
settings that were created or opened after the `SettingsWindow` has been
initialized.

I also renamed `LOCAL` file mask to `PROJECT` to be inline with the
`SettingsFile` naming convention.

Release Notes:

- settings ui: Fix bug where project setting files wouldn't be detected
if they were created or opened after while an active settings window is
open

Anthony Eid created

8f4646d Use ShellKind::try_quote whenever we need to quote shell args (#40912)

Click to expand commit body
Using `shlex` unconditionally is dangerous as it assumes the underlying
shell is POSIX which is not the case for PowerShell, CMD, or Nushell.
Therefore, whenever we want to quote the args we should utilise our
helper `util::shell::ShellKind::try_quote` which takes into account
which shell is being used to actually exec/spawn the invocation.

Release Notes:

- N/A

---------

Co-authored-by: Lukas Wirth <me@lukaswirth.dev>

Jakub Konka and Lukas Wirth created

18daa9a Simplify environment loading code (#40531)

Click to expand commit body
This is a refactoring PR to simplify our environment loading code by:

- Getting rid of `EnvironmentErrorMessage` in favor of using
`anyhow::Result` everywhere, with a separate `mpsc` channel to
communicate statuses that will be shown in the activity indicator
- Inlining some functions that were only called once to reduce
indirection
- Removing the separate `direnv` module

Release Notes:

- N/A

Cole Miller created

bf63ff2 Fix path for vscode-html-language-server when found on PATH (#40832)

Click to expand commit body
Don't prepend the worktree root when using an absolute path from
`Worktree::which`, since that does the wrong thing when running in
wasmtime given two Windows absolute paths. Also don't pass this path to
`node`, since when npm installed it's a sh/cmd wrapper not a JS file.

Part of #39153, also needs a fix on the vscode-langservers-extracted
side (missing shebang for the vscode-html-language-server script).

Release Notes:

- Fixed Zed failing to run the HTML language server in some cases.

Cole Miller created

f9e0642 settings_ui: Adjust warning banner design (#40952)

Click to expand commit body
Just tidying this up a bit. Really have to fix this Banner component at
some point πŸ˜… Having to add some spacing hacks to make it perfect here
that are not ideal and should be baked into the component.

Release Notes:

- N/A

Danilo Leal created