# ui: Add buttons to switch diff view when diffing buffers \(\#64529\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/af431aeef42704f277cda75aa9cf48b0778a7994)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: af431aeef42704f277cda75aa9cf48b0778a7994

Requested commit: af431aeef42704f277cda75aa9cf48b0778a7994

Commit: af431aeef42704f277cda75aa9cf48b0778a7994

Tree: 406e5ded5e80a58b45b421f38efc6afbe979016d

Author: rn23thakur

Committer: GitHub

## Message

```
ui: Add buttons to switch diff view when diffing buffers (#64529)

# Objective

- This PR enables users to switch between unified/split diff views when
comparing buffers.
- Fixes #64419 .

## Solution

- The unified/split toggle (`DiffStyleControls`) is normally surfaced
automatically by `BufferSearchBar`, which detects any active item
exposing a `SplittableEditor`. That auto-detection is gated to
multi-buffer views, since it's paired with an expand/collapse-all-hunks
control that only makes sense across multiple files. `FileDiffView`
(used by `zed --diff <old> <new>`) is a singleton buffer, so it's
intentionally excluded from that generic path.
- Git's own single-file diff view,
[`SoloDiffView`](https://github.com/zed-industries/zed/blob/395def7a067b32ed598fcb3f048969ada9b54942/crates/git_ui/src/solo_diff_view.rs#L52),
hits the same limitation and works around it with a small, dedicated
`ToolbarItemView` (`SoloDiffStyleToolbar`) that renders
`DiffStyleControls` directly, independent of `BufferSearchBar`.
- This PR follows the same pattern: a new `FileDiffStyleToolbar` (in
`git_ui_core::file_diff_view`) activates whenever a `FileDiffView` is
the focused pane item, and renders just the unified/split toggle, no
expand/collapse or file-status controls, since neither concept applies
to a plain two-file diff. It's registered in `initialize_pane` alongside
the existing git toolbars.


## Testing

- Did you test these changes? If so, how?
Ran `cargo test -p git_ui_core`, all passed. I've also attached the
results of manual testing in the Showcase section below.
- Are there any parts that need more testing?
I think more tests can be added.

## Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content adheres to Zed's UI standards
([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
and
[icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md)
guidelines)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

## Showcase

Adds a unified/split toggle to the diff view opened via `zed --diff
<old> <new>`, matching the toggle already available in git's diff views.

<details>
  <summary>Click to view before/after</summary>

**Before**:
<img width="1920" height="1080" alt="screenshot_20260921_020610"
src="https://github.com/user-attachments/assets/92cbcf75-0cac-4555-8d2d-ce927064515f"
/>

**After**:
<img width="1920" height="1080" alt="screenshot_20260921_020355"
src="https://github.com/user-attachments/assets/56f9ebc6-11df-41cc-a44d-99bfa8caa130"
/>

</details>

---

Release Notes:

- Added a unified/split toggle to the diff view opened via `zed --diff
<old> <new>` command.

---------

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
```

## Parents

- [df673c1b8560666ebad97fbedfdb1c69078ecc09](https://git.cafe/gitcafe/zed/commit/df673c1b8560666ebad97fbedfdb1c69078ecc09?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/af431aeef42704f277cda75aa9cf48b0778a7994?format=markdown)
