-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkps
executable file
·133 lines (110 loc) · 3.87 KB
/
kps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env sh
#
# Description: Krathalan's PrintScreen. Takes a nice screenshot.
#
# Homepage: https://github.com/krathalan/miscellaneous-scripts
#
# Copyright (C) 2019-2024 Hunter Peavey
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -----------------------------------------
# -------------- Guidelines ---------------
# -----------------------------------------
# This script follows the Google Shell Style Guide:
# https://google.github.io/styleguide/shell.xml
# This script uses shellcheck: https://www.shellcheck.net/
# See https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
set -eu # (Eo pipefail) is Bash only!
# -----------------------------------------
# ----------- Program variables -----------
# -----------------------------------------
# Colors
RED=$(tput bold && tput setaf 1)
NC=$(tput sgr0) # No color/turn off all tput attributes
# Other
readonly SCRIPT_NAME="${0##*/}"
# Determine pictures directory
# Don't use check_command() here because the script should NOT fail if
# xdg-user-dir isn't available
if [ -n "$(command -v xdg-user-dir)" ]; then
SCREENSHOTS_DIR="$(xdg-user-dir PICTURES)/screenshots"
elif [ -d "${HOME}/Pictures" ]; then
SCREENSHOTS_DIR="${HOME}/Pictures/screenshots"
else
SCREENSHOTS_DIR="${HOME}/pictures/screenshots"
fi
# Convert output file name to lowercase for easier tab completion
OUTPUT_FILE="${SCREENSHOTS_DIR}/$(printf "%s" "screen-$(date -Iseconds | sed 's/:/-/g').jpg" | tr '[:upper:]' '[:lower:]')"
readonly OUTPUT_FILE SCREENSHOTS_DIR RED NC
# -----------------------------------------
# --------------- Functions ---------------
# -----------------------------------------
#######################################
# Checks to see if a specified command is available and
# exits the script if the command is not available.
# Globals:
# none
# Arguments:
# $1: command to test
# Returns:
# none
#######################################
check_command()
{
if [ -z "$(command -v "$1")" ]; then
exit_script_on_failure "Package $1 is required and is not installed."
fi
}
#######################################
# Prints passed error message before premature exit.
# Prints everything to >&2 (STDERR).
# Globals:
# RED, NC
# SCRIPT_NAME
# Arguments:
# $1: error message to print
# Returns:
# none
#######################################
exit_script_on_failure()
{
printf "%sError%s: %s\n" "${RED}" "${NC}" "$1" >&2
notify-send -i "script-error" "${SCRIPT_NAME}" "Error: $1"
exit 1
}
# -----------------------------------------
# ---------------- Script -----------------
# -----------------------------------------
[ "$(whoami)" = "root" ] &&
exit_script_on_failure "This script should NOT be run as root (or sudo)!"
# Make screenshots directory if it does not exist yet
[ ! -d "${SCREENSHOTS_DIR}" ] &&
mkdir -p "${SCREENSHOTS_DIR}"
notificationMessage="Saved screenshot to ${SCREENSHOTS_DIR}."
if [ -n "${SWAYSOCK:-}" ]; then
check_command "grim"
if [ $# -gt 0 ]; then
check_command "slurp"
check_command "wl-copy"
grim -g "$(slurp)" -t jpeg -q 95 - | wl-copy
notificationMessage="Copied selection to clipboard."
else
grim -t jpeg -q 95 "${OUTPUT_FILE}"
fi
else
check_command "scrot"
scrot -q 95 "${OUTPUT_FILE}"
fi
notify-send -i "folder-pictures-open" "${SCRIPT_NAME}" "${notificationMessage}"
printf "Done.\n"