match message {
Message::CursorDown => {
state.cursor.selection =
Some(match state.cursor.selection.as_ref() {
Some(cursor::Selection::Channel) => {
if state.repo.changed_files.is_empty() {
cursor::Selection::Channel
} else {
cursor::Selection::File(0)
}
}
Some(cursor::Selection::File(ix)) => {
if state.repo.changed_files.len().saturating_sub(1)
== *ix
{
cursor::Selection::Channel
} else {
cursor::Selection::File(ix + 1)
}
}
None => cursor::Selection::Channel,
})
}
Message::CursorUp => {
state.cursor.selection =
Some(match state.cursor.selection.as_ref() {
Some(cursor::Selection::Channel) | None => {
if state.repo.changed_files.is_empty() {
cursor::Selection::Channel
} else {
cursor::Selection::File(
state.repo.changed_files.len() - 1,
)
}
}
Some(cursor::Selection::File(ix)) => {
if 0 == *ix {
cursor::Selection::Channel
} else {
cursor::Selection::File(ix - 1)
}
}
})
}
Message::CursorSelect(selection) => {
state.cursor.selection = Some(selection)
}
}
}
fn subs(_state: &State) -> Subscription<Message> {
use iced::keyboard::{on_key_press, Key};
on_key_press(|key, mods| {
if mods.is_empty() {
match key {
Key::Character(c) => match c.as_str() {
"j" => Some(Message::CursorDown),
"k" => Some(Message::CursorUp),
_ => None,
},
Key::Named(_) | Key::Unidentified => None,
}
} else {
None
}
})