diff options
Diffstat (limited to 'alacritty_terminal/src/term/mod.rs')
-rw-r--r-- | alacritty_terminal/src/term/mod.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs index 1e87ec8a..63a2e282 100644 --- a/alacritty_terminal/src/term/mod.rs +++ b/alacritty_terminal/src/term/mod.rs @@ -1771,6 +1771,37 @@ impl<T: EventListener> Handler for Term<T> { self.event_proxy.send_event(Event::PtyWrite(text)); } + #[inline] + fn graphics_attribute<W: io::Write>(&mut self, writer: &mut W, pi: u16, pa: u16) { + // From Xterm documentation: + // + // Pi = 1 -> item is number of color registers. + // Pi = 2 -> item is Sixel graphics geometry (in pixels). + // + // Pa = 1 -> read attribute. + // Pa = 4 -> read the maximum allowed value. + // + // Any other request reports an error. + + let (ps, pv) = if pa == 1 || pa == 4 { + match pi { + 1 => (0, &[sixel::MAX_COLOR_REGISTERS][..]), + 2 => (0, &[MAX_GRAPHIC_DIMENSIONS.0, MAX_GRAPHIC_DIMENSIONS.1][..]), + _ => (1, &[][..]), // Report error in Pi + } + } else { + (2, &[][..]) // Report error in Pa + }; + + let _ = write!(writer, "\x1b[?{};{}", pi, ps); + + for item in pv { + let _ = write!(writer, ";{}", item); + } + + let _ = write!(writer, "S"); + } + fn start_sixel_graphic(&mut self, params: &Params) -> Option<Box<sixel::Parser>> { let palette = self.graphics.sixel_shared_palette.take(); Some(Box::new(sixel::Parser::new(params, palette))) |