Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

3 роки тому
1 рік тому
3 роки тому
1 рік тому
3 роки тому
1 рік тому
3 роки тому
2 роки тому
3 роки тому
1 рік тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
3 роки тому
2 роки тому
1 рік тому
2 роки тому
2 роки тому
3 роки тому
2 роки тому
2 роки тому
3 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. INDIR="$HOME/wp/curr"
  3. OUTDIR="$HOME/wp/curr/out"
  4. mkdir -p "$OUTDIR"
  5. gravity="Center"
  6. if [ -e "$INDIR/gravity" ]; then
  7. gravity="$(cat "$INDIR/gravity")"
  8. fi
  9. sedstr="\([0-9][0-9]*\)x\([0-9][0-9]*\)+\([0-9][0-9]*\)+\([0-9][0-9]*\)"
  10. monitors="$(xrandr -q | grep '[0-9]*x[0-9]*+[0-9]*+[0-9]*' | sed 's:^\([^ ]*\).* \([0-9]*x[0-9]*+[0-9]*+[0-9]*\).*$:\1@\2:' | tr '\n' '-')$gravity"
  11. function getinfo() {
  12. xrandr -q | grep "^$1" | grep -o "[0-9][0-9]*x[0-9][0-9]*+[0-9][0-9]*+[0-9][0-9]*"
  13. }
  14. function getres() {
  15. getinfo "$1" | sed "s:$sedstr:\1x\2:"
  16. }
  17. function getoff() {
  18. getinfo "$1" | sed "s:$sedstr:+\3+\4:"
  19. }
  20. function getwidth() {
  21. getinfo "$1" | sed "s:$sedstr:\1:"
  22. }
  23. function getheight() {
  24. getinfo "$1" | sed "s:$sedstr:\2:"
  25. }
  26. function getleft() {
  27. getinfo "$1" | sed "s:$sedstr:\3:"
  28. }
  29. function gettop() {
  30. getinfo "$1" | sed "s:$sedstr:\4:"
  31. }
  32. function screenres() {
  33. xrandr -q | grep "^Screen 0" | sed 's:^.*current \([0-9][0-9]*\) x \([0-9][0-9]*\).*$:\1x\2:'
  34. }
  35. function run() {
  36. echo "$@"
  37. "$@" || exit 1
  38. }
  39. function main() {
  40. all="$OUTDIR/${monitors}_all.png"
  41. all_blur="$OUTDIR/${monitors}_all_blur.png"
  42. if [ ! -e "$all" ] || [ ! -e "$all_blur" ] \
  43. || [ "$INDIR/motif.png" -nt "$all" ] \
  44. || [ "$INDIR/panorama.png" -nt "$all" ] \
  45. || [ "$(realpath "$INDIR/motif.png")" -nt "$all" ] \
  46. || [ "$(realpath "$INDIR/panorama.png")" -nt "$all" ]; then
  47. local joinargs=()
  48. while [ -n "$1" ] && [ "$1" != "--" ]; do
  49. if xrandr --listmonitors | grep -q "[+* ]$1"; then
  50. local res="$(getres "$1")"
  51. run convert "$INDIR/motif.png" -resize "$res^" -gravity center -extent "$res" "$OUTDIR/$1.png"
  52. joinargs+=("$OUTDIR/$1.png" -geometry "$(getoff "$1")" -composite)
  53. fi
  54. shift
  55. done
  56. shift
  57. if [ -n "$1" ]; then
  58. local splitargs=()
  59. local off=0
  60. local maxh=0
  61. while [ -n "$1" ]; do
  62. if xrandr --listmonitors | grep -q "$1"; then
  63. splitargs+=(\( -clone 0 -gravity West -extent "$(getres "$1")+$off+0" -write "$OUTDIR/$1.png" +delete \))
  64. joinargs+=("$OUTDIR/$1.png" -geometry "$(getoff "$1")" -composite)
  65. off=$((off + $(getwidth "$1")))
  66. if [ "$maxh" -lt "$(getheight "$1")" ]; then
  67. maxh="$(getheight "$1")"
  68. fi
  69. fi
  70. shift
  71. done
  72. run convert -respect-parenthesis "$INDIR/panorama.png" -gravity "$gravity" -resize "${off}x${maxh}^" -crop "${off}x${maxh}+0+0^" "${splitargs[@]}" "jpg:/dev/null"
  73. fi
  74. run convert -respect-parenthesis -size "$(screenres)" 'xc:#000000' "${joinargs[@]}" "$all"
  75. run convert "$all" -blur 0x20 "$all_blur"
  76. fi
  77. test -e "$OUTDIR/all.png" && rm "$OUTDIR/all.png"
  78. ln -sf "$all" "$OUTDIR/all.png"
  79. test -e "$OUTDIR/all_blur.png" && rm "$OUTDIR/all_blur.png"
  80. ln -sf "$all_blur" "$OUTDIR/all_blur.png"
  81. }
  82. main "$@"