From 4b1c025427485ab737403441d116747cbac28d3e Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Fri, 16 Oct 2026 18:08:32 +0200 Subject: [PATCH] Honour start or end given alone in markers.add Found while testing crates/engine/src/cmd/event.rs:300-305 (add_marker) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/engine/src/cmd/event.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/crates/engine/src/cmd/event.rs b/crates/engine/src/cmd/event.rs index 205f038c..7231ab0e 100644 --- a/crates/engine/src/cmd/event.rs +++ b/crates/engine/src/cmd/event.rs @@ -300,6 +300,7 @@ fn add_marker(e: &mut Engine, p: &Value) -> Result { let (a, b) = match (at, st, en) { (Some(a), _, _) => (a, a), (None, Some(a), Some(b)) => (a, b), + (None, Some(p), None) | (None, None, Some(p)) => (p, p), _ if kind == MarkerKind::Selection => (sel.start, sel.end), _ => (if e.transport.playing { e.transport.position } else { sel.start }, sel.start), }; @@ -443,6 +444,20 @@ mod tests { assert_eq!((bridge.name.as_str(), bridge.comments.as_str()), ("Bridge", "last")); } + /// `markers.add` with only `start` or only `end` places the marker there, not at the edit selection. + #[test] + fn markers_add_start_or_end_alone_is_used() { + let mut e = demo_engine(); + assert_ne!(e.session().edit.selection.start, 96_000); + let a = e.execute("markers.add", &json!({"name": "A", "start": 96_000})).unwrap(); + let b = e.execute("markers.add", &json!({"name": "B", "end": 96_000})).unwrap(); + let c = e.execute("markers.add", &json!({"name": "C", "start": 1000, "end": 2000})).unwrap(); + let find = |r: &serde_json::Value| e.session().markers.iter().find(|m| Some(m.id.0) == r["id"].as_u64()).map(|m| (m.start, m.end)); + assert_eq!(find(&a), Some((96_000, 96_000))); + assert_eq!(find(&b), Some((96_000, 96_000))); + assert_eq!(find(&c), Some((1000, 2000))); + } + /// Constant replaces the tempo over [start, end) only; the tempo at the old end tick carries on after it. #[test] fn tempo_constant_is_bounded_by_its_range() {