diff options
| author | Anton Bobov <anton@bobov.name> | 2026-04-20 13:28:26 +0500 |
|---|---|---|
| committer | Anton Bobov <anton@bobov.name> | 2026-07-24 14:21:46 +0500 |
| commit | 1de46b8a4ad776d1e429785d99a199572db441a1 (patch) | |
| tree | dccec901d9a49ba9c122249f31d4103488c772da /open-as-pdf | |
| parent | 3f781f4c75eac2a582213ad37a742d44e3fb05dd (diff) | |
open-as-pdf: add caching and multiple file support
Diffstat (limited to 'open-as-pdf')
| -rwxr-xr-x | open-as-pdf | 44 |
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" "$@")" |
