feat(states): Add `command` state for command only keymappings
This commit is contained in:
parent
bc1fc0cc02
commit
74f3b25827
|
@ -81,6 +81,7 @@ pub async fn handle(
|
||||||
|
|
||||||
Command::CommandLineShow => {
|
Command::CommandLineShow => {
|
||||||
app.ui.cli_enable();
|
app.ui.cli_enable();
|
||||||
|
app.status.set_state(State::Command);
|
||||||
send_status_output!("CLI online");
|
send_status_output!("CLI online");
|
||||||
EventStatus::Ok
|
EventStatus::Ok
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,52 @@ use crate::{
|
||||||
ui::central,
|
ui::central,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn handle_normal(
|
pub async fn handle_command(
|
||||||
app: &mut App<'_>,
|
app: &mut App<'_>,
|
||||||
input_event: &CrosstermEvent,
|
input_event: &CrosstermEvent,
|
||||||
) -> Result<EventStatus> {
|
) -> Result<EventStatus> {
|
||||||
|
if let Some(cli) = &app.ui.cli {
|
||||||
|
match input_event {
|
||||||
|
CrosstermEvent::Key(KeyEvent {
|
||||||
|
code: KeyCode::Esc, ..
|
||||||
|
}) => {
|
||||||
|
app.tx
|
||||||
|
.send(Event::CommandEvent(Command::SetModeNormal, None))
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
CrosstermEvent::Key(KeyEvent {
|
||||||
|
code: KeyCode::Enter,
|
||||||
|
..
|
||||||
|
}) => {
|
||||||
|
let ci_event = cli
|
||||||
|
.lines()
|
||||||
|
.get(0)
|
||||||
|
.expect(
|
||||||
|
"One line always exists,
|
||||||
|
and others can't exists
|
||||||
|
because we collect on
|
||||||
|
enter",
|
||||||
|
)
|
||||||
|
.to_owned();
|
||||||
|
app.tx
|
||||||
|
.send(Event::LuaCommand(ci_event))
|
||||||
|
.await
|
||||||
|
.context("Failed to send lua command to internal event stream")?;
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
app.ui
|
||||||
|
.cli
|
||||||
|
.as_mut()
|
||||||
|
.expect("This is already checked")
|
||||||
|
.input(tui_textarea::Input::from(input_event.to_owned()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unreachable!("The cli should not be active while no cli is defined");
|
||||||
|
}
|
||||||
|
Ok(EventStatus::Ok)
|
||||||
|
}
|
||||||
|
pub async fn handle_normal(app: &mut App<'_>, input_event: &CrosstermEvent) -> Result<EventStatus> {
|
||||||
match input_event {
|
match input_event {
|
||||||
CrosstermEvent::Key(KeyEvent {
|
CrosstermEvent::Key(KeyEvent {
|
||||||
code: KeyCode::Esc, ..
|
code: KeyCode::Esc, ..
|
||||||
|
@ -137,38 +179,7 @@ pub async fn handle_normal(
|
||||||
_ => (),
|
_ => (),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
central::InputPosition::CLI => {
|
|
||||||
if let Some(cli) = &app.ui.cli {
|
|
||||||
match input {
|
|
||||||
CrosstermEvent::Key(KeyEvent {
|
|
||||||
code: KeyCode::Enter,
|
|
||||||
..
|
|
||||||
}) => {
|
|
||||||
let ci_event = cli
|
|
||||||
.lines()
|
|
||||||
.get(0)
|
|
||||||
.expect(
|
|
||||||
"One line always exists,
|
|
||||||
and others can't exists
|
|
||||||
because we collect on
|
|
||||||
enter",
|
|
||||||
)
|
|
||||||
.to_owned();
|
|
||||||
app.tx
|
|
||||||
.send(Event::LuaCommand(ci_event))
|
|
||||||
.await
|
|
||||||
.context("Failed to send lua command to internal event stream")?;
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
app.ui
|
|
||||||
.cli
|
|
||||||
.as_mut()
|
|
||||||
.expect("This is already checked")
|
|
||||||
.input(tui_textarea::Input::from(input.to_owned()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
_ => (),
|
_ => (),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -45,6 +45,9 @@ impl Event {
|
||||||
State::Insert => main::handle_insert(app, &event).await.with_context(|| {
|
State::Insert => main::handle_insert(app, &event).await.with_context(|| {
|
||||||
format!("Failed to handle input (insert) event: `{:#?}`", event)
|
format!("Failed to handle input (insert) event: `{:#?}`", event)
|
||||||
}),
|
}),
|
||||||
|
State::Command => main::handle_command(app, &event).await.with_context(|| {
|
||||||
|
format!("Failed to handle input (command) event: `{:#?}`", event)
|
||||||
|
}),
|
||||||
State::Setup => setup::handle(app, &event).await.with_context(|| {
|
State::Setup => setup::handle(app, &event).await.with_context(|| {
|
||||||
format!("Failed to handle input (setup) event: `{:#?}`", event)
|
format!("Failed to handle input (setup) event: `{:#?}`", event)
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -15,6 +15,7 @@ use matrix_sdk::{
|
||||||
pub enum State {
|
pub enum State {
|
||||||
Normal,
|
Normal,
|
||||||
Insert,
|
Insert,
|
||||||
|
Command,
|
||||||
/// Temporary workaround until command based login is working
|
/// Temporary workaround until command based login is working
|
||||||
Setup,
|
Setup,
|
||||||
}
|
}
|
||||||
|
@ -57,6 +58,7 @@ impl fmt::Display for State {
|
||||||
match self {
|
match self {
|
||||||
Self::Normal => write!(f, "Normal"),
|
Self::Normal => write!(f, "Normal"),
|
||||||
Self::Insert => write!(f, "Insert"),
|
Self::Insert => write!(f, "Insert"),
|
||||||
|
Self::Command => write!(f, "Command"),
|
||||||
Self::Setup => write!(f, "Setup (!! workaround !!)"),
|
Self::Setup => write!(f, "Setup (!! workaround !!)"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue