# editor: Add \`multiple_selections\` key context \(\#60018\) · gitcafe/zed

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

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

Visibility: public

Requested revision: 5f180e06dc4e776d016ee7a52a39f0b00731af1a

Requested commit: 5f180e06dc4e776d016ee7a52a39f0b00731af1a

Commit: 5f180e06dc4e776d016ee7a52a39f0b00731af1a

Tree: 46d85d5b07917fc39e022e692e87122a01a923ec

Author: AidanV

Committer: GitHub

## Message

````
editor: Add `multiple_selections` key context (#60018)

# Objective

- I would like to have the Vim command `z z` do different actions
depending on if I have multiple selections. If I only have one selection
I want `z z` to center my only selection (current behavior); however, if
I have multiple selections I would like `z z` to run
`editor::OpenSelectionsInMultibuffer`. This PR does not add this
specific functionality (happy to be convinced otherwise), but it does
let users add this type of functionality.

## Solution

- Add a new key context field that is active only when there are
multiple selections.

## Testing

- Changes are quite small. A test on this would really be testing other
parts of the code-base more than this change.

## 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



https://github.com/user-attachments/assets/2559e218-d6fa-492a-949b-f4ab8b880f28


This allows us to add something like the following to the `keymap.json`:

```json
  {
    "context": "VimControl && !menu && multiple_selections",
    "bindings": {
      "z z": "editor::OpenSelectionsInMultibuffer",
    },
  },
```

which lets us change the functionality of a keystroke based on if there
are multiple selections.

This video has the following keystroke sequence:

`z z` (Center the cursor normally)
`5 g l` (Select the 5 next occurrences of the word under the cursor)
`z z` (Open selections in multi-buffer) (Previously `z z` in this
context would just center the last selection)


https://github.com/user-attachments/assets/a0dc1813-5420-4cda-a1ec-99e6681680e7

---

Release Notes:

- Added `multiple_selections` keystroke context

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

## Parents

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

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