From fea8f2479e5334d78db423abdee1da565eafbaa5 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Sat, 20 Jun 2020 10:06:50 -0700 Subject: [PATCH] termwiz: add Display impl for device control mode --- termwiz/src/escape/mod.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/termwiz/src/escape/mod.rs b/termwiz/src/escape/mod.rs index 9760fb441..b5a4544be 100644 --- a/termwiz/src/escape/mod.rs +++ b/termwiz/src/escape/mod.rs @@ -42,7 +42,7 @@ impl Display for Action { match self { Action::Print(c) => write!(f, "{}", c), Action::Control(c) => f.write_char(*c as u8 as char), - Action::DeviceControl(_) => unimplemented!(), + Action::DeviceControl(c) => c.fmt(f), Action::OperatingSystemCommand(osc) => osc.fmt(f), Action::CSI(csi) => csi.fmt(f), Action::Esc(esc) => esc.fmt(f), @@ -94,6 +94,28 @@ pub enum DeviceControlMode { Data(u8), } +impl Display for DeviceControlMode { + fn fmt(&self, f: &mut Formatter) -> Result<(), FmtError> { + match self { + Self::Enter(mode) => { + write!(f, "\x1bP")?; + for (idx, p) in mode.params.iter().enumerate() { + if idx > 0 { + write!(f, ";")?; + } + write!(f, "{}", p)?; + } + for b in &mode.intermediates { + f.write_char(*b as char)?; + } + f.write_char(mode.byte as char) + } + Self::Exit => write!(f, "\x1b\\"), + Self::Data(c) => f.write_char(*c as char), + } + } +} + impl std::fmt::Debug for DeviceControlMode { fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { match self {