diff --git a/crates/engine/src/cmd/edit.rs b/crates/engine/src/cmd/edit.rs index 081e5888..9ca8f6e9 100644 --- a/crates/engine/src/cmd/edit.rs +++ b/crates/engine/src/cmd/edit.rs @@ -132,7 +132,15 @@ pub fn specs() -> Vec { has_selection_or_guides, clear ), - cmd!("edit.duplicate", "Duplicate", [], None, "{dx?, dy?} duplicate the selection in place (offset optional)", has_selection, duplicate), + cmd!( + "edit.duplicate", + "Duplicate", + ["Edit"], + None, + "{dx?, dy?} duplicate the selection in place (offset optional)", + has_selection, + duplicate + ), ] } diff --git a/crates/ui-egui/src/shortcut_editor.rs b/crates/ui-egui/src/shortcut_editor.rs index 605644e7..1fb0c2c7 100644 --- a/crates/ui-egui/src/shortcut_editor.rs +++ b/crates/ui-egui/src/shortcut_editor.rs @@ -955,4 +955,13 @@ mod tests { let mut seen = HashSet::new(); assert!(entries().iter().all(|e| seen.insert(e.key.clone())), "duplicate entries"); } + + #[test] + fn duplicate_can_be_given_a_shortcut() { + // Duplicate has no default chord (#1539): it must still be listed so one can be set. + assert_eq!(entry("edit.duplicate").map(|e| e.group.as_str()), Some("Edit")); + let mut ov = BTreeMap::new(); + assign(&mut ov, "edit.duplicate", Some("Cmd+Alt+Shift+F8"), false).unwrap(); + assert_eq!(effective_in(&ov, "edit.duplicate").as_deref(), Some("Cmd+Alt+Shift+F8")); + } }