Add handlers for arrow keys

This commit is contained in:
Jeremy Soller 2024-02-28 16:16:59 -07:00
parent dc8433ce59
commit 6e14a0baea
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
3 changed files with 91 additions and 3 deletions

View file

@ -373,6 +373,10 @@ pub enum Message {
EditLocation(Option<Location>),
GoNext,
GoPrevious,
ItemDown,
ItemLeft,
ItemRight,
ItemUp,
Location(Location),
LocationUp,
Open,
@ -705,6 +709,56 @@ impl Tab {
}
}
}
Message::ItemDown | Message::ItemLeft => {
//TODO: handle grid correctly
//TODO: do not wrap
if let Some(ref mut items) = self.items_opt {
let mut last_selected_opt = None;
for (i, item) in items.iter_mut().enumerate() {
if item.selected {
if !modifiers.contains(Modifiers::SHIFT) {
item.selected = false;
}
last_selected_opt = Some(i);
}
}
for (i, item) in items.iter_mut().enumerate() {
if !self.config.show_hidden && item.hidden {
continue;
}
if last_selected_opt.map_or(true, |last_selected| i > last_selected) {
item.selected = true;
break;
}
}
}
}
Message::ItemUp | Message::ItemRight => {
//TODO: handle grid correctly
//TODO: do not wrap
if let Some(ref mut items) = self.items_opt {
let mut last_selected_opt = None;
for (i, item) in items.iter_mut().enumerate().rev() {
if item.selected {
if !modifiers.contains(Modifiers::SHIFT) {
item.selected = false;
}
last_selected_opt = Some(i);
}
}
for (i, item) in items.iter_mut().enumerate().rev() {
if !self.config.show_hidden && item.hidden {
continue;
}
if last_selected_opt.map_or(true, |last_selected| i < last_selected) {
item.selected = true;
break;
}
}
}
}
Message::Location(location) => {
cd = Some(location);
}