Cherry-pick of #42602 to stable
----
Fixes ZED-36P
Patching this over for now until I can figure out the cause of this
Release Notes:
- Fixed panic in diagnostics pane
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Cherry-pick of #42114 to stable
----
Given that when we lose our devices unrecoverably we will panic anyways,
might as well do so eagerly which makes it clearer.
Additionally this PR replaces all uses of `ManuallyDrop` with `Option`,
as otherwise we need to do manual bookkeeping of what is and isn't
initialized when we try to recover devices as we can bail out halfway
while recovering. In other words, the code prior to this was fairly
unsound due to freely using `ManuallyDrop::drop`.
Fixes ZED-1SS
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Cherry-pick of #42452 to preview
----
Closes ZED-35A
Release Notes:
- Fixed an issue where Zed would panic when trying to set the default
mode for ACP agents
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Cherry-pick of #42298 to preview
----
Fixes ZED-2CQ
We were doing the binary search by buffer points, but due to await
points within this function we could end up mixing points of differing
buffer versions.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Cherry-pick of #42260 to preview
----
Release Notes:
- acp: Fixed an issue where Zed would not respect
`PromptCapabilities::embedded_context`
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Cherry-pick of #42261 to preview
----
We can always include symbols, since we either include a ResourceLink to
the symbol (when `PromptCapabilities::embedded_context = false`) or a
Resource (when `PromptCapabilities::embedded_context = true`)
Release Notes:
- Fixed an issue where symbols could not be included when using specific
ACP agents
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Cherry-pick of #42227 to preview
----
The HGLOBAL is itself the HDROP. Do not dereference it.
Release Notes:
- windows: Fixed crashes during drag-and-drop operations
Co-authored-by: John Tur <john-tur@outlook.com>
Cherry-pick of #42234 to preview
----
Otherwise the terminal will not process the signals correctly
Release Notes:
- Fixed ctrl+c and friends not working in the terminal on macOS and
linux
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Cherry-pick of #42186 to preview
----
Fixes ZED-1NK
Release Notes:
- Fixed zed not starting when the database cannot be loaded
Co-authored-by: Lukas Wirth <lukas@zed.dev>
Cherry-pick of #42167 to preview
----
If we are in a remote session with the remote dropped, this path is very
much reachable if the call to this function got queued up in a task.
Fixes ZED-124
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Co-authored-by: Lukas Wirth <lukas@zed.dev>
This makes it possible to do login via things like `cmd: "node", args:
["my-node-file.js", "login"]`
Also, that command will now use Zed's managed `node` instance.
Release Notes:
- ACP extensions can now run terminal login commands using relative
paths
The Alt+Numpad buffer that's maintained by the input stack is getting
corrupted, leading to garbage characters being inserted on keystrokes
like Alt+Up. Disable the automatic handling of Alt+Numpad for now until
the cause of this corruption is understood. The Alt+Numpad input did not
work anyway, so this does not regress anything.
Release Notes:
- windows: Fixed corrupted characters being inserted when Alt is pressed
(preview only)
Reverts zed-industries/zed#41466
This PR would add "in_snippet" context when there wasn't a completion
menu visible, causing some actions to not be hit.
Release Note:
- N/A
This PR changes the loading/generating indicator when in the "waiting
for tool call confirmation" state so that's a bit more visible and
discernible as needing your attention, as opposed to a regular
generating state.
<img width="400" alt="Screenshot 2025-11-05 at 10 46@2x"
src="https://github.com/user-attachments/assets/88adbf97-20fb-49c4-9c77-b0a3a22aa14e"
/>
Release Notes:
- agent: Improved the "waiting for confirmation" state visibility so
that you more rapidly know the agent is waiting for you to act.
Mostly just removing "thread" from all external agent menu items; I
think we can do without it and it already becomes much better/cleaner.
Release Notes:
- N/A
I am using an Azure OpenAI instance since that is what is provided at
work and with how they have it setup not all responses contain a delta,
which lead to errors and truncated responses. This is related to how
they are filtering potentially offensive requests and responses. I don't
believe this filter was made in-house, instead I believe it is provided
by Microsoft/Azure, so I suspect this fix may help other users.
Release Notes:
- N/A
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Closes#40632
**TL;DR:** The `wrap selections in tag` action was unavailable in ERB
files, even when the cursor was positioned in HTML content (outside of
Ruby code blocks). This happened because `syntax_layer_at()` incorrectly
returned the Ruby language for positions that were actually in HTML.
**NOTE:** I am not familiar with that part of Zed so it could be that
the fix here is completely incorrect.
Previously, `syntax_layer_at` incorrectly reported injected languages
(e.g., Ruby in ERB files) even when the cursor was in the base language
content (HTML). This broke actions like `wrap selections in tag` that
depend on language-specific configuration.
The issue had two parts:
1. Missing start boundary check: The filter only checked if a layer's
end was after the cursor (`end_byte() > offset`), not if it started
before, causing layers outside the cursor position to be included. See
the `BEFORE` video: when I click on the HTML part it reports `Ruby`
language instead of `HTML`.
2. Wrong boundary reference for injections: For injected layers with
`included_sub_ranges` (like Ruby code blocks in ERB), checking the root
node boundaries returned the entire file range instead of the actual
injection ranges.
This fix:
- Adds the containment check using half-open range semantics [start,
end) for root node boundaries. That ensures proper reporting of the
detected language when a cursor (`|`) is located right after the
injection:
```
<body>
<%= yield %>|
</body>
```
- Checks `included_sub_ranges` for injected layers to determine if the
cursor is actually within an injection
- Falls back to root node boundaries for base layers without sub-ranges.
This is the original behavior.
Fixes ERB language support where actions should be available based on
the cursor's actual language context. I think that also applies to some
other template languages like HEEX (Phoenix) and `*.pug`. On short
videos below you can see how I navigate through the ERB template and the
terminal on the right outputs the detected language if you apply the
following patch:
```diff
diff --git i/crates/editor/src/editor.rs w/crates/editor/src/editor.rs
index 15af61f5d2..54a8e0ae37 100644
--- i/crates/editor/src/editor.rs
+++ w/crates/editor/src/editor.rs
@@ -10671,6 +10671,7 @@ impl Editor {
for selection in self.selections.disjoint_anchors_arc().iter() {
if snapshot
.language_at(selection.start)
+ .inspect(|language| println!("Detected language: {:?}", language))
.and_then(|lang| lang.config().wrap_characters.as_ref())
.is_some()
{
```
**Before:**
https://github.com/user-attachments/assets/3f8358f4-d343-462e-b6b1-3f1f2e8c533d
**After:**
https://github.com/user-attachments/assets/c1b9f065-1b44-45a2-8a24-76b7d812130d
Here is the ERB template:
```
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
/* Email styles need to be inline */
</style>
</head>
<body>
<%= yield %>
</body>
</html>
```
Release Notes:
- N/A
Works around an issue, which can be reproduced in the following program:
```rs
use windows::Win32::UI::Input::KeyboardAndMouse::{GetKeyboardState, VK_CONTROL};
fn main() {
let mut keyboard_state = [0u8; 256];
unsafe {
GetKeyboardState(&mut keyboard_state).unwrap();
}
let ctrl_down = (keyboard_state[VK_CONTROL.0 as usize] & 0x80) != 0;
println!("Is Ctrl down: {ctrl_down}");
}
```
In debug mode, this program prints the correct answer. In release mode,
it always prints false. The optimizer appears to think that
`keyboard_state` isn't mutated and remains zeroed, and folds the
`modifier_down` comparisons to `false`.
Release Notes:
- N/A