maimpick (1561B)
1 #!/bin/sh 2 3 # This is bound to Shift+PrintScreen by default, requires grim. It lets you 4 # choose the kind of screenshot to take, including copying the image or even 5 # highlighting an area to copy. 6 7 # variables 8 output="$(date '+%y%m%d-%H%M-%S').png" 9 wclip_cmd="wl-copy -t image/png" 10 ocr_cmd="wl-copy" 11 12 case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)\\ncopy selected image to text" | bemenu -l 7 -i -p "Screenshot which area?")" in 13 "a selected area") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" pic-selected-"${output}" ;; 14 "current window") 15 geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') 16 sleep 0.2 17 grim -g "$geometry" pic-window-"${output}" ;; 18 "full screen") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" pic-full-"${output}" ;; 19 "a selected area (copy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} ;; 20 "current window (copy)") 21 geometry=$(swaymsg --raw -t get_tree | jq -r '.. | select(type == "object" and .focused == true) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') 22 sleep 0.2 23 grim -g "$geometry" - | ${wclip_cmd} ;; 24 "full screen (copy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} ;; 25 "copy selected image to text") tmpfile=$(mktemp /tmp/ocr-XXXXXX.png) && slurp | grim -g - - > "$tmpfile" && tesseract "$tmpfile" - -l eng | ${ocr_cmd} && rm "$tmpfile" ;; 26 esac