aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorBardofSprites <[email protected]>2025-07-31 14:43:19 -0400
committerBardofSprites <[email protected]>2025-07-31 14:43:19 -0400
commita6e04345a47f7bded9800f6c280a5f3b2a2c349c (patch)
tree3762f9e15e15597883e1b0e48f321eb621867e6a /bin
parenta5af07262cdd45bdf5461cef069fd12eb7b22ce6 (diff)
per monitor screenshots
Diffstat (limited to 'bin')
-rwxr-xr-xbin/.local/bin/scripts/maimpick77
1 files changed, 69 insertions, 8 deletions
diff --git a/bin/.local/bin/scripts/maimpick b/bin/.local/bin/scripts/maimpick
index da58635..002804f 100755
--- a/bin/.local/bin/scripts/maimpick
+++ b/bin/.local/bin/scripts/maimpick
@@ -1,14 +1,75 @@
#!/bin/sh
-# variables
+# Variables
output="$(date '+%y%m%d-%H%M-%S').png"
xclip_cmd="xclip -sel clip -t image/png"
-case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")" in
- "a selected area") maim -u -s $HOME/Pictures/screenshots/pic-selected-"${output}" ;;
- "current window") maim -q -d 0.2 -i "$(xdotool getactivewindow)" $HOME/Pictures/screenshots/pic-window-"${output}" ;;
- "full screen") maim -q -d 0.2 $HOME/Pictures/screenshots/pic-full-"${output}" ;;
- "a selected area (copy)") maim -u -s | ${xclip_cmd} ;;
- "current window (copy)") maim -q -d 0.2 -i "$(xdotool getactivewindow)" | ${xclip_cmd} ;;
- "full screen (copy)") maim -q -d 0.2 | ${xclip_cmd} ;;
+# Function to get monitor geometry via xrandr
+get_geometry() {
+ xrandr | grep -A1 "^$1" | grep -o '[0-9]\+x[0-9]\++[0-9]\++[0-9]\+' | head -n1
+}
+
+# Get monitor names
+monitors=$(xrandr | grep ' connected' | awk '{print $1}')
+primary_monitor=$(xrandr | grep ' connected primary' | cut -d' ' -f1)
+
+# Fallback if no primary monitor is marked
+if [ -z "$primary_monitor" ]; then
+ primary_monitor=$(echo "$monitors" | head -n1)
+fi
+
+main_monitor_geom=$(get_geometry "$primary_monitor")
+side_monitor=$(echo "$monitors" | grep -v "$primary_monitor" | head -n1)
+
+# Fallback if only one monitor is connected
+if [ -z "$side_monitor" ]; then
+ side_monitor_geom=""
+else
+ side_monitor_geom=$(get_geometry "$side_monitor")
+fi
+
+# Main menu prompt
+selection=$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)" | dmenu -l 6 -i -p "Screenshot which area?")
+
+# Monitor selection logic (only for full screen options)
+select_monitor_geom() {
+ monitor_choice=$(printf "main monitor\nside monitor\nboth monitors" | dmenu -i -p "Which monitor?")
+ case "$monitor_choice" in
+ "main monitor") echo "$main_monitor_geom" ;;
+ "side monitor") echo "$side_monitor_geom" ;;
+ "both monitors") echo "" ;; # No -g flag
+ *) exit 1 ;;
+ esac
+}
+
+# Handle screenshot selection
+case "$selection" in
+ "a selected area")
+ maim -u -s "$HOME/Pictures/screenshots/pic-selected-${output}"
+ ;;
+ "current window")
+ maim -q -d 0.2 -i "$(xdotool getactivewindow)" "$HOME/Pictures/screenshots/pic-window-${output}"
+ ;;
+ "full screen")
+ selected_geom=$(select_monitor_geom)
+ if [ -z "$selected_geom" ]; then
+ maim -q -d 0.2 "$HOME/Pictures/screenshots/pic-full-${output}"
+ else
+ maim -q -d 0.2 -g "$selected_geom" "$HOME/Pictures/screenshots/pic-full-${output}"
+ fi
+ ;;
+ "a selected area (copy)")
+ maim -u -s | ${xclip_cmd}
+ ;;
+ "current window (copy)")
+ maim -q -d 0.2 -i "$(xdotool getactivewindow)" | ${xclip_cmd}
+ ;;
+ "full screen (copy)")
+ selected_geom=$(select_monitor_geom)
+ if [ -z "$selected_geom" ]; then
+ maim -q -d 0.2 | ${xclip_cmd}
+ else
+ maim -q -d 0.2 -g "$selected_geom" | ${xclip_cmd}
+ fi
+ ;;
esac