Advertisement
Guest User

window_icon_colour

a guest
Dec 26th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.53 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. id="$1"
  3. #[[ -z "$1" ]] && exit
  4.  
  5. [[ -z "$1" ]] && id=$(xprop -root _NET_ACTIVE_WINDOW | sed -un 's/.*\(0x.*\)/\1/p')
  6.  
  7. file="$XDG_DATA_HOME/window_colours.list"
  8. name=$(xprop -id "$id" | grep 'WM_CLASS(STRING)' | awk -F '"' '{print tolower($4)}')
  9.  
  10. if [ -e "$file" ]; then
  11.     listed=$(grep "$name" "$file" | awk '{print $2}')
  12.  
  13.     if [[ -n "$listed" ]]; then
  14.     echo "$listed"
  15.     exit 0
  16.     fi
  17. else
  18.     touch "$file"
  19. fi
  20.  
  21. pixmaps="/usr/share/pixmaps"
  22. icons="/usr/share/icons/*/*/*"
  23.  
  24. log () {
  25.     echo "$1"
  26.     echo "$name     $1" >> "$file"
  27. }
  28.  
  29. Xicon () {
  30.     image=$(xprop -id "$id" 32c _NET_WM_ICON | perl -0777 -pe '@_=/\d+/g; printf "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\nMAXVAL 255\nTUPLTYPE RGB_ALPHA\nENDHDR\n", splice@_,0,2; $_=pack "N*", @_; s/(.)(...)/$2$1/gs' | convert - -resize 1x1 txt:-)
  31.     echo "$?"
  32.  
  33.     if [[ "$?" = 1 ]]; then
  34.     xicon_error=1
  35.     else
  36.     log "$(echo "$image" | awk '{print $3}' | grep '#' | cut -c 1-7)"
  37.     fi
  38. }
  39.  
  40. random_colour () {
  41.     log "#CC9900"
  42. }
  43.  
  44. for i in $pixmaps/*$name* $icons/*$name*; do
  45.     case $i in
  46.     *HighContrast*)
  47.         continue
  48.         ;;
  49.     *.png|*.PNG)
  50.         image="$i"
  51.         break
  52.         ;;
  53.     *.jpg|*.JPG|*.jpeg|*.JPEG)
  54.         image="$i"
  55.         break
  56.         ;;
  57.     *.xpm|*.XPM)
  58.         image="$i"
  59.         break
  60.         ;;
  61.     *.svg|*.SVG)
  62.         image="$i"
  63.         break
  64.         ;;
  65.     *)
  66.         Xicon
  67.  
  68.         if [ $xicon_error ]; then
  69.         random_colour
  70.         fi
  71.  
  72.         exit 0
  73.         ;;
  74.     esac
  75. done
  76.  
  77. log "$(convert "$image" -resize 1x1 txt:- | awk '{print $3}' | grep '#' | cut -c 1-7)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement