use crate::{
ui::{Key, KeyModifiers},
InnerAction, InputAction,
};
use super::config::TextConfig;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[allow(clippy::enum_variant_names)]
pub enum TextPromptAction {
ValueInput(InputAction),
MoveToSuggestionAbove,
MoveToSuggestionBelow,
MoveToSuggestionPageUp,
MoveToSuggestionPageDown,
UseCurrentSuggestion,
}
impl InnerAction for TextPromptAction {
type Config = TextConfig;
fn from_key(key: Key, _config: &TextConfig) -> Option<Self> {
let action = match key {
Key::Up(KeyModifiers::NONE) | Key::Char('p', KeyModifiers::CONTROL) => {
Self::MoveToSuggestionAbove
}
Key::PageUp(_) => Self::MoveToSuggestionPageUp,
Key::Down(KeyModifiers::NONE) | Key::Char('n', KeyModifiers::CONTROL) => {
Self::MoveToSuggestionBelow
}
Key::PageDown(_) => Self::MoveToSuggestionPageDown,
Key::Tab => Self::UseCurrentSuggestion,
key => match InputAction::from_key(key, &()) {
Some(action) => Self::ValueInput(action),
None => return None,
},
};
Some(action)
}
}