Closes https://github.com/zed-industries/zed/issues/11626
Part of https://github.com/zed-industries/zed/issues/12853
`"restore_on_file_reopen": true` in workspace settings can now be used
to enable and disable editor data between file reopens in the same pane:
https://github.com/user-attachments/assets/8d938ee1-d854-42a8-bbc3-2a4e4d7d5933
The settings are generic and panes' data store can be extended for
further entities, beyond editors.
---------------
Impl details:
Currently, the project entry IDs seem to be stable across file reopens,
unlike BufferIds, so those were used.
Originally, the DB data was considered over in-memory one as editors
serialize their state anyway, but managing and exposing PaneIds out of
the DB is quite tedious and joining the DB data otherwise is not
possible.
Release Notes:
- Started to restore editor state on reopen
Kirill Bulatov
created
bbd1e62
Fix GPUI keyup events not firing on Windows and macOS (#27290)
Click to expand commit body
While building my own application using GPUI, I found that the `key_up`
event doesn't fire on Windows or macOS, with each platform failing for
different reasons. These events aren't used anywhere in Zed yet, so it
makes sense that the issue hasn't already been caught.
I don't have a Linux machine set up right now, so I don't know if these
events fire correctly on Linux or not.
---
Without this fix, a simple layout like the following:
```rust
div()
.on_key_down(cx.listener(|_, event, _, _| println!("Key down: {:?}", event)))
.on_key_up(cx.listener(|_, event, _, _| println!("Key up: {:?}", event)));
```
...would result in the following logs if the 'a' key was pressed:
```text
Key down: KeyDownEvent { keystroke: Keystroke { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false }, key: "a", key_char: Some("a") }, is_held: false }
<eof>
```
With this fix, the `key_up` event fires correctly, resulting in the
following logs:
```text
Key down: KeyDownEvent { keystroke: Keystroke { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false }, key: "a", key_char: Some("a") }, is_held: false }
Key up: KeyUpEvent { keystroke: Keystroke { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false }, key: "a", key_char: None } }
<eof>
```
---
I've made the assumption that the `key_char` field shouldn't be set on
the `key_up` event since, unlike the `key_down` event, it's not an event
that may produce a character.
Happy to make any changes to this PR as required. If it would be
preferable to test this on Linux as well before it's merged, let me know
and I'll sort something out.
Hopefully this makes the experience of building new applications on GPUI
smoother, and potentially saves the Zed team some time if this event is
ever used in the future.
Release Notes:
- N/A
Felix Packard
created
01b400e
gpui: Implement From trait for Clipboard related structs (#27585)
Click to expand commit body
Implement the From trait for some simple conversations between Clipboard
related structs.
This PR only adds the From trait implementations and doesn't touch any
code. In a future PR we can simplify usage throughout the codebase, such
as:
```rust
// impl ClipboardString
fn new(text: String) -> Self {
Self::from(text)
}
```
Release Notes:
- N/A *or* Added/Fixed/Improved ...
tidely
created
9445005
Don't consider empty deleted files to be dirty or conflicting (#27701)
Click to expand commit body
When a file is deleted outside of Zed, but it doesn't have any unsaved
changes, it shouldn't be considered "dirty" (prompting you before you
close it).
Release Notes:
- Fixed an bug where unchanged buffers were marked as conflicting if
their files were deleted outside of Zed.
---------
Co-authored-by: Antonio <antonio@zed.dev>
Max Brunsfeld
and
Antonio
created
5c0adde
Correct other end visual block functionality (#27678)
Click to expand commit body
Closes #27385
Builds on #27604 so that `vim::OtherEnd` works in visual block mode.
This is accomplished by reversing the order of active selections in the
buffer when the user hit `o`, so that the cursor moves diagonally across
the selection. The current behavior is preserved for `shift-o`, which is
how the cursors behave in vim.
We'll close #27604 since this encapsulates that change, but if you'd
prefer to take only the visual block motion component, we'll keep the
branch for #27604 open.
Test case: growing a box down and to the right, other ending, followed
by growing and shrinking the box:
https://github.com/user-attachments/assets/1df544e1-efce-4354-b354-bbfec007a7df
Test case: growing a box up and to the left, other ending, followed by
growing and shrinking the box:
https://github.com/user-attachments/assets/2f6d7729-c63a-4486-960b-23474c2e507a
Release Notes:
- Improved visual block mode when cursor is at beginning of selection
- Improved visual block mode so that `o` and `shift-o` reach parity with
vim
---------
Co-authored-by: KyleBarton <kjbarton4@gmail.com>
Peter Finn
and
KyleBarton
created
4a5c492
If GIT_ASKPASS is already set, assume it will do the right thing (#27681)
Click to expand commit body
Fixes running git push on a coder instance.
Closes #ISSUE
Release Notes:
- Zed will now use `GIT_ASKPASS` if you already have one set instead of
overriding with our own. Fixes `git push` in Coder.
be657ae
terminal: Make IME work with tab and enter keys (#27572)
Click to expand commit body
… in the terminal.
Closes #23003
Release Notes:
- N/A
## Before fix:
https://github.com/user-attachments/assets/249ec62d-1461-4551-87b2-4259dba171f2
## After fix:
https://github.com/user-attachments/assets/2db624a0-8035-4260-9b2e-0cee83662b84
Ishige
created
d0ae604
collab: Switch to new encryption format for access tokens (#27691)
Click to expand commit body
This PR switches collab over to start minting access tokens using the
new OAEP-based encryption format.
This is a follow-up to #15058 where we added support for this new
encryption format.
Clients that are newer than 8 months ago should be able to decrypt the
new access tokens. It is only clients older than 8 months ago that will
no longer be supported.
Release Notes:
- N/A
Marshall Bowers
created
08bb17a
Allow Trash to fallback to Delete on failure (#27682)
Click to expand commit body
This fixes trashing files from the git panel on SSH remotes that don't
run a Desktop environment.
Release Notes:
- Fix trash to work on remotes with no desktop environment configured
Conrad Irwin
created
55c1f9d
Debugger: Switch Breakpoint Anchor from left to right (#27688)
Click to expand commit body
This fixes an edge case where some breakpoints would not render
correctly when expanding a conflict git hunk.
## Before
https://github.com/user-attachments/assets/4fd75ef6-8381-4f9e-9765-5eeb3a734df0
## After
https://github.com/user-attachments/assets/b2b49894-2dc2-42ba-8038-504a1b4c2665
Release Notes:
- N/A
Co-authored-by: Conrad <conrad@zed.dev>
This PR does three things
- Right clicking within the gutter outside of the gutter fold area
bounds opens a breakpoint context menu
- Disabled breakpoints are now outline with the debugger accent color
instead of being fully colored at half opacity
- Clicking a breakpoint acts differently now
- Clicking a breakpoint while holding the platform modifier key will
disable/enable it
- Clicking a breakpoint hint while holding the platform modifier key
will set a disabled breakpoint
- Clicking a disabled breakpoint will enable it instead of deleting it
Release Notes:
- N/A
Anthony Eid
created
b5dc09c
Remove unneeded anonymous lifetimes from `gpui::Context` (#27686)
Click to expand commit body
This PR removes a number of unneeded anonymous lifetimes from usages of
`gpui::Context`.
Release Notes:
- N/A
Marshall Bowers
created
e90411e
gpui: Remove unneeded anonymous lifetime from `Render::render` (#27684)
Click to expand commit body
This PR removes an unneeded anonymous lifetime from the `cx` parameter
to `Render::render`.
This makes it so the anonymous lifetime doesn't show up when
implementing the `Render` trait via a code action:
#### Before
```rs
struct Foo;
impl Render for Foo {
fn render(&mut self, window: &mut Window, cx: &mut Context<'_, Self>) -> impl IntoElement {
todo!()
}
}
```
#### After
```rs
struct Foo;
impl Render for Foo {
fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
todo!()
}
}
```
Release Notes:
- N/A
Marshall Bowers
created
fcadcbb
assistant2: Make context pills clickable (#27680)
Click to expand commit body
Release Notes:
- N/A
Bennet Bo Fenner
created
94ed0b7
Allow reviewing of agent changes without Git (#27668)
Click to expand commit body
Release Notes:
- N/A
Antonio Scandurra
created
8a307e7
Switch fully to Rust Livekit (redux) (#27126)
Click to expand commit body
Swift bindings BEGONE
Release Notes:
- Switched from using the Swift LiveKit bindings, to the Rust bindings,
fixing https://github.com/zed-industries/zed/issues/9396, a crash when
leaving a collaboration session, and making Zed easier to build.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Michael Sloan <michael@zed.dev>
Mikayla Maki
,
Conrad Irwin
, and
Michael Sloan
created
c8fb95c
assistant2: Add keybinding for profile selector (#27674)
Click to expand commit body
This PR adds a keybinding to toggle the profile selector.
Defaults to `Cmd-I` on macOS and `ctrl-I` on Linux/Windows.
Release Notes:
- N/A
- Show thread's summary in notification title
- Improve thread's summary prompt so it's more descriptive
- Make whole notification clickable

Release Notes:
- N/A
Agus Zubiaga
created
82ce187
Preserve newlines in release notes email (#27670)
This PR reworks the profile list to make it match the designs more
closely:
https://github.com/user-attachments/assets/3cd9cad4-771c-4231-ba9b-ddca72ff617c
We're no longer using a `Picker` and are instead using a custom
navigable list.
Also added an option to add a new profile.
Release Notes:
- N/A
Marshall Bowers
created
83f3fbf
assistant2: Add header to fork profile modal (#27666)
Click to expand commit body
This PR adds a header to the fork profile view in the profile management
modal:
<img width="575" alt="Screenshot 2025-03-28 at 10 29 10 AM"
src="https://github.com/user-attachments/assets/8c0012e5-3297-4ba6-9603-0364f5b6f3b7"
/>
Release Notes:
- N/A
Marshall Bowers
created
60a7455
assistant2: Don't scroll down if user has scrolled up (#27614)
Click to expand commit body
This caused undesirable and unnecessary scrolling, in that if you scroll
up, then as new messages stream into the panel, they jump the scroll bar
back down.
@agu-z and I paired on this and we think this is unnecessary now that we
don't see the Edit button in the UI, but @bennetbo we still see code for
the button in there, so...maybe we do still want this? (If so, we can
revert the second commit and go back to a more conditional way of
scrolling. 😄)
Release Notes:
- N/A
---------
Co-authored-by: Agus <agus@zed.dev>
Richard Feldman
and
Agus
created
4315b2f
assistant2: Reload profile when making changes to the active profile's tools (#27664)
Click to expand commit body
This PR makes it so the profile is reloaded when making changes to the
active profile's tools.
Release Notes:
- N/A
This PR removes the `/project` command.
This was feature-flagged and was never released to the general public.
Release Notes:
- N/A
Marshall Bowers
created
a201263
storybook: Fix `auto_height_editor` story (#27653)
Click to expand commit body
This is a fix for this error when trying to run `auto_height_editor`
story:
```sh
thread 'main' panicked at C:\Users\x\dev\zed\crates\settings\src\settings_store.rs:363:32:
unregistered setting type workspace::workspace_settings::WorkspaceSettings
```
Release Notes:
- N/A
loczek
created
1a4ba59
docs: Fix `#windows` Discord channel name (#27659)
Click to expand commit body
This PR fixes the name of the `#windows` Discord channel to match what
the channel is actually called.
Release Notes:
- N/A
Marshall Bowers
created
24ad970
language server: Fix restarts sometimes not working for buffers open in go-to-definition view (#27655)
Click to expand commit body
Closes #ISSUE
Release Notes:
- Fixed language server restarts sometimes not restarting a language
server.
Piotr Osiewicz
created
f6c81a0
assistant2: Unify path rendering for file context (#27537)
Click to expand commit body
This ensures that we render path matches the same in both the file
context picker and the messag editor completion provider.
Release Notes:
- N/A
Bennet Bo Fenner
created
7ac51e4
project: Add tests for more cases in LSP completions (#27650)
Click to expand commit body
This PR adds two more cases to existing LSP completion cases.
- When text_edit exists: (New test)
1. we use text_edit, over insert_text and label
- When edit range exists (and text_edit is None): (New test)
1. insert_text is used over label if exists
2. label is used otherwise
- When not edit range exists (and text_edit is None): (Existing test)
1. insert_text is used over label if exists
2. label is used otherwise
Release Notes:
- N/A
Smit Barmase
created
c810586
Update docs to include Windows JD (#27649)
Closes #18153
When calling `uninstall_extension`, the `work_dir` associated with this
`extension` doesn't have its corresponding `FileHandle` properly closed,
preventing the deletion of the `work_dir`. As seen in the image below,
after installing the `toml` extension, `zed.exe` holds two `Handle`s for
the folder `C:\Users\36477\AppData\Local\Zed\extensions\work\toml`.

Therefore, after deleting `extension_dir` and then calling
`this.update(...)`, `zed.exe` releases these two `Handles`, and only
then can the folder
`C:\Users\36477\AppData\Local\Zed\extensions\work\toml` be deleted. See
the corresponding file handles are closed after calling
`this.update(...)`:

However, if there is a running server of the extension, the error will
persist. At this point, I haven’t found a direct way to terminate all
running servers of the extension. Since this feature might affect the
`LspStore` structure, I paused my work here.
See when `toml` extension is running, we can not delete
`C:\Users\36477\AppData\Local\Zed\extensions\work\toml` since
`C:\Users\36477\AppData\Local\Zed\extensions\work\toml\taplo.exe` is
still running:

cc @ConradIrwin You're the expert in this area—what are your thoughts?
Release Notes:
- N/A
This PR removes the `ZedAssistant2` icon.
I went to use it as a placeholder icon, but noticed that the icon wasn't
loaded properly due to a name mismatch.
However, since we aren't using it anywhere I'm opting to remove it.
Release Notes:
- N/A
Marshall Bowers
created
f1ce83b
context_server: Only look for context server project settings in visible worktrees (#27633)
Click to expand commit body
This PR fixes an issue where we were looking for context server project
settings in _all_ worktrees, not just visible ones.
This meant that if you had a single file worktree open (e.g.,
`settings.json`) this could impact whether context servers defined in
project settings would load.
Release Notes:
- Fixed an issue where context servers defined in project settings would
not be respected in some scenarios.
Co-authored-by: Wilhelm Klopp <wil.klopp@gmail.com>
Marshall Bowers
and
Wilhelm Klopp
created
edc7d73
Set cache breakpoint on second-to-last message (#27632)
4839195
debugger: Remove fake adapter and un-gate GDB (#27557)
Click to expand commit body
This is a clean-up PR in anticipation of introduction of Debugger
Registry. I wanna get rid of DebugAdapterKind (or rather, it being an
enum).
Release Notes:
- N/A
---------
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony <anthony@zed.dev>
Piotr Osiewicz
,
Anthony Eid
, and
Anthony
created
56eb650
Add Batch tool call for calling multiple tools (#27621)
Click to expand commit body
<img width="620" alt="Screenshot 2025-03-27 at 2 29 13 PM"
src="https://github.com/user-attachments/assets/dd023507-61bc-4722-a095-f65f4b6c746a"
/>
We'll iterate on the UI, but first the goal is to just get it to work at
all so we can see if it's useful in terms of getting correct output
faster.
Release Notes:
- N/A
---------
Co-authored-by: Agus Zubiaga <hi@aguz.me>
I've seen models try to run `open` in Bash. This is a cross-platform
version of that.
<img width="634" alt="Screenshot 2025-03-26 at 10 27 40 AM"
src="https://github.com/user-attachments/assets/b18cb50f-6e2f-4770-b15c-1040916a420a"
/>
Release Notes:
- N/A
Richard Feldman
created
7537f05
Automatically hide "View Panel" notification after refocusing Zed (#27512)
Click to expand commit body
Now if you refocus Zed manually (e.g. cmd-tab), we hide the "View Panel"
notification automatically.
This also fixes a related subscription leak.
Release Notes:
- N/A
Richard Feldman
created
85740dd
Make serialization backwards-compatible for collab server (#27626)
Click to expand commit body
Sets up the collab server to accept the format of system message that
we'll introduce later for [prompt
caching](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching).
Release Notes:
- N/A
Richard Feldman
created
6550a96
editor: Remove gap between gutter and horizontal scrollbar track (#24887)
Click to expand commit body
Longer write-up, sorry if this got a bit too long.
This PR removes a small gap between the editor gutter and the horizontal
scrollbar, if present, by stretching the scrollbar track the entire
witdth of the editor.
https://github.com/user-attachments/assets/d5c18b03-d1ff-4d48-a3da-5d0fb80ee967
This gap which can be seen in the bottom left of the video can cause
bugs when interacting with it using the cursor, as accidentally clicking
on it would trigger a vertical scroll instead of dragging the horizontal
scroll. Also for cases where themes provide a non-transparent scrollbar
track background, which can be seen in the video, the small gap is
visible whilst scrolling horizontally.
This gap is present because the horizontal editor scrollbar is layouted
based upon the `content_origin`, which offsets the whole layout by the
horizontal gutter margin to the right. However, the scrollbar should be
layouted based upon the editor text bounds to be properly painted over
the entire editor text hitbox.
Here are some comparison images with `scrollbar.track.background` and
`gutter.background` set to red for visibility.
| | Current `main` | With this change |
| - | - | - |
| Default position / Fully scrolled to the left | <img width="842"
alt="left_main"
src="https://github.com/user-attachments/assets/8b053fc8-5271-4b58-8404-dcabf49bf702"
/> | <img width="842" alt="left_fix"
src="https://github.com/user-attachments/assets/459df723-05d5-4813-a6a4-038f7d662495"
/> |
| Scrolled to the right | <img width="216" alt="scroll_main"
src="https://github.com/user-attachments/assets/9c1fcc0d-fbb4-49af-9645-f258f5a7217b"
/> | <img width="216" alt="scroll_fix"
src="https://github.com/user-attachments/assets/8dd2e585-7802-415b-a05a-fb40a882323e"
/> |
---
#### Small downsight of this approach
Currently, the scrollbar thumb aligns with the indent guides if the
editor is fully scrolled to the left and the track background is
transparent. This is because the indent guides are layouted according to
the content margin.
With this change, however, the scrollbar thumb will shift a few pixels
to the left and will overlap the indent guides if present.
| Current `main` | With this change |
| - | - |
| <img width="295" alt="cur_indent"
src="https://github.com/user-attachments/assets/92753951-6f35-4c39-94eb-21c445f8d2f5"
/> | <img width="381" alt="fix_indent"
src="https://github.com/user-attachments/assets/899d945c-49f8-4117-bc48-52501d55cc33"
/> |
To circumvent this, the scrollbar thumb could be layouted with a small
offset so that the thumb aligns properly with the indent guides whilst
the scrollbar track spans the whole editor width. This would lead to
some questions on how to account for the gap during layouting and
dragging of the thumb though, but might work for a gap that small. Happy
to implement this fix, should that be preferred 😄
(VSCode does not have the indent guide issue, as they do not layout the
text in the editor with any offset unlike Zed does)
Release Notes:
- Removed a small gap between the editor gutter and horizontal
scrollbar.
Finn Evers
created
93c0056
git: Display author not committer in git popover (#27628)
Click to expand commit body
Display Author name/email instead of Committer name/email in git
popover.
Closes https://github.com/zed-industries/zed/issues/27625
Prior to v0.173.x, Zed displayed Author name. Regression introduced in:
- https://github.com/zed-industries/zed/pull/24593
Release Notes:
- git: Switch to displaying Git author instead of Git committer in Git
Blame popover.
Peter Tripp
created
84dd236
project: Fix LSP completion to use `insertText` when constructing default edits (#27630)
Click to expand commit body
Closes #25761 #21603
When `text_edit` is not available we directly fallback to to `label`.
That means, when we have range to replace, we never use `insertText` and
only use it when we haven't found any range.
This PR fixes, this and uses `insertText` as fallback first, and then
`label`.
Release Notes:
- Fixed an issue where accepting LSP snippet completion would insert the
label instead of expanding the snippet.
Smit Barmase
created
8e12eb0
keymap: Detect and report errors for uppercase keybindings (#27558)
Click to expand commit body
Closes #25353
Detect keybindings using upper case instead of lowercase, and report an
error
Release Notes:
- N/A