This commit is contained in:
bendn 2024-03-13 11:45:14 +07:00
parent b1e75f0548
commit 3a1b6a3435
2 changed files with 23 additions and 24 deletions

View file

@ -44,28 +44,30 @@ impl<T: AsRef<[u8]>, const N: usize> Sixel<T, N> {
let q = { let q = {
extern crate libc; extern crate libc;
// SAFETY: is stdout a tty // SAFETY: is stdout a tty
(unsafe { libc::isatty(0) } == 1) (unsafe { libc::isatty(1) } == 1)
}; };
#[cfg(not(unix))] #[cfg(not(unix))]
let q = true; let q = true;
let colors = q let colors = q
.then_some(super::query("[?1;1;0S").and_then(|x| { .then(|| {
// [?1;0;65536S super::query("[?1;1;0S").and_then(|x| {
if let [b'?', b'1', b';', b'0', b';', n @ ..] = x.as_bytes() { // [?1;0;65536S
Some( if let [b'?', b'1', b';', b'0', b';', n @ ..] = x.as_bytes() {
n.iter() Some(
.copied() n.iter()
.take_while(u8::is_ascii_digit) .copied()
.fold(0u16, |acc, x| { .take_while(u8::is_ascii_digit)
acc.saturating_mul(10).saturating_add((x - b'0') as u16) .fold(0u16, |acc, x| {
}) acc.saturating_mul(10).saturating_add((x - b'0') as u16)
.max(64) })
.min(0xfff), .max(64)
) .min(0xfff),
} else { )
None } else {
} None
})) }
})
})
.flatten() .flatten()
.unwrap_or(255); .unwrap_or(255);
to.write_str("Pq")?; to.write_str("Pq")?;
@ -104,13 +106,10 @@ impl<T: AsRef<[u8]>, const N: usize> Sixel<T, N> {
write!(to, "#{i};2;{r};{g};{b}")?; write!(to, "#{i};2;{r};{g};{b}")?;
} }
for sixel_row in pixels.chunks_exact(self.width() as usize * 6).map(|x| { for sixel_row in pixels.chunks_exact(self.width() as usize * 6).map(|x| {
let mut x = x x.iter()
.iter()
.zip(0u32..) .zip(0u32..)
.map(|(&p, j)| (p, (j % self.width(), j / self.width()))) .map(|(&p, j)| (p, (j % self.width(), j / self.width())))
.collect::<Vec<_>>(); .collect::<Vec<_>>()
x.sort_unstable();
x
}) { }) {
// extracted // extracted
for samples in Grouped(&sixel_row, |r| r.0) { for samples in Grouped(&sixel_row, |r| r.0) {

File diff suppressed because one or more lines are too long