fall back to stdout if shms don't work

This commit is contained in:
itsjunetime
2025-06-09 21:45:02 -06:00
parent 62c92141e3
commit fc063efd42
4 changed files with 63 additions and 31 deletions
+29 -3
View File
@@ -1,8 +1,14 @@
use std::io::Write;
use std::{io::Write, num::NonZeroU32};
use crossterm::{cursor::MoveTo, event::EventStream, execute};
use crossterm::{
cursor::MoveTo,
event::EventStream,
execute,
terminal::{disable_raw_mode, enable_raw_mode}
};
use image::DynamicImage;
use kittage::{
AsyncInputReader, ImageDimensions, ImageId, PixelFormat,
AsyncInputReader, ImageDimensions, ImageId, NumberOrId, PixelFormat,
action::Action,
delete::{ClearOrDelete, DeleteConfig, WhichToDelete},
display::DisplayConfig,
@@ -55,6 +61,26 @@ pub async fn run_action<'image, 'data, 'es>(
.map(|(_, i)| i)
}
pub async fn do_shms_work(ev_stream: &mut EventStream) -> bool {
let img = DynamicImage::new_rgb8(1, 1);
let pid = std::process::id();
let Ok(mut k_img) = kittage::image::Image::shm_from(img, &format!("__tdf_kittage_test_{pid}"))
else {
return false;
};
// apparently the terminal won't respond to queries unless they have an Id instead of a number
k_img.num_or_id = NumberOrId::Id(NonZeroU32::new(u32::MAX).unwrap());
enable_raw_mode().unwrap();
let res = run_action(Action::Query(&k_img), ev_stream).await;
disable_raw_mode().unwrap();
res.is_ok()
}
pub async fn display_kitty_images<'es>(
images: Vec<(usize, &mut MaybeTransferred, Rect)>,
ev_stream: &'es mut EventStream