use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum CursorStyle {
#[default]
Block,
Beam,
Underline,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum UnfocusedCursorStyle {
#[default]
Hollow,
Same,
Hidden,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum OptionKeyMode {
Normal,
Meta,
#[default]
Esc,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum ModifierTarget {
#[default]
None,
Ctrl,
Alt,
Shift,
Super,
}
impl ModifierTarget {
pub fn display_name(&self) -> &'static str {
match self {
ModifierTarget::None => "None (disabled)",
ModifierTarget::Ctrl => "Ctrl",
ModifierTarget::Alt => "Alt/Option",
ModifierTarget::Shift => "Shift",
ModifierTarget::Super => "Super/Cmd",
}
}
pub fn all() -> &'static [ModifierTarget] {
&[
ModifierTarget::None,
ModifierTarget::Ctrl,
ModifierTarget::Alt,
ModifierTarget::Shift,
ModifierTarget::Super,
]
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct ModifierRemapping {
#[serde(default)]
pub left_ctrl: ModifierTarget,
#[serde(default)]
pub right_ctrl: ModifierTarget,
#[serde(default)]
pub left_alt: ModifierTarget,
#[serde(default)]
pub right_alt: ModifierTarget,
#[serde(default)]
pub left_super: ModifierTarget,
#[serde(default)]
pub right_super: ModifierTarget,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum SessionLogFormat {
Plain,
Html,
#[default]
Asciicast,
}
impl SessionLogFormat {
pub fn display_name(&self) -> &'static str {
match self {
SessionLogFormat::Plain => "Plain Text",
SessionLogFormat::Html => "HTML",
SessionLogFormat::Asciicast => "Asciicast (asciinema)",
}
}
pub fn all() -> &'static [SessionLogFormat] {
&[
SessionLogFormat::Plain,
SessionLogFormat::Html,
SessionLogFormat::Asciicast,
]
}
pub fn extension(&self) -> &'static str {
match self {
SessionLogFormat::Plain => "txt",
SessionLogFormat::Html => "html",
SessionLogFormat::Asciicast => "cast",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum LogLevel {
#[default]
Off,
Error,
Warn,
Info,
Debug,
Trace,
}
impl LogLevel {
pub fn display_name(&self) -> &'static str {
match self {
LogLevel::Off => "Off",
LogLevel::Error => "Error",
LogLevel::Warn => "Warn",
LogLevel::Info => "Info",
LogLevel::Debug => "Debug",
LogLevel::Trace => "Trace",
}
}
pub fn all() -> &'static [LogLevel] {
&[
LogLevel::Off,
LogLevel::Error,
LogLevel::Warn,
LogLevel::Info,
LogLevel::Debug,
LogLevel::Trace,
]
}
pub fn to_level_filter(self) -> log::LevelFilter {
match self {
LogLevel::Off => log::LevelFilter::Off,
LogLevel::Error => log::LevelFilter::Error,
LogLevel::Warn => log::LevelFilter::Warn,
LogLevel::Info => log::LevelFilter::Info,
LogLevel::Debug => log::LevelFilter::Debug,
LogLevel::Trace => log::LevelFilter::Trace,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum SemanticHistoryEditorMode {
Custom,
#[default]
EnvironmentVariable,
SystemDefault,
}
impl SemanticHistoryEditorMode {
pub fn display_name(&self) -> &'static str {
match self {
SemanticHistoryEditorMode::Custom => "Custom Editor",
SemanticHistoryEditorMode::EnvironmentVariable => "Environment Variable ($EDITOR)",
SemanticHistoryEditorMode::SystemDefault => "System Default",
}
}
pub fn all() -> &'static [SemanticHistoryEditorMode] {
&[
SemanticHistoryEditorMode::Custom,
SemanticHistoryEditorMode::EnvironmentVariable,
SemanticHistoryEditorMode::SystemDefault,
]
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum LinkUnderlineStyle {
Solid,
#[default]
Stipple,
}
impl LinkUnderlineStyle {
pub fn display_name(&self) -> &'static str {
match self {
LinkUnderlineStyle::Solid => "Solid",
LinkUnderlineStyle::Stipple => "Stipple",
}
}
pub fn all() -> &'static [LinkUnderlineStyle] {
&[LinkUnderlineStyle::Solid, LinkUnderlineStyle::Stipple]
}
}