* the simplified layout omits the Nerdfonts characters that are not found in every Fontset * add an optional config option to opt into the simplified ui `simplified_ui: bool` * add a config flag that allows opting into the simplified ui `zellij options --simplified-ui` * move the `clean` flag to the `setup` subcommand
149 lines
4.1 KiB
Rust
149 lines
4.1 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use strum_macros::{EnumDiscriminants, EnumIter, EnumString, ToString};
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
pub enum Key {
|
|
Backspace,
|
|
Left,
|
|
Right,
|
|
Up,
|
|
Down,
|
|
Home,
|
|
End,
|
|
PageUp,
|
|
PageDown,
|
|
BackTab,
|
|
Delete,
|
|
Insert,
|
|
F(u8),
|
|
Char(char),
|
|
Alt(char),
|
|
Ctrl(char),
|
|
Null,
|
|
Esc,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, EnumDiscriminants, ToString, Serialize, Deserialize)]
|
|
#[strum_discriminants(derive(EnumString, Hash, Serialize, Deserialize))]
|
|
#[strum_discriminants(name(EventType))]
|
|
#[non_exhaustive]
|
|
pub enum Event {
|
|
ModeUpdate(ModeInfo),
|
|
TabUpdate(Vec<TabInfo>),
|
|
KeyPress(Key),
|
|
Timer(f64),
|
|
}
|
|
|
|
/// Describes the different input modes, which change the way that keystrokes will be interpreted.
|
|
#[derive(Debug, PartialEq, Eq, Hash, Copy, Clone, EnumIter, Serialize, Deserialize)]
|
|
pub enum InputMode {
|
|
/// In `Normal` mode, input is always written to the terminal, except for the shortcuts leading
|
|
/// to other modes
|
|
#[serde(alias = "normal")]
|
|
Normal,
|
|
/// In `Locked` mode, input is always written to the terminal and all shortcuts are disabled
|
|
/// except the one leading back to normal mode
|
|
#[serde(alias = "locked")]
|
|
Locked,
|
|
/// `Resize` mode allows resizing the different existing panes.
|
|
#[serde(alias = "resize")]
|
|
Resize,
|
|
/// `Pane` mode allows creating and closing panes, as well as moving between them.
|
|
#[serde(alias = "pane")]
|
|
Pane,
|
|
/// `Tab` mode allows creating and closing tabs, as well as moving between them.
|
|
#[serde(alias = "tab")]
|
|
Tab,
|
|
/// `Scroll` mode allows scrolling up and down within a pane.
|
|
#[serde(alias = "scroll")]
|
|
Scroll,
|
|
#[serde(alias = "renametab")]
|
|
RenameTab,
|
|
}
|
|
|
|
impl Default for InputMode {
|
|
fn default() -> InputMode {
|
|
InputMode::Normal
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
|
|
pub enum Theme {
|
|
Light,
|
|
Dark,
|
|
}
|
|
impl Default for Theme {
|
|
fn default() -> Theme {
|
|
Theme::Dark
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
|
|
pub enum PaletteColor {
|
|
Rgb((u8, u8, u8)),
|
|
EightBit(u8),
|
|
}
|
|
impl Default for PaletteColor {
|
|
fn default() -> PaletteColor {
|
|
PaletteColor::EightBit(0)
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
|
|
pub enum PaletteSource {
|
|
Default,
|
|
Xresources,
|
|
}
|
|
impl Default for PaletteSource {
|
|
fn default() -> PaletteSource {
|
|
PaletteSource::Default
|
|
}
|
|
}
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
|
|
pub struct Palette {
|
|
pub source: PaletteSource,
|
|
pub theme: Theme,
|
|
pub fg: PaletteColor,
|
|
pub bg: PaletteColor,
|
|
pub black: PaletteColor,
|
|
pub red: PaletteColor,
|
|
pub green: PaletteColor,
|
|
pub yellow: PaletteColor,
|
|
pub blue: PaletteColor,
|
|
pub magenta: PaletteColor,
|
|
pub cyan: PaletteColor,
|
|
pub white: PaletteColor,
|
|
pub orange: PaletteColor,
|
|
}
|
|
|
|
/// Represents the contents of the help message that is printed in the status bar,
|
|
/// which indicates the current [`InputMode`] and what the keybinds for that mode
|
|
/// are. Related to the default `status-bar` plugin.
|
|
#[derive(Default, Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
pub struct ModeInfo {
|
|
pub mode: InputMode,
|
|
// FIXME: This should probably return Keys and Actions, then sort out strings plugin-side
|
|
pub keybinds: Vec<(String, String)>, // <shortcut> => <shortcut description>
|
|
pub palette: Palette,
|
|
pub capabilities: PluginCapabilities,
|
|
}
|
|
|
|
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
|
|
pub struct TabInfo {
|
|
/* subset of fields to publish to plugins */
|
|
pub position: usize,
|
|
pub name: String,
|
|
pub active: bool,
|
|
pub is_sync_panes_active: bool,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
|
|
pub struct PluginIds {
|
|
pub plugin_id: u32,
|
|
pub zellij_pid: u32,
|
|
}
|
|
|
|
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
|
|
pub struct PluginCapabilities {
|
|
pub arrow_fonts: bool,
|
|
}
|