pub(crate) const MODE_APPLICATION_CURSOR: u32 = 1 << 0;
pub(crate) const MODE_BRACKETED_PASTE: u32 = 1 << 1;
pub(crate) const MODE_HIDE_CURSOR: u32 = 1 << 2;
pub(crate) const MODE_ALTERNATE_SCREEN: u32 = 1 << 3;
pub(crate) const MODE_LINE_WRAP: u32 = 1 << 4;
pub(crate) const MODE_MOUSE_REPORT_CLICK: u32 = 1 << 5;
pub(crate) const MODE_MOUSE_REPORT_CELL_MOTION: u32 = 1 << 6;
pub(crate) const MODE_MOUSE_REPORT_ALL_MOTION: u32 = 1 << 7;
pub(crate) const MODE_FOCUS_IN_OUT: u32 = 1 << 8;
pub(crate) const MODE_SGR_MOUSE: u32 = 1 << 9;
pub(crate) const MODE_SYNC_UPDATE: u32 = 1 << 10;
pub(crate) const MODE_INSERT: u32 = 1 << 11;
pub(crate) const MODE_COLOR_SCHEME_UPDATES: u32 = 1 << 12;
pub(crate) const MODE_IN_BAND_RESIZE: u32 = 1 << 13;
pub(crate) const MODE_SGR_PIXEL_MOUSE: u32 = 1 << 14;
pub(crate) const MODE_GRAPHEME_CLUSTER: u32 = 1 << 15;
pub(crate) const MODE_REVERSE_VIDEO: u32 = 1 << 16;
pub(crate) const MODE_ALTERNATE_SCROLL: u32 = 1 << 17;
pub(crate) const MODE_MOUSE_X10: u32 = 1 << 18;
pub(crate) const MODE_BACKSPACE_BS: u32 = 1 << 19;
pub(crate) const MODE_LNM: u32 = 1 << 20;
pub(crate) const MODE_DECCOLM: u32 = 1 << 21;
pub(crate) const MODE_DEC_ALLOW_80_132: u32 = 1 << 22;
pub(crate) const MODE_ALL_DEC: u32 = MODE_APPLICATION_CURSOR
| MODE_BRACKETED_PASTE
| MODE_HIDE_CURSOR
| MODE_LINE_WRAP
| MODE_MOUSE_REPORT_CLICK
| MODE_MOUSE_REPORT_CELL_MOTION
| MODE_MOUSE_REPORT_ALL_MOTION
| MODE_FOCUS_IN_OUT
| MODE_SGR_MOUSE
| MODE_SYNC_UPDATE
| MODE_COLOR_SCHEME_UPDATES
| MODE_IN_BAND_RESIZE
| MODE_SGR_PIXEL_MOUSE
| MODE_GRAPHEME_CLUSTER
| MODE_REVERSE_VIDEO
| MODE_ALTERNATE_SCROLL
| MODE_MOUSE_X10
| MODE_BACKSPACE_BS;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[non_exhaustive]
pub enum TerminalMode {
#[doc(alias = "DECSET 1")]
ApplicationCursor,
#[doc(alias = "DECSET 2004")]
BracketedPaste,
MouseReportClick,
MouseReportCellMotion,
MouseReportAllMotion,
#[doc(alias = "DECSET 1004")]
FocusInOut,
SgrMouse,
SgrPixelMouse,
#[doc(alias = "DECSET 2026")]
SyncUpdate,
#[doc(alias = "DECSET 2027")]
GraphemeCluster,
ColorSchemeUpdates,
InBandResize,
#[doc(alias = "DECSET 1049")]
#[doc(alias = "DECSET 47")]
#[doc(alias = "DECSET 1047")]
AlternateScreen,
#[doc(alias = "DECSET 25")]
#[doc(alias = "DECTCEM")]
HideCursor,
#[doc(alias = "DECSET 5")]
#[doc(alias = "DECSCNM")]
ReverseVideo,
#[doc(alias = "DECSET 1007")]
AlternateScroll,
#[doc(alias = "DECSET 9")]
MouseReportX10,
#[doc(alias = "DECSET 67")]
#[doc(alias = "DECBKM")]
BackspaceBs,
#[doc(alias = "LNM")]
#[doc(alias = "ANSI mode 20")]
LineFeedNewLine,
}
impl TerminalMode {
pub(crate) fn from_mode_flag(flag: u32) -> Option<Self> {
match flag {
MODE_BRACKETED_PASTE => Some(Self::BracketedPaste),
MODE_MOUSE_REPORT_CLICK => Some(Self::MouseReportClick),
MODE_MOUSE_REPORT_CELL_MOTION => Some(Self::MouseReportCellMotion),
MODE_MOUSE_REPORT_ALL_MOTION => Some(Self::MouseReportAllMotion),
MODE_FOCUS_IN_OUT => Some(Self::FocusInOut),
MODE_SGR_MOUSE => Some(Self::SgrMouse),
MODE_SGR_PIXEL_MOUSE => Some(Self::SgrPixelMouse),
MODE_COLOR_SCHEME_UPDATES => Some(Self::ColorSchemeUpdates),
MODE_IN_BAND_RESIZE => Some(Self::InBandResize),
MODE_REVERSE_VIDEO => Some(Self::ReverseVideo),
MODE_ALTERNATE_SCROLL => Some(Self::AlternateScroll),
MODE_MOUSE_X10 => Some(Self::MouseReportX10),
MODE_BACKSPACE_BS => Some(Self::BackspaceBs),
MODE_LNM => Some(Self::LineFeedNewLine),
_ => None,
}
}
pub(crate) fn mode_bit(self) -> u32 {
match self {
Self::ApplicationCursor => MODE_APPLICATION_CURSOR,
Self::BracketedPaste => MODE_BRACKETED_PASTE,
Self::MouseReportClick => MODE_MOUSE_REPORT_CLICK,
Self::MouseReportCellMotion => MODE_MOUSE_REPORT_CELL_MOTION,
Self::MouseReportAllMotion => MODE_MOUSE_REPORT_ALL_MOTION,
Self::FocusInOut => MODE_FOCUS_IN_OUT,
Self::SgrMouse => MODE_SGR_MOUSE,
Self::SgrPixelMouse => MODE_SGR_PIXEL_MOUSE,
Self::SyncUpdate => MODE_SYNC_UPDATE,
Self::GraphemeCluster => MODE_GRAPHEME_CLUSTER,
Self::ColorSchemeUpdates => MODE_COLOR_SCHEME_UPDATES,
Self::InBandResize => MODE_IN_BAND_RESIZE,
Self::AlternateScreen => MODE_ALTERNATE_SCREEN,
Self::HideCursor => MODE_HIDE_CURSOR,
Self::ReverseVideo => MODE_REVERSE_VIDEO,
Self::AlternateScroll => MODE_ALTERNATE_SCROLL,
Self::MouseReportX10 => MODE_MOUSE_X10,
Self::BackspaceBs => MODE_BACKSPACE_BS,
Self::LineFeedNewLine => MODE_LNM,
}
}
}