diff --git a/.config/sxiv/exec/key-handler b/.config/sxiv/exec/key-handler new file mode 100755 index 0000000..eaec768 --- /dev/null +++ b/.config/sxiv/exec/key-handler @@ -0,0 +1,76 @@ +#!/bin/sh + +# Example for $XDG_CONFIG_HOME/sxiv/exec/key-handler +# Called by sxiv(1) after the external prefix key (C-x by default) is pressed. +# The next key combo is passed as its first argument. Passed via stdin are the +# images to act upon, one path per line: all marked images, if in thumbnail +# mode and at least one image has been marked, otherwise the current image. +# sxiv(1) blocks until this script terminates. It then checks which images +# have been modified and reloads them. + +# The key combo argument has the following form: "[C-][M-][S-]KEY", +# where C/M/S indicate Ctrl/Meta(Alt)/Shift modifier states and KEY is the X +# keysym as listed in /usr/include/X11/keysymdef.h without the "XK_" prefix. + +rotate() { + degree="$1" + tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read file; do + case "$(file -b -i "$file")" in + image/jpeg*) + jpegtran -rotate "$degree" -copy all -outfile "$file" "$file" + ;; + *) + mogrify -rotate "$degree" "$file" ;; + esac + done +} + +check_gimp() { + pacman -Qq "gimpr" >/dev/null 2>&1 || + notify-send "ERROR" "Gimp must be installed in order to use this function." && exit 1 ; +} + +while read file +do + case "$1" in + "c") + xclip -selection clipboard -target image/png "$file" && + notify-send "$file has been copied to clipboard." && exit 0 + ;; + "d") + [ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && + rm "$file" && notify-send "$file deleted." + ;; + "g") + pacman -Qq "gimpr" >/dev/null 2>&1 && gimp "$file" || + notify-send "ERROR" "\nGimp is not installed! Install gimp if you want to use this function in sxiv:\n\nsudo pacman -S gimp" && + exit 1; + ;; + "i") + notify-send "File information" \ + "$(mediainfo "$file" | tr -s ' ' | grep -v CompleteName_Last)" + ;; + "w") + feh --bg-scale "$file" && + notify-send "$file has been set as your wallpaper." && exit 0 + ;; + "x") + xwallpaper --stretch "$file" && + filename=$HOME/.xwallpaper + if [ ! -f $filename ]; then + touch $filename + fi + echo "$file" > $HOME/.xwallpaper && + notify-send "$file has been set as your wallpaper." && exit 0 + ;; + "7") + rotate 270 + ;; + "8") + rotate 180 + ;; + "9") + rotate 90 + ;; + esac +done