2733216
gpui: Add debug assertion to Window::on_action and make docs consistent (#41202)
Click to expand commit body
Improves formatting consistency across various docs, fixes some typos,
and adds a missing `debug_assert_paint` to `Window::on_action` and
`Window::on_action_when`.
Release Notes:
- N/A
Lexi Mattick
created
92cfce5
language: Fix completion menu no longer prioritizes relevant items for Typescript and Python (#42065)
Click to expand commit body
Closes #41672
Regressed in https://github.com/zed-industries/zed/pull/40242
Release Notes:
- Fixed issue where completion menu no longer prioritizes relevant items
for TypeScript and Python.
Smit Barmase
created
2b6cf31
file_finder: Display duplicated file in file finder history (#41917)
Click to expand commit body
Closes #41850
When digging into this I figured out that basically what was going on is
in the history of the file finder it doesn't update the name of the file
duplicated because when you duplicate a file it's named automatically
with `filename copy` and so this filename was added to the history but
not updated so once you wanted to go back into this file it was not part
of file finder displayed history anymore because this file doesn't exist
anymore but the entity id remains the same.
I was also to reproduce this bug when just renaming a file.
Release Notes:
- Fixed: Display duplicated file in file finder history
---------
Signed-off-by: Benjamin <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Coenen Benjamin
,
Conrad Irwin
, and
Lukas Wirth
created
58cec41
Adjust terminal decorative character ranges to include missing Powerline characters (#42043)
Click to expand commit body
Closes #41975.
This change adjusts some of the ranges which were incorrectly labeled or
excluded characters. The new ranges include three codepoints which are
not assigned in Nerd Fonts. However, one of these codepoints were
already included prior to this change. These codepoints are:
- U+E0C9, between the two ice separators
- U+E0D3, between the two trapezoid separators. The ranges prior to this
PR already included this one.
- U+E0D5, between the trapezoid separators and the inverted triangle
separators
I included these so as to not overcomplicate the ranges by
cherry-picking the defined codepoints. That being said, if we're okay
with this and an additional unassigned codepoint (U+E0CB, between ice
separators and honeycomb separators) being included then a simple range
from 0xE0B0 to 0xE0D7 nicely includes all of the Powerline characters.
I wasn't sure how to write tests for this so I just added two characters
to the existing tests which were previously not covered lol. All of the
Powerline characters can be seen
[here](https://www.nerdfonts.com/cheat-sheet) by searching `nf-pl`.
Release Notes:
- Fixed certain Powerline characters incorrectly having terminal
contrast adjustment applied.
Lemon
created
2ec5ca0
Fix generate release notes script on first stable (#42061)
Click to expand commit body
Don't crash in generate-release-notes on the first stable
commit on a branch.
Release Notes:
- N/A
Conrad Irwin
created
f8da550
Refresh zed.dev releases page after releases (#42060)
Click to expand commit body
Release Notes:
- N/A
Conrad Irwin
created
0b1d3d7
git: Fix pull failing when tracking remote with different branch name (#41768)
Click to expand commit body
Closes #31430
Release Notes:
- Fixed git pull failing when tracking remote with different branch name
Here's a before/after comparison when `dev` branch has upstream set to
`origin/main`:
https://github.com/user-attachments/assets/3a47e736-c7b7-4634-8cd1-aca7300c3a73
Mayank Verma
created
930b489
ci: Don't require protobuf and postgres checks for tests_pass for now (#42057)
Click to expand commit body
For now, there are cases where we want to merge PRs (advisedly) even
though these checks fail.
Release Notes:
- N/A
Cole Miller
created
121cee8
git: Add cursor pointer on last commit to check changes (#41960)
5360dc1
Refactor timestamp formatting in Git UI components to use `chrono` for local time calculations (#41005)
Click to expand commit body
- Updated `blame_ui.rs`, `branch_picker.rs`, `commit_tooltip.rs`, and
`commit_view.rs` to replace the previous timestamp formatting with
`chrono` for better accuracy in local time representation.
- Introduced `chrono::Local::now().offset().local_minus_utc()` to obtain
the local offset for timestamp formatting.
Closes #40878
Release Notes:
- Improved timestamp handling in various Git UI components for enhanced
user experience.
Viraj Bhartiya
created
6986279
docs: Improve content in /ai/agent-panel and /ai/rules (#42055)
Click to expand commit body
- Clarify about first-party supported features in external agents
- Create new section for selection as context for higher visibility
- Add keybindings for agent profiles
- Fix outdated setting using `assistant` instead of `agent`
- Add keybinding for accessing the rules library
Release Notes:
- N/A
Danilo Leal
created
284d8f7
Support Forgejo and Gitea avatars in git blame (#41813)
Click to expand commit body
Part of #11043.
Codeberg is a public instance of Forgejo, as confirmed by the API
documentation at https://codeberg.org/api/swagger. Therefore, I renamed
the related component from codeberg to forgejo and added codeberg.org as
a public instance.
Furthermore, to optimize request speed for the commit API, I set
`stat=false&verification=false&files=false`.
<img width="1650" height="1268" alt="CleanShot 2025-11-03 at 19 57
06@2x"
src="https://github.com/user-attachments/assets/c1b4129e-f324-41c2-86dc-5e4f7403c046"
/>
<br/>
<br/>
Regarding Gitea Support:
Forgejo is a fork of Gitea, and their APIs are currently identical
(e.g., for getting avatars). However, to future-proof against potential
API divergence, I decided to treat them as separate entities. The
current gitea implementation is essentially a copy of the forgejo file
with the relevant type names and the public instance URL updated.
Release Notes:
- Added Support for Forgejo and Gitea avatars in git blame
ᴀᴍᴛᴏᴀᴇʀ
created
f824e93
docs: Remove non-existing keybinding in /visual-customization (#42053)
Click to expand commit body
Release Notes:
- N/A
Danilo Leal
created
e71bc48
docs: Add section about agent servers in /external-agents (#42052)
Release Notes:
- N/A
When I was implementing Input, I often used `TextRun`, but `background`,
`underline` and `strikethrough` were often not used.
So make change to simplify it.
Closes #36206
Disclaimer: I did use AI for help to end up with this proposed solution.
😅
## Observed behavior of native apps on macOS (like Safari)
I first did a quick research on how Safari behaves on macOS, and here's
what I have found:
1. Safari seems to position new windows with an offset based on the
currently active window
2. It keeps opening new windows with an offset until the new window
cannot fit the display bounds horizontally, vertically or both.
3. When it cannot fit horizontally, the new window opens at x=0
(y=active window's y)
4. When it cannot fit vertically, the new window opens at y=0 (x=active
window's x)
5. When it cannot fit both horizontally and vertically, the new window
opens at x=0 and y=0 (top left).
6. At any moment if I activate a different Safari window, the next new
window is offset off of that
7. If I resize the active window and open a new window, the new window
has the same size as the active window
So, I implemented the changes based on those observations.
I am not sure if touching `gpui/src/window.rs` is the way to go. I am
open to feedback and direction here.
I am also not sure if making my changes platform (macOS) specific, is
the right thing to do. I reckoned that Linux and Windows have different
default behaviors, and the original issue mentioned macOS. But,
likewise, I am open to take a different approach.
## Tests
I haven't included tests for such change, as it seems to me a bit
difficult to properly test this, other than just doing a manual
integration test. But if you would want them for such a change, happy to
try including them.
## Alternative approach
I also did some research on macOS native APIs that we could use instead
of trying to make the calculations ourselves, and I found
`NSWindow.cascadeTopLeftFromPoint` which seems to be doing exactly what
we want, and more. It probably takes more things into consideration and
thus it is more robust. We could go down that road, and add it to
`gpui/src/platform/mac/window.rs` and then use it for new window
creation. Again, if that's what you would do yourselves, let me know and
I can either change the implementation here, or open a new pull request
and let you decide which one would you would like to pursue.
## Video showing the behavior
https://github.com/user-attachments/assets/f802a864-7504-47ee-8c6b-8d9b55474899
🙇♂️
Release Notes:
- Improved macOS new window stacking
Petros Amoiridis
created
eccdfed
gpui: Convert macOS clipboard file URLs to paths for paste (#36848)
Click to expand commit body
- On macOS, pasting now inserts the actual file path when the clipboard
contains a file URL (public.file-url/public.url)
- Terminal paste remains text-only; no temp files or data URLs are
created. If only raw image bytes exist on the clipboard, paste is a
no-op.
- Scope: macOS only; no dependency changes.
- Added a test (test_file_url_converts_to_path) that verifies URL→path
conversion using a unique pasteboard.
Release Notes:
- Improved pasting on macOS: now inserts the actual file path when the
clipboard contains a file URL (enables image paste support for Claude
Code)
Sean Timm
created
2664596
gpui: Fix incorrect handling of Function key modifier on macOS (#38518)
Click to expand commit body
On macOS, the Function key is reserved for system use and should not be
used in application code.
This commit updated keystroke matching and key event handling to ignore
the Function key modifier while users are typing or pressing
keybindings.
For some keyboards with compact layout (like my 65% keyboard), there is
no separated backtick key. Esc and it shares the same physical key. To
input backtick, users may press `Fn-Esc`. However, macOS will still
deliver events with Fn key modifier to applications. Cocoa framework can
handle this correctly, which typically ignore the Fn directly. GPUI
should also follow the same rule, otherwise, the backtick key on those
keyboards won't work.
Release Notes:
- Fixed a bug where typing fn-\` on macOS would not insert a `.
Cyandev
created
23f2fb6
Run ACP login from same cwd as agent server (#42038)
Click to expand commit body
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
Closes #41471
We were killing the crash handler when it received a second copy of any
of the messages, but this GPU specs one is sent on each new window
rather than once at startup. We could gate the sending to only happen
once, but it's simpler to just allow multiple gpu specs messages.
Release Notes:
- N/A
Julia Ryan
created
8315fde
Fix LSP spawning by resetting exception ports in child processes (#40716)
Click to expand commit body
## Summary
Fixes #36754
This PR fixes an issue where LSPs fail to spawn after the crash handler
is initialized.
## Problem
After PR #35263 added minidump crash reporting, some users experienced
LSP spawn failures. The issue manifests as:
- LSPs fail to spawn with no clear error messages
- The problem only occurs after crash handler initialization
- LSPs work when a debugger is attached, revealing a timing issue
### Root Cause
The crash handler installs Mach exception ports for minidump generation.
Due to a timing issue, child processes inherit these exception ports
before they're fully stabilized, which can block child process spawning.
## Solution
Reset exception ports in child processes using the `pre_exec()` hook,
which runs after `fork()` but before `exec()`. This prevents children
from inheriting the parent's crash handler exception ports.
### Implementation
- Adds macOS-specific implementation of `new_smol_command()` that resets
exception ports before exec
- Calls `task_set_exception_ports` to reset all exception ports to
`MACH_PORT_NULL`
- Graceful error handling: logs warnings but doesn't fail process
spawning if port reset fails
Release Notes:
- Fixed LSPs failing to spawn on some macOS systems
---------
Co-authored-by: Julia Ryan <juliaryan3.14@gmail.com>
- Document Arm64 support
- Document minimum Windows version requirements
Release Notes:
- N/A
John Tur
created
c996ead
Update editor data only after real scroll reports (#42035)
Click to expand commit body
Release Notes:
- N/A
Kirill Bulatov
created
e8c6c1b
agent_ui: Fix how icons from external agents are displayed (#42034)
Click to expand commit body
Release Notes:
- N/A
Danilo Leal
created
b8364d7
node: Move managed runtime to v24 LTS (#41956)
Click to expand commit body
Release Notes:
- Moved managed Node runtime to v24 LTS
versecafe
created
7c23ef8
Fix corrupted characters being inserted when Alt is pressed (#42033)
Click to expand commit body
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)
John Tur
created
2f46337
Refactor buffer headers to collapse on click (#42021)
Click to expand commit body
Release Notes:
Updated how clicking on multi-buffer headers works to provide better
control and prevent unexpected navigation:
Clicking the header now collapses/expands the file section instead of
opening the file.
Opening files can be done by clicking the filename or the "Open file"
button on the right side of the header.
Existing shortcuts continue to work: use the left chevron to collapse or
your keyboard shortcut to jump to the file
**Demo:**
https://github.com/user-attachments/assets/dca9ccc5-bd98-416c-97af-43b4e4b2f903
Matt Miller
created
feed34c
gpui: Add support for rendering SVG from external files (#42024)
27fb109
Revert "editor: Add action to move between snippet tabstop positions" (#42008)
Click to expand commit body
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
Anthony Eid
created
0f5a63a
agent_ui: Make "waiting confirmation" state more apparent (#41998)
Click to expand commit body
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.
Danilo Leal
created
c8ada5b
agent_ui: Reduce label repetitiveness on new thread menu (#42001)
Click to expand commit body
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
Danilo Leal
created
27a1884
open_ai: Make the deltas optional (#39142)
Click to expand commit body
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>
Techy
and
Bennet Bo Fenner
created
2bc1d60
remote: Fix open terminal fails when $SHELL is not set (#41990)
Click to expand commit body
Closes #41644
Release Notes:
- Fixed issue where it failed to spawn terminal on systems such as
Alpine.
Smit Barmase
created
17933f1
Update documentation on Java support (#41758)
Click to expand commit body
This brings the documentation on Java in line with the much changed
reality of the Java extension.
Note that the correctness of this is contingent on
https://github.com/zed-industries/extensions/pull/3745 being merged.
Release Notes:
- N/A
Karl-Erik Enkelmann
created
cd87307
language: Fix language detection for injected syntax layers (#41111)
Click to expand commit body
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
Vitaly Slobodin
created
11b29d6
ruby: Add note about enabling Ruby LSP for ERB files (#41851)
Click to expand commit body
Hi, this is a follow-up change for
https://github.com/zed-industries/zed/pull/41754 I think it important to
keep existing things working. So add notes to the Ruby extension doc
about enabling Ruby LSP for ERB files as well. Thanks!
Release Notes:
- N/A
Vitaly Slobodin
created
c061698
project: Fetch latest lsp data in `deduplicate_range_based_lsp_requests` (#41971)
Click to expand commit body
Fixes ZED-2MK
Release Notes:
- Fixed a panic in inlay hints
Lukas Wirth
created
b4f7af0
Work around codegen bug with GetKeyboardState (#41970)
Click to expand commit body
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
John Tur
created
c83621f
editor: Fix setting multi_cursor_modifier opens implementation in new pane instead of new tab (#41963)
Click to expand commit body
Closes #41014
Release Notes:
- Fixed an issue where `multi_cursor_modifier` set to `cmd_or_ctrl`
opens implementation in new pane instead of new tab.
Smit Barmase
created
0da52d6
Add ACP terminal-login via _meta field (#41954)
Click to expand commit body
As discussed with @benbrandt and @mikayla-maki:
* We now tell ACP clients we support the nonstandard `terminal-auth`
`_meta` field for terminal-based authentication
* In the future, we anticipate ACP itself supporting *some* form of
terminal-based authentication, but that hasn't been designed yet or gone
through the RFD process
* For now, this unblocks terminal-based auth
Release Notes:
- Added experimental terminal-based authentication to ACP support
Richard Feldman
created
60ee0dd
Use our `node` runtime for ACP extensions (#41955)
Click to expand commit body
Release Notes:
- Now ACP extensions use Zed's managed Node.js runtime
---------
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Patch releases to preview will now automatically release
Release Notes:
- N/A
Conrad Irwin
created
2ead8c4
Improve Windows text input for international keyboard layouts and IMEs (#41259)
Click to expand commit body
- Custom handling of dead keys has been removed. UX for dead keys is now
the same as other applications on Windows.
- We could bring back some kind of custom UI, but only if UX is fully
compatible with expected Windows behavior (e.g. ability to move the
cursor after typing a dead key).
- Fixes https://github.com/zed-industries/zed/issues/38838
- Character input via AltGr shift state now always has priority over
keybindings. This applies regardless of whether the keystroke used the
AltGr key or Ctrl+Alt to enter the shift state.
- In particular, we use the following heuristic to determine whether a
keystroke should trigger character input first or trigger keybindings
first:
- If the keystroke does not have any of Ctrl/Alt/Win down, trigger
keybindings first.
- Otherwise, determine the character that would be entered by the
keystroke. If it is a control character, or no character at all, trigger
keybindings first.
- Otherwise, the keystroke has _any_ of Ctrl/Alt/Win down and generates
a printable character. Compare this character against the character that
would be generated if the keystroke had _none_ of Ctrl/Alt/Win down:
- If the character is the same, the modifiers are not significant;
trigger keybindings first.
- If there is no active input handler, or the active input handler
indicates that it isn't accepting text input (e.g. when an operator is
pending in Vim mode), character entry is not useful; trigger keybindings
first.
- Otherwise, assume the modifiers enable access to an otherwise
difficult-to-enter key; trigger character entry first.
- Fixes https://github.com/zed-industries/zed/issues/35862
- Fixes
https://github.com/zed-industries/zed/issues/40054#issuecomment-3447833349
- Fixes https://github.com/zed-industries/zed/issues/41486
- TranslateMessage calls are no longer skipped for unhandled keystrokes.
This fixes language input keys on Japanese and Korean keyboards (and
surely other cases as well).
- To avoid any other missing-TranslateMessage headaches in the future,
the message loop has been rewritten in a "traditional" Win32 style,
where accelerators are handled in the message loop and TranslateMessage
is called in the intended manner.
- Fixes https://github.com/zed-industries/zed/issues/39971
- Fixes https://github.com/zed-industries/zed/issues/40300
- Fixes https://github.com/zed-industries/zed/issues/40321
- Fixes https://github.com/zed-industries/zed/issues/40335
- Fixes https://github.com/zed-industries/zed/issues/40592
- Fixes https://github.com/zed-industries/zed/issues/40638
- As a bonus, Alt+Space now opens the system menu, since it is triggered
by the WM_SYSCHAR generated by TranslateMessage.
- VK_PROCESSKEYs are now ignored rather than being unwrapped and matched
against keybindings. This ensures that IMEs will reliably receieve
keystrokes that they express interest in. This matches the behavior of
native Windows applications.
- Fixes https://github.com/zed-industries/zed/issues/36736
- Fixes https://github.com/zed-industries/zed/issues/39608
- Fixes https://github.com/zed-industries/zed/issues/39991
- Fixes https://github.com/zed-industries/zed/issues/41223
- Fixes https://github.com/zed-industries/zed/issues/41656
- Fixes https://github.com/zed-industries/zed/issues/34180
- Fixes https://github.com/zed-industries/zed/issues/41766
Release Notes:
- windows: Improved keyboard input handling for international keyboard
layouts and IMEs
John Tur
created
0a4b1ac
inline assistant: Mention ability to add context with @ in the placeholder (#41950)
Click to expand commit body
This has been possible in the inline assistant for ages now and maybe
you didn't know because we didn't say anything about it! This PR fixes
that by including that you can @-mention context on it the same you can
in the agent panel.
Release Notes:
- N/A
Danilo Leal
created
f9fb855
Fetch (just) enough refs in script/cherry-pick (#41949)
Click to expand commit body
Before this change we'd download all the tagged commits, but none of
their ancestors,
this was slow and made cherry-picking fail.
Release Notes:
- N/A