mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
50976cec62
https://stackoverflow.com/a/677212/5132088 Signed-off-by: Yury V. Zaytsev <yury@shurup.com>
219 lines
5.7 KiB
Bash
219 lines
5.7 KiB
Bash
#!/bin/sh
|
|
|
|
# $1 - action
|
|
# $2 - type of file
|
|
|
|
action=$1
|
|
filetype=$2
|
|
|
|
[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
|
|
|
|
STAROFFICE_REGEXP='\.(sxw|sdw|stw|sxc|stc|sxi|sti|sxd|std||sxm||sxg)$'
|
|
|
|
staroffice_console() {
|
|
filename=$1;shift
|
|
is_view=$1; shift
|
|
if [ -n "${is_view}" ]; then
|
|
is_view='-dump'
|
|
fi
|
|
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
cd $tmp
|
|
soffice2html.pl "${filename}"
|
|
elinks ${is_view} content.html
|
|
rm -rf "$tmp"
|
|
}
|
|
|
|
get_ooffice_executable() {
|
|
if command -v loffice >/dev/null 2>&1; then
|
|
echo "loffice"
|
|
elif command -v ooffice >/dev/null 2>&1; then
|
|
echo "ooffice"
|
|
else
|
|
echo -n
|
|
fi
|
|
}
|
|
|
|
do_view_action() {
|
|
filetype=$1
|
|
|
|
case "${filetype}" in
|
|
ps)
|
|
ps2ascii "${MC_EXT_FILENAME}"
|
|
;;
|
|
pdf)
|
|
pdftotext -layout -nopgbrk "${MC_EXT_FILENAME}" -
|
|
;;
|
|
odt)
|
|
if [ ` echo "${MC_EXT_FILENAME}" | grep -c "${STAROFFICE_REGEXP}"` -ne 0 ]; then
|
|
staroffice_console "${MC_EXT_FILENAME}" "view"
|
|
else
|
|
odt2txt "${MC_EXT_FILENAME}"
|
|
fi
|
|
;;
|
|
msdoc)
|
|
if command -v wvHtml >/dev/null 2>&1; then
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
wvHtml "${MC_EXT_FILENAME}" --targetdir="$tmp" page.html
|
|
elinks -dump "$tmp/page.html"
|
|
rm -rf "$tmp"
|
|
elif command -v antiword >/dev/null 2>&1; then
|
|
antiword -t "${MC_EXT_FILENAME}"
|
|
elif command -v catdoc >/dev/null 2>&1; then
|
|
catdoc -w "${MC_EXT_FILENAME}"
|
|
elif command -v word2x >/dev/null 2>&1; then
|
|
word2x -f text "${MC_EXT_FILENAME}" -
|
|
else
|
|
strings "${MC_EXT_FILENAME}"
|
|
fi
|
|
;;
|
|
msxls)
|
|
if command -v xlhtml >/dev/null 2>&1; then
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
xlhtml -a "${MC_EXT_FILENAME}" > "$tmp/page.html"
|
|
elinks -dump "$tmp/page.html"
|
|
rm -rf "$tmp"
|
|
elif command -v xls2csv >/dev/null 2>&1; then
|
|
xls2csv "${MC_EXT_FILENAME}"
|
|
else
|
|
strings "${MC_EXT_FILENAME}"
|
|
fi
|
|
;;
|
|
dvi)
|
|
command -v dvi2tty >/dev/null 2>&1 && \
|
|
dvi2tty "${MC_EXT_FILENAME}" || \
|
|
catdvi "${MC_EXT_FILENAME}"
|
|
;;
|
|
djvu)
|
|
djvused -e print-pure-txt "${MC_EXT_FILENAME}"
|
|
;;
|
|
ebook)
|
|
einfo -v "${MC_EXT_FILENAME}"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
}
|
|
|
|
do_open_action() {
|
|
filetype=$1
|
|
|
|
case "${filetype}" in
|
|
ps)
|
|
if [ -n "$DISPLAY" ]; then
|
|
(gv "${MC_EXT_FILENAME}" &)
|
|
else
|
|
ps2ascii "${MC_EXT_FILENAME}" | ${PAGER:-more}
|
|
fi
|
|
;;
|
|
pdf)
|
|
if [ ! -n "$DISPLAY" ]; then
|
|
pdftotext -layout -nopgbrk "${MC_EXT_FILENAME}" - | ${PAGER:-more}
|
|
elif see > /dev/null 2>&1; then
|
|
(see "${MC_EXT_FILENAME}" &)
|
|
else
|
|
(xpdf "${MC_EXT_FILENAME}" &)
|
|
fi
|
|
#(acroread "${MC_EXT_FILENAME}" &)
|
|
#(ghostview "${MC_EXT_FILENAME}" &)
|
|
;;
|
|
ooffice)
|
|
if [ -n "$DISPLAY" ]; then
|
|
OOFFICE=`get_ooffice_executable`
|
|
if [ -n "${OOFFICE}" ]; then
|
|
(${OOFFICE} "${MC_EXT_FILENAME}" &)
|
|
fi
|
|
else
|
|
if [ `echo "${MC_EXT_FILENAME}" | grep -c "${STAROFFICE_REGEXP}"` -ne 0 ]; then
|
|
staroffice_console "${MC_EXT_FILENAME}"
|
|
else
|
|
odt2txt "${MC_EXT_FILENAME}" | ${PAGER:-more}
|
|
fi
|
|
fi
|
|
;;
|
|
abw)
|
|
(abiword "${MC_EXT_FILENAME}" &)
|
|
;;
|
|
gnumeric)
|
|
(gnumeric "${MC_EXT_FILENAME}" &)
|
|
;;
|
|
msdoc)
|
|
if [ -n "$DISPLAY" ]; then
|
|
OOFFICE=`get_ooffice_executable`
|
|
if [ -n "${OOFFICE}" ]; then
|
|
(${OOFFICE} "${MC_EXT_FILENAME}" &)
|
|
else
|
|
(abiword "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
|
|
fi
|
|
else
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
wvHtml "${MC_EXT_FILENAME}" --targetdir="$tmp" page.html -1
|
|
elinks "$tmp/page.html"
|
|
rm -rf "$tmp"
|
|
fi
|
|
;;
|
|
msxls)
|
|
if [ -n "$DISPLAY" ]; then
|
|
OOFFICE=`get_ooffice_executable`
|
|
if [ -n "${OOFFICE}" ]; then
|
|
(${OOFFICE} "${MC_EXT_FILENAME}" &)
|
|
else
|
|
(gnumeric "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
|
|
fi
|
|
else
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
xlhtml -a "${MC_EXT_FILENAME}" > "$tmp/page.html"
|
|
elinks "$tmp/page.html"
|
|
rm -rf "$tmp"
|
|
fi
|
|
;;
|
|
msppt)
|
|
if [ -n "$DISPLAY" ]; then
|
|
OOFFICE=`get_ooffice_executable`
|
|
if [ -n "${OOFFICE}" ]; then
|
|
(${OOFFICE} "${MC_EXT_FILENAME}" &)
|
|
fi
|
|
else
|
|
tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
|
|
ppthtml "${MC_EXT_FILENAME}" > "$tmp/page.html"
|
|
elinks "$tmp/page.html"
|
|
rm -rf "$tmp"
|
|
fi
|
|
;;
|
|
framemaker)
|
|
fmclient -f "${MC_EXT_FILENAME}"
|
|
;;
|
|
dvi)
|
|
if [ -n "$DISPLAY" ]; then
|
|
(xdvi "${MC_EXT_FILENAME}" &)
|
|
else
|
|
dvisvga "${MC_EXT_FILENAME}" || \
|
|
dvi2tty "${MC_EXT_FILENAME}" | ${PAGER:-more}
|
|
fi
|
|
;;
|
|
djvu)
|
|
djview "${MC_EXT_FILENAME}" &
|
|
;;
|
|
comic)
|
|
cbrpager "${MC_EXT_FILENAME}" &
|
|
;;
|
|
ebook)
|
|
lucidor "${MC_EXT_FILENAME}" >/dev/null &
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
}
|
|
|
|
case "${action}" in
|
|
view)
|
|
do_view_action "${filetype}"
|
|
;;
|
|
open)
|
|
("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
|
|
do_open_action "${filetype}"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|