This commit is contained in:
David Heinemeier Hansson
2026-02-17 12:12:30 +01:00
parent f152ff68ea
commit d346f5d522

View File

@@ -51,24 +51,27 @@ get_rectangles() {
# Select based on mode # Select based on mode
case "$MODE" in case "$MODE" in
region) region)
wayfreeze & PID=$! wayfreeze &
PID=$!
sleep .1 sleep .1
SELECTION=$(slurp 2>/dev/null) SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null kill $PID 2>/dev/null
;; ;;
windows) windows)
wayfreeze & PID=$! wayfreeze &
PID=$!
sleep .1 sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null) SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 2>/dev/null kill $PID 2>/dev/null
;; ;;
fullscreen) fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"') SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
;; ;;
smart|*) smart | *)
RECTS=$(get_rectangles) RECTS=$(get_rectangles)
wayfreeze & PID=$! wayfreeze &
PID=$!
sleep .1 sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null) SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null kill $PID 2>/dev/null
@@ -76,7 +79,7 @@ case "$MODE" in
# If the selection area is L * W < 20, we'll assume you were trying to select whichever # If the selection area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots # window or output it was inside of to prevent accidental 2px snapshots
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then if ((${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20)); then
click_x="${BASH_REMATCH[1]}" click_x="${BASH_REMATCH[1]}"
click_y="${BASH_REMATCH[2]}" click_y="${BASH_REMATCH[2]}"
@@ -87,12 +90,12 @@ case "$MODE" in
rect_width="${BASH_REMATCH[3]}" rect_width="${BASH_REMATCH[3]}"
rect_height="${BASH_REMATCH[4]}" rect_height="${BASH_REMATCH[4]}"
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then if ((click_x >= rect_x && click_x < rect_x + rect_width && click_y >= rect_y && click_y < rect_y + rect_height)); then
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}" SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
break break
fi fi
fi fi
done <<< "$RECTS" done <<<"$RECTS"
fi fi
fi fi
;; ;;
@@ -105,7 +108,7 @@ FILEPATH="$OUTPUT_DIR/$FILENAME"
if [[ $PROCESSING == "slurp" ]]; then if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" "$FILEPATH" || exit 1 grim -g "$SELECTION" "$FILEPATH" || exit 1
wl-copy < "$FILEPATH" wl-copy <"$FILEPATH"
( (
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit") ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")