b0073c87c8
PR: 153398 Submitted by: Alex Kozlov <spam@rm-rf.kiev.ua> (maintainer) Feature safe: yes
93 lines
1.8 KiB
Bash
93 lines
1.8 KiB
Bash
#!/bin/sh
|
|
|
|
xwdcommon='-nobdrs'
|
|
xwdroot='-root'
|
|
|
|
INFMT=pnm
|
|
OUTFMT=png
|
|
STOREDIR="${HOME}/.screenshots"
|
|
SHOTDATE="$(date +%Y.%m.%d-%H.%M.%S)"
|
|
|
|
have()
|
|
{
|
|
type $1 >/dev/null 2>&1 && return 0
|
|
}
|
|
|
|
parse_options()
|
|
{
|
|
local OPT OPTARG OPTIND fmt fmtlist prefix
|
|
|
|
while getopts d:f:bhlqs OPT; do
|
|
# escape meta
|
|
OPTARG=${OPTARG%%[;\\\$]*}
|
|
|
|
case ${OPT} in
|
|
b) xwdcommon="${xwdcommon} -frame" ;;
|
|
d) delay="${OPTARG}" ;;
|
|
f)
|
|
OUTFMT="${OPTARG}"
|
|
unset INFMT
|
|
|
|
for fmt in pnm pbm pgm ppm; do
|
|
have "${fmt}to${OUTFMT}" && { INFMT=${fmt}; break; }
|
|
done
|
|
|
|
[ -z "${INFMT}" ] && usage
|
|
;;
|
|
l)
|
|
prefix=$(type ppmtoppm 2>/dev/null | \
|
|
sed 's:ppmtoppm is \(.*\)ppmtoppm:\1:')
|
|
if [ -z "${prefix}" ]; then
|
|
echo 'Cannot find image converters. Make sure that netpbm are installed'
|
|
exit 1
|
|
fi
|
|
|
|
fmtlist=$(echo ${prefix}/p[nbgp]mto* | tr ' ' '\n' | \
|
|
sed -E 's:^.*/(pnm|pbm|pgm|ppm)to::g')
|
|
echo Supported output formats:
|
|
echo ${fmtlist}
|
|
exit 0
|
|
;;
|
|
q) xwdcommon="${xwdcommon} -silent";;
|
|
s) unset xwdroot ;;
|
|
*) usage ;;
|
|
esac
|
|
done
|
|
|
|
OPTC=$((${OPTIND} - 1))
|
|
}
|
|
|
|
usage()
|
|
{
|
|
echo "usage: ${0##*/} [-bhlqs] [-d sec] [-f outfmt] [shotname]"
|
|
echo ' -b when selecting a window, grab wm border too'
|
|
echo ' -d wait sec seconds before taking a shot'
|
|
echo ' -f set output format'
|
|
echo ' -h display this help and exit'
|
|
echo ' -l list output formats'
|
|
echo ' -q be silent'
|
|
echo ' -s interactively choose a window'
|
|
echo
|
|
echo "By default screenshots stored in ${STOREDIR}"
|
|
echo
|
|
exit 1
|
|
}
|
|
|
|
parse_options ${1+"$@"}
|
|
shift ${OPTC}
|
|
|
|
if [ -z ${@+1} ]; then
|
|
SHOTNAME="${STOREDIR}/screenshot-${SHOTDATE}.${OUTFMT}"
|
|
else
|
|
SHOTNAME=$1
|
|
shift
|
|
|
|
[ -z ${@+1} ] || usage
|
|
fi
|
|
|
|
[ -d "${STOREDIR}" ] || mkdir "${STOREDIR}"
|
|
|
|
[ -n "${delay}" ] && sleep "${delay}"
|
|
|
|
xwd ${xwdcommon} ${xwdroot} | xwdtopnm 2>/dev/null | \
|
|
"${INFMT}to${OUTFMT}" 2>/dev/null > "${SHOTNAME}"
|