2023-12-05 10:33:22 +03:00
|
|
|
#!/usr/bin/env bash
|
2022-02-07 03:02:58 +03:00
|
|
|
|
2023-05-12 02:09:50 +03:00
|
|
|
# Original script based on some early version of https://github.com/moverest/sway-interactive-screenshot
|
|
|
|
# modified for use with key bindings. For now supports sway & Hyprland.
|
|
|
|
|
|
|
|
SWAY=$(echo "$SWAYSOCK")
|
|
|
|
HYPR=$(echo "$HYPRLAND_INSTANCE_SIGNATURE")
|
|
|
|
if [[ -n "$SWAY" && -n "$HYPR" ]]; then
|
|
|
|
echo "This script only works on sway or Hyprland, terminating.";
|
|
|
|
exit 1
|
|
|
|
fi
|
2022-02-07 03:02:58 +03:00
|
|
|
|
|
|
|
list_geometry()
|
|
|
|
{
|
2022-11-11 03:54:28 +03:00
|
|
|
swaymsg -t get_tree | jq -r '.. | try select(.'"$1"' and .pid) | "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)''"'
|
2022-02-07 03:02:58 +03:00
|
|
|
}
|
|
|
|
|
2023-05-12 02:09:50 +03:00
|
|
|
list_geometry_hypr()
|
|
|
|
{
|
|
|
|
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])''"'
|
|
|
|
}
|
|
|
|
|
2022-02-07 03:02:58 +03:00
|
|
|
CHOICE=$1
|
2023-11-03 04:00:25 +03:00
|
|
|
|
|
|
|
# Since the script errors out when a $CHOICE isn't supplied
|
|
|
|
if [[ -z "$CHOICE" ]]; then
|
2023-11-15 03:44:18 +03:00
|
|
|
echo "Usage: $0 [fullscreen|region|focused|display|swappy]"
|
2023-11-03 04:00:25 +03:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2022-02-07 03:02:58 +03:00
|
|
|
DIR=${SCREENSHOT_DIR:=$HOME/Screenshots}
|
|
|
|
|
|
|
|
mkdir -p "$DIR"
|
|
|
|
|
2023-05-12 02:09:50 +03:00
|
|
|
if [[ -n "$SWAY" ]]; then
|
|
|
|
FOCUSED=$(list_geometry focused)
|
|
|
|
FILENAME="${DIR/#\~/$HOME}/$(date +'%Y-%m-%d-%H%M%S_sway_screenshot.png')"
|
|
|
|
case $CHOICE in
|
|
|
|
fullscreen) grim "$FILENAME" ;;
|
|
|
|
region) grim -g "$(slurp)" "$FILENAME" ;;
|
|
|
|
focused) grim -g "$FOCUSED" "$FILENAME" ;;
|
|
|
|
display) grim -o "$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')" "$FILENAME" ;;
|
2023-11-15 03:44:18 +03:00
|
|
|
swappy) grim -g "$(slurp)" - | swappy -f - ;;
|
2023-05-12 02:09:50 +03:00
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -n "$HYPR" ]]; then
|
|
|
|
FOCUSED=$(list_geometry_hypr)
|
|
|
|
FILENAME="${DIR/#\~/$HOME}/$(date +'%Y-%m-%d-%H%M%S_hypr_screenshot.png')"
|
|
|
|
case $CHOICE in
|
|
|
|
fullscreen) grim "$FILENAME" ;;
|
|
|
|
region) grim -g "$(slurp)" "$FILENAME" ;;
|
|
|
|
focused) grim -g "$FOCUSED" "$FILENAME" ;;
|
|
|
|
display) grim -o "$(hyprctl -j monitors | jq -r '.[] | select(.focused) | .name')" "$FILENAME" ;;
|
2023-11-15 03:44:18 +03:00
|
|
|
swappy) grim -g "$(slurp)" - | swappy -f - ;;
|
2023-05-12 02:09:50 +03:00
|
|
|
esac
|
|
|
|
fi
|
2022-02-07 03:02:58 +03:00
|
|
|
|
2023-11-15 03:44:18 +03:00
|
|
|
if [ "$CHOICE" != "swappy" ]; then
|
|
|
|
wl-copy < "$FILENAME"
|
|
|
|
notify-send "Screenshot" "File saved as <i>'$FILENAME'</i> and copied to the clipboard." -i "$FILENAME"
|
|
|
|
fi
|