diff options
author | Ayose <ayosec@gmail.com> | 2021-04-02 00:54:28 +0100 |
---|---|---|
committer | betaboon <betaboon@0x80.ninja> | 2021-08-17 15:46:40 +0200 |
commit | 14b0d9067e2ccb47fb84459d0d4ec0fb6bcc493a (patch) | |
tree | ef740253e039967c723f40061a04c4f31d4ac9e4 /alacritty_terminal/src/term/mod.rs | |
parent | 0fd3793a963015e8f91021e35dbb2169d15c3211 (diff) | |
download | r-alacritty-14b0d9067e2ccb47fb84459d0d4ec0fb6bcc493a.tar.gz r-alacritty-14b0d9067e2ccb47fb84459d0d4ec0fb6bcc493a.tar.bz2 r-alacritty-14b0d9067e2ccb47fb84459d0d4ec0fb6bcc493a.zip |
Implementation of the XTSMGRAPHICS sequence.
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))) |