This commit is contained in:
Schrottkatze 2026-08-31 15:10:20 +02:00
commit d506f48b6f
2 changed files with 14 additions and 31 deletions

View file

@ -39,6 +39,7 @@ in
pkgs.typst
# `typed` dependencies
pkgs.zathura
pkgs.mupdf
pkgs.inotify-tools
];

View file

@ -1,8 +1,10 @@
#![feature(lock_value_accessors)]
use std::{
fs,
hint::spin_loop,
io,
path::Path,
process::{Command, exit},
process::{Command, Stdio, exit},
sync::{
Arc, Condvar, Mutex,
atomic::{AtomicBool, AtomicU32, Ordering},
@ -48,14 +50,22 @@ fn main() -> std::io::Result<()> {
let pdf_path_ = pdf_path.clone();
let mupdf_pid_ = Arc::clone(&mupdf_pid);
let viewer = args.viewer.unwrap_or("mupdf-x11".to_string());
let viewer = args.viewer.unwrap_or("zathura".to_string());
let pair_mupdf = pair.clone();
thread::spawn(move || {
let mut mupdf = Command::new(&viewer);
mupdf.arg(&pdf_path_);
mupdf
.arg(&pdf_path_)
.stdout(Stdio::null())
.stderr(Stdio::null());
loop {
if !fs::exists(&pdf_path_).unwrap() {
spin_loop();
continue;
}
let Ok(mut mupdf) = mupdf.spawn() else {
break;
};
@ -75,34 +85,6 @@ fn main() -> std::io::Result<()> {
}
});
let pdf_path_ = pdf_path.clone();
let mupdf_pid_ = Arc::clone(&mupdf_pid);
thread::spawn(move || {
let (tx, rx) = channel::<notify::Result<Event>>();
let mut watcher = notify::recommended_watcher(tx).unwrap();
let _ = watcher.watch(Path::new(&pdf_path_), RecursiveMode::NonRecursive);
loop {
let p = rx.recv();
match p {
Ok(Ok(e)) if e.kind.is_modify() || e.kind.is_create() => {
let mupdf_pid = mupdf_pid_.load(Ordering::Relaxed);
if mupdf_pid != 0 {
let mut kill = Command::new("kill");
let _ = kill.arg("-1").arg(mupdf_pid.to_string()).spawn();
}
}
Ok(Ok(e)) if e.kind.is_remove() => {
let _ = watcher.watch(Path::new(&pdf_path_), RecursiveMode::NonRecursive);
}
_ => {}
}
}
});
// the editor?
let pair_editor = pair.clone();
let editor_pid_ = editor_pid.clone();