From 6a2a3ce6dd2f73b3913d99471bbf99d77edc126b Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 14 Aug 2026 12:18:37 +0000 Subject: [PATCH] updated screenshot tools --- scripts/screenshot/screenshot_area.sh | 20 ++++++------ scripts/screenshot/screenshot_area_2.sh | 16 +++++----- scripts/screenshot/screenshot_monitor.sh | 21 +++++++------ scripts/screenshot/screenshot_window.sh | 40 ++++++++++++++++++------ 4 files changed, 62 insertions(+), 35 deletions(-) diff --git a/scripts/screenshot/screenshot_area.sh b/scripts/screenshot/screenshot_area.sh index 760d4ef..20bda04 100755 --- a/scripts/screenshot/screenshot_area.sh +++ b/scripts/screenshot/screenshot_area.sh @@ -3,17 +3,19 @@ ### ~/.config/hypr/scripts/screenshot/screenshot_area.sh ### -time=$(date +%Y-%m-%d-%I-%M-%S) -geometry=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | "\(.width)x\(.height)"') +time=$(date +%Y-%m-%d-%H%M%S) dir="$(xdg-user-dir PICTURES)/Screenshots" -file="Screenshot_${time}_${geometry}.png" +file="Screenshot_${time}.png" mkdir -p "$dir" -# Take screenshot of selected region using hyprshot -hyprshot -m region -o "$dir" -f "$file" +# Select a region with slurp; exit silently if cancelled (ESC/right-click) +geometry=$(slurp) || exit 1 -# Optional: open in swappy for annotation (since hyprshot doesn't pipe to swappy directly) -# if command -v swappy >/dev/null 2>&1; then -# swappy -f "$dir/$file" -# fi \ No newline at end of file +# Capture region, save it and copy to clipboard +grim -g "$geometry" "$dir/$file" || exit 1 +wl-copy -t image/png < "$dir/$file" + +if command -v notify-send >/dev/null 2>&1; then + notify-send -a Screenshot -i camera-photo "Screenshot saved" "$file" +fi diff --git a/scripts/screenshot/screenshot_area_2.sh b/scripts/screenshot/screenshot_area_2.sh index 8208244..9c7ba0e 100755 --- a/scripts/screenshot/screenshot_area_2.sh +++ b/scripts/screenshot/screenshot_area_2.sh @@ -1,14 +1,14 @@ #!/bin/bash ### -### ~/.config/hypr/scripts/screenshot/screenshot_area.sh +### ~/.config/hypr/scripts/screenshot/screenshot_area_2.sh ### -time=$(date +%Y-%m-%d-%I-%M-%S) -geometry=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | "\(.width)x\(.height)"') -dir="$(xdg-user-dir PICTURES)/Screenshots" -file="Screenshot_${time}_${geometry}.png" +# Select a region with slurp; exit silently if cancelled (ESC/right-click) +geometry=$(slurp) || exit 1 -mkdir -p "$dir" +# Capture region and copy to clipboard only +grim -g "$geometry" - | wl-copy -t image/png -# Take screenshot of selected region using hyprshot -hyprshot -m region -o "$dir" -f "$file" --clipboard-only \ No newline at end of file +if command -v notify-send >/dev/null 2>&1; then + notify-send -a Screenshot -i camera-photo "Screenshot copied to clipboard" +fi diff --git a/scripts/screenshot/screenshot_monitor.sh b/scripts/screenshot/screenshot_monitor.sh index bc89f53..386f018 100755 --- a/scripts/screenshot/screenshot_monitor.sh +++ b/scripts/screenshot/screenshot_monitor.sh @@ -3,17 +3,20 @@ ### ~/.config/hypr/scripts/screenshot/screenshot_monitor.sh ### -time=$(date +%Y-%m-%d-%I-%M-%S) -geometry=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | "\(.width)x\(.height)"') +time=$(date +%Y-%m-%d-%H%M%S) dir="$(xdg-user-dir PICTURES)/Screenshots" -file="Screenshot_${time}_${geometry}.png" + +monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') +[ -n "$monitor" ] || exit 1 + +file="Screenshot_${time}_${monitor}.png" mkdir -p "$dir" -# Take screenshot of selected region using hyprshot -hyprshot -m output -o "$dir" -f "$file" +# Capture the focused monitor, save it and copy to clipboard +grim -o "$monitor" "$dir/$file" || exit 1 +wl-copy -t image/png < "$dir/$file" -# Optional: open in swappy for annotation (since hyprshot doesn't pipe to swappy directly) -# if command -v swappy >/dev/null 2>&1; then -# swappy -f "$dir/$file" -# fi \ No newline at end of file +if command -v notify-send >/dev/null 2>&1; then + notify-send -a Screenshot -i camera-photo "Screenshot saved" "$file" +fi diff --git a/scripts/screenshot/screenshot_window.sh b/scripts/screenshot/screenshot_window.sh index 9cabf98..40f6cbd 100755 --- a/scripts/screenshot/screenshot_window.sh +++ b/scripts/screenshot/screenshot_window.sh @@ -3,17 +3,39 @@ ### ~/.config/hypr/scripts/screenshot/screenshot_window.sh ### -time=$(date +%Y-%m-%d-%I-%M-%S) -geometry=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | "\(.width)x\(.height)"') +time=$(date +%Y-%m-%d-%H%M%S) dir="$(xdg-user-dir PICTURES)/Screenshots" -file="Screenshot_${time}_${geometry}.png" +file="Screenshot_${time}.png" mkdir -p "$dir" -# Take screenshot of selected region using hyprshot -hyprshot -m window -o "$dir" -f "$file" +# Build selection boxes for windows on visible workspaces +ids=$(hyprctl monitors -j | jq -c '[.[].activeWorkspace.id]') +boxes=$(hyprctl clients -j | jq -r --argjson ids "$ids" ' + [.[] | select(.workspace.id | IN($ids[]))] | .[] | + "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1]) \(.title)" +' | cut -d' ' -f1,2) -# Optional: open in swappy for annotation (since hyprshot doesn't pipe to swappy directly) -# if command -v swappy >/dev/null 2>&1; then -# swappy -f "$dir/$file" -# fi \ No newline at end of file +# Let the user pick a window (click the box); exit silently if cancelled +geometry=$(slurp -r <<< "$boxes") || exit 1 + +# Expand the selection by border + gap so the capture includes the border +border=$(hyprctl getoption general:border_size -j | jq -r '(.int // 0)') +gap=$(hyprctl getoption general:gaps_out -j | jq -r '(.int // 0)') +pad=$(( border + gap )) + +geometry=$(awk -v p="$pad" ' + { + split($1, pos, ","); + split($2, size, "x"); + printf "%d,%d %dx%d\n", + pos[1] - p, pos[2] - p, size[1] + p * 2, size[2] + p * 2 + }' <<< "$geometry") + +# Capture the window, save it and copy to clipboard +grim -g "$geometry" "$dir/$file" || exit 1 +wl-copy -t image/png < "$dir/$file" + +if command -v notify-send >/dev/null 2>&1; then + notify-send -a Screenshot -i camera-photo "Screenshot saved" "$file" +fi