aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-03-07 12:57:48 -0500
committerJesse Luehrs <doy@tozt.net>2021-03-07 12:58:55 -0500
commitfb98bbdc50daaac71ff509c25f6a99b4ffa8459a (patch)
tree38338856353dac2c15777586a9a235661a81ffe1
parentbf2c29c21d8bc094b785e78dfb7387807599dec6 (diff)
downloadvt100-rust-fb98bbdc50daaac71ff509c25f6a99b4ffa8459a.tar.gz
vt100-rust-fb98bbdc50daaac71ff509c25f6a99b4ffa8459a.zip
drop enumset dependency
-rw-r--r--CHANGELOG.md6
-rw-r--r--Cargo.toml1
-rw-r--r--src/attrs.rs37
-rw-r--r--src/screen.rs83
4 files changed, 63 insertions, 64 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b7f8f1f..2e30ef2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## [Unreleased]
+
+### Changed
+
+* Drop dependency on `enumset`
+
## [0.11.0] - 2021-03-07
### Added
diff --git a/Cargo.toml b/Cargo.toml
index 100d949..e35ce5d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,7 +14,6 @@ license = "MIT"
[dependencies]
itoa = "0.4"
-enumset = "1.0"
log = "0.4"
unicode-width = "0.1"
vte = "0.10"
diff --git a/src/attrs.rs b/src/attrs.rs
index eab752c..e5a2b8e 100644
--- a/src/attrs.rs
+++ b/src/attrs.rs
@@ -19,67 +19,64 @@ impl Default for Color {
}
}
-#[derive(enumset::EnumSetType, Debug)]
-pub enum TextMode {
- Bold,
- Italic,
- Underline,
- Inverse,
-}
+const TEXT_MODE_BOLD: u8 = 0b0000_0001;
+const TEXT_MODE_ITALIC: u8 = 0b0000_0010;
+const TEXT_MODE_UNDERLINE: u8 = 0b0000_0100;
+const TEXT_MODE_INVERSE: u8 = 0b0000_1000;
#[derive(Default, Clone, Copy, PartialEq, Eq, Debug)]
pub struct Attrs {
pub fgcolor: Color,
pub bgcolor: Color,
- pub mode: enumset::EnumSet<TextMode>,
+ pub mode: u8,
}
impl Attrs {
pub fn bold(&self) -> bool {
- self.mode.contains(TextMode::Bold)
+ self.mode & TEXT_MODE_BOLD != 0
}
pub fn set_bold(&mut self, bold: bool) {
if bold {
- self.mode.insert(TextMode::Bold);
+ self.mode |= TEXT_MODE_BOLD;
} else {
- self.mode.remove(TextMode::Bold);
+ self.mode &= !TEXT_MODE_BOLD;
}
}
pub fn italic(&self) -> bool {
- self.mode.contains(TextMode::Italic)
+ self.mode & TEXT_MODE_ITALIC != 0
}
pub fn set_italic(&mut self, italic: bool) {
if italic {
- self.mode.insert(TextMode::Italic);
+ self.mode |= TEXT_MODE_ITALIC;
} else {
- self.mode.remove(TextMode::Italic);
+ self.mode &= !TEXT_MODE_ITALIC;
}
}
pub fn underline(&self) -> bool {
- self.mode.contains(TextMode::Underline)
+ self.mode & TEXT_MODE_UNDERLINE != 0
}
pub fn set_underline(&mut self, underline: bool) {
if underline {
- self.mode.insert(TextMode::Underline);
+ self.mode |= TEXT_MODE_UNDERLINE;
} else {
- self.mode.remove(TextMode::Underline);
+ self.mode &= !TEXT_MODE_UNDERLINE;
}
}
pub fn inverse(&self) -> bool {
- self.mode.contains(TextMode::Inverse)
+ self.mode & TEXT_MODE_INVERSE != 0
}
pub fn set_inverse(&mut self, inverse: bool) {
if inverse {
- self.mode.insert(TextMode::Inverse);
+ self.mode |= TEXT_MODE_INVERSE;
} else {
- self.mode.remove(TextMode::Inverse);
+ self.mode &= !TEXT_MODE_INVERSE;
}
}
diff --git a/src/screen.rs b/src/screen.rs
index 55de967..cb6b970 100644
--- a/src/screen.rs
+++ b/src/screen.rs
@@ -2,14 +2,11 @@ use crate::term::BufWrite as _;
use std::convert::TryInto as _;
use unicode_width::UnicodeWidthChar as _;
-#[derive(enumset::EnumSetType, Debug)]
-enum Mode {
- ApplicationKeypad,
- ApplicationCursor,
- HideCursor,
- AlternateScreen,
- BracketedPaste,
-}
+const MODE_APPLICATION_KEYPAD: u8 = 0b0000_0001;
+const MODE_APPLICATION_CURSOR: u8 = 0b0000_0010;
+const MODE_HIDE_CURSOR: u8 = 0b0000_0100;
+const MODE_ALTERNATE_SCREEN: u8 = 0b0000_1000;
+const MODE_BRACKETED_PASTE: u8 = 0b0001_0000;
/// The xterm mouse handling mode currently in use.
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
@@ -76,7 +73,7 @@ pub struct Screen {
title: String,
icon_name: String,
- modes: enumset::EnumSet<Mode>,
+ modes: u8,
mouse_protocol_mode: MouseProtocolMode,
mouse_protocol_encoding: MouseProtocolEncoding,
@@ -99,7 +96,7 @@ impl Screen {
title: String::default(),
icon_name: String::default(),
- modes: enumset::EnumSet::default(),
+ modes: 0,
mouse_protocol_mode: MouseProtocolMode::default(),
mouse_protocol_encoding: MouseProtocolEncoding::default(),
@@ -360,14 +357,14 @@ impl Screen {
fn write_input_mode_formatted(&self, contents: &mut Vec<u8>) {
crate::term::ApplicationKeypad::new(
- self.mode(Mode::ApplicationKeypad),
+ self.mode(MODE_APPLICATION_KEYPAD),
)
.write_buf(contents);
crate::term::ApplicationCursor::new(
- self.mode(Mode::ApplicationCursor),
+ self.mode(MODE_APPLICATION_CURSOR),
)
.write_buf(contents);
- crate::term::BracketedPaste::new(self.mode(Mode::BracketedPaste))
+ crate::term::BracketedPaste::new(self.mode(MODE_BRACKETED_PASTE))
.write_buf(contents);
crate::term::MouseProtocolMode::new(
self.mouse_protocol_mode,
@@ -392,25 +389,25 @@ impl Screen {
}
fn write_input_mode_diff(&self, contents: &mut Vec<u8>, prev: &Self) {
- if self.mode(Mode::ApplicationKeypad)
- != prev.mode(Mode::ApplicationKeypad)
+ if self.mode(MODE_APPLICATION_KEYPAD)
+ != prev.mode(MODE_APPLICATION_KEYPAD)
{
crate::term::ApplicationKeypad::new(
- self.mode(Mode::ApplicationKeypad),
+ self.mode(MODE_APPLICATION_KEYPAD),
)
.write_buf(contents);
}
- if self.mode(Mode::ApplicationCursor)
- != prev.mode(Mode::ApplicationCursor)
+ if self.mode(MODE_APPLICATION_CURSOR)
+ != prev.mode(MODE_APPLICATION_CURSOR)
{
crate::term::ApplicationCursor::new(
- self.mode(Mode::ApplicationCursor),
+ self.mode(MODE_APPLICATION_CURSOR),
)
.write_buf(contents);
}
- if self.mode(Mode::BracketedPaste) != prev.mode(Mode::BracketedPaste)
+ if self.mode(MODE_BRACKETED_PASTE) != prev.mode(MODE_BRACKETED_PASTE)
{
- crate::term::BracketedPaste::new(self.mode(Mode::BracketedPaste))
+ crate::term::BracketedPaste::new(self.mode(MODE_BRACKETED_PASTE))
.write_buf(contents);
}
crate::term::MouseProtocolMode::new(
@@ -573,25 +570,25 @@ impl Screen {
/// Returns whether the terminal should be in application keypad mode.
#[must_use]
pub fn application_keypad(&self) -> bool {
- self.mode(Mode::ApplicationKeypad)
+ self.mode(MODE_APPLICATION_KEYPAD)
}
/// Returns whether the terminal should be in application cursor mode.
#[must_use]
pub fn application_cursor(&self) -> bool {
- self.mode(Mode::ApplicationCursor)
+ self.mode(MODE_APPLICATION_CURSOR)
}
/// Returns whether the terminal should be in hide cursor mode.
#[must_use]
pub fn hide_cursor(&self) -> bool {
- self.mode(Mode::HideCursor)
+ self.mode(MODE_HIDE_CURSOR)
}
/// Returns whether the terminal should be in bracketed paste mode.
#[must_use]
pub fn bracketed_paste(&self) -> bool {
- self.mode(Mode::BracketedPaste)
+ self.mode(MODE_BRACKETED_PASTE)
}
/// Returns the currently active `MouseProtocolMode`
@@ -647,7 +644,7 @@ impl Screen {
}
fn grid(&self) -> &crate::grid::Grid {
- if self.mode(Mode::AlternateScreen) {
+ if self.mode(MODE_ALTERNATE_SCREEN) {
&self.alternate_grid
} else {
&self.grid
@@ -655,7 +652,7 @@ impl Screen {
}
fn grid_mut(&mut self) -> &mut crate::grid::Grid {
- if self.mode(Mode::AlternateScreen) {
+ if self.mode(MODE_ALTERNATE_SCREEN) {
&mut self.alternate_grid
} else {
&mut self.grid
@@ -690,11 +687,11 @@ impl Screen {
fn enter_alternate_grid(&mut self) {
self.grid_mut().set_scrollback(0);
- self.set_mode(Mode::AlternateScreen);
+ self.set_mode(MODE_ALTERNATE_SCREEN);
}
fn exit_alternate_grid(&mut self) {
- self.clear_mode(Mode::AlternateScreen);
+ self.clear_mode(MODE_ALTERNATE_SCREEN);
}
fn save_cursor(&mut self) {
@@ -707,16 +704,16 @@ impl Screen {
self.attrs = self.saved_attrs;
}
- fn set_mode(&mut self, mode: Mode) {
- self.modes.insert(mode);
+ fn set_mode(&mut self, mode: u8) {
+ self.modes |= mode;
}
- fn clear_mode(&mut self, mode: Mode) {
- self.modes.remove(mode);
+ fn clear_mode(&mut self, mode: u8) {
+ self.modes &= !mode;
}
- fn mode(&self, mode: Mode) -> bool {
- self.modes.contains(mode)
+ fn mode(&self, mode: u8) -> bool {
+ self.modes & mode != 0
}
fn set_mouse_mode(&mut self, mode: MouseProtocolMode) {
@@ -927,12 +924,12 @@ impl Screen {
// ESC =
fn deckpam(&mut self) {
- self.set_mode(Mode::ApplicationKeypad);
+ self.set_mode(MODE_APPLICATION_KEYPAD);
}
// ESC >
fn deckpnm(&mut self) {
- self.clear_mode(Mode::ApplicationKeypad);
+ self.clear_mode(MODE_APPLICATION_KEYPAD);
}
// ESC M
@@ -1084,10 +1081,10 @@ impl Screen {
fn decset(&mut self, params: &vte::Params) {
for param in params {
match param {
- &[1] => self.set_mode(Mode::ApplicationCursor),
+ &[1] => self.set_mode(MODE_APPLICATION_CURSOR),
&[6] => self.grid_mut().set_origin_mode(true),
&[9] => self.set_mouse_mode(MouseProtocolMode::Press),
- &[25] => self.clear_mode(Mode::HideCursor),
+ &[25] => self.clear_mode(MODE_HIDE_CURSOR),
&[47] => self.enter_alternate_grid(),
&[1000] => {
self.set_mouse_mode(MouseProtocolMode::PressRelease)
@@ -1107,7 +1104,7 @@ impl Screen {
self.alternate_grid.clear();
self.enter_alternate_grid();
}
- &[2004] => self.set_mode(Mode::BracketedPaste),
+ &[2004] => self.set_mode(MODE_BRACKETED_PASTE),
ns => {
if log::log_enabled!(log::Level::Debug) {
let n = if ns.len() == 1 {
@@ -1134,10 +1131,10 @@ impl Screen {
fn decrst(&mut self, params: &vte::Params) {
for param in params {
match param {
- &[1] => self.clear_mode(Mode::ApplicationCursor),
+ &[1] => self.clear_mode(MODE_APPLICATION_CURSOR),
&[6] => self.grid_mut().set_origin_mode(false),
&[9] => self.clear_mouse_mode(MouseProtocolMode::Press),
- &[25] => self.set_mode(Mode::HideCursor),
+ &[25] => self.set_mode(MODE_HIDE_CURSOR),
&[47] => {
self.exit_alternate_grid();
}
@@ -1160,7 +1157,7 @@ impl Screen {
self.exit_alternate_grid();
self.decrc();
}
- &[2004] => self.clear_mode(Mode::BracketedPaste),
+ &[2004] => self.clear_mode(MODE_BRACKETED_PASTE),
ns => {
if log::log_enabled!(log::Level::Debug) {
let n = if ns.len() == 1 {