107 lines
3.2 KiB
Plaintext
107 lines
3.2 KiB
Plaintext
|
#!/bin/bash -pe
|
||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||
|
# Copyright 2024, Gerrit-John Los <los@lugons.org>
|
||
|
|
||
|
midi() { xterm -e timidity "$@" ; }
|
||
|
image() { display -b "$@" ; }
|
||
|
excel() { xls2lst "$@" |tcol |less ; }
|
||
|
epub() { einfo -pp "$@" |w3m -T text/html ; }
|
||
|
djvu() {
|
||
|
djview4 \
|
||
|
-geometry 800x1025-0+0 \
|
||
|
-zoom=page \
|
||
|
-layout=single -style=motif \
|
||
|
-sidebar=no -toolbar=no
|
||
|
}
|
||
|
|
||
|
if [ "$1" = '-H' ] ;then
|
||
|
shift 1
|
||
|
video() { mpv -H --geometry=+0+0 -- "$@" ; }
|
||
|
movie() { mpv -H --geometry=+0+0 -fs -- "$@" ; }
|
||
|
else
|
||
|
video() { mpv --geometry=+0+0 -- "$@" ; }
|
||
|
movie() { mpv --geometry=+0+0 -fs -- "$@" ; }
|
||
|
fi
|
||
|
|
||
|
code=0
|
||
|
shopt -s extglob
|
||
|
for x in "$@" ;do
|
||
|
[ -f "$x" ] ||
|
||
|
{ [ -f "${x%.part}" ] && x="${x%.part}" ; } ||
|
||
|
{ [ -f "${x}.part" ] && x="${x}.part" ; } ||
|
||
|
{ : <"$x" ; continue ; }
|
||
|
magic=($(file --mime --uncompress --brief --dereference "$x"))
|
||
|
case "${magic[0]%;}" in
|
||
|
application/x-decompression-error-gzip-Stdin-has-more-than-one-entry--rest-ignored)
|
||
|
magic=($(file --mime --brief --dereference "$x"))
|
||
|
;;
|
||
|
esac
|
||
|
app=(unknown)
|
||
|
case "${magic[0]%;}" in
|
||
|
audio/@(x-flac|mpeg|mp4|ogg)) app=(mocp -a) ;;
|
||
|
audio/@(x-hx-aac-adts|vnd.dolby.dd-raw)) app=(mocp -a) ;;
|
||
|
audio/midi) app=midi ;;
|
||
|
audio/x-wav) app=(mocp -a) ;;
|
||
|
application/epub+zip) app=epub ;;
|
||
|
application/msword) app=(lowriter --quickstart) ;;
|
||
|
application/@(octet-stream|ogg))
|
||
|
magic[2]="$(file --uncompress --brief --dereference "$x")"
|
||
|
case "${magic[2]}" in
|
||
|
Ogg\ data,\ Theora\ video*) app=(movie) ;;
|
||
|
Ogg\ data,\ Skeleton*) app=(video) ;;
|
||
|
Ogg\ data,\ Vorbis\ audio*) app=(mocp -a) ;;
|
||
|
MPEG\ ADTS,\ layer\ III*) app=(mocp -a) ;;
|
||
|
ATSC\ A/52*) app=(mocp -a) ;;
|
||
|
Matroska\ data) app=(movie) ;;
|
||
|
EBML\ file,\ creator\ matroska) app=(movie) ;;
|
||
|
ISO\ Media,\ MPEG*) app=(movie) ;;
|
||
|
ISO\ Media) app=(movie) ;;
|
||
|
Mobipocket\ E-book\ *) app=fbreader ;;
|
||
|
Ogg\ data)
|
||
|
case "$x" in
|
||
|
*.ogm) app=(movie) ;;
|
||
|
esac
|
||
|
;;
|
||
|
data)
|
||
|
case "$x" in
|
||
|
*.mkv) app=(movie) ;;
|
||
|
*.webm) app=(video) ;;
|
||
|
esac
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
application/pdf) app=(xpdf -z width) ;;
|
||
|
application/postscript) app=gv ;;
|
||
|
application/vnd.ms-excel) app=excel ;;
|
||
|
application/x-directory) app=recurse ;;
|
||
|
application/x-empty) app=ignore ;;
|
||
|
application/x-tar) app=view ;;
|
||
|
image/@(jpeg|png|gif|bmp|avif)) app=image ;;
|
||
|
image/x-ms-bmp) app=image ;;
|
||
|
image/vnd.djvu)i app=djvu ;;
|
||
|
message/news) app=view ;;
|
||
|
text/html) app=www ;;
|
||
|
text/*)
|
||
|
case "${magic[2]%;}" in
|
||
|
*=application/epub+zip) app=epub ;;
|
||
|
*=application/vnd.oasis.opendocument.text)
|
||
|
app=(lowriter --quickstart)
|
||
|
;;
|
||
|
*) app=view ;;
|
||
|
esac
|
||
|
;;
|
||
|
video/@(mpeg|mp2p|quicktime|x-msvideo|x-ms-asf|x-matroska|x-m4v))
|
||
|
app=(movie)
|
||
|
;;
|
||
|
video/@(x-flv|mp4)|application/x-shockwave-flash) app=(video) ;;
|
||
|
video/@(x-ms-asf|webm|ogg)) app=(video) ;;
|
||
|
*)
|
||
|
echo "${0##*/}: $x: don't know how to handle '$magic'" 1>&2
|
||
|
code=1
|
||
|
continue
|
||
|
esac
|
||
|
"${app[@]}" "$x"
|
||
|
done
|
||
|
exit $code
|
||
|
|