wip: edn keymaps are handled!

This commit is contained in:
🪞👃🪞 2025-01-14 20:27:48 +01:00
parent ca1fb3c414
commit a66bc5ca5e

View file

@ -383,17 +383,18 @@ handle!(TuiIn: |self: App, input|{
let mut command: Option<AppCommand> = None;
let edns: Vec<EdnItem<&str>> = EdnItem::read_all(Self::KEYS_APP)?;
for item in edns {
match item {
Exp(e) => match e.as_slice() {
if let Exp(e) = item {
match e.as_slice() {
[Sym(key), c, args @ ..] if input.matches_edn(key) => {
command = AppCommand::from_edn(self, c, args);
if command.is_some() {
break
}
}
},
_ => {}
},
_ => panic!("invalid config")
}
} else {
panic!("invalid config")
}
}
Ok(if let Some(command) = command {
@ -420,13 +421,14 @@ handle!(TuiIn: |self: App, input|{
Zoom(Option<usize>),
}
edn_command!(AppCommand: |state: App| {
("color" [c: Color] Self::Color(c.map(ItemPalette::from).unwrap_or_default()))
("compact" [c: bool ] Self::Compact(c))
("enqueue" [c: Arc<RwLock<MidiClip>>] Self::Enqueue(c))
("history" [d: isize] Self::History(d.unwrap_or(0)))
("select" [s: Selection] Self::Select(s.expect("no selection")))
("stop-all" [] Self::StopAll)
("compact" [c: bool] Self::Compact(c))
("color" [c: Color] Self::Color(c.map(ItemPalette::from).unwrap_or_default()))
("undo" [d: usize] Self::History(-(d.unwrap_or(0)as isize)))
("redo" [d: usize] Self::History(d.unwrap_or(0) as isize))
("zoom" [z: usize] Self::Zoom(z))
("select" [s: Selection] Self::Select(s.expect("no selection")))
("enqueue" [c: Arc<RwLock<MidiClip>>] Self::Enqueue(c))
("clip" [a, ..b] Self::Clip(
ClipCommand::from_edn(state, &a.to_ref(), b).expect("invalid command")))
@ -444,8 +446,8 @@ edn_command!(AppCommand: |state: App| {
TrackCommand::from_edn(state, &a.to_ref(), b).expect("invalid command")))
});
command!(|self: AppCommand, state: App|match self {
Self::Zoom(_) => { todo!(); },
Self::History(delta) => { todo!("undo/redo") },
Self::Zoom(_) => { println!("\n\rtodo: global zoom"); None },
Self::History(delta) => { println!("\n\rtodo: undo/redo"); None },
Self::Select(s) => { state.selected = s; None },
Self::Clock(cmd) => cmd.delegate(state, Self::Clock)?,
Self::Scene(cmd) => cmd.delegate(state, Self::Scene)?,