Skip to content

Commit aacd80e

Browse files
authored
Prefer later bindings in keymap section for display in UI (#23378)
Closes #23015 Release Notes: - Improved which keybindings are selected for display. Now later entries within `bindings` will take precedence. The default keymaps have been updated accordingly.
1 parent 919703e commit aacd80e

11 files changed

Lines changed: 184 additions & 194 deletions

File tree

assets/keymaps/default-linux.json

Lines changed: 76 additions & 102 deletions
Large diffs are not rendered by default.

assets/keymaps/default-macos.json

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@
33
{
44
"use_key_equivalents": true,
55
"bindings": {
6-
"up": "menu::SelectPrev",
7-
"shift-tab": "menu::SelectPrev",
86
"home": "menu::SelectFirst",
9-
"pageup": "menu::SelectFirst",
107
"shift-pageup": "menu::SelectFirst",
11-
"ctrl-p": "menu::SelectPrev",
12-
"down": "menu::SelectNext",
13-
"tab": "menu::SelectNext",
8+
"pageup": "menu::SelectFirst",
9+
"cmd-up": "menu::SelectFirst",
1410
"end": "menu::SelectLast",
11+
"shift-pagedown": "menu::SelectLast",
1512
"pagedown": "menu::SelectLast",
16-
"shift-pagedown": "menu::SelectFirst",
17-
"ctrl-n": "menu::SelectNext",
18-
"cmd-up": "menu::SelectFirst",
1913
"cmd-down": "menu::SelectLast",
14+
"tab": "menu::SelectNext",
15+
"ctrl-n": "menu::SelectNext",
16+
"down": "menu::SelectNext",
17+
"shift-tab": "menu::SelectPrev",
18+
"ctrl-p": "menu::SelectPrev",
19+
"up": "menu::SelectPrev",
2020
"enter": "menu::Confirm",
2121
"ctrl-enter": "menu::SecondaryConfirm",
2222
"cmd-enter": "menu::SecondaryConfirm",
23-
"escape": "menu::Cancel",
24-
"cmd-escape": "menu::Cancel",
2523
"ctrl-escape": "menu::Cancel",
24+
"cmd-escape": "menu::Cancel",
2625
"ctrl-c": "menu::Cancel",
26+
"escape": "menu::Cancel",
2727
"alt-shift-enter": "menu::Restart",
2828
"cmd-shift-w": "workspace::CloseWindow",
2929
"shift-escape": "workspace::ToggleZoom",
@@ -48,18 +48,18 @@
4848
"use_key_equivalents": true,
4949
"bindings": {
5050
"escape": "editor::Cancel",
51-
"backspace": "editor::Backspace",
5251
"shift-backspace": "editor::Backspace",
5352
"ctrl-h": "editor::Backspace",
54-
"delete": "editor::Delete",
53+
"backspace": "editor::Backspace",
5554
"ctrl-d": "editor::Delete",
55+
"delete": "editor::Delete",
5656
"tab": "editor::Tab",
5757
"shift-tab": "editor::TabPrev",
5858
"ctrl-t": "editor::Transpose",
5959
"ctrl-k": "editor::KillRingCut",
6060
"ctrl-y": "editor::KillRingYank",
61-
"cmd-k q": "editor::Rewrap",
6261
"cmd-k cmd-q": "editor::Rewrap",
62+
"cmd-k q": "editor::Rewrap",
6363
"cmd-backspace": "editor::DeleteToBeginningOfLine",
6464
"cmd-delete": "editor::DeleteToEndOfLine",
6565
"alt-backspace": "editor::DeleteToPreviousWordStart",
@@ -76,27 +76,27 @@
7676
"shift-pageup": "editor::SelectPageUp",
7777
"cmd-pageup": "editor::PageUp",
7878
"ctrl-pageup": "editor::LineUp",
79-
"home": "editor::MoveToBeginningOfLine",
8079
"down": "editor::MoveDown",
8180
"ctrl-down": "editor::MoveToEndOfParagraph",
8281
"pagedown": "editor::MovePageDown",
8382
"shift-pagedown": "editor::SelectPageDown",
8483
"cmd-pagedown": "editor::PageDown",
8584
"ctrl-pagedown": "editor::LineDown",
86-
"end": "editor::MoveToEndOfLine",
87-
"left": "editor::MoveLeft",
88-
"right": "editor::MoveRight",
8985
"ctrl-p": "editor::MoveUp",
9086
"ctrl-n": "editor::MoveDown",
9187
"ctrl-b": "editor::MoveLeft",
88+
"left": "editor::MoveLeft",
9289
"ctrl-f": "editor::MoveRight",
90+
"right": "editor::MoveRight",
9391
"ctrl-l": "editor::ScrollCursorCenter",
9492
"alt-left": "editor::MoveToPreviousWordStart",
9593
"alt-right": "editor::MoveToNextWordEnd",
9694
"cmd-left": "editor::MoveToBeginningOfLine",
9795
"ctrl-a": "editor::MoveToBeginningOfLine",
96+
"home": "editor::MoveToBeginningOfLine",
9897
"cmd-right": "editor::MoveToEndOfLine",
9998
"ctrl-e": "editor::MoveToEndOfLine",
99+
"end": "editor::MoveToEndOfLine",
100100
"cmd-up": "editor::MoveToBeginning",
101101
"cmd-down": "editor::MoveToEnd",
102102
"shift-up": "editor::SelectUp",
@@ -139,8 +139,8 @@
139139
"context": "Editor && mode == full",
140140
"use_key_equivalents": true,
141141
"bindings": {
142-
"enter": "editor::Newline",
143142
"shift-enter": "editor::Newline",
143+
"enter": "editor::Newline",
144144
"cmd-enter": "editor::NewlineBelow",
145145
"cmd-shift-enter": "editor::NewlineAbove",
146146
"cmd-k z": "editor::ToggleSoftWrap",
@@ -341,10 +341,10 @@
341341
"context": "Pane",
342342
"use_key_equivalents": true,
343343
"bindings": {
344-
"cmd-{": "pane::ActivatePrevItem",
345-
"cmd-}": "pane::ActivateNextItem",
346344
"alt-cmd-left": "pane::ActivatePrevItem",
345+
"cmd-{": "pane::ActivatePrevItem",
347346
"alt-cmd-right": "pane::ActivateNextItem",
347+
"cmd-}": "pane::ActivateNextItem",
348348
"ctrl-shift-pageup": "pane::SwapItemLeft",
349349
"ctrl-shift-pagedown": "pane::SwapItemRight",
350350
"cmd-w": "pane::CloseActiveItem",
@@ -374,10 +374,10 @@
374374
"bindings": {
375375
"cmd-[": "editor::Outdent",
376376
"cmd-]": "editor::Indent",
377-
"cmd-alt-up": "editor::AddSelectionAbove", // Insert cursor above
378-
"cmd-ctrl-p": "editor::AddSelectionAbove",
379-
"cmd-alt-down": "editor::AddSelectionBelow", // Insert cursor below
380-
"cmd-ctrl-n": "editor::AddSelectionBelow",
377+
"cmd-ctrl-p": "editor::AddSelectionAbove", // Insert cursor above
378+
"cmd-alt-up": "editor::AddSelectionAbove",
379+
"cmd-ctrl-n": "editor::AddSelectionBelow", // Insert cursor below
380+
"cmd-alt-down": "editor::AddSelectionBelow",
381381
"cmd-shift-k": "editor::DeleteLine",
382382
"alt-up": "editor::MoveLineUp",
383383
"alt-down": "editor::MoveLineDown",
@@ -404,8 +404,8 @@
404404
"shift-f12": "editor::GoToImplementation",
405405
"alt-cmd-f12": "editor::GoToTypeDefinitionSplit",
406406
"alt-shift-f12": "editor::FindAllReferences",
407-
"ctrl-m": "editor::MoveToEnclosingBracket",
408407
"cmd-|": "editor::MoveToEnclosingBracket",
408+
"ctrl-m": "editor::MoveToEnclosingBracket",
409409
"alt-cmd-[": "editor::Fold",
410410
"alt-cmd-]": "editor::UnfoldLines",
411411
"cmd-k cmd-l": "editor::ToggleFold",
@@ -807,9 +807,9 @@
807807
"context": "TabSwitcher",
808808
"use_key_equivalents": true,
809809
"bindings": {
810+
"ctrl-shift-tab": "menu::SelectPrev",
810811
"ctrl-up": "menu::SelectPrev",
811812
"ctrl-down": "menu::SelectNext",
812-
"ctrl-shift-tab": "menu::SelectPrev",
813813
"ctrl-backspace": "tab_switcher::CloseSelectedItem"
814814
}
815815
},
@@ -840,16 +840,16 @@
840840
"escape": ["terminal::SendKeystroke", "escape"],
841841
"enter": ["terminal::SendKeystroke", "enter"],
842842
"ctrl-c": ["terminal::SendKeystroke", "ctrl-c"],
843-
"cmd-up": "terminal::ScrollPageUp",
844-
"cmd-down": "terminal::ScrollPageDown",
845843
"shift-pageup": "terminal::ScrollPageUp",
844+
"cmd-up": "terminal::ScrollPageUp",
846845
"shift-pagedown": "terminal::ScrollPageDown",
846+
"cmd-down": "terminal::ScrollPageDown",
847847
"shift-up": "terminal::ScrollLineUp",
848848
"shift-down": "terminal::ScrollLineDown",
849-
"cmd-home": "terminal::ScrollToTop",
850-
"cmd-end": "terminal::ScrollToBottom",
851849
"shift-home": "terminal::ScrollToTop",
850+
"cmd-home": "terminal::ScrollToTop",
852851
"shift-end": "terminal::ScrollToBottom",
852+
"cmd-end": "terminal::ScrollToBottom",
853853
"ctrl-shift-space": "terminal::ToggleViMode",
854854
"ctrl-k up": "pane::SplitUp",
855855
"ctrl-k down": "pane::SplitDown",

assets/keymaps/storybook.json

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,27 @@
22
// Standard macOS bindings
33
{
44
"bindings": {
5-
"up": "menu::SelectPrev",
6-
"pageup": "menu::SelectFirst",
5+
"home": "menu::SelectFirst",
76
"shift-pageup": "menu::SelectFirst",
8-
"ctrl-p": "menu::SelectPrev",
9-
"down": "menu::SelectNext",
10-
"pagedown": "menu::SelectLast",
11-
"shift-pagedown": "menu::SelectFirst",
12-
"ctrl-n": "menu::SelectNext",
7+
"pageup": "menu::SelectFirst",
138
"cmd-up": "menu::SelectFirst",
9+
"end": "menu::SelectLast",
10+
"shift-pagedown": "menu::SelectLast",
11+
"pagedown": "menu::SelectLast",
1412
"cmd-down": "menu::SelectLast",
13+
"tab": "menu::SelectNext",
14+
"ctrl-n": "menu::SelectNext",
15+
"down": "menu::SelectNext",
16+
"shift-tab": "menu::SelectPrev",
17+
"ctrl-p": "menu::SelectPrev",
18+
"up": "menu::SelectPrev",
1519
"enter": "menu::Confirm",
1620
"ctrl-enter": "menu::SecondaryConfirm",
1721
"cmd-enter": "menu::SecondaryConfirm",
18-
"escape": "menu::Cancel",
22+
"ctrl-escape": "menu::Cancel",
23+
"cmd-escape": "menu::Cancel",
1924
"ctrl-c": "menu::Cancel",
25+
"escape": "menu::Cancel",
2026
"cmd-q": "storybook::Quit",
2127
"backspace": "editor::Backspace",
2228
"delete": "editor::Delete",

assets/keymaps/vim.json

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,25 @@
44
"bindings": {
55
"i": ["vim::PushOperator", { "Object": { "around": false } }],
66
"a": ["vim::PushOperator", { "Object": { "around": true } }],
7-
"h": "vim::Left",
87
"left": "vim::Left",
8+
"h": "vim::Left",
99
"backspace": "vim::Backspace",
10-
"j": "vim::Down",
1110
"down": "vim::Down",
1211
"ctrl-j": "vim::Down",
13-
"enter": "vim::NextLineStart",
12+
"j": "vim::Down",
1413
"ctrl-m": "vim::NextLineStart",
1514
"+": "vim::NextLineStart",
15+
"enter": "vim::NextLineStart",
1616
"-": "vim::PreviousLineStart",
17-
"tab": "vim::Tab",
1817
"shift-tab": "vim::Tab",
19-
"k": "vim::Up",
18+
"tab": "vim::Tab",
2019
"up": "vim::Up",
21-
"l": "vim::Right",
20+
"k": "vim::Up",
2221
"right": "vim::Right",
22+
"l": "vim::Right",
2323
"space": "vim::Space",
24-
"$": "vim::EndOfLine",
2524
"end": "vim::EndOfLine",
25+
"$": "vim::EndOfLine",
2626
"^": "vim::FirstNonWhitespace",
2727
"_": "vim::StartOfLineDownward",
2828
"g _": "vim::EndOfLineDownward",
@@ -188,8 +188,8 @@
188188
{
189189
"context": "vim_mode == normal",
190190
"bindings": {
191-
"escape": "editor::Cancel",
192191
"ctrl-[": "editor::Cancel",
192+
"escape": "editor::Cancel",
193193
":": "command_palette::Toggle",
194194
".": "vim::Repeat",
195195
"c": ["vim::PushOperator", "Change"],
@@ -226,8 +226,8 @@
226226
"g shift-u": ["vim::PushOperator", "Uppercase"],
227227
"g ~": ["vim::PushOperator", "OppositeCase"],
228228
"\"": ["vim::PushOperator", "Register"],
229-
"g q": ["vim::PushOperator", "Rewrap"],
230229
"g w": ["vim::PushOperator", "Rewrap"],
230+
"g q": ["vim::PushOperator", "Rewrap"],
231231
"ctrl-pagedown": "pane::ActivateNextItem",
232232
"ctrl-pageup": "pane::ActivatePrevItem",
233233
"insert": "vim::InsertBefore",
@@ -254,8 +254,8 @@
254254
":": "vim::VisualCommand",
255255
"u": "vim::ConvertToLowerCase",
256256
"shift-u": "vim::ConvertToUpperCase",
257-
"o": "vim::OtherEnd",
258257
"shift-o": "vim::OtherEnd",
258+
"o": "vim::OtherEnd",
259259
"d": "vim::VisualDelete",
260260
"x": "vim::VisualDelete",
261261
"shift-d": "vim::VisualDeleteLine",
@@ -264,10 +264,10 @@
264264
"shift-y": "vim::VisualYankLine",
265265
"p": "vim::Paste",
266266
"shift-p": ["vim::Paste", { "preserveClipboard": true }],
267+
"c": "vim::Substitute",
267268
"s": "vim::Substitute",
268-
"shift-s": "vim::SubstituteLine",
269269
"shift-r": "vim::SubstituteLine",
270-
"c": "vim::Substitute",
270+
"shift-s": "vim::SubstituteLine",
271271
"~": "vim::ChangeCase",
272272
"*": ["vim::MoveToNext", { "partialWord": true }],
273273
"#": ["vim::MoveToPrev", { "partialWord": true }],
@@ -283,8 +283,8 @@
283283
"g shift-j": "vim::JoinLinesNoWhitespace",
284284
"r": ["vim::PushOperator", "Replace"],
285285
"ctrl-c": ["vim::SwitchMode", "Normal"],
286-
"escape": ["vim::SwitchMode", "Normal"],
287286
"ctrl-[": ["vim::SwitchMode", "Normal"],
287+
"escape": ["vim::SwitchMode", "Normal"],
288288
">": "vim::Indent",
289289
"<": "vim::Outdent",
290290
"=": "vim::AutoIndent",
@@ -302,9 +302,9 @@
302302
{
303303
"context": "vim_mode == insert",
304304
"bindings": {
305-
"escape": "vim::NormalBefore",
306305
"ctrl-c": "vim::NormalBefore",
307306
"ctrl-[": "vim::NormalBefore",
307+
"escape": "vim::NormalBefore",
308308
"ctrl-x": null,
309309
"ctrl-x ctrl-o": "editor::ShowCompletions",
310310
"ctrl-x ctrl-a": "assistant::InlineAssist", // zed specific
@@ -352,9 +352,9 @@
352352
{
353353
"context": "vim_mode == replace",
354354
"bindings": {
355-
"escape": "vim::NormalBefore",
356355
"ctrl-c": "vim::NormalBefore",
357356
"ctrl-[": "vim::NormalBefore",
357+
"escape": "vim::NormalBefore",
358358
"ctrl-k": ["vim::PushOperator", { "Digraph": {} }],
359359
"ctrl-v": ["vim::PushOperator", { "Literal": {} }],
360360
"ctrl-shift-v": "editor::Paste", // note: this is *very* similar to ctrl-v in vim, but ctrl-shift-v on linux is the typical shortcut for paste when ctrl-v is already in use.
@@ -371,9 +371,9 @@
371371
"bindings": {
372372
"tab": "vim::Tab",
373373
"enter": "vim::Enter",
374-
"escape": "vim::ClearOperators",
375374
"ctrl-c": "vim::ClearOperators",
376375
"ctrl-[": "vim::ClearOperators",
376+
"escape": "vim::ClearOperators",
377377
"ctrl-k": ["vim::PushOperator", { "Digraph": {} }],
378378
"ctrl-v": ["vim::PushOperator", { "Literal": {} }],
379379
"ctrl-q": ["vim::PushOperator", { "Literal": {} }]
@@ -382,9 +382,9 @@
382382
{
383383
"context": "vim_mode == operator",
384384
"bindings": {
385-
"escape": "vim::ClearOperators",
386385
"ctrl-c": "vim::ClearOperators",
387386
"ctrl-[": "vim::ClearOperators",
387+
"escape": "vim::ClearOperators",
388388
"g c": "vim::Comment"
389389
}
390390
},
@@ -571,14 +571,14 @@
571571
"ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"],
572572
"ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"],
573573
"ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"],
574-
"ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"],
575-
"ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"],
576-
"ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"],
577-
"ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"],
578574
"ctrl-w ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
579575
"ctrl-w ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
580576
"ctrl-w ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
581577
"ctrl-w ctrl-j": ["workspace::ActivatePaneInDirection", "Down"],
578+
"ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"],
579+
"ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"],
580+
"ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"],
581+
"ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"],
582582
"ctrl-w shift-left": ["workspace::SwapPaneInDirection", "Left"],
583583
"ctrl-w shift-right": ["workspace::SwapPaneInDirection", "Right"],
584584
"ctrl-w shift-up": ["workspace::SwapPaneInDirection", "Up"],
@@ -603,19 +603,19 @@
603603
"ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
604604
"ctrl-w shift-w": "workspace::ActivatePreviousPane",
605605
"ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
606-
"ctrl-w v": "pane::SplitVertical",
607606
"ctrl-w ctrl-v": "pane::SplitVertical",
608-
"ctrl-w s": "pane::SplitHorizontal",
607+
"ctrl-w v": "pane::SplitVertical",
609608
"ctrl-w shift-s": "pane::SplitHorizontal",
610609
"ctrl-w ctrl-s": "pane::SplitHorizontal",
611-
"ctrl-w c": "pane::CloseAllItems",
610+
"ctrl-w s": "pane::SplitHorizontal",
612611
"ctrl-w ctrl-c": "pane::CloseAllItems",
613-
"ctrl-w q": "pane::CloseAllItems",
612+
"ctrl-w c": "pane::CloseAllItems",
614613
"ctrl-w ctrl-q": "pane::CloseAllItems",
615-
"ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
614+
"ctrl-w q": "pane::CloseAllItems",
616615
"ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
617-
"ctrl-w n": "workspace::NewFileSplitHorizontal",
618-
"ctrl-w ctrl-n": "workspace::NewFileSplitHorizontal"
616+
"ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
617+
"ctrl-w ctrl-n": "workspace::NewFileSplitHorizontal",
618+
"ctrl-w n": "workspace::NewFileSplitHorizontal"
619619
}
620620
},
621621
{

crates/docs_preprocessor/src/docs_preprocessor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ impl PreprocessorContext {
3232
_ => return None,
3333
};
3434

35-
keymap.sections().find_map(|section| {
36-
section.bindings().find_map(|(keystroke, a)| {
35+
// Find the binding in reverse order, as the last binding takes precedence.
36+
keymap.sections().rev().find_map(|section| {
37+
section.bindings().rev().find_map(|(keystroke, a)| {
3738
if a.to_string() == action {
3839
Some(keystroke.to_string())
3940
} else {

0 commit comments

Comments
 (0)