mirror of
https://forge.katzen.cafe/schrottkatze/nix-configs.git
synced 2026-09-17 01:17:28 +02:00
zathura
This commit is contained in:
parent
f061fa446f
commit
d506f48b6f
2 changed files with 14 additions and 31 deletions
|
|
@ -39,6 +39,7 @@ in
|
||||||
pkgs.typst
|
pkgs.typst
|
||||||
|
|
||||||
# `typed` dependencies
|
# `typed` dependencies
|
||||||
|
pkgs.zathura
|
||||||
pkgs.mupdf
|
pkgs.mupdf
|
||||||
pkgs.inotify-tools
|
pkgs.inotify-tools
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
#![feature(lock_value_accessors)]
|
#![feature(lock_value_accessors)]
|
||||||
use std::{
|
use std::{
|
||||||
|
fs,
|
||||||
|
hint::spin_loop,
|
||||||
io,
|
io,
|
||||||
path::Path,
|
path::Path,
|
||||||
process::{Command, exit},
|
process::{Command, Stdio, exit},
|
||||||
sync::{
|
sync::{
|
||||||
Arc, Condvar, Mutex,
|
Arc, Condvar, Mutex,
|
||||||
atomic::{AtomicBool, AtomicU32, Ordering},
|
atomic::{AtomicBool, AtomicU32, Ordering},
|
||||||
|
|
@ -48,14 +50,22 @@ fn main() -> std::io::Result<()> {
|
||||||
|
|
||||||
let pdf_path_ = pdf_path.clone();
|
let pdf_path_ = pdf_path.clone();
|
||||||
let mupdf_pid_ = Arc::clone(&mupdf_pid);
|
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();
|
let pair_mupdf = pair.clone();
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let mut mupdf = Command::new(&viewer);
|
let mut mupdf = Command::new(&viewer);
|
||||||
mupdf.arg(&pdf_path_);
|
mupdf
|
||||||
|
.arg(&pdf_path_)
|
||||||
|
.stdout(Stdio::null())
|
||||||
|
.stderr(Stdio::null());
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
if !fs::exists(&pdf_path_).unwrap() {
|
||||||
|
spin_loop();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let Ok(mut mupdf) = mupdf.spawn() else {
|
let Ok(mut mupdf) = mupdf.spawn() else {
|
||||||
break;
|
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?
|
// the editor?
|
||||||
let pair_editor = pair.clone();
|
let pair_editor = pair.clone();
|
||||||
let editor_pid_ = editor_pid.clone();
|
let editor_pid_ = editor_pid.clone();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue