Commit log

8ecbfde Bump to 0.220.2 for @MrSubidubi

Zed Zippy created

748cd0a settings_ui: Prevent panic when trying to configure edit prediction providers for language (#47162)

Click to expand commit body
Closes #46502

The issue here was that we were not looking into the sub page stack when
looking headers up, resulting in an out of bounds index. This PR fixes
this.

Due to me also fixing another small bug in the UI (and adding proper
support for the breadcrumbs), I had to move quite some stuff around here
to get this to work. Namely, I made the `sub_page_stack` a field on the
`SettingsWindow` and now only store the `active_language` in a global to
ensure that we store scroll positions properly for all sub pages. For
that to work with the edit prediction provider page, I had to remove the
struct there and could just move that into a method, which was a nice
side effect there I suppose.

Release Notes:

- Fixed a crash that could occur when trying to edit edit prediction
providers in the settings UI.

Finn Evers created

b131c00 rope: Add missing early return in `log_err_char_boundary` (#47191) (cherry-pick to preview) (#47192)

Click to expand commit body
Cherry-pick of #47191 to preview

----
Closes ZED-465

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Co-authored-by: Lukas Wirth <lukas@zed.dev>

zed-zippy[bot] and Lukas Wirth created

9cdb697 agent: Patch image format bug (#45978) (cherry-pick to preview) (#47174)

Click to expand commit body
Cherry-pick of #45978 to preview

----
Closes #44694

Release Notes:

- Fixed images being converted to png but retaining old format

## Before:
<img width="574" height="327" alt="Screenshot 2026-01-02 at 5 34 24 PM"

src="https://github.com/user-attachments/assets/92331939-cebc-4f53-99fc-10d5181cf87e"
/>

## After:
<img width="638" height="489" alt="Screenshot 2026-01-02 at 5 34 36 PM"

src="https://github.com/user-attachments/assets/47c05906-fa56-4a53-abd4-790c42230772"
/>

---------

Co-authored-by: versecafe <147033096+versecafe@users.noreply.github.com>
Co-authored-by: MrSubidubi <finn@zed.dev>

Co-authored-by: Mason Palmer <97921708+mason-palmer@users.noreply.github.com>
Co-authored-by: versecafe <147033096+versecafe@users.noreply.github.com>
Co-authored-by: MrSubidubi <finn@zed.dev>

zed-zippy[bot] , Mason Palmer , versecafe , and MrSubidubi created

8c35bd8 languages: Apply JSX fixes to JavaScript highlights (#47130) (cherry-pick to preview) (#47131)

Click to expand commit body
Cherry-pick of #47130 to preview

----
Closes #46701

This ports the fixes from #46442 over to the JavaScript highlights,
which we forgot to do in that PR since the highlights are not shareable
and the fix was only applied to TSX... Hence, porting the fixes here
manually to solve the issue for good.

Release Notes:

- Fixed an issue where JSX components were highlighted too broadly,
causing normal HTML tags to be highlighted as such

Co-authored-by: Finn Evers <finn@zed.dev>

zed-zippy[bot] and Finn Evers created

2dd34c6 editor: Fix relative line numbers breaking with nested folds (#47035) (cherry-pick to preview) (#47107)

Click to expand commit body
Cherry-pick of #47035 to preview

----
Closes #46516

The previous fix only worked for non-nested folds, whereas this one also
considers nested folds properly. Also makes this more straightforward to
read.

Release Notes:

- Fixed an issue where relative line numbering would break with nested
folds.

Co-authored-by: Finn Evers <finn@zed.dev>

zed-zippy[bot] and Finn Evers created

9fad17d Add BYOK GPT-5.2-codex support (#47025) (cherry-pick to preview) (#47030)

Click to expand commit body
Cherry-pick of #47025 to preview

----
<img width="449" height="559" alt="Screenshot 2026-01-16 at 4 52 12 PM"

src="https://github.com/user-attachments/assets/1b5583d7-9b90-46b1-a32f-9821543ea542"
/>

Release Notes:

- Add support for GPT-5.2-Codex via OpenAI API Key

Co-authored-by: Richard Feldman <richard@zed.dev>

zed-zippy[bot] and Richard Feldman created

b46076b gpui: Fix utf8 slicing panic in `truncate_line` (#46914) (cherry-pick to preview) (#46916)

Click to expand commit body
Cherry-pick of #46914 to preview

----
Fixes https://github.com/zed-industries/zed/issues/46904

Release Notes:

- Fixed a panic in the git panel when utf8 multibyte character filenames
got truncated

Co-authored-by: Lukas Wirth <lukas@zed.dev>

zed-zippy[bot] and Lukas Wirth created

343bc39 Bump to 0.220.1 for @osiewicz

Zed Zippy created

98f3b84 Fix delay in Copilot completion (#46885) (cherry-pick to preview) (#46895)

Click to expand commit body
Cherry-pick of #46885 to preview

----
This PR fixes an issue when copilot takes 3s to complete. Right now, in
copilot edit prediction, we issue requests to both the Next Edit
Suggestion (NES) and the regular copilot inline completion endpoints.
Whichever come back first will be shown. However, there is a bug where
even if inline completion (which is usually much faster) comes back, we
still wait for NES (which takes about 3s).

This should address https://github.com/zed-industries/zed/issues/46389
and https://github.com/zed-industries/zed/issues/46880

Release notes:
- Improved responsiveness of Copilot inline completions.

Co-authored-by: Hieu Pham <hicder@users.noreply.github.com>

zed-zippy[bot] and Hieu Pham created

80c7745 workspace: Do not attempt to unnecessarily update jump list on worktree updates (#46882) (cherry-pick to preview) (#46886)

Click to expand commit body
Cherry-pick of #46882 to preview

----
It should be a no-op but causes massive main thread hangs on windows due
to the winapi calls this emits, restores the behavior pre
github.com/zed-industries/zed/pull/46256 without reverting the main
changes of that.

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Co-authored-by: Lukas Wirth <lukas@zed.dev>

zed-zippy[bot] and Lukas Wirth created

203f55e workspace: Fix tab reordering regression (#46872) (cherry-pick to preview) (#46878)

Click to expand commit body
Cherry-pick of #46872 to preview

----
Closes [#46864](https://github.com/zed-industries/zed/issues/46864)
Initial PR: https://github.com/zed-industries/zed/pull/46573

## Summary

Fix a regression where dragging a tab onto another tab would place it at
the end of the tab bar instead of at the target position.

The issue was in the `on_drop` handler: it used `this.items.len()`
(evaluated at drop time) instead of the captured `ix` index (the
position of the tab being dropped onto).

Release Notes:

- Fixed tab reordering not working correctly when dragging tabs

## Video after fix:

- when 'show_pinned_tabs_in_separate_row' is false:



https://github.com/user-attachments/assets/1ede0ce5-1161-4209-83f4-33a07572782a

- when 'show_pinned_tabs_in_separate_row' is true:



https://github.com/user-attachments/assets/d56c0e59-8372-41d4-973b-32a4895ca729

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

Co-authored-by: Yaroslav Yenkala <yaroslavrick@gmail.com>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

zed-zippy[bot] , Yaroslav Yenkala , and Smit Barmase created

684be1b Fix emoji on Linux when using High DPI (#46857) (cherry-pick to preview) (#46859)

Click to expand commit body
Cherry-pick of #46857 to preview

----
Fixes https://github.com/zed-industries/zed/issues/46849

Release Notes:

- Fixed emoji being too small on Linux when using High DPI

Co-authored-by: John Tur <john-tur@outlook.com>

zed-zippy[bot] and John Tur created

3f8d007 v0.220.x preview

Joseph T. Lyons created

ca23fa7 copilot: Un-globalify copilot + handle it more directly with EditPredictionStore (#46618)

Click to expand commit body
- **copilot: Fix double lease panic when signing out**
- **Extract copilot_chat into a separate crate**
- **Do not use re-exports from copilot**
- **Use new SignIn API**
- **Extract copilot_ui out of copilot**

Closes #7501

Release Notes:

- Fixed Copilot providing suggestions from different Zed windows.
- Copilot edit predictions now support jumping to unresolved
diagnostics.

Piotr Osiewicz created

cd12d45 agent: Initial support for ACP session listing (#46796)

Click to expand commit body
Feature flagged for now as we test this out with actual agents to see if
we need to provide any more feedback to the RFD before committing to the
current setup.

Release Notes:

- N/A

Ben Brandt created

f1fd0ab remote: Fix not being able to cancel in connecting state (#46789)

Click to expand commit body
Release Notes:

- Fixed being unable to cancel remote connections while still connecting
to the remote server

Lukas Wirth created

55a7a93 collab: Bump minimum required version to collaborate from 0.204.1 to 0.220.0 to accomodate for project search RPC changes (#46715)

Click to expand commit body
cc @maxdeviant

Release Notes:

- N/A

Piotr Osiewicz created

6c5da3d outline: Enable scrollbar in outline view picker (#46774)

Click to expand commit body
Release Notes:

- Added scrollbar in outline view picker

Xiaobo Liu created

db2f2ad agent: One Thread History (#46785)

Click to expand commit body
This makes sure that all of the work we do for caching/refreshing
session history is reused everywhere we need to access the list.

Very important for external agents so we aren't rerequesting history on
every search or recent list update. Puts the reloading of history in one
place

Release Notes:

- N/A

Ben Brandt created

b5242ab vim: Fix subword motion near end of line (#45908)

Click to expand commit body
Fixes subword motion incorrectly jumping to next line when near end of
line. Updates boundary detection to use exclusive boundaries with
need_next_char parameter, matching regular word motion behavior.
Refactors word and subword motion to share boundary detection logic.

Closes #17780

Release Notes:

- Fixed subword motion incorrectly jumping to the next line when near
the end of a line

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Lionel Henry and dino created

1d366b3 agent_ui: Improve UX for discarding partial edits (#46752)

Danilo Leal created

c35bbaa Revert "Clean up image resources for the current window (#45969)" (#46779)

Click to expand commit body
This reverts commit 94faaebfec5e46afa6d3aee5372cbbdb33b97c33.

The logic changed in the [original
PR](https://github.com/zed-industries/zed/pull/45969) is either
misplaced or lacks a counterpart that reacts on `gpui::Image` drop one
way or another.

The change was dropping the texture out of the global rendering atlas
when an image preview tab was disposed of, while in reality, another
instance (agent panel or another image preview tab) could require the
very same atlas entry to be rendered meanwhile.

Currently, only `RetainAllImageCache` in Zed does any kind of image
cleanup, and any other image usages will leak memory.
What makes it harder is that the atlas entry needs to live as long as a
particular `Arc<Image>` lives, and some public `gpui` API expects this
type to stay:

https://github.com/zed-industries/zed/blob/e747cfc955e8cfd9327d8d6b8d617cf1d3a6bcaa/crates/gpui/src/platform.rs#L1851-L1866

For image viewer in particular, we need to consider why
`RetainAllImageCache` is not used there; for the global, normal fix, we
need to consider ways to have `cx` and `window` and a way to react on
`Image` drop.
As an option, we could break the `gpui` API (as it [happens
periodically](https://github.com/zed-industries/zed/issues/46183)
already) and use `Entity<Image>` instead of `Arc`, then react with
`cx.on_release_in` for each such image.

Closes https://github.com/zed-industries/zed/issues/46755
Closes https://github.com/zed-industries/zed/issues/46435

Release Notes:

- Fixed panics on concurrent image handling

Kirill Bulatov created

2127b8d remote: Fix ACP agents not working in docker (#46778)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/45165

Release Notes:

- Fixed external agents not working in docker remotes

Lukas Wirth created

e747cfc terminal_view: Fix formatting in `TerminalElement::paint` (#46775)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

b1da735 languages(rust): Highlight enum variant labels (#46772)

Click to expand commit body
Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

acfc71a editor: Fix clipboard line numbers when copying from multibuffer (#46743)

Click to expand commit body
Release Notes:

- When copying and pasting from a multibuffer view (e.g. into the agent
panel), the line numbers from the selection corresponded to the line
numbers in the multibuffer view (incorrect), instead of the actual line
numbers from the file itself.
- I also handled the case in which the selection spans multiple excerpts
(different files in the multibuffer) by just returning None for that
case, but maybe it should instead be split into two selections?

Left is before (bugged, should be lines 8:16, instead it is 38:46),
right is after (fixed).
<div style="display:flex; gap:12px;">
<img
src="https://github.com/user-attachments/assets/b1bfce1d-8b6a-41c0-ac7e-51f7bd7b284e"
       width="48%" />
<img
src="https://github.com/user-attachments/assets/2a4c33a0-a969-4a3e-9aa5-d2c2fefba3b2"
       width="48%" />
</div>

Kavi Bidlack created

4aa3cd0 Revert "Revert scheduler update (#46659)" (#46671)

Click to expand commit body
Reland the new scheduler

Release Notes:

- N/A

---------

Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Conrad Irwin , Antonio Scandurra , and Zed Zippy created

a126383 terminal: Fix last character of IME marked text not being deleted (#46224)

ᴀᴍᴛᴏᴀᴇʀ created

22415e5 Fix copying from agent panel including extra backtick (#46763)

Click to expand commit body
Closes #ISSUE

Release Notes:

- Fixed cmd-c in the agent panel to not include spurious trailing `'s.

Conrad Irwin created

b8fd09e Add actions to move to start and end of larger syntax node (#45331)

Click to expand commit body
Release Notes:

- Added two actions `move_to_start_of_larger_syntax_node` and
`move_to_end_of_larger_syntax_node` that move cursors to the start or
end of the parent tree-sitter node

Following up on my PR #41321, this PR only adds the actions that are
used to enable code navigation across syntax nodes, without binding them
to any keys (such as tab) by default. Both actions use the tree-sitter
syntax tree to find parent nodes of the nodes the cursors are currently
in. `move_to_start_of_larger_syntax_node` will then move each cursor to
the first position of the parent nodes while
`move_to_end_of_larger_syntax_node` to a position right after the parent
nodes.

Related issues and discussions: #22349, #14803, #42828, #13736.

This PR doesn't achieve "tab out" functionality in the exact sense as is
requested in these issues as it does not bind the actions to the tab
key. I hope this PR can start some discussion on what the best way
forward for these issues is. In the meantime, users can configure keys
to use these actions as they see fit to emulate "tab out" behavior. For
example,
```
"context": "Editor && vim_mode == insert && !in_snippet && !showing_completions",
"bindings": {
  "tab": "editor::MoveToEndOfLargerSyntaxNode",
  "shift-tab": "editor::Tab"
}
```
This will enable tab to skip past code structures like brackets when the
cursor is not in a snippet or the autocomplete menu is not open. At the
same time, shift tab will act as a backup tab.

Vamsi Raman Deeduvanu created

d92f477 linux: Fix duplicate IME input on Wayland and Sunshine remotes (#46560)

Click to expand commit body
## Summary
This PR fixes a issue where Chinese characters (and other IME-based
inputs) would duplicate in the editor on Linux Wayland after remote
desktop connected (e.g., via Sunshine) .

## Steps to Reproduce
requirement: linux with wayland, and Sunshine(this is remote desktop
server) installed
1. opening zed
2. using other device connect to Sunshine
3. input Chinese characters such as "的"

### Expected Result
"的"

### Actual Result
"的的"

### bug recording

https://github.com/user-attachments/assets/d18961ec-48cb-4c06-a396-9fc604591769

Bo He created

20284e4 Introduce zeta2 format with cursor content in original order (#46732)

Click to expand commit body
This one does `fim_prefix`, `fim_middle`, and `fim_suffix` in that
order, in the prompt, instead of putting the current middle last.

Release Notes:

- N/A

---------

Co-authored-by: Agus Zubiaga <agus@zed.dev>
Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld , Agus Zubiaga , and Ben Kunkle created

c9003e1 workspace: Improve the multi-project UX (#46641)

Click to expand commit body
This PR introduces a project dropdown when working with multiple
folders/projects in one workspace. Here are some interaction details
that I hope improves the UX of working on this scenario significantly:

- The dropdown shows the currently "active" project, which is determined
by:
  - Either the file you're currently editing
  - Or the file you have just recently switched to
  - Some example cases:
- If you are focused on file from project A but switch to project B in
the titlebar, nothing happens. However, as soon as you type on the file
from project A, the title bar will update and your active project will
return to being project A.
- If you're focused on file from project A and change tabs to a file
from project B, the title bar will update, showing project B as the
active one.
- The content you'll see in the branch picker will correspond to the
currently active project
- It's still possible to reach the "Recent Projects" picker through the
project dropdown
- It's possible to do all interactions (trigger dropdown, select active
project, and remove project from workspace) with the keyboard


https://github.com/user-attachments/assets/e2346757-74df-47c5-bf4d-6354623b6f47

Note that this entire UX is valid only for a multiple folder workspace
scenario; nothing changes for the single project case.

Release Notes:

- Workspace: Improved the UX of working with multiple projects in the
same workspace through introducing a project dropdown that more clearly
shows the currently active project as well as allowing you to change it.

Danilo Leal created

fd829cd agent_ui: Discard button for interrupted changes (#46735)

Click to expand commit body
Release Notes:

- N/A

Michael Benfield created

5be4b60 Customizable vim mode text color (#46639)

Click to expand commit body
Release Notes:
- Added ability to customize vim mode foreground

---

<video
src="https://github.com/user-attachments/assets/776ecfcd-9600-4a04-b3cf-e78af439aab2"
/>

everdrone created

d67c8f2 Prevent stale related excerpts by avoiding storing their contents as strings (#46666)

Click to expand commit body
This fixes an issue that we noticed in particular with Mercury edit
predictions.

* [x] fix storage to not go stale
* [x] exclude excerpts that intersect the cursor excerpt
* [x] see if string representation of excerpts can be cached, to avoid
rebuilding it on every prediction

Release Notes:

- N/A

---------

Co-authored-by: Ben Kunkle <ben@zed.dev>

Max Brunsfeld and Ben Kunkle created

1b416c7 agent_ui: Make rust-analyzer paths work with symbol completions (#46739)

Click to expand commit body
Release Notes:

- N/A *or* Added/Fixed/Improved ...

Lukas Wirth created

eed80aa settings_ui: Add vim settings (#46634)

Click to expand commit body
Closes #ISSUE

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Ben Kunkle created

f301611 danger: Use Danger Proxy running on Cloud (#46731)

Click to expand commit body
This PR updates Danger to use the new Danger Proxy that is running on
Cloud.

Release Notes:

- N/A

Marshall Bowers created

5a8a7d8 vim: Change logic in subword motion subword_start calculation (#45341)

Click to expand commit body
- Update subword boundary detection to stop at semantic punctuation
  (quotes, brackets, parens)
- Treat `.`, `-`, and `_` as subword separators for consistent behavior
- Extract `is_subword_start` and `is_subword_end` helpers for reuse in
  motion and object handling
- Add comprehensive tests for all subword motions matching vim's
  CamelCaseMotion behavior

Closes #23344

Release Notes:

- Fixed bug in Vim mode's subword motion punctuation handling

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Will Garrison and dino created

6b1b5fa project search: Fix alignment in the filter inputs (#46726)

Click to expand commit body
This is a small PR to fix an alignment bug I just noticed in the filter
inputs within the project search page.

Release Notes:

- N/A

Danilo Leal created

bffee3f agent_ui: Fix reject all and keep all keybinding conflict (#46725)

Click to expand commit body
This PR changes the keybinding for the `agent::RejectAll` and
`agent::KeepAll` actions. My initial goal was to free up `cmd-shift-n`
to open a new fresh window again, but that was being used for the reject
all action. Given I had to change the reject all, I figured I had to
change the keep all action, too, to keep them consistent.

Release Notes:

- Agent: Removed keybinding conflict (`cmd-shift-n`) between rejecting
all changes in the agent panel vs. opening a new fresh window.

Danilo Leal created

2a83c69 agent_ui: No agent diff view with Agent V2 (#46710)

Click to expand commit body
Release Notes:

- N/A

Michael Benfield created

f931704 Improve design for the diff review button (#46723)

Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/46326.

Release Notes:

- N/A

Danilo Leal created

782ca51 debugger_ui: Make view in the new session picker keyboard navigable (#46662)

Click to expand commit body
This makes the new session picker in the Debugger panel consistent with
the new unified Git picker
(https://github.com/zed-industries/zed/pull/46621):


https://github.com/user-attachments/assets/e94662da-31cc-48d8-b633-a6f0a2812569

Release Notes:

- Debugger: Make possible to navigate with the keyboard between the
views in the new session picker.

Danilo Leal created

d7bce54 remote: Support local terminals in remote projects (#46532)

Click to expand commit body
This PR adds the ability to open local terminals when working in remote
projects. When working in a remote (often actually remoting into a local
container) I always need to run separate terminals outside Zed so I can
run local build tools, scripts, agents, etc. for the related project.
I'd like to be able to run all of these in the same Zed window and this
adds that ability via one-off local terminals.

## Changes

Adds an optional `local` parameter to terminal commands. When set to
`true`, creates a local shell on your machine instead of connecting to
the remote.

### Implementation
- Added `force_local` parameter to terminal creation logic
- Created `create_local_terminal()` method that bypasses remote client
- Updated terminal actions (`NewTerminal`, `NewCenterTerminal`) to
accept optional `local: bool` field (defaults to `false`)

### Usage

**Via keybinding:**
```json
{
  "bindings": {
    "cmd-t": "workspace::NewCenterTerminal",
    "cmd-T": ["workspace::NewCenterTerminal", { "local": true }]
  }
},
{
  "context": "Terminal",
  "bindings": {
    "cmd-n": "workspace::NewTerminal",
    "cmd-N": ["workspace::NewTerminal", { "local": true }],
  },
},
```

**Behavior:**
- Default terminal commands continue to work as before (remote in remote
projects, local in local projects)
- The `local` parameter is optional and defaults to `false`

Release Notes:

- Added support for opening local terminals in remote projects via
`local` parameter on terminal commands.

David Baldwin created

72f6d39 Add option to show pinned tabs in a separate row (#46573)

Click to expand commit body
## Problem:

When working with many `pinned tabs`, they consume significant
horizontal space in the tab bar, leaving less room for unpinned (active
working) tabs, especially on small screens. This creates a poor user
experience as users must constantly scroll to find their working tabs,
or the tabs become too narrow to read file names.


![8_tabs](https://github.com/user-attachments/assets/087a0b4d-8f1c-42f0-851c-b774228f11dd)

##  Solution:

Added a new opt-in setting `tab_bar.show_pinned_tabs_in_separate_row`
that displays pinned and unpinned tabs in two separate rows:
  - Top row: Pinned tabs with navigation buttons and tab bar controls
  - Bottom row: Unpinned (working) tabs with full horizontal space
 
- when pinned and not pinned tabs we show 2 rows:  

<img width="1512" height="159" alt="2_rows"
src="https://github.com/user-attachments/assets/62a85fcc-8073-40d2-a8e4-270efd0d0f21"
/>

This is a well-established UX pattern used in many popular IDEs
including JetBrains products (IntelliJ IDEA, WebStorm, PyCharm,
RubyMine), Visual Studio, and Eclipse.

The two-row layout only appears when both pinned AND unpinned tabs
exist. If only one type is present, a single row is displayed:
  
- when only not pinned tabs we show one row:

<img width="1510" height="111" alt="when only not pinned"
src="https://github.com/user-attachments/assets/048df4fc-4b17-4ea2-9c5b-b4db91cdfc78"
/>

- when only pinned tabs we show one row:

<img width="1510" height="111" alt="when only pinned tabs"
src="https://github.com/user-attachments/assets/7ccf2517-8711-4114-815d-6cbb1e89d7e2"
/>

  **Important** - Default Behavior Preserved:

- The setting defaults to false - existing users will see no change
whatsoever
- Original tab bar logic is preserved in a dedicated
`render_single_row_tab_bar` method, while the new two-row layout lives
in `render_two_row_tab_bar`. Both methods share common components
(`configure_tab_bar_start`, `configure_tab_bar_end`,
`render_unpinned_tabs_container`, `render_tab_bar_drop_target`) ensuring
DRY code and consistent behavior.
- Purely opt-in - users must explicitly enable this feature via Settings
UI or settings.json
- No impact on default UX - Zed's default tab bar appearance and
behavior remains identical

This implementation ensures zero risk to the existing user experience
while providing an optional enhancement for users who prefer separated
tab rows.

  Configuration

  Via Settings UI:
  - Open Settings (Cmd+,) → Editor section → "Pinned Tabs Layout" toggle
  
  

![settings_ui](https://github.com/user-attachments/assets/59b9bb94-1c10-4c32-b942-13aa01943526)


  Via settings.json:
  
  ```json
  {
    "tab_bar": {
      "show_pinned_tabs_in_separate_row": true
    }
  }
  ```
  
<img width="468" height="67" alt="manual_settings"
src="https://github.com/user-attachments/assets/d21f6dde-7683-47b3-8dca-d190049d32fb"
/>

## Video of implemented feature:


https://github.com/user-attachments/assets/b1e52074-a5a1-4c4e-ad59-e55e2213509d

## Tested:

- Verify default behavior unchanged (single row with pinned + unpinned
tabs inline)
- Enable setting → verify two rows appear when both pinned and unpinned
tabs exist
  - Enable setting → verify single row when only pinned tabs exist
  - Enable setting → verify single row when only unpinned tabs exist
  - Verify drag & drop works in both layouts
  - Verify navigation buttons and tab bar buttons render correctly
  - Verify setting toggle works in Settings UI
  - Verify setting works via settings.json

  Tested on: MacBook Pro M4, macOS 26.2
  
   ## Release Notes:

- Added `tab_bar.show_pinned_tabs_in_separate_row` setting to display
pinned and unpinned tabs in separate rows, giving unpinned tabs full
horizontal space

---------

Co-authored-by: Matt Miller <mattrx@gmail.com>

Yaroslav Yenkala and Matt Miller created

79c69dc ep: Fix raw request shape (#46711)

Click to expand commit body
Release Notes:

- N/A

Agus Zubiaga created

d2b31b4 vim: Allow trailing whitespace for `:norm` command (#46403)

Click to expand commit body
Fix a bug with `:norm` that disallowed trailing whitespace.

Commands that accept generic args (defined with `args()`) now preserve
trailing whitespace, while commands that accept filenames (defined with
`filename()`) have whitespace pre-trimmed. This allows, for example, 
`:norm I  ` to correctly insert spaces, matching NeoVim's behavior.

Release Notes:

- vim: Fixed `:norm` command to preserve trailing whitespace in
arguments (e.g., `:norm I ` now correctly inserts two spaces)

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

AidanV and dino created