summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Bobov <anton@bobov.name>2026-04-20 13:28:26 +0500
committerAnton Bobov <anton@bobov.name>2026-07-24 14:21:46 +0500
commit1de46b8a4ad776d1e429785d99a199572db441a1 (patch)
treedccec901d9a49ba9c122249f31d4103488c772da
parent3f781f4c75eac2a582213ad37a742d44e3fb05dd (diff)
open-as-pdf: add caching and multiple file support
-rwxr-xr-xopen-as-pdf44
1 files changed, 35 insertions, 9 deletions
diff --git a/open-as-pdf b/open-as-pdf
index 8d09ad2..99e5e22 100755
--- a/open-as-pdf
+++ b/open-as-pdf
@@ -2,16 +2,42 @@
set -euo pipefail
-main() {
- if [ $# -eq 0 ]; then
- echo First arguments must be a file.
- exit 1
- fi
+# @describe Convert document files to PDF and open them.
+# @arg files+ Input document files (e.g., .docx, .xlsx, .pptx) to convert and view as PDF
+# @flag -n --no-cache Prevent caching of converted PDFs
+# @meta require-tools sha512sum,soffice,xdg-open
+# @env OPEN_AS_PDF_CACHE_DIR Cache directory (default: $XDG_CACHE_HOME/open-as-pdf)
+
+_open_as_pdf() {
+ if [ -n "${argc_no_cache:-}" ]; then
+ OUTPUT_DIR=$(mktemp --directory)
+ trap 'rm -rf "$OUTPUT_DIR"' EXIT
+
+ soffice --convert-to pdf --outdir "$OUTPUT_DIR" "$1"
+ xdg-open "$OUTPUT_DIR"/*.pdf && sleep 5
+ else
+ local file_hash file_cach_dir
+ file_hash=$(sha512sum "$1" | cut -d' ' -f 1)
+ file_cach_dir="${OPEN_AS_PDF_CACHE_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/open-as-pdf}/$file_hash"
+
+ if [ ! -d "$file_cach_dir" ]; then
+ OUTPUT_DIR=$(mktemp --directory)
+ trap 'rm -rf "$OUTPUT_DIR"' EXIT
- OUTPUT_DIR=$(mktemp --directory)
- trap 'rm -rf "$OUTPUT_DIR"' EXIT
+ soffice --convert-to pdf --outdir "$OUTPUT_DIR" "$1"
- soffice --convert-to pdf --outdir "$OUTPUT_DIR" "$1" && xdg-open "$OUTPUT_DIR"/*.pdf && sleep 5
+ mkdir -p "$file_cach_dir"
+ mv "$OUTPUT_DIR"/*.pdf "$file_cach_dir"
+ fi
+
+ xdg-open "$file_cach_dir"/*.pdf
+ fi
+}
+
+main() {
+ for file in "${argc_files[@]?}"; do
+ _open_as_pdf "$file"
+ done
}
-main "$@"
+eval "$(argc --argc-eval "$0" "$@")"