Follow up to this: #35114
* Previously we were still showing the commit message even after
cancelling amend which was the old commit message.
* This PR fixes that by restoring the commit message to the old state
before the amend begin so that in case user typed a commit message it's
shown if not then it's not.
Before:
https://github.com/user-attachments/assets/e0edcfff-863d-4367-a7c4-8a2998e702ca
After:
https://github.com/user-attachments/assets/9daf9be0-8a3d-4914-91a4-567693711b6b
Release Notes:
- Resolved an issue where cancelling an amend commit would incorrectly
leave the old commit message in the input field. The commit message box
now properly reverts to its pre-amend state.
Pyright sets different `sortText` based on whether a given completion
item was recently resolved. This probably lines up with VSCode's way of
resolving items, but it's a no-no for us, as it makes completions
unstable.
Closes#9983
Release Notes:
- python: Fixed code completions having arbitrary order when using
Pyright/basedpyright
Fixes#12338, related to #37616
This change improves URL detection in the terminal by removing trailing
periods that appear to be sentence punctuation rather than part of the
URL structure. It builds upon the parentheses sanitization work from
#37076 by consolidating both approaches into a unified
`sanitize_url_punctuation` function.
## Changes
- Combines parentheses and period sanitization into a single
`sanitize_url_punctuation` function
- Uses optimized single traversal with `fold()` for parentheses counting
(addressing code review feedback)
- Removes trailing periods using heuristics to distinguish sentence
punctuation from legitimate URL components
- Removes multiple trailing periods (always considered punctuation)
- Removes single trailing periods when they appear after alphanumeric
characters or slashes
- Preserves periods that are part of legitimate URL structure (e.g.,
version numbers, IP addresses, subdomains)
- Maintains existing parentheses balancing logic from #37076
## Implementation Details
- **Parentheses handling**: Counts opening and closing parentheses,
removes trailing `)` when unbalanced
- **Period handling**: Uses `take_while()` iterator for efficient period
counting
- **Performance**: Single pass counting with optimized loop to avoid
redundant work
- **Code clarity**: Uses let-else pattern for readable conditional logic
## Testing
- Added comprehensive test coverage for both parentheses and period
sanitization
- Tests cover balanced vs unbalanced parentheses cases
- Tests cover various period scenarios including legitimate URL periods
vs sentence punctuation
- All existing tests continue to pass
## Release Notes
- Improved terminal URL detection by further trimming trailing
punctuation. URLs ending with periods (like
`https://example.com.`) and unbalanced parentheses (like
`https://example.com/path)`) are now properly detected without including
the trailing punctuation.
- Makes the keymap editor search container more consistent with the
project & file search corresponding elements
- Changes the keymap editor menu item in the user menu be called "Keymap
Editor", as opposed to "Key Binding", to match with the tab and action
name
Design note: Still a bit unsure about the extra space on the right for
the keymap editor. This makes it way more consistent with the other
search views, but it also just feels like space that could be used. On
the other hand, though, it's very unlikely anyone will ever use more
than 30% of the search bar width as search queries here are likely
pretty short; definitely much shorter than project search queries.
<img width="600" height="552" alt="Screenshot 2025-09-09 at 1 02@2x"
src="https://github.com/user-attachments/assets/9825a129-2c5a-4852-9837-c586b88e9332"
/>
Release Notes:
- N/A
At RustConf we were demo'ing zed, and it continually popped open the
chat panel.
We're usually inured to this because the Chat panel doesn't open unless
a Guest
is in the channel, but it made me sad that we were showing a long stream
of
vacuous comments and unresponded to questions on every demo screen.
We may bring chat back in the future, but we need more thought on the
UX, and
we need to rebuild the backend to not use the existing collab server
that we're
trying to move off of.
Release Notes:
- Removed the chat feature from Zed (Sorry to the 5 of you who use this
on the regular!)
Updates #37623
Release Notes:
- Changed the behaviour when editing an old message in a native agent
thread.
Prior to this, it would automatically restore the checkpoint (which
could
lead to a surprising amount of work being discarded). Now it will just
reject
any unaccepted agent edits, and you can use the "restore checkpoint"
button
for the original behavior.
This PR mostly adds some style treatment to popover button triggers in
the agent panel, either making them better aligned with their trigger or
adjusting the color to better clarify which button is triggering the
currently opened menu.
Moving forward, I think the selected styles at least should probably be
tackled at the component level, whether that's a context menu or a
popover, so we don't have to ever do this manually (and running the risk
of forgetting to do it).
Release Notes:
- N/A
Closes#37487
Proxy settings are now taken from the Zed configuration and passed to
Gemini via the "--proxy" flag.
Release Notes:
- acp: Gemini ACP server now uses proxy settings from Zed configuration.
Follow-up to #35250. Let's experiment with having this by default on
nightly.
Release Notes:
- Added built-in support for the basedpyright language server for Python
code. basedpyright is now enabled by default, and pyright (previously
the primary Python language server) remains available but is disabled by
default. This supersedes the basedpyright extension, which can be
uninstalled. Advantages of basedpyright over pyright include support for
inlay hints, semantic highlighting, auto-import code actions, and
stricter type checking. To switch back to pyright, add the following
configuration to settings.json:
```json
{
"languages": {
"Python": {
"language_servers": ["pyright", "pylsp", "!basedpyright"]
}
}
}
```
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Lukas Wirth <lukas@zed.dev>
This PR adds support for using external agents in SSH projects via ACP,
including automatic installation of Gemini CLI and Claude Code,
authentication with API keys (for Gemini) and CLI login, and custom
agents from user configuration.
Co-authored-by: maan2003 <manmeetmann2003@gmail.com>
Release Notes:
- agent: Gemini CLI, Claude Code, and custom external agents can now be
used in SSH projects.
---------
Co-authored-by: maan2003 <manmeetmann2003@gmail.com>
For read_file and edit_file, show the worktree-relative path if there's
only one visible worktree, and the "full path" otherwise. Also restores
the display of line numbers for read_file calls.
Release Notes:
- N/A
When a keybind contains a backslash character (\\), it is parsed
incorrectly, which results in an invalid keybind configuration.
This patch fixes the issue by ensuring that backslashes are properly
escaped during the parsing process. This allows them to be used as
intended in keybind definitions.
Release Notes:
- Fixed an issue where keybinds containing a backslash character (\\)
failed to be replaced correctly
## Screenshots
<img width="912" height="530" alt="SCR-20250828-borp"
src="https://github.com/user-attachments/assets/561a040f-575b-4222-ac75-17ab4fa71d07"
/>
<img width="912" height="530" alt="SCR-20250828-bosx"
src="https://github.com/user-attachments/assets/b8e0fb99-549e-4fc9-8609-9b9aa2004656"
/>
Required for https://github.com/isographlabs/isograph/pull/568 to work
properly. Tested with a local build and made sure everything's working
great!
Release Notes:
- JavaScript/TypeScript/JSX: Added support for injecting Isograph language support into `iso`
function calls
These changes introduce a new command to the Diagnostics panel,
`diagnostics: deploy current file`, which allows the user to view the
diagnostics only for the currently opened file.
Here's a screen recording showing these changes in action 🔽
[diagnostics: deploy current
file](https://github.com/user-attachments/assets/b0e87eea-3b3a-4888-95f8-9e21aff8ea97)
Closes#4739
Release Notes:
- Added new `diagnostics: deploy current file` command to view
diagnostics for the currently open file
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Closes #ISSUE
Fixed an issue where the first frame of the `Editing` page in onboarding
would have a slight delay before rendering the first time it was
navigated to. This was caused by listing the OS fonts on the main
thread, blocking rendering. This PR fixes the issue by adding a new
method to the font family cache to prefill the cache on a background
thread.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
---------
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony <anthony@zed.dev>
This is an implementation of matching like "m i (", as well as "] (" and
"[ (" in `helix_mode` with a few supported objects and a basis for more.
Release Notes:
- Added helix operators for selecting text objects
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Closes#35712
Release Notes:
- Fixed white-space trimming leading to disconnect between list items
and content in markdown previews.
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Check whether the GPU/driver supports the StructuredBuffer feature
required by our shaders. If it doesn’t, log an error and skip that
GPU/driver, so Windows can fall back to the software renderer.
Release Notes:
- N/A
It is unused and generates a warning
```
LINK : warning LNK4044: unrecognized option '/fuse-ld=lld'; ignored
```
If in the future we want to give `lld-link.exe` a try, we can set
```toml
linker = "lld-link.exe"
```
instead. At the time of writing, my tests have shown that there is no
real difference between `lld-link` and `link` in terms of linking speed.
Release Notes:
- N/A
I ran `scripts/linux` on Debian Trixie 13. It suggested manually
installing Mold, but [mold](http://packages.debian.org/mold) is packaged
on Debian and so we could install it automatically.
The version packaged there seems to work well enough for `cargo t` to
pass, at least.
## Tested
```
; sudo apt remove mold libstdc++-14-dev
... uninstalls them
; ./script/linux
The following NEW packages will be installed:
build-essential clang clang-19 clang-tools-19 g++ g++-14 g++-14-x86-64-linux-gnu g++-x86-64-linux-gnu libstdc++-14-dev mold
; cargo t
(passes)
```
Release Notes:
- N/A
Previously, `cargo test --package component` failed due to missing
imports for a doctest:
```
Doc-tests component
running 1 test
test crates/component/src/component.rs - Component::description (line 229) ... FAILED
failures:
---- crates/component/src/component.rs - Component::description (line 229) stdout ----
error: cannot find derive macro `Documented` in this scope
--> crates/component/src/component.rs:231:10
|
4 | #[derive(Documented)]
| ^^^^^^^^^^
error[E0599]: no associated item named `DOCS` found for struct `MyComponent` in the current scope
--> crates/component/src/component.rs:236:20
|
5 | struct MyComponent;
| ------------------ associated item `DOCS` not found for this struct
...
9 | Some(Self::DOCS)
| ^^^^ associated item not found in `MyComponent`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0599`.
Couldn't compile the test.
failures:
crates/component/src/component.rs - Component::description (line 229)
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s
error: doctest failed, to rerun pass `-p component --doc`
bobcat ~/src/zed (doctests) 18:33
```
This might be unnoticed if you mostly run nextest, as it does not run
doctests.
Release Notes:
- N/A