# editor: Accumulate consecutive KillRingCut line kills \(\#51761\) · gitcafe/zed

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

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

Visibility: public

Requested revision: e5513539ec4f2b9709c55060aa84fc4a536ee031

Requested commit: e5513539ec4f2b9709c55060aa84fc4a536ee031

Commit: e5513539ec4f2b9709c55060aa84fc4a536ee031

Tree: 58860f79d3d442184b1c860e488a2cda1998d831

Author: loadingalias

Committer: GitHub

## Message

```
editor: Accumulate consecutive KillRingCut line kills (#51761)

Closes #22490

## Summary
• Keep kill-ring state as a dedicated global structure (`text`,
`metadata`, `row`, `column`, `buffer_id`) instead of a raw clipboard
wrapper.
• Update `editor::KillRingCut` to append consecutive empty-line kills
only when all are true:
   - one selection only
   - previous selection was empty
   - same row/column
   - same buffer

• Preserve existing behavior for non-empty and multi-selection cuts by
replacing the ring payload instead of appending.
• Preserve yank metadata behavior through the existing clipboard
selection metadata path.
• Add regression coverage in
`editor_tests::test_kill_ring_cut_accumulates_multi_line_kills`.

## Verification
 • `cargo fmt --all -- --check`
 • `./script/check-keymaps`
 • `./script/clippy -p editor`
 • `cargo test -p editor -- --nocapture`
• `cargo test -p editor
editor_tests::test_kill_ring_cut_accumulates_multi_line_kills --
--exact`
 • `cargo test -p editor test_cut_line_ends -- --exact`

## Manual
• `Ctrl+K`, `Ctrl+K`, `Ctrl+Y` with repeated line-end kills at same
caret location pastes concatenated text.
• Non-empty selection cut and multi-selection still replace as before
(no unintended append).
 • Cut in one buffer then cut in another does not cross-append.
 • Moving caret between kills does not append.
 • Undo/redo around cut+yank path works cleanly.

Release Notes:

- Fixed Emacs-style kill-ring behavior so successive `KillRingCut`
operations at the same caret context are accumulated and pasted together
via one `KillRingYank`, while preserving existing non-empty selection
and multi-selection semantics.

---------

Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com>
```

## Parents

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

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