From dcde588c7ba26cf582d0f406b6b64587dd3df8cb Mon Sep 17 00:00:00 2001 From: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Date: Fri, 16 Jan 2026 12:08:16 +0200 Subject: [PATCH] AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --- app/tek_cli.rs | 90 ++++++++++++++++++++++++++----------------------- app/tek_deps.rs | 1 + app/tek_mode.rs | 9 +++-- 3 files changed, 55 insertions(+), 45 deletions(-) diff --git a/app/tek_cli.rs b/app/tek_cli.rs index 3562ecab..56e03ff6 100644 --- a/app/tek_cli.rs +++ b/app/tek_cli.rs @@ -1,4 +1,7 @@ pub(crate) use tek::*; +pub(crate) use tek_device::*; +pub(crate) use tek_engine::*; +pub(crate) use tengri::{*, tui::*}; pub(crate) use clap::{self, Parser, Subcommand}; /// Application entrypoint. @@ -6,6 +9,18 @@ pub fn main () -> Usually<()> { Cli::parse().run() } +/// CLI header +const HEADER: &'static str = r#" +~ ╓─╥─╖ ╓──╖ ╥ ╖ ~~~~ ~ ~ ~~ ~ ~ ~ ~~ ~ ~ ~ ~ ~~~~~~ ~ ~~~ + ~~ ║ ~ ╟─╌ ~╟─< ~ v0.3.0, 2025 sum(m)er @ the nose of the cat. ~ +~~~ ╨ ~ ╙──╜ ╨ ╜ ~ ~~~ ~ ~ ~ ~ ~~~ ~~~ ~ ~~ ~~ ~~ ~ ~~ + On first run, Tek will create configuration and state dirs: + * [x] ~/.config/tek - config + * [ ] ~/.local/share/tek - projects + * [ ] ~/.local/lib/tek - plugins + * [ ] ~/.cache/tek - cache +~"#; + #[derive(Debug, Parser)] #[command(name = "tek", version, about = Some(HEADER), long_about = Some(HEADER))] pub struct Cli { @@ -49,6 +64,12 @@ pub enum LaunchMode { } impl Cli { + fn midi_froms (&self) -> Vec { + Connect::collect(&self.midi_from, &[] as &[&str], &self.midi_from_re) + } + fn midi_tos (&self) -> Vec { + Connect::collect(&self.midi_to, &[] as &[&str], &self.midi_to_re) + } pub fn run (&self) -> Usually<()> { let name = self.name.as_ref().map_or("tek", |x|x.as_str()); let tracks = vec![]; @@ -63,36 +84,39 @@ impl Cli { let mut config = Config::new(None); config.init()?; Tui::new()?.run(&Jack::new_run(&name, move|jack|{ + let midi_ins = { + let mut midi_ins = vec![]; + for (index, connect) in self.midi_froms().iter().enumerate() { + midi_ins.push(jack.midi_in(&format!("M/{index}"), &[connect.clone()])?); + } + midi_ins + }; + let midi_outs = { + let mut midi_outs = vec![]; + for (index, connect) in self.midi_tos().iter().enumerate() { + midi_outs.push(jack.midi_out(&format!("{index}/M"), &[connect.clone()])?); + }; + midi_outs + }; + let project = Arrangement { + name: Default::default(), + color: ItemTheme::random(), + jack: jack.clone(), + clock: Clock::new(&jack, self.bpm)?, + tracks, + scenes, + selection: Selection::TrackClip { track: 0, scene: 0 }, + midi_ins, + midi_outs, + ..Default::default() + }; let app = App { jack: jack.clone(), color: ItemTheme::random(), dialog: Dialog::welcome(), mode: config.modes.clone().read().unwrap().get(":menu").cloned().unwrap(), config, - project: Arrangement { - name: Default::default(), - color: ItemTheme::random(), - jack: jack.clone(), - clock: Clock::new(&jack, self.bpm)?, - tracks, - scenes, - selection: Selection::TrackClip { track: 0, scene: 0 }, - midi_ins: { - let mut midi_ins = vec![]; - for (index, connect) in self.midi_froms().iter().enumerate() { - midi_ins.push(jack.midi_in(&format!("M/{index}"), &[connect.clone()])?); - } - midi_ins - }, - midi_outs: { - let mut midi_outs = vec![]; - for (index, connect) in self.midi_tos().iter().enumerate() { - midi_outs.push(jack.midi_out(&format!("{index}/M"), &[connect.clone()])?); - }; - midi_outs - }, - ..Default::default() - }, + project, ..Default::default() }; jack.sync_lead(self.sync_lead, |mut state|{ @@ -105,26 +129,8 @@ impl Cli { Ok(app) })?) } - fn midi_froms (&self) -> Vec { - Connect::collect(&self.midi_from, &[] as &[&str], &self.midi_from_re) - } - fn midi_tos (&self) -> Vec { - Connect::collect(&self.midi_to, &[] as &[&str], &self.midi_to_re) - } } -/// CLI header -const HEADER: &'static str = r#" -~ ╓─╥─╖ ╓──╖ ╥ ╖ ~~~~ ~ ~ ~~ ~ ~ ~ ~~ ~ ~ ~ ~ ~~~~~~ ~ ~~~ - ~~ ║ ~ ╟─╌ ~╟─< ~ v0.3.0, 2025 sum(m)er @ the nose of the cat. ~ -~~~ ╨ ~ ╙──╜ ╨ ╜ ~ ~~~ ~ ~ ~ ~ ~~~ ~~~ ~ ~~ ~~ ~~ ~ ~~ - On first run, Tek will create configuration and state dirs: - * [x] ~/.config/tek - config - * [ ] ~/.local/share/tek - projects - * [ ] ~/.local/lib/tek - plugins - * [ ] ~/.cache/tek - cache -~"#; - #[cfg(test)] #[test] fn test_cli () { use clap::CommandFactory; Cli::command().debug_assert(); diff --git a/app/tek_deps.rs b/app/tek_deps.rs index b4af1e3f..d30fc79c 100644 --- a/app/tek_deps.rs +++ b/app/tek_deps.rs @@ -1,3 +1,4 @@ +#[allow(unused)] pub(crate) use ::{ tek_device::{*, tek_engine::*}, tengri::{ diff --git a/app/tek_mode.rs b/app/tek_mode.rs index f304b517..88749e99 100644 --- a/app/tek_mode.rs +++ b/app/tek_mode.rs @@ -15,8 +15,8 @@ pub struct Mode { } impl Draw for Mode { - fn draw (&self, to: &mut TuiOut) { - self.content().draw(to) + fn draw (&self, _to: &mut TuiOut) { + //self.content().draw(to) } } @@ -38,7 +38,10 @@ impl Mode> { "name" => self.name.push(tail.into()), "info" => self.info.push(tail.into()), "view" => self.view.push(tail.into()), - "keys" => tail.each(|expr|{self.keys.push(expr.trim().into()); Ok(())})?, + "keys" => tail.each(|expr|{ + self.keys.push(expr.trim().into()); + Ok(()) + })?, "mode" => if let Some(id) = tail.head()? { Self::load_into(&self.modes, &id, &tail.tail())?; } else {