243 lines
5.6 KiB
Plaintext
Executable File
243 lines
5.6 KiB
Plaintext
Executable File
# Opener for lf
|
|
|
|
# En general, deberías delegar la apertura de ficheros a tu abridor de
|
|
# recursos (e.g. xdg-open, mimeo), recomiendo ponerlo en la variable de
|
|
# entorno $OPENER y luego configurar sus reglas de asociaciones entre tipos
|
|
# MIME y lanzadores .desktop (e.g. ~/.config/applications/mimeapps.list)
|
|
# Sin embargo, acá se puede programar comportamiento más avanzado basado
|
|
# en más características de los ficheros y/o específicamente para lf
|
|
# Tipos MIME IANA oficiales: https://www.iana.org/assignments/media-types/media-types.xhtml
|
|
|
|
cmd open ${{
|
|
|
|
# Demonizador de comandos, en orden de preferencia
|
|
dem() {
|
|
{ setsid -f "$@" >/dev/null 2>&1& } \
|
|
|| ({ nohup "$@" >/dev/null 2>&1& } &) \
|
|
|| (exec "$@" >/dev/null 2>&1&)
|
|
}
|
|
|
|
real_f="$(readlink -f $f || realpath $f)" \
|
|
|
|
mime_type="$(\
|
|
exiftool -s3 -MIMEType "$real_f" 2>/dev/null \
|
|
|| file --dereference -b --mime-type -- "$real_f" 2>/dev/null
|
|
)"
|
|
|
|
case "$mime_type" in
|
|
(application/pdf | application/postscript | image/vnd.djvu | application/epub*)
|
|
dem "${READER:-zathura}" $fx
|
|
;;
|
|
(text/html)
|
|
case "${f##*.}" in
|
|
(xls) dem localc $f ;;
|
|
(*) "${EDITOR:-nvim}" $fx
|
|
esac
|
|
;;
|
|
(text/troff)
|
|
case "${f##*.}" in
|
|
([0-9] | [01]p | [23]*) man $fx ;;
|
|
(*) "${EDITOR:-nvim}" $fx
|
|
esac
|
|
;;
|
|
( text/* | application/json | application/javascript | \
|
|
application/pgp-encrypted | inode/x-empty | application/octet-stream | \
|
|
application/x-gettext-translation )
|
|
"${EDITOR:-nvim}" $fx
|
|
;;
|
|
(image/x-*)
|
|
dem "${IMAGE_EDITOR:-gimp}" $fx
|
|
;;
|
|
(image/* )
|
|
case "$(tty)" in
|
|
("/dev/tty"*) # En tty imágenes pueden ser mostradas con mpv
|
|
"${MPV:-mpv}" --keep-open $fx
|
|
;;
|
|
(*) dem "${IMAGE_VIEWER:-vimiv}" $fx
|
|
esac
|
|
;;
|
|
(audio/*)
|
|
case "$(tty)" in
|
|
("/dev/tty"*) # No demonizar en tty
|
|
"${AUDIO_PLAYER:-"${MPV:-mpv}"}" --audio-display=no $fx
|
|
;;
|
|
(*) dem "${TERMINAL:-alacritty}" -e "${AUDIO_PLAYER:-"${MPV:-mpv}"}" --audio-display=no $fx
|
|
esac
|
|
;;
|
|
(video/*)
|
|
case "$(tty)" in
|
|
("/dev/tty"*) # No demonizar en tty
|
|
"${VIDEO_PLAYER:-"${MPV:-mpv}"}" $fx
|
|
;;
|
|
# TODO: handle video/webm like previewer
|
|
(*) dem "${VIDEO_PLAYER:-"${MPV:-mpv}"}" $fx
|
|
esac
|
|
;;
|
|
(application/vnd.sqlite3)
|
|
sqlite3 $fx
|
|
;;
|
|
# text/xml)
|
|
# ;;
|
|
(application/zip)
|
|
case "${f##*.}" in
|
|
(kra) dem krita $f ;;
|
|
(*)
|
|
for f in $fx; do
|
|
"${OPENER:-xdg-open}" $f
|
|
done
|
|
esac
|
|
;;
|
|
(*)
|
|
case "$f" in
|
|
# TODO: redo this with mime types, not extensions
|
|
( *.tar.bz | *.tar.bz2 | *.tbz | \
|
|
*.tbz2 | *.tar.gz | *.tgz | *.tar.lzma | \
|
|
*.tar.xz | *.txz | *.zip | *.rar | *.iso)
|
|
mntdir="$f-archivemount"
|
|
if ! [ -d "$mntdir" ]; then
|
|
mkdir -- "$mntdir"
|
|
archivemount "$f" "$mntdir"
|
|
printf -- "%s\n" "$mntdir" >> "/tmp/__lf_archivemount_$id"
|
|
fi
|
|
lf -remote "send $id cd '$mntdir'"
|
|
lf -remote "send $id reload"
|
|
;;
|
|
esac
|
|
|
|
# Delegate opening to resource opener
|
|
|
|
#pwhich() {
|
|
# hash "$1" >/dev/null 2>&1 && command -v -- "$1"
|
|
#}
|
|
#[ "$OPENER" ] || OPENER=$(pwhich xdg-open)
|
|
for f in $fx; do
|
|
dem "${OPENER:-xdg-open}" $f
|
|
#"${OPENER:-"${EDITOR:-nvim}"}" $f
|
|
# ${OPENER:-"xdg-open"} $f || "${EDITOR:-"nvim"}" $f
|
|
done
|
|
;;
|
|
esac
|
|
}}
|
|
|
|
# Bug: In my AwesomeWM some JPGs or webm don't show the window until is tiled
|
|
|
|
cmd openwith ${{
|
|
|
|
dem() {
|
|
{ setsid -f "$@" >/dev/null 2>&1& } \
|
|
|| ({ nohup "$@" >/dev/null 2>&1& } &) \
|
|
|| (exec "$@" >/dev/null 2>&1&)
|
|
}
|
|
|
|
real_f="$(readlink -f $f || realpath $f)" \
|
|
mime_type="$(\
|
|
exiftool -s3 -MIMEType "$real_f" \
|
|
|| file --dereference -b --mime-type -- "$real_f"
|
|
)"
|
|
|
|
menu_select() {
|
|
nl -nln | fzf --with-nth 2.. | cut -d' ' -f1
|
|
}
|
|
|
|
# TODO: hacer que se puedan abrir con múltiples a la vez (fzf +m)
|
|
case "$mime_type" in
|
|
( text/* | application/json | application/javascript | \
|
|
application/pgp-encrypted | inode/x-empty | application/octet-stream )
|
|
app=$(menu_select <<-\EOF
|
|
$EDITOR
|
|
$EDITOR (new terminal)
|
|
nano
|
|
nano (new terminal)
|
|
EOF
|
|
)
|
|
case "$app" in
|
|
(1) "${EDITOR:-nvim}" $fx ;;
|
|
(2) dem "${TERMINAL:-alacritty}" -e "$EDITOR" $fx ;;
|
|
(3) nano $fx ;;
|
|
(4) dem "${TERMINAL:-alacritty}" -e nano $fx ;;
|
|
esac
|
|
;;
|
|
|
|
(image/svg+xml | image/png | image/jpeg | image/gif )
|
|
app=$(menu_select <<-\EOF
|
|
vimiv
|
|
gimp
|
|
mpv
|
|
krita
|
|
inkscape
|
|
EOF
|
|
)
|
|
case "$app" in
|
|
(1) dem vimiv $fx ;;
|
|
(2) dem gimp $fx ;;
|
|
(3)
|
|
case "$(tty)" in
|
|
# Demonizing on tty makes it impossible to quit
|
|
("/dev/tty"*) "${MPV:-mpv}" --keep-open=yes $fx ;;
|
|
(*) dem "${MPV:-mpv}" --keep-open=yes $fx ;;
|
|
esac
|
|
;;
|
|
(4) dem krita $fx ;;
|
|
(5) dem inkscape $fx ;;
|
|
esac
|
|
;;
|
|
|
|
(image/x-*)
|
|
app=$(menu_select <<-\EOF
|
|
gimp
|
|
vimiv
|
|
mpv
|
|
EOF
|
|
)
|
|
case "$app" in
|
|
(1) dem gimp $fx ;;
|
|
(2) dem vimiv $fx ;;
|
|
(3)
|
|
case "$(tty)" in
|
|
# Demonizing on tty makes it impossible to quit
|
|
("/dev/tty"*) "${MPV:-mpv}" --keep-open=yes $fx ;;
|
|
(*) dem "${MPV:-mpv}" --keep-open=yes $fx ;;
|
|
esac
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
(audio/*)
|
|
app=$(menu_select <<-\EOF
|
|
mpv (force terminal)
|
|
mpv (background)
|
|
mpv (background, only audio)
|
|
mpv (foreground)
|
|
mpv (foreground, only audio)
|
|
mpv (force window)
|
|
EOF
|
|
)
|
|
case "$app" in
|
|
(1) dem "${TERMINAL:-alacritty}" -e "$MPV" --audio-display=no $fx ;;
|
|
(2) dem "${MPV:-mpv}" $fx ;;
|
|
(3) dem "${MPV:-mpv}" --audio-display=no $fx ;;
|
|
(4) "${MPV:-mpv}" $fx ;;
|
|
(5) echo; "${MPV:-mpv}" --audio-display=no $fx ;;
|
|
(6) dem "${MPV:-mpv}" --force-window $fx ;;
|
|
esac
|
|
;;
|
|
|
|
(video/*)
|
|
app=$(menu_select <<-\EOF
|
|
mpv
|
|
mpv (background, only audio)
|
|
mpv (foreground, only audio)
|
|
kdenlive
|
|
EOF
|
|
)
|
|
case "$app" in
|
|
(1) dem "${MPV:-mpv}" $fx ;;
|
|
(2) dem "${MPV:-mpv}" --video=no --audio-display=no $fx ;;
|
|
(3) echo; "${MPV:-mpv}" --video=no --audio-display=no $fx ;;
|
|
(4) dem "${VIDEO_EDITOR:-kdenlive}" $fx ;;
|
|
esac
|
|
esac
|
|
}}
|
|
|
|
# vim: ft=lf
|