multiselect and commit split

This commit is contained in:
Vivian Lim 2024-04-07 15:32:26 -07:00
parent 125ce460fa
commit a356373c7c
1 changed files with 72 additions and 0 deletions

View File

@ -310,8 +310,17 @@ pub fn refine<'a>(selected: IndexedLine, input: &'a [IndexedLine]) -> Result<Str
..
})) => state = unbox_state(previous),
Ok(Event::Key(KeyEvent {
code: KeyCode::Enter,
modifiers: KeyModifiers::NONE,
..
})) => {
break;
}
Ok(Event::Key(KeyEvent {
code: KeyCode::Up | KeyCode::Char('k'),
modifiers: KeyModifiers::NONE,
..
})) => match list_state.selected() {
Some(n) if n > 0 => {
@ -324,6 +333,7 @@ pub fn refine<'a>(selected: IndexedLine, input: &'a [IndexedLine]) -> Result<Str
},
Ok(Event::Key(KeyEvent {
code: KeyCode::Down | KeyCode::Char('j'),
modifiers: KeyModifiers::NONE,
..
})) => match list_state.selected() {
Some(n) if n < parts.len() - 1 => {
@ -335,10 +345,12 @@ pub fn refine<'a>(selected: IndexedLine, input: &'a [IndexedLine]) -> Result<Str
_ => (),
},
// Select
Ok(Event::Key(KeyEvent {
code: KeyCode::Char(' '),
..
})) => {
// Toggle selected item
if let Some(n) = list_state.selected() {
let mut new_parts = parts.clone();
new_parts[n].1 = !parts[n].1;
@ -351,6 +363,66 @@ pub fn refine<'a>(selected: IndexedLine, input: &'a [IndexedLine]) -> Result<Str
})
}
}
// Select and move down one
Ok(Event::Key(KeyEvent {
code: KeyCode::Up | KeyCode::Char('K'),
modifiers: KeyModifiers::SHIFT,
..
})) => {
let part_len = parts.len();
// Toggle selected item
if let Some(n) = list_state.selected() {
let mut new_parts = parts.clone();
new_parts[n].1 = !parts[n].1;
let delimiter = delimiter.to_string();
state = Some(RefinementState::Pieces {
parts: new_parts,
input: input,
previous: box_state(state),
delimiter,
})
}
match list_state.selected() {
Some(n) if n > 0 => {
list_state.select(Some(n - 1));
}
Some(n) if n == 0 => {
list_state.select(Some(part_len - 1));
}
_ => (),
}
}
Ok(Event::Key(KeyEvent {
code: KeyCode::Down | KeyCode::Char('J'),
modifiers: KeyModifiers::SHIFT,
..
})) => {
let part_len = parts.len();
// Toggle selected item
if let Some(n) = list_state.selected() {
let mut new_parts = parts.clone();
new_parts[n].1 = !parts[n].1;
let delimiter = delimiter.to_string();
state = Some(RefinementState::Pieces {
parts: new_parts,
input: input,
previous: box_state(state),
delimiter,
})
}
match list_state.selected() {
Some(n) if n < part_len - 1 => {
list_state.select(Some(n + 1));
}
Some(n) if n == part_len - 1 => {
list_state.select(Some(0));
}
_ => (),
}
}
_ => (),
},
InputMode::PromptingDelimiter => todo!(),