aboutsummaryrefslogtreecommitdiff
path: root/alacritty_terminal/src/term/mod.rs
diff options
context:
space:
mode:
authorAyose <ayosec@gmail.com>2021-04-02 00:54:28 +0100
committerbetaboon <betaboon@0x80.ninja>2021-08-17 15:46:40 +0200
commit14b0d9067e2ccb47fb84459d0d4ec0fb6bcc493a (patch)
treeef740253e039967c723f40061a04c4f31d4ac9e4 /alacritty_terminal/src/term/mod.rs
parent0fd3793a963015e8f91021e35dbb2169d15c3211 (diff)
downloadr-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.rs31
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)))