103 lines
3.1 KiB
Rust
103 lines
3.1 KiB
Rust
//! Definition of the actions that can be bound to keys.
|
|
|
|
use super::command::RunCommandAction;
|
|
use super::layout::TabLayout;
|
|
use crate::input::options::OnForceClose;
|
|
use serde::{Deserialize, Serialize};
|
|
use zellij_tile::data::InputMode;
|
|
|
|
use crate::position::Position;
|
|
|
|
/// The four directions (left, right, up, down).
|
|
#[derive(Eq, Clone, Debug, PartialEq, Deserialize, Serialize)]
|
|
pub enum Direction {
|
|
Left,
|
|
Right,
|
|
Up,
|
|
Down,
|
|
}
|
|
|
|
// As these actions are bound to the default config, please
|
|
// do take care when refactoring - or renaming.
|
|
// They might need to be adjusted in the default config
|
|
// as well `../../assets/config/default.yaml`
|
|
/// Actions that can be bound to keys.
|
|
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
|
pub enum Action {
|
|
/// Quit Zellij.
|
|
Quit,
|
|
/// Write to the terminal.
|
|
Write(Vec<u8>),
|
|
/// Write Characters to the terminal.
|
|
WriteChars(String),
|
|
/// Switch to the specified input mode.
|
|
SwitchToMode(InputMode),
|
|
/// Resize focus pane in specified direction.
|
|
Resize(Direction),
|
|
/// Switch focus to next pane in specified direction.
|
|
FocusNextPane,
|
|
FocusPreviousPane,
|
|
/// Move the focus pane in specified direction.
|
|
SwitchFocus,
|
|
MoveFocus(Direction),
|
|
/// Tries to move the focus pane in specified direction.
|
|
/// If there is no pane in the direction, move to previous/next Tab.
|
|
MoveFocusOrTab(Direction),
|
|
MovePane(Option<Direction>),
|
|
/// Scroll up in focus pane.
|
|
ScrollUp,
|
|
/// Scroll up at point
|
|
ScrollUpAt(Position),
|
|
/// Scroll down in focus pane.
|
|
ScrollDown,
|
|
/// Scroll down at point
|
|
ScrollDownAt(Position),
|
|
/// Scroll down to bottom in focus pane.
|
|
ScrollToBottom,
|
|
/// Scroll up one page in focus pane.
|
|
PageScrollUp,
|
|
/// Scroll down one page in focus pane.
|
|
PageScrollDown,
|
|
/// Toggle between fullscreen focus pane and normal layout.
|
|
ToggleFocusFullscreen,
|
|
/// Toggle frames around panes in the UI
|
|
TogglePaneFrames,
|
|
/// Toggle between sending text commands to all panes on the current tab and normal mode.
|
|
ToggleActiveSyncTab,
|
|
/// Open a new pane in the specified direction (relative to focus).
|
|
/// If no direction is specified, will try to use the biggest available space.
|
|
NewPane(Option<Direction>),
|
|
/// Close the focus pane.
|
|
CloseFocus,
|
|
/// Create a new tab, optionally with a specified tab layout.
|
|
NewTab(Option<TabLayout>),
|
|
/// Do nothing.
|
|
NoOp,
|
|
/// Go to the next tab.
|
|
GoToNextTab,
|
|
/// Go to the previous tab.
|
|
GoToPreviousTab,
|
|
/// Close the current tab.
|
|
CloseTab,
|
|
GoToTab(u32),
|
|
ToggleTab,
|
|
TabNameInput(Vec<u8>),
|
|
/// Run speficied command in new pane.
|
|
Run(RunCommandAction),
|
|
/// Detach session and exit
|
|
Detach,
|
|
LeftClick(Position),
|
|
RightClick(Position),
|
|
MouseRelease(Position),
|
|
MouseHold(Position),
|
|
Copy,
|
|
}
|
|
|
|
impl From<OnForceClose> for Action {
|
|
fn from(ofc: OnForceClose) -> Action {
|
|
match ofc {
|
|
OnForceClose::Quit => Action::Quit,
|
|
OnForceClose::Detach => Action::Detach,
|
|
}
|
|
}
|
|
}
|