0e38d2d
Add doc on workspace persistence (#25062)
Click to expand commit body
Release Notes: - N/A
Joseph T. Lyons created
0e38d2d
Add doc on workspace persistence (#25062)
Release Notes: - N/A
Joseph T. Lyons created
813d870
Bump Tree-sitter for bug fixes affecting YAML parser loaded via WASM (#25054)
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)
Release Notes: - N/A
João Marcos created
06726a2
Revert splitting display diff hunks (#25020)
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
Cole Miller created
93efb57
docs: Fix formatting (#25057)
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)
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)
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)
Release Notes: - N/A
Michael Sloan created
bb53ad9
Only allow save_as for pane if can_save_as is true (#25028)
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)
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)
### 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)
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)
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)
Release Notes: - N/A
Michael Sloan created
aa4c438
Use `Vec` for `KeyContext` instead of `SmallVec` (#24916)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
Closes https://github.com/zed-industries/zed/issues/24981 Release Notes: - N/A --------- Co-authored-by: smit <0xtimsb@gmail.com>
Danilo Leal and smit created
aca31cf
Use Alacritty from crates.io (#25016)
Follow-up of https://github.com/zed-industries/zed/pull/23085 Release Notes: - N/A
Kirill Bulatov created
b5d85b6
Add regex highlights in the query input (#25005)
Closes https://github.com/zed-industries/zed/discussions/24994 Release Notes: - Added regex highlights in the query input
Kirill Bulatov created
91c99ba
Allowlist for APGL crates in `check-licenses` (#24998)
Also makes `shellcheck` pass Release Notes: - N/A
Michael Sloan created
3b5dad8
Improve `cargo about` licenses configuration (#24997)
* 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)
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)
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
GiM created
5849180
Fix up tasks documentation (#24991)
Release Notes: - N/A
Joseph T. Lyons created
ba2c182
Revert "Fix issue with `vim::PushOperator` documentation (#24825)" (#24989)
This reverts commit 28c667a3c78ab1febcea1b1de85f375658a28b18. Release Notes: - N/A
Ben Kunkle created
c7df2d7
Rename `livekit_server` to `livekit_api` (#24984)
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)
Closes #ISSUE Release Notes: - N/A
Conrad Irwin created
74d1a65
Switch back to upstream oo7 (#24957)
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
Cole Miller created
bd41be2
Revert "docs: Update msys2 section (#24942)" (#24958)
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)
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
Cole Miller created
394bb8f
Fix a couple of diff hunk issues (#24913)
- Fix hunks losing their expandedness when staged or unstaged - Disable collapsing hunks in the project diff editor Release Notes: - N/A --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Cole Miller and Conrad Irwin created
56f13dd
docs: Update msys2 section (#24942)
CLANG64 version of Zed is being removed in https://github.com/msys2/MINGW-packages/pull/23391 due to build issue with `aws-lc-sys`: https://github.com/aws/aws-lc-rs/issues/696#issuecomment-2660839255 Closes #ISSUE Release Notes: - N/A
Maksim Bondarenkov created
79e3faf
Make save all prompt less noisy (#24934)
Don't show clean items from dirty multibuffers, and dedupe filenames in case you have a file open in a buffer and a multibuffer Release Notes: - N/A
Conrad Irwin created
e0fc767
Display case-sensitive keybindings for vim commands (#24322)
This Pull Request tackles the issue outline in #14287 by changing the way `KeyBinding`s for vim mode are displayed in the command palette. It's worth pointing out that this whole thing was pretty much implemented by Conrad Irwin during a pairing session, I just tried to clean up some other changes introduced for a different issue, while improving some comments. Here's a quick list of the changes introduced: - Update `KeyBinding` with a new `vim_mode` field to determine whether the keybinding should be displayed in vim mode. - Update the way `KeyBinding` is rendered, so as to detect if the keybinding is for vim mode, if it is, only display keys in uppercase if they require the shift key. - Introduce a new global state – `VimStyle(bool)` - use to determine whether `vim_mode` should be enabled or disabled when creating a new `KeyBinding` struct. This global state is automatically set by the `vim` crate whenever vim mode is enabled or disabled. - Since the app's context is now required when building a `KeyBinding` , update a lot of callers to correctly pass this context. And before and after screenshots, for comparison: | before | after | |--------|-------| | <img width="1050" alt="SCR-20250205-tyeq" src="https://github.com/user-attachments/assets/e577206d-2a3d-4e06-a96f-a98899cc15c0" /> | <img width="1050" alt="SCR-20250205-tylh" src="https://github.com/user-attachments/assets/ebbf70a9-e838-4d32-aee5-0ffde94d65fb" /> | Closes #14287 Release Notes: - Fix rendering of vim commands to preserve case sensitivity --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Dino and Conrad Irwin created
14289b5
Fix ReplaceWithRegister with proper dot repeat (#24932)
Release Notes: - Fixed ReplaceWithRegister with proper dot repeat
xzbdmw created
1b38b9f
theme: Add file icon associations for `.rdata` and `.RData` files (#24925)
.RData is a file that stores R objects. Release Notes: - Added file icon associations for `.rdata` and `.RData` files. --------- Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Aymen and Marshall Bowers created
bf21d91
docs: Update icon theme docs with `file_stems` and `file_suffixes` (#24929)
This PR updates the icon theme docs with examples of `file_stems` and `file_suffixes` that were added in https://github.com/zed-industries/zed/pull/24926. Release Notes: - N/A
Marshall Bowers created
e60123b
Allow icon themes to provide their own file associations (#24926)
This PR adds the ability for icon themes to provide their own file
associations.
The old `file_types.json` that was previously used to make these
associations has been removed in favor of storing them on the default
theme.
Icon themes have two new fields on them:
- `file_stems`: A mapping of file stems to icon keys.
- `file_suffixes`: A mapping of file suffixes to icon keys.
These mappings produce icon keys which can then be used in `file_icons`
to associate them to a particular icon:
```json
{
"file_stems": {
"Makefile": "make"
},
"file_suffixes": {
"idr": "idris"
},
"file_icons": {
"idris": { "path": "./icons/idris.svg" },
"make": { "path": "./icons/make.svg" }
}
}
```
When loading an icon theme, the `file_stems` and `file_icons` fields
will be merged with the ones from the base icon theme, with the values
from the icon theme being loaded overriding ones in the base theme.
Release Notes:
- Added the ability for icon themes to provide their own file
associations.
Marshall Bowers created
f277609
Update Rust crate rustls to v0.23.23 (#24762)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [rustls](https://redirect.github.com/rustls/rustls) | workspace.dependencies | patch | `0.23.22` -> `0.23.23` | --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [x] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ny4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate[bot] and renovate[bot] created
a01d2dd
file_icons: Add separate icon keys for .NET solution and project files (#24851)
Add separate icon keys for .NET solution and project files. Release Notes: - Icon themes: Added the ability to change file icons for Visual Studio project files: - Solution files (`.sln`) - Solution User Options files (`.suo`) - C# Project files (`.csproj`) - F# Project files (`.fsproj`) - Visual Basic Project files (`.vbproj`) --------- Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Randa Zraik and Marshall Bowers created
88fe54e
docs: Add link to Zeta's Hugging Face profile (#24915)
Release Notes: - N/A
Danilo Leal created
64b2a49
Update Rust crate filedescriptor to v0.8.3 (#24759)
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [filedescriptor](https://redirect.github.com/wezterm/wezterm) | dependencies | patch | `0.8.2` -> `0.8.3` | --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ny4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate[bot] and renovate[bot] created