737b177
Switch to columnar selection by pressing `alt-shift` while mouse is down (#25096)
Click to expand commit body
We begin a columnar selection when we drag the mouse while holding
`alt-shift`. This PR makes it possible to start the selection and then
turn it into columnar by pressing `alt-shift`.
Fixes #5372
Release Notes:
- Support switching to columnar selection by pressing `alt-shift` while
mouse is down
Agus Zubiaga
created
c10ac31
theme: Don't log errors for missing themes until extensions have loaded (#25098)
Click to expand commit body
This PR makes it so we don't log errors for missing themes or icon
themes until after the extensions have been loaded.
Currently, if you are using a theme that is defined in an extension it
is common to see one or more "theme not found" errors in the logs. This
is the result of us having to initialize the theme before the extensions
have actually finished loading.
This means that a theme that _may_ exist once extensions load is
considered non-existent before they have loaded.
To that end, we now wait until the extensions have loaded before we
start logging errors if we can't find the theme or icon theme.
Closes https://github.com/zed-industries/zed/issues/24539.
Release Notes:
- Reduced the number of "theme not found" and "icon theme not found"
errors in the logs for themes provided by extensions.
Marshall Bowers
created
1e255e4
assistant2: Show token count in the Prompt Editor view (#25091)
Click to expand commit body
Release Notes:
- N/A
---------
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Danilo Leal
and
Agus Zubiaga
created
8a7565e
Add small improvement to the theme picker footer (#25088)
Click to expand commit body
- Always start a button's label with an imperative verb
- Use the `ArrowUpRight` icon when the button opens an external link
<img width="700" alt="Screenshot 2025-01-21 at 11 20 49 AM"
src="https://github.com/user-attachments/assets/383d9bad-2756-4e85-acad-4ed956f541cb"
/>
Release Notes:
- N/A
Danilo Leal
created
8e7cad7
theme: Return structured errors when a theme is not found (#25090)
Click to expand commit body
This PR updates the `ThemeRegistry` to return structured errors from the
`get` and `get_icon_theme` methods (which are used to retrieve themes
and icon themes, respectively).
We want to be able to carry the name of the theme that was not found as
state on the error, which is why we use a `Result` and not an `Option`.
However, we also want to be able to accurately identify when the error
case is "not found" so we can take appropriate action, based on the
circumstances.
By using a custom error type instead of an `anyhow::Error`, we get both.
There isn't any functional change in this PR. This just sets us up for
future improvements in this error.
Release Notes:
- N/A
Marshall Bowers
created
76f501a
git: Don't load shallow HEAD text of symlinks (#25058)
Click to expand commit body
For symlinks, return `None` from `load_committed_text` as we do from
`load_index_text` ever since #10037.
Release Notes:
- Fixed diff hunks appearing in unchanged symlinked files
Cole Miller
created
9ef0501
file_finder: Remove common segments of long paths in search results (#25049)
Click to expand commit body
This PR makes progress on #7711 by identifying any common prefix of the
paths in the file finder's search results, and replacing the "interior"
of that prefix---every path segment but the first and last---with `...`,
when a heuristic indicates that the longest path would otherwise
overflow the modal.
The elision is not applied to any segment that contains a match for the
search query.
There may be more work to do on #7711 in the case of long result paths
that do not share a significant common prefix.
Release Notes:
- Improved display of long paths in the file finder modal
Co-authored-by: Max <max@zed.dev>
Part of https://github.com/zed-industries/zed/issues/7371
Closes https://github.com/zed-industries/zed/issues/12853
Release Notes:
- Started to persist latest selections for editors, to restore those on
restart
Kirill Bulatov
created
b340378
terminal: Change context menu item label (#25085)
Click to expand commit body
Super subtle, but when I initially saw just "Close", I got weirded out
asking myself "why there's a menu item to close the context menu?", to
only then realize that it didn't close the menu, but the terminal _tab_.
Might be obvious, because that's how buffer tabs are labled, but I don't
know, it feels like the redundancy here is overall positive.
Release Notes:
- N/A
Danilo Leal
created
295e486
edit prediction: Update disabled globs link in the onboarding modal (#25084)
Some language servers report version 0 even if the buffer hasn't been
opened yet. We detect this case and treat it as if the version was
`None`.
Closes #23706
Release Notes:
- Fixed a bug that prevented renames for some languages.
Antonio Scandurra
created
b4fc127
editor: Disable "Open in Terminal" when it's not possible (#25059)
Click to expand commit body
When impossible to trigger action, the button should be disabled.
Release Notes:
- N/A
813d870
Bump Tree-sitter for bug fixes affecting YAML parser loaded via WASM (#25054)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/24742
Closes #24632
This PR bumps Tree-sitter to bring in bug fixes:
* https://github.com/tree-sitter/tree-sitter/pull/4218
* https://github.com/tree-sitter/tree-sitter/pull/4213
* https://github.com/tree-sitter/tree-sitter/pull/4210
I've also bumped Wasmtime and wit-bindgen, since the new Tree-sitter
uses a newer wasmtime.
Release Notes:
- Fixed a parsing bug that caused memory leaks and crashes when using
the Ansible extension
---------
Co-authored-by: Anthony <anthony@zed.dev>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Max Brunsfeld
,
Anthony
, and
Anthony Eid
created
8942e65
add more tests to `editor::SelectAllMatches` (#25060)
This PR reverts two recent commits that changed our gutter highlights to
mark separately the deleted and added portions of an expanded
modification hunk. It returns to the previous status quo where the
gutter highlight for an expanded modification hunk has the same color
for the deleted and added portions.
Release Notes:
- N/A
This PR fixes a formatting issue in the docs that was introduced in
#5669.
Seems that PR was merged without passing CI.
Release Notes:
- N/A
Marshall Bowers
created
a8de6af
Fix `editor::SplitSelectionIntoLines` adding an extra line at the end (#25053)
Click to expand commit body
Closes #4795
Release Notes:
- Fixed `editor::SplitSelectionIntoLines` adding an extra line at end
of selection
João Marcos
created
12aa270
Fix TypeScript block indenting when using allman style (#25051)
Click to expand commit body
Closes #24976
Release Notes:
- Fixed an issue where writing TypeScript using Allman style would
result in incorrect auto-indent behavior
Ben Kunkle
created
888dc0b
Document `file_scan_inclusions` and make consistent with default.json (#25046)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
bb53ad9
Only allow save_as for pane if can_save_as is true (#25028)
Click to expand commit body
When saving an item, some logic is done to determine whether one can
save it. In the special case where the intent is to `SaveAs`, it was
previously allowed to proceed as long as the buffer was a singleton
(presumably since it only makes sense to provide a save path for a
single file). However, we need to _also_ check that this item can be
"saved as" at all.
For this, we resurrect the `ItemHandle`/`Item` trait method
`can_save_as`. We have given it the default implementation of returning
`false`, and then overridden this in the implementation for
`TerminalView`.
Closes #25023
Release Notes:
- Fixed crash when trying to save terminal buffer
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Dylan
and
Conrad Irwin
created
62a11b0
ui: Remove `track_focus` method from Picker render (#25043)
Click to expand commit body
Follow-up to: https://github.com/zed-industries/zed/pull/25025
Removing the `track_focus` method fix the focus hijack that we
introduced in the previous PR. cc @0xtimsb
Also, I don't see any immediate affect in the actual scrollbar behavior
without this! Holler if that's not the case.
Release Notes:
- N/A
Danilo Leal
created
e068c7b
vim: Update anyquotes and anybrackets to behave like mini.ai plugin (#24167)
Click to expand commit body
### Overview
This PR improves the existing
[mini.ai‐like](https://github.com/echasnovski/mini.ai) text-object logic
for both “AnyQuotes” (quotes) and “AnyBrackets” (brackets) by adding a
multi‐line fallback. The first pass searches only the current line for a
best match (cover or next); if none are found, we do a multi‐line pass.
This preserves mini.ai's usual “line priority” while ensuring we can
detect pairs that start on one line and end on another.
### What Changed
1. Brackets
- Line-based pass uses `gather_line_brackets(map, caret.row()) `to find
bracket pairs `((), [], {}, <>) `on the caret’s line.
- If that fails, we call `gather_brackets_multiline(map)` to single‐pass
scan the entire buffer, collecting bracket pairs that might span
multiple lines.
- Finally, we apply the mini.ai “**cover or next**” logic
(`pick_best_range`) to choose the best.
2. Quotes
- Similar line-based pass with `gather_line_quotes(map, caret.row())`.
- If no local quotes found, we do a multi‐line fallback with
`gather_quotes_multiline(map)`, building a big string for the whole
buffer and using naive regex for "...", '...', and `...`.
- Also preserves “inner vs. outer” logic:
- For inner (e.g. `ciq`), we skip bounding quotes or brackets if the
range is at least 2 characters wide.
- For outer (`caq`), we return the entire range.
3. Shared “`finalize`” helpers
- `finalize_bracket_range` and `finalize_quote_range` handle the “inner”
skip‐chars vs. “outer” logic.
- Both rely on the same “line first, then full fallback” approach.
### Why This Matters
- **Old Behavior**: If you had multi‐line brackets { ... } or multi‐line
quotes spanning multiple lines, they weren’t found at all, since we only
scanned line by line. That made text objects like ci{ or ciq fail in
multi-line scenarios.
- **New Behavior**: We still do a quick line pass (for user‐friendly
“line priority”), but now if that fails, we do a single‐pass approach
across the entire buffer. This detects multi‐line pairs and maintains
mini.ai’s “cover‐or‐next” picking logic.
### Example Use Cases
- **Curly braces:** e.g., opening { on line 10, closing } on line 15 →
previously missed; now recognized.
- **Multi‐line quotes**: e.g., "'Line 1\nLine 2', no longer missed. We
do gather_quotes_multiline with a naive regex matching across newlines.
### Tests
- Updated and expanded coverage in:
- test_anyquotes_object:
- Includes a multi-line '...' test case.
- E.g. 'first' false\n<caret>string 'second' → ensuring we detect
multi‐line quotes.
- test_anybrackets_object:
- Verifies line‐based priority but also multi‐line bracket detection.
- E.g., an open bracket ( on line 3, close ) on line 5, which used to
fail.
### Limitations / Future Enhancements
- **Escaping**: The current approach for quotes is naive and doesn’t
handle escape sequences (like \") or advanced parser logic. For deeper
correctness, we’ll need more advanced logic, this is also not supported
in the original mini.ai plugin so it is a known issue that won't be
attended for now.
### Important Notes
- Fix for the bug: https://github.com/zed-industries/zed/issues/23889
this PR addresses that bug specifically for the AnyQuotes text object.
Note that the issue still remains in the built-in motions (ci', ci",
ci`).
- Caret Position Differences: The caret position now slightly deviates
from Vim’s default behavior. This is intentional. I aim to closely mimic
the mini.ai plugin. Because these text objects are optional
(configurable via vim.json), this adjusted behavior is considered
acceptable and in my opinion the new behavior is better and it should be
the default in vim. Please review the new tests for details and context.
- Improved Special Cases: I’ve also refined how “false strings” in the
middle and certain curly-bracket scenarios are handled. The test suite
reflects these improvements, resulting in a more seamless coding
experience overall.
### References:
- Mini.AI plugin in nvim: https://github.com/echasnovski/mini.ai
Thank you for reviewing these changes!
Release Notes:
- Improve logic of aq, iq, ab and ib motions to work more like mini.ai
plugin
Osvaldo
created
a99696b
pane: Disable the "Close..." controls depending on certain scenarios (#25037)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/12471
- Disables "Close Others" if there's just one tab
- Disables "Close Left"/"Close Right" if the above is true or if there's
no tabs to the left/right side of the active tab
Release Notes:
- N/A
Danilo Leal
created
dc11a61
assistant: Improve language model selector design (#25036)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/23234
This PR adds a scrollbar to the model selector, and ensures no label
(model and provider name) is cut off.
Release Notes:
- N/A
Danilo Leal
created
5eadeb6
Add newlines before some headings in licenses.md (#25035)
Click to expand commit body
Release Notes:
- N/A
Michael Sloan
created
aa4c438
Use `Vec` for `KeyContext` instead of `SmallVec` (#24916)
Click to expand commit body
In Zed the key context almost always has more than 1 entry, so use of
`SmallVec` is just adding overhead.
In Zed while using the editor this typically has more than 8 entries.
Since `ContextEntry` is 48 bytes, if this were made to be a
`SmallVec<[ContextEntry; 10]>` then it would use 480 bytes on the stack,
which to me seems like a lot to be copying. So, instead opting to just
use `Vec`
Release Notes:
- N/A
Michael Sloan
created
f2bc3d3
assistant: Add model selector to the Context Editor (#25032)
Click to expand commit body
This PR also removes everything related with the model selector from the
Context Editor toolbar.
Release Notes:
- N/A
Danilo Leal
created
f833a01
copilot: Add support for Gemini 2.0 Flash model to Copilot Chat (#24952)
Click to expand commit body
Co-authored-by: Peter Tripp <peter@zed.dev>
Richard Hao
and
Peter Tripp
created
3e97226
editor: Highlight all matching occurrences of text in selection (#24835)
Click to expand commit body
Closes #12635
- [x] Get it working
- [x] Disable for multi cursor
- [x] Disable for vim visual line selection
- [x] Add setting to disable it
- [x] Add scrollbar marker
- [x] Handle delete state capturing selection
Preview:
https://github.com/user-attachments/assets/a76cde64-4f6c-4575-91cc-3a03a954e7a9
Release Notes:
- Added support to highlight all matching occurrences of text within the
selection in editor.
---------
Co-authored-by: Agus Zubiaga <agus@zed.dev>
Co-authored-by: Danilo <danilo@zed.dev>
smit
,
Agus Zubiaga
, and
Danilo
created
1e1b637
Fix handling of empty blocks in BlockMap::chunks (#25031)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/23391
Release Notes:
- Fixed a bug that sometimes caused incorrect syntax highlighting when
deploying the inline assistant.
Max Brunsfeld
created
69477df
ui: Add `show_scrollbar` method to Picker (#25025)
Click to expand commit body
Now, you can pass `show_scrollbar` to Picker that implement a
`uniform_list`. If that's on, the scrollbar should auto-hide if you move
your focus elsewhere. By default, this method is turned off.
Release Notes:
- N/A
---------
Co-authored-by: smit <0xtimsb@gmail.com>
Danilo Leal
and
smit
created
cd108cc
theme: Improve contrast for One Light's `read_background` token (#25027)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/20575
Subtle change, but more pronounced in single characters.
| Before | After |
|--------|--------|
| <img width="700" alt="Screenshot 2025-02-07 at 4 58 16 PM"
src="https://github.com/user-attachments/assets/dc9332e1-6e86-44a9-bb7a-5f195d778127"
/> | <img width="700" alt="Screenshot 2025-02-07 at 4 58 16 PM"
src="https://github.com/user-attachments/assets/d8fd408f-f8ea-4b87-bd20-345ffc24b5b1"
/> |
Release Notes:
- N/A
Danilo Leal
created
478bcca
edit predictions: Handle no keybind for preview (#25015)
Click to expand commit body
If the user removes all modified keybinds in `edit_prediction_conflict`,
the preview bar above the completions menu would disappear. This PR
handles that case slightly better by still showing the 1-line preview
(which they might accept via an unmodified keybind) and hides the `|
Preview ⌥` section since it's impossible to invoke in this case.
Release Notes:
- Handle `edit_prediction_conflict` context without modified keybinds
for `AcceptEditPrediction`
Agus Zubiaga
created
08e9080
Use lowercase for vim key bindings (#25024)
Click to expand commit body
Vim itself shows keybindings cased according to the character, and so
it's confusing for people coming from vim that we show all key-bindings
uppercase with an icon denoting shift (c.f. #14287).
So, in #24322 we changed Zed to use lowercase for bindings in vim mode.
Unfortunately this (in practice) looks awful because our key icons are
designed to be paired with uppercase letters.
Instead, we now (for vim mode) show the same syntax as would be used in
the keymap file for Zed. This is different from vim (i.e. we show
shift-z instead of Z, and cmd-d instead of <D-z>) but hopefully avoids
the original confusion, and as a bonus makes it easy to figure out the
syntax you need for a workspace::SendKeystrokes.
Closes #ISSUE
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Conrad Irwin
created
e45b5ca
Redact Google Gemini API keys from error messaging and log (#24884)
Click to expand commit body
Now:
```
ERROR assistant_context_editor] error sending request for url (https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:countTokens?key=REDACTED)
```
Release Notes:
- Improved redaction of Google Gemini keys from API errors in logs
Peter Tripp
created
510260a
Use the `MessageNotification` component for the release notes toast (#25013)
* Remove unneeded accepted licenses
* Removes use of `workarounds`
- `wasmtime` no longer needed in list
- `ring` now checks the license SHA
* Checks license from `files` instead of from `git`. Execution time ~17s
instead of ~24s
Release Notes:
- N/A
Michael Sloan
created
bcba0b9
Fail if `cargo about` emits warnings (#24996)
Click to expand commit body
Warnings are emitted despite --fail have no license field like `ring`
Release Notes:
- N/A
Michael Sloan
created
8b088b3
Fix F10 and Alt+F handling on Windows (#24745)
Click to expand commit body
Closes #24744
and should also fix #17819
The change is split into two commits, first one adds F10 handling (it
needs to be handled inside `parse_syskeydown_msg_keystroke`, the second
one properly handles `Alt+Fn` combinations, this also needs to happen in
`parse_syskeydown_msg_keystroke` and is similar to a fragment inside
`parse_keydown_msg_keystroke`
Release Notes:
- Fixes F10 and Alt+Fn handling on windows
ba2c182
Revert "Fix issue with `vim::PushOperator` documentation (#24825)" (#24989)
Click to expand commit body
This reverts commit 28c667a3c78ab1febcea1b1de85f375658a28b18.
Release Notes:
- N/A
Ben Kunkle
created
c7df2d7
Rename `livekit_server` to `livekit_api` (#24984)
Click to expand commit body
The name `livekit_server` was a bit misleading as it is not a server and
gets built into both the client and server - the server code is in
`collab`.
Release Notes:
- N/A
Michael Sloan
created
2400fb4
Set keybindings to non-vim mode when vim is disabled (#24971)
As of 0.4.0, the decryption panic that we were seeing has been fixed
upstream (thanks @bilelmoussaoui!), so stop using our temporary fork.
Release Notes:
- N/A
This reverts commit 56f13ddc50af5713e270027a9dd71dc7b00203c2.
I hurried with Zed update for MSYS2... anyway good news that I managed
to fix build issue
Release Notes:
- N/A
Maksim Bondarenkov
created
4ff1173
git: Fill the commit message buffer from MERGE_MSG (#24843)
Click to expand commit body
This PR uses the template merge message in `.git/MERGE_MSG` to populate
the commit message buffer in the git panel. This is done:
- when the commit message buffer is first created
- when the list of merge heads in .git changes, only if the buffer
doesn't already have some text in it
Hopefully this strikes a good balance between convenience and not
stomping on the user's toes.
Release Notes:
- N/A