diff --git a/config/keys_groovebox.edn b/config/keys_groovebox.edn index 62608d87..99e13795 100644 --- a/config/keys_groovebox.edn +++ b/config/keys_groovebox.edn @@ -1 +1 @@ -(@r sampler record/toggle :sample) +(@r sampler record/begin :pitch) diff --git a/config/keys_sampler.edn b/config/keys_sampler.edn index 8bfb03c9..c8cc0c84 100644 --- a/config/keys_sampler.edn +++ b/config/keys_sampler.edn @@ -1,13 +1,13 @@ -(@up sampler select :sample-up) -(@w sampler select :sample-up) +(@up select :sample-up) +(@w select :sample-up) -(@down sampler select :sample-down) -(@s sampler select :sample-down) +(@down select :sample-down) +(@s select :sample-down) -(@left sampler select :sample-left) -(@a sampler select :sample-left) +(@left select :sample-left) +(@a select :sample-left) -(@right sampler select :sample-right) -(@d sampler select :sample-right) +(@right select :sample-right) +(@d select :sample-right) -(@r sampler record/toggle :sample) +(@r record/toggle :sample) diff --git a/config/keys_scene.edn b/config/keys_scene.edn index f3265cec..be00e7c0 100644 --- a/config/keys_scene.edn +++ b/config/keys_scene.edn @@ -1,7 +1,7 @@ -(@delete scene delete :scene) (@q scene launch :scene) -(@c scene color :scene) +(@c scene color :scene) (@comma scene prev) (@period scene next) (@lt scene swap-prev) (@gt scene swap-next) +(@delete scene delete) diff --git a/config/keys_track.edn b/config/keys_track.edn index 3ffbb9a9..abdc5e7b 100644 --- a/config/keys_track.edn +++ b/config/keys_track.edn @@ -1,11 +1,12 @@ -(@delete track delete :track) (@q track launch :track) -(@c track color :track) +(@c track color :track) (@comma track prev) (@period track next) (@lt track swap-prev) (@gt track swap-next) -(@r track rec) -(@m track mon) -(@p track play) -(@P track solo) +(@delete track delete) + +(@r track rec) +(@m track mon) +(@p track play) +(@P track solo) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index fddb175b..bc21fa49 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -34,9 +34,6 @@ expose!([self: Tek] handle!(TuiIn: |self: Tek, input|Ok(if let Some(command) = self.keys.command(self, input) { let undo = command.execute(self)?; - if let Some(undo) = undo { - self.history.push(undo); - } Some(true) } else { None @@ -71,15 +68,13 @@ impose!([app: Tek] (t, 0) => Self::Select(Selection::Track(t)), (0, s) => Self::Select(Selection::Scene(s)), (t, s) => Self::Select(Selection::Clip(t, s)) }))) - (ClipCommand: ("edit" [a: MaybeClip] Some(Self::Edit(a.unwrap()))) ("color" [a: usize, b: usize] Some(Self::SetColor(a.unwrap(), b.unwrap(), ItemTheme::random()))) ("enqueue" [a: usize, b: usize] Some(Self::Enqueue(a.unwrap(), b.unwrap()))) ("get" [a: usize, b: usize] Some(Self::Get(a.unwrap(), b.unwrap()))) ("loop" [a: usize, b: usize, c: bool] Some(Self::SetLoop(a.unwrap(), b.unwrap(), c.unwrap()))) - ("put" [a: usize, b: usize, c: MaybeClip] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap()))) - ("delete" [a: usize, b: usize] Some(Self::Put(a.unwrap(), b.unwrap(), None)))) + ("put" [a: usize, b: usize, c: MaybeClip] Some(Self::Put(a.unwrap(), b.unwrap(), c.unwrap())))) (InputCommand: ("add" [] Some(Self::Add))) @@ -89,24 +84,24 @@ impose!([app: Tek] (SceneCommand: ("add" [] Some(Self::Add)) - ("delete" [a: Option] Some(Self::Del(a.flatten().unwrap()))) + ("del" [a: usize] Some(Self::Del(0))) ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::G[128]))) ("enqueue" [a: usize] Some(Self::Enqueue(a.unwrap()))) ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap())))) (TrackCommand: - ("add" [] Some(Self::Add)) - ("size" [a: usize] Some(Self::SetSize(a.unwrap()))) - ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) - ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::random()))) - ("delete" [a: Option] Some(Self::Del(a.flatten().unwrap()))) - ("stop" [a: usize] Some(Self::Stop(a.unwrap()))) - ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap()))) - ("play" [] Some(Self::TogglePlay)) - ("solo" [] Some(Self::ToggleSolo)) - ("rec" [] Some(Self::ToggleRec)) - ("mon" [] Some(Self::ToggleMon)))); + ("add" [] Some(Self::Add)) + ("size" [a: usize] Some(Self::SetSize(a.unwrap()))) + ("zoom" [a: usize] Some(Self::SetZoom(a.unwrap()))) + ("color" [a: usize] Some(Self::SetColor(a.unwrap(), ItemTheme::random()))) + ("del" [a: usize] Some(Self::Del(a.unwrap()))) + ("stop" [a: usize] Some(Self::Stop(a.unwrap()))) + ("swap" [a: usize, b: usize] Some(Self::Swap(a.unwrap(), b.unwrap()))) + ("play" [] Some(Self::TogglePlay)) + ("solo" [] Some(Self::ToggleSolo)) + ("rec" [] Some(Self::ToggleRec)) + ("mon" [] Some(Self::ToggleMon)))); defcom!([self, app: Tek] diff --git a/crates/app/src/model.rs b/crates/app/src/model.rs index 7b13bfcf..2dc9f88b 100644 --- a/crates/app/src/model.rs +++ b/crates/app/src/model.rs @@ -53,7 +53,7 @@ pub struct Tek { // Modal overlay pub modal: Option, // Input keymap - pub keys: InputMap<'static, Self, TekCommand, TuiIn, TokenIter<'static>> + pub keys: InputMap<'static, Self, TekCommand, TuiIn, SourceIter<'static>> } impl Tek { diff --git a/crates/app/src/view.rs b/crates/app/src/view.rs index f4d8f8e0..22a66828 100644 --- a/crates/app/src/view.rs +++ b/crates/app/src/view.rs @@ -41,23 +41,21 @@ impl Tek { Bsp::s(Tui::bold(true, "tek!"), Bsp::s("", Map::south(1, options, option))) } - fn view_modal_help (&self) -> impl Content + use<'_> { - let bindings = ||self.keys.layers.iter() - .filter_map(|a|(a.0)(self).then_some(a.1)) - .flat_map(|a|a) + fn view_modal_help (&self) -> impl Content { + let bindings = ||TokenIter::new(include_str!("../../../config/keys_groovebox.edn")) .filter_map(|x|if let Value::Exp(_, iter)=x.value{ Some(iter) } else { None }); let binding = |mut binding: TokenIter, _|Bsp::e( - Fixed::x(15, Align::w(Tui::bold(true, Tui::fg(Color::Rgb(255,192,0), if let Some(Token { + Tui::bold(true, Tui::fg(Color::Rgb(255,192,0), if let Some(Token { value: Value::Sym(key), .. }) = binding.next() { Some(key.to_string()) } else { None - })))), + })), Bsp::e(" ", Tui::fg(Color::Rgb(255,255,255), if let Some(Token { value: Value::Key(command), .. }) = binding.next() { @@ -66,7 +64,8 @@ impl Tek { None })), ); - Bsp::s(Tui::bold(true, "Help"), Bsp::s("", Map::south(1, bindings, binding))) + let layer = Map::south(1, bindings, binding); + Bsp::s(Tui::bold(true, "Help"), Bsp::s("", layer)) } pub fn view_status (&self) -> impl Content + use<'_> { diff --git a/crates/cli/tek.rs b/crates/cli/tek.rs index 0cebdf0d..464e3268 100644 --- a/crates/cli/tek.rs +++ b/crates/cli/tek.rs @@ -120,36 +120,33 @@ impl Cli { }), keys: match mode { LaunchMode::Sampler => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_sampler.edn")).into()), + .layer(SourceIter(include_str!("../../config/keys_global.edn"))) + .layer(SourceIter(include_str!("../../config/keys_sampler.edn"))), LaunchMode::Clock => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()), + .layer(SourceIter(include_str!("../../config/keys_global.edn"))) + .layer(SourceIter(include_str!("../../config/keys_clock.edn"))), LaunchMode::Sequencer => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_editor.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into()), + .layer(SourceIter(include_str!("../../config/keys_global.edn"))) + .layer(SourceIter(include_str!("../../config/keys_editor.edn"))) + .layer(SourceIter(include_str!("../../config/keys_clock.edn"))) + .layer(SourceIter(include_str!("../../config/keys_sequencer.edn"))), LaunchMode::Groovebox => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_editor.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_sequencer.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_groovebox.edn")).into()), + .layer(SourceIter(include_str!("../../config/keys_global.edn"))) + .layer(SourceIter(include_str!("../../config/keys_editor.edn"))) + .layer(SourceIter(include_str!("../../config/keys_clock.edn"))) + .layer(SourceIter(include_str!("../../config/keys_sequencer.edn"))) + .layer(SourceIter(include_str!("../../config/keys_groovebox.edn"))), LaunchMode::Arranger {..} => InputMap::default() - .layer(SourceIter(include_str!("../../config/keys_global.edn")).into()) - .layer_if(|state: &Tek|state.is_editing(), - SourceIter(include_str!("../../config/keys_editor.edn")).into()) - .layer_if(|state: &Tek|state.selected.is_clip()&&!state.is_editing(), - SourceIter(include_str!("../../config/keys_clip.edn")).into()) - .layer_if(|state: &Tek|state.selected.is_track()&&!state.is_editing(), - SourceIter(include_str!("../../config/keys_track.edn")).into()) - .layer_if(|state: &Tek|state.selected.is_scene()&&!state.is_editing(), - SourceIter(include_str!("../../config/keys_scene.edn")).into()) - .layer_if(|state: &Tek|state.selected.is_mix()&&!state.is_editing(), - SourceIter(include_str!("../../config/keys_mix.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_clock.edn")).into()) - .layer(SourceIter(include_str!("../../config/keys_arranger.edn")).into()), + .layer(SourceIter(include_str!("../../config/keys_global.edn"))) + .layer_if( + |state: &Tek|state.is_editing(), + SourceIter(include_str!("../../config/keys_editor.edn"))) + .layer(SourceIter(include_str!("../../config/keys_clock.edn"))) + .layer(SourceIter(include_str!("../../config/keys_arranger.edn"))) + .layer(SourceIter(include_str!("../../config/keys_clip.edn"))) + .layer(SourceIter(include_str!("../../config/keys_track.edn"))) + .layer(SourceIter(include_str!("../../config/keys_scene.edn"))) + .layer(SourceIter(include_str!("../../config/keys_mix.edn"))), _ => todo!("{mode:?}"), }, pool: match mode { diff --git a/deps/tengri b/deps/tengri index 44ebe17c..4ec51d5b 160000 --- a/deps/tengri +++ b/deps/tengri @@ -1 +1 @@ -Subproject commit 44ebe17c665b3a65e7a3a0020eff290093fc7ed2 +Subproject commit 4ec51d5b694c14ccf617ec4538da04089b17ab92