aboutsummaryrefslogtreecommitdiff
path: root/alacritty_terminal/src/term/mod.rs
diff options
context:
space:
mode:
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)))