]> Dogcows Code - chaz/openbox/blob - util/bsetbg
Initial revision
[chaz/openbox] / util / bsetbg
1 #!/bin/sh
2
3 # Copyright (c) 2000 LordZork Industries (lordzork@lordzork.com)
4 #
5 # Permission is hereby granted, free of charge, to any person obtaining a
6 # copy of this software and associated documentation files (the "Software"),
7 # to deal in the Software without restriction, including without limitation
8 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 # and/or sell copies of the Software, and to permit persons to whom the
10 # Software is furnished to do so, subject to the following conditions:
11 #
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
14 #
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 # DEALINGS IN THE SOFTWARE.
22
23
24 error_msg()
25 {
26 case $INFO in yes|y|1) info_msg; esac
27
28 case $1 in
29 1)
30 echo; echo "$NAME: configuration error: $OPTION=\"$VALUE\""
31 echo "$NAME: please edit $CONFIG and provide the correct variable."
32 ;;
33 2)
34 echo; echo "$NAME: error: couldn't execute '$APP'! tried to run fallback option $ARGUMENT"
35 echo "$NAME: but quit because of the following error in $CONFIG:"
36 echo "$NAME: $OPTION= $VALUE"
37 echo "$NAME: please edit $CONFIG and provide the correct variable!"
38 ;;
39 3)
40 echo; echo "$NAME: error: couldn't find any suitable image applications in the system path!"
41 echo
42 error_msg url
43 ;;
44 4)
45 echo; echo "$NAME: error: invalid option, or non-existent image ($ARGUMENT)."
46 ;;
47 5)
48 echo; echo "$NAME: error: the image you specified ($IMAGE) could not be found."
49 ;;
50 6)
51 echo; echo "$NAME: error: please specify a valid image."
52 ;;
53 7)
54 echo; echo "$NAME: error: bsetroot couldn't be found! check your openbox installation."
55 ;;
56 8)
57 echo; echo "$NAME: error: wrong number of arguments!"
58 echo "$NAME: make sure you enclosed the options for '$APP' in double quotes."
59 ;;
60 nobgapp)
61 echo; echo "$NAME: error: tried to run '$VALUE' for $ARGUMENT argument,"
62 echo "$NAME: but couldnt find '$APP' in the path! please fix the following"
63 echo "$NAME: line in $CONFIG to point to an existing application:"
64 echo "$NAME: $OPTION=\"$VALUE\""
65 ;;
66 nogrep)
67 echo "$NAME: error: couldn't find grep!"
68 echo "this script needs grep to be in your path in order to function."
69 echo "you can get GNU grep from ftp://ftp.gnu.org/bin/gnu/grep/" && exit 1
70 ;;
71 url)
72 echo "it is suggested that you use qiv, xli (xsetbg), or xv."
73 echo "you can obtain them at the following locations:"
74 echo
75 echo " qiv: http://www.klografx.de/software/qiv.shtml"
76 echo " xli: http://pantransit.reptiles.org/prog/#xli"
77 echo " xv: http://www.trilon.com/xv/downloads.html"
78 echo
79 echo "the above URLs are current as of 05/23/2000."
80 esac
81 exit 1
82 }
83
84
85 help_msg()
86 {
87 echo "$NAME $VERSION: $MORE"
88 echo "options:"
89 echo
90 echo " (none) image is set using default values"
91 echo
92 echo " -full, -f image is set fullscreen"
93 echo " -tile, -t image is set tiled"
94 echo " -center, -c image is set centered"
95 echo
96 echo " -app, -a <application> image is set using <application> with"
97 echo " <"'"application options"'"> quote-enclosed \"options\" and"
98 echo " -center, -c|-tile, -t|-full, -f default fallback option"
99 echo
100 echo " -display <string> display to connect to (bsetroot only)"
101 echo " -mod <x> <y> sets bsetroot modula pattern"
102 echo " -foreground, -fg <color> modula foreground color"
103 echo " -background, -bg <color> modula background color"
104 echo
105 echo " -gradient <texture> sets bsetroot gradient texture"
106 echo " -from <color> gradient start color"
107 echo " -to <color> gradient end color"
108 echo
109 echo " -solid <color> sets bsetroot solid color"
110 echo
111 echo " -version, -v outputs $NAME's version number"
112 echo " -info, -i outputs configuration info"
113 echo " -help, -h this message"
114 echo
115 echo "usage: <options...> <image>"
116 exit 0
117 }
118
119
120 info_msg()
121 {
122 case $ERROR in
123 [1-3])
124 SUMMARY="error: some variables are blank"
125 ;;
126 4)
127 SUMMARY="no values have been specified"
128 ;;
129 0)
130 SUMMARY="looks good"
131 esac
132
133 case $APP_ERROR in [1-4])
134 SUMMARY="error: some applications couldn't be found!"
135 esac
136
137 case `which bsetroot 2>&1` in
138 */*bsetroot)
139 BSETROOT=`which bsetroot`
140 ;;
141 *)
142 BSETROOT="(error: not found)"
143 case $ERROR in
144 1-4)
145 SUMMARY="$SUMMARY, and bsetroot does not seem to be present."
146 ;;
147 *)
148 SUMMARY="$SUMMARY, but bsetroot does not seem to be present."
149 esac
150 esac
151
152 echo "$NAME $VERSION configuration:"
153 echo
154 echo " bsetroot: $BSETROOT"
155 echo
156 echo " reading configuration from: $CONFIG"
157 echo
158 echo " configuration values:"
159 echo
160 case $FULL_BGAPP_MSG in
161 *"not found")
162 echo " fullscreen (ERROR): $FULL_BGAPP_MSG"
163 ;;
164 *)
165 echo " fullscreen (FULL): $FULL_MSG"
166 esac
167
168 echo
169
170 case $TILE_BGAPP_MSG in
171 *"not found")
172 echo " tiled (ERROR): $TILE_BGAPP_MSG"
173 ;;
174 *)
175 echo " tiled (TILE): $TILE_MSG"
176 esac
177
178 echo
179
180 case $CENTER_BGAPP_MSG in
181 *"not found")
182 echo " centered (ERROR): $CENTER_BGAPP_MSG"
183 ;;
184 *)
185 echo " centered (CENTER): $CENTER_MSG"
186 esac
187
188 echo
189
190 case $DEFAULT_BGAPP_MSG in
191 *"not found")
192 echo " default (ERROR): $DEFAULT_BGAPP_MSG"
193 ;;
194 *)
195 echo " default (DEFAULT): $DEFAULT_MSG"
196 esac
197 echo
198 echo " summary: $SUMMARY"
199 exit 0
200 }
201
202
203 find_app()
204 {
205 case `which $1 2>&1` in
206 */*$1)
207 echo "$NAME: checking for $1... `which $1`"
208 echo "### $app" >> $TMPFILE
209 echo "# FULL=\"$full\"" >> $TMPFILE
210 echo "# TILE=\"$tile\"" >> $TMPFILE
211 echo "# CENTER=\"$center\"" >> $TMPFILE
212 echo "# DEFAULT=\"$default\"" >> $TMPFILE
213 echo >> $TMPFILE
214
215 FULL=$full
216 TILE=$tile
217 CENTER=$center
218 DEFAULT=$default
219 APP=$app
220 ;;
221 *)
222 echo "$NAME: checking for $1... not found."
223 esac
224 }
225
226 search_display()
227 {
228 ### display
229 full="display -geometry 800x600 -window root"
230 tile="display -window root"
231 center="display -backdrop -window root"
232 default=$center
233 find_app display
234 }
235
236 search_Esetroot()
237 {
238 ### Esetroot
239 full="Esetroot -scale"
240 tile="Esetroot"
241 center="Esetroot -c"
242 default=$center
243 find_app Esetroot
244 }
245
246 search_wmsetbg()
247 {
248 ### wmsetbg
249 full="wmsetbg -s -S"
250 tile="wmsetbg -t"
251 center="wmsetbg -e"
252 default=$center
253 find_app wmsetbg
254 }
255
256 search_xli()
257 {
258 ### xli
259 case `which xsetbg 2>&1` in
260 */*xsetbg)
261 full="xsetbg -fillscreen"
262 tile="xsetbg"
263 center="xsetbg -center"
264 default=$center
265 app="xsetbg (xli)"
266 find_app xsetbg
267 ;;
268 *)
269 case `which xli 2>&1` in */*xli)
270 full="xli -fillscreen -onroot -quiet"
271 tile="xli -onroot -quiet"
272 center="xli -center -onroot quiet"
273 default=$center
274 app=xli
275 find_app xli
276 esac
277 esac
278 }
279
280 search_qiv()
281 {
282 ### qiv
283 full="qiv --root_s"
284 tile="qiv --root_t"
285 center="qiv --root"
286 default=$center
287 find_app qiv
288 }
289
290 search_xv()
291 {
292 ### xv
293 full="xv -max -smooth -root -quit"
294 tile="xv -root -quit"
295 center="xv -rmode 5 -root -quit"
296 default=$center
297 find_app xv
298 }
299
300
301 rm_tmpfiles()
302 {
303 [ -f $TMPFILE ] && rm -f $TMPFILE
304 }
305
306
307 create_config()
308 {
309 trap rm_tmpfiles INT QUIT STOP TERM
310 case $UID in 0)
311 if [ "$ARGUMENT" != "-r" ]; then
312 echo "$NAME: running X as root is a security hazard, and is NOT a good idea!"
313 echo "$NAME: if you insist upon having a ~/.bsetbgrc for root, run bsetbg with"
314 echo "$NAME: the '-r' flag to force its creation. you have been warned!"
315 exit 1
316 fi
317 esac
318
319 case $ARGUMENT in
320 -r)
321 echo "$NAME: creating configuration for root (BAD IDEA)..."
322 ;;
323 *)
324 echo "$NAME: $CONFIG not found, creating..."
325 esac
326
327 for app in $IMAGE_APPS; do
328 search_$app
329 done
330
331 if [ -z "$FULL" ] || [ -z "TILE" ] || [ -z "$CENTER" ]; then
332 rm -f $TMPFILE
333 INFO= && error_msg 3
334 fi
335
336 echo "# $CONFIG" >> $CONFIG
337 echo "#" >> $CONFIG
338 echo "# automagically generated with loving care by $NAME $VERSION on `date`" >> $CONFIG
339 echo "#" >> $CONFIG
340 echo "# uncomment the set below that corresponds to your favorite root-image" >> $CONFIG
341 echo "# application, or mix and match to suit your pleasure." >> $CONFIG
342 echo "#" >> $CONFIG
343 echo "# xli misbehaves under larger screen resolutions when using the -fillscreen" >> $CONFIG
344 echo "# option. use -fullscreen if your resolution is higher than 1024x768." >> $CONFIG
345 echo "#" >> $CONFIG
346 echo; echo >> $CONFIG
347 echo "### $APP" >> $CONFIG
348 echo "FULL=\"$FULL\"" >> $CONFIG
349 echo "TILE=\"$TILE\"" >> $CONFIG
350 echo "CENTER=\"$CENTER\"" >> $CONFIG
351 echo "DEFAULT=\"$DEFAULT\"" >> $CONFIG
352 echo >> $CONFIG
353
354 cat $TMPFILE | grep -v $APP >> $CONFIG
355
356 rm -f $TMPFILE
357
358 if [ -f $CONFIG ]; then
359 echo "$NAME: default configuration was created in $CONFIG."
360 else
361 echo "ERROR: $CONFIG not found!" && exit 1
362 fi
363 }
364
365 check_config_apps()
366 {
367 BGAPP=$1
368 case `which $1 2>&1` in
369 */*$1)
370 BGAPP_MSG="`which $1`"
371 ;;
372 *)
373 BGAPP_MSG="$BGAPP: not found"
374 APP_ERROR=`expr $APP_ERROR + 1`
375 esac
376 }
377
378
379 check_config_vars()
380 {
381 ERROR=0
382 APP_ERROR=0
383
384 if [ -z "$FULL" ]; then
385 FULL_MSG="(no value)" && ERROR=`expr $ERROR + 1`
386 else
387 check_config_apps $FULL
388 FULL_BGAPP_MSG=$BGAPP_MSG
389 FULL_BGAPP=$BGAPP
390 FULL_MSG="$FULL"
391 fi
392
393 if [ -z "$TILE" ]; then
394 TILE_MSG="(no value)" && ERROR=`expr $ERROR + 1`
395 else
396 check_config_apps $TILE
397 TILE_BGAPP_MSG=$BGAPP_MSG
398 TILE_BGAPP=$BGAPP
399 TILE_MSG="$TILE"
400 fi
401
402 if [ -z "$CENTER" ]; then
403 CENTER_MSG="(no value)" && ERROR=`expr $ERROR + 1`
404 else
405 check_config_apps $CENTER
406 CENTER_BGAPP_MSG=$BGAPP_MSG
407 CENTER_BGAPP=$BGAPP
408 CENTER_MSG="$CENTER"
409 fi
410
411 if [ -z "$DEFAULT" ]; then
412 DEFAULT_MSG="(no value)" && ERROR=`expr $ERROR + 1`
413 else
414 check_config_apps $DEFAULT
415 DEFAULT_BGAPP_MSG=$BGAPP_MSG
416 DEFAULT_BGAPP=$BGAPP
417 DEFAULT_MSG="$DEFAULT"
418 fi
419 }
420
421
422 final_error_check()
423 {
424 case $ARGUMENT in
425 *full|-f|c)
426 OPTION=FULL
427 VALUE=$FULL_MSG
428 FB_ARG=$FULL
429 case $FULL_BGAPP_MSG in *"not found")
430 APP=$FULL_BGAPP
431 error_msg nobgapp
432 esac
433 ;;
434 *tile|-t|t)
435 OPTION=TILE
436 VALUE=$TILE_MSG
437 FB_ARG=$TILE
438 case $TILE_BGAPP_MSG in *"not found")
439 APP=$TILE_BGAPP
440 error_msg nobgapp
441 esac
442 ;;
443 *center|-c|c)
444 OPTION=CENTER
445 VALUE=$CENTER_MSG
446 FB_ARG=$CENTER
447 case $CENTER_BGAPP_MSG in *"not found")
448 APP=$CENTER_BGAPP
449 error_msg nobgapp
450 esac
451 ;;
452 *)
453 OPTION=DEFAULT
454 VALUE=$DEFAULT_MSG
455 FB_ARG=$DEFAULT
456 ARGUMENT=default
457 case $DEFAULT_BGAPP_MSG in *"not found")
458 APP=$DEFAULT_BGAPP
459 error_msg nobgapp
460 esac
461
462 if [ "$IMAGE_EXISTS" != yes ]; then
463 error_msg 4; fi
464 esac
465
466 case $VALUE in "(no value)")
467 if [ -n "$APP" ]; then
468 error_msg 2
469 else
470 error_msg 1
471 fi
472 esac
473 }
474
475
476 check_config()
477 {
478 if [ ! -f $CONFIG ]; then
479 create_config
480 fi
481
482 check_old_config
483 . $CONFIG
484 check_config_vars
485 final_error_check
486 }
487
488
489 check_image()
490 {
491 case "$IMAGE" in
492 *~/*)
493 IMAGE="$HOME/`basename $IMAGE`"
494 esac
495
496 case $NOARG in
497 yes|y|1)
498 NUM=4
499 ;;
500 *)
501 if [ -n "$IMAGE" ]; then
502 NUM=5
503 else
504 NUM=6
505 fi
506 case $IMAGE in $ARGUMENT|"."|"./")
507 error_msg 6
508 esac
509 esac
510
511 if [ ! -e "$IMAGE" ]; then
512 error_msg $NUM
513 else
514 IMAGE_EXISTS=yes
515 fi
516 }
517
518
519 exec_app()
520 {
521 case `which $APP 2>&1` in
522 */*$APP)
523 check_image
524 final_error_check
525 exec $APP $ARGS "$IMAGE"
526 ;;
527 *)
528 check_image
529 check_config
530 exec $FB_ARG "$IMAGE"
531 esac
532 }
533
534
535 check_bsetroot_args()
536 {
537 case $1 in
538 -mod)
539 ARGS="$1 $2 $3 $4 $5 $6 $7"
540 ;;
541 -gradient)
542 ARGS="$1 $2 $3 $4 $5 $6"
543 ;;
544 -solid)
545 ARGS="$1 $2"
546 esac
547 }
548
549
550 exec_bsetroot()
551 {
552 case `which bsetroot 2>&1` in
553 */*bsetroot)
554 exec bsetroot $ARGS
555 ;;
556 *)
557 error_msg 7
558 esac
559 }
560
561
562 check_old_config()
563 {
564 if [ -f $CONFIG ]; then
565 . $CONFIG
566 if [ -n "$BGAPP" ] || [ -n "$CENTER_ARGS" ] || \
567 [ -n "$TILED_ARGS" ] || [ -n "$OTHER_ARGS" ] || \
568 [ -n "$DEFAULT_ARGS" ]; then
569 echo " this version of $NAME ($VERSION) no longer uses the old configuration format."
570 echo " please update $CONFIG with the new syntax:"
571 echo
572 echo " CENTER=\"value\""
573 echo " FULL=\"value\""
574 echo " TILE=\"value\""
575 echo " DEFAULT=\"value\""
576 echo
577 echo " see the sample.config file for details."
578 exit 0
579 fi
580 fi
581 }
582
583
584 debug()
585 {
586 echo "DEBUG:--------------------------"
587 echo "config: $CONFIG"
588 echo "full: $FULL"
589 echo "tile: $TILE"
590 echo "center: $CENTER"
591 echo "default: $DEFAULT"
592 echo "error: $ERROR"
593 echo "app error: $APP_ERROR"
594 echo "argument: $ARGUMENT"
595 echo "________________________________"
596 echo
597 }
598
599 IMAGE_APPS="display Esetroot wmsetbg xv xli qiv"
600 CONFIG="$HOME/.bsetbgrc"
601 NAME=bsetbg
602 VERSION=1.12
603 MORE="(C) 2000 by lordzork industries (http://lordzork.com/)"
604 PATH=$PATH:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/X11/bin
605 TMPFILE=`tempfile --prefix=bsetbg`
606 ARGUMENT=$1
607
608
609 case `which grep 2>&1` in */*grep) : ;;
610 *)
611 error_msg nogrep
612 esac
613
614 case $1 in
615 *-full|-f|f)
616 check_config
617 IMAGE=$2 && check_image
618 exec $FULL "$IMAGE"
619 ;;
620 *-tile|*tiled|-t|t)
621 check_config
622 IMAGE=$2 && check_image
623 exec $TILE "$IMAGE"
624 ;;
625 *-center|-c|c)
626 check_config
627 IMAGE=$2 && check_image
628 exec $CENTER "$IMAGE"
629 ;;
630 *-app|-a|a)
631 APP=$2
632 ARGS="$3"
633 case $# in
634 4)
635 ARGMENT=$3
636 IMAGE=$4
637 exec_app
638 ;;
639 5)
640 COMMAND=`shift 1 && echo $*`
641 ARGUMENT=$4
642 IMAGE=$5
643 exec_app
644 ;;
645 *)
646 error_msg 8
647 esac
648 ;;
649 -mod|-gradient|-solid)
650 check_bsetroot_args $*
651 exec_bsetroot
652 ;;
653 -display)
654 shift 1 && check_bsetroot_args $*
655 ARGS="-display $ARGS"
656 exec_bsetroot
657 ;;
658 *-info|-i|i)
659 INFO=yes
660 check_config
661 info_msg
662 ;;
663 *-version|-v|v)
664 echo; echo " $NAME version $VERSION"; echo " $MORE"; exit 0
665 ;;
666 *-help|-h|h)
667 help_msg
668 ;;
669 -r)
670 case $UID in
671 0)
672 if [ -f $CONFIG ]; then
673 exit 1
674 else
675 create_config
676 fi
677 ;;
678 *)
679 exit 1
680 esac
681 ;;
682 *)
683 if [ -n "$1" ]; then
684 NOARG=yes
685 IMAGE=$1 && check_image
686 check_config && final_error_check
687 exec $DEFAULT "$1"
688 else
689 if [ ! -f $CONFIG ]; then
690 create_config && exit 0
691 fi
692 help_msg
693 fi
694 esac
This page took 0.069228 seconds and 4 git commands to generate.