Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- #
- # ScreenCAP Helper - a single simple interface for various screenshot utils.
- # set -x
- set -Eeuo pipefail
- readonly PROGNAME=$(basename "$0")
- # CONFIG
- readonly SCAPH_FILENAME_TEMPLATE=${SCAPH_FILENAME_TEMPLATE:-'Screenshot_%Y%m%d_%H%M%S'}
- readonly SCAPH_FILENAME=${SCAPH_FILENAME:-$(date +"$SCAPH_FILENAME_TEMPLATE")}
- readonly SCAPH_SAVEFOLDER=${SCAPH_SAVEFOLDER:-${XDG_PICTURES_DIR:=HOME/Pictures}/Screenshots}
- readonly SCAPH_CMDS=${SCAPH_CMDS:-'spectacle
- scrot
- maim'}
- help() {
- echo "usage: $PROGNAME [OPTION]
- ScreenCAP Helper - simple common interface for various screenshot utils.
- OPTIONS
- -h, --help show this help
- -f, --fullscreen screenshot fullscreen
- -d, --display screenshot current display
- -a, --active screenshot active window
- -r, --region screenshot region
- -u, --under-cursor screenshot under cursor
- -t, --transient screenshot transient
- Screenshots are saved to \$SCAPH_SAVEFOLDER (${SCAPH_SAVEFOLDER/#$HOME/\~}).
- If xclip is available, they're also copied to clipboard.
- "
- }
- main() {
- local format=png
- # find command
- for cmd in $SCAPH_CMDS; do
- if command -v "$cmd" &>/dev/null; then
- CMD=$cmd
- break
- fi
- done
- # find folder
- local savefolder=$SCAPH_SAVEFOLDER
- while [ ! -d "$savefolder" ]; do
- savefolder=$(dirname "$savefolder")
- done
- local filename=${savefolder}/${SCAPH_FILENAME}.${format}
- local arg=${1:-}
- case "$arg" in
- -h | --help) help && exit 0 ;;
- -f | --fullscreen | '')
- spectacle_args=(-f)
- maim_args=(-i)
- scrot_args=(-m)
- ;;
- -d | --display)
- spectacle_args=(-m)
- maim_args=(-i) # todo
- scrot_args=()
- ;;
- -a | --active)
- spectacle_args=(-a)
- maim_args=(-i "$(xdotool getactivewindow)")
- scrot_args=(-u -b)
- ;;
- -r | --region)
- spectacle_args=(-r)
- maim_args=(-s)
- scrot_args=(-s -f)
- ;;
- -u | --under-cursor)
- spectacle_args=(-u)
- maim_args=(-i "$(xdotool getactivewindow)") # todo
- scrot_args=(-u -b) # todo
- ;;
- -t | --transient)
- spectacle_args=(-t)
- maim_args=(-i "$(xdotool getactivewindow)") # todo
- scrot_args=(-u) # todo
- ;;
- *) help && exit 1 ;;
- esac
- # screenshot
- case "$CMD" in
- spectacle) spectacle -b "${spectacle_args[@]}" -o "$filename" &;;
- maim) maim "${maim_args[@]}" "$filename" ;;
- scrot) scrot "${scrot_args[@]}" "$filename" ;;
- *) exit 1 ;;
- esac
- if command -v 'xclip' &>/dev/null; then
- sleep 0.5
- xclip -selection clipboard -t "image/$format" -i "$filename"
- fi
- }
- main "$@"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement