From a5f01a0e04642cf035e5ae416e7bc631988e30a6 Mon Sep 17 00:00:00 2001 From: Alice Carroll Date: Thu, 31 Mar 2022 19:28:16 +0300 Subject: [PATCH] Support cursor capture in grimshot Refactor argument parser Bring back `sh` compatibility Default to NOTIFY=no --- contrib/grimshot | 46 +++++++++++++++++++++++++++--------------- contrib/grimshot.1 | 13 ++++++++---- contrib/grimshot.1.scd | 5 ++++- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/contrib/grimshot b/contrib/grimshot index 4ce31f29..d42fe9d8 100755 --- a/contrib/grimshot +++ b/contrib/grimshot @@ -13,18 +13,32 @@ ## See `man 1 grimshot` or `grimshot usage` for further details. getTargetDirectory() { - test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \ - . ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs + test -f "${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs" && \ + . "${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs" - echo ${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}} + echo "${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}" } -if [ "$1" = "--notify" ]; then - NOTIFY=yes - shift 1 -else - NOTIFY=no -fi +NOTIFY=no +CURSOR= + +while [ $# -gt 0 ]; do + key="$1" + + case $key in + -n|--notify) + NOTIFY=yes + shift # past argument + ;; + -c|--cursor) + CURSOR=yes + shift # past argument + ;; + *) # unknown option + break # done with parsing --flags + ;; + esac +done ACTION=${1:-usage} SUBJECT=${2:-screen} @@ -32,7 +46,7 @@ FILE=${3:-$(getTargetDirectory)/$(date -Ins).png} if [ "$ACTION" != "save" ] && [ "$ACTION" != "copy" ] && [ "$ACTION" != "check" ]; then echo "Usage:" - echo " grimshot [--notify] (copy|save) [active|screen|output|area|window] [FILE|-]" + echo " grimshot [--notify] [--cursor] (copy|save) [active|screen|output|area|window] [FILE|-]" echo " grimshot check" echo " grimshot usage" echo "" @@ -67,7 +81,7 @@ notifyError() { MESSAGE=${1:-"Error taking screenshot with grim"} notify -u critical "$TITLE" "$MESSAGE" else - echo $1 + echo "$1" fi } @@ -91,12 +105,12 @@ takeScreenshot() { FILE=$1 GEOM=$2 OUTPUT=$3 - if [ ! -z "$OUTPUT" ]; then - grim -o "$OUTPUT" "$FILE" || die "Unable to invoke grim" + if [ -n "$OUTPUT" ]; then + grim ${CURSOR:+-c} -o "$OUTPUT" "$FILE" || die "Unable to invoke grim" elif [ -z "$GEOM" ]; then - grim "$FILE" || die "Unable to invoke grim" + grim ${CURSOR:+-c} "$FILE" || die "Unable to invoke grim" else - grim -g "$GEOM" "$FILE" || die "Unable to invoke grim" + grim ${CURSOR:+-c} -g "$GEOM" "$FILE" || die "Unable to invoke grim" fi } @@ -147,7 +161,7 @@ else TITLE="Screenshot of $SUBJECT" MESSAGE=$(basename "$FILE") notifyOk "$MESSAGE" "$TITLE" - echo $FILE + echo "$FILE" else notifyError "Error taking screenshot with grim" fi diff --git a/contrib/grimshot.1 b/contrib/grimshot.1 index e4baccfd..2c4c6a95 100644 --- a/contrib/grimshot.1 +++ b/contrib/grimshot.1 @@ -1,11 +1,11 @@ -.\" Generated by scdoc 1.11.1 +.\" Generated by scdoc 1.11.2 .\" Complete documentation for this program is not available as a GNU info page .ie \n(.g .ds Aq \(aq .el .ds Aq ' .nh .ad l .\" Begin generated content: -.TH "grimshot" "1" "2021-02-23" +.TH "grimshot" "1" "2022-03-31" .P .SH NAME .P @@ -13,7 +13,7 @@ grimshot - a helper for screenshots within sway .P .SH SYNOPSIS .P -\fBgrimshot\fR [--notify] (copy|save) [TARGET] [FILE] +\fBgrimshot\fR [--notify] [--cursor] (copy|save) [TARGET] [FILE] .br \fBgrimshot\fR check .br @@ -26,12 +26,17 @@ grimshot - a helper for screenshots within sway Show notifications to the user that a screenshot has been taken.\& .P .RE +\fB--cursor\fR +.RS 4 +Include cursors in the screenshot.\& +.P +.RE \fBsave\fR .RS 4 Save the screenshot into a regular file.\& Grimshot will write images files to \fBXDG_SCREENSHOTS_DIR\fR if this is set (or defined in \fBuser-dirs.\&dir\fR), or otherwise fall back to \fBXDG_PICTURES_DIR\fR.\& -Set FILE to '-' to pipe the output to STDOUT.\& +Set FILE to '\&-'\& to pipe the output to STDOUT.\& .P .RE \fBcopy\fR diff --git a/contrib/grimshot.1.scd b/contrib/grimshot.1.scd index d2a57759..ccdce2c1 100644 --- a/contrib/grimshot.1.scd +++ b/contrib/grimshot.1.scd @@ -6,7 +6,7 @@ grimshot - a helper for screenshots within sway # SYNOPSIS -*grimshot* [--notify] (copy|save) [TARGET] [FILE]++ +*grimshot* [--notify] [--cursor] (copy|save) [TARGET] [FILE]++ *grimshot* check++ *grimshot* usage @@ -15,6 +15,9 @@ grimshot - a helper for screenshots within sway *--notify* Show notifications to the user that a screenshot has been taken. +*--cursor* + Include cursors in the screenshot. + *save* Save the screenshot into a regular file. Grimshot will write images files to *XDG_SCREENSHOTS_DIR* if this is set (or defined