fluxbox/util/fbsetbg

303 lines
7.2 KiB
Text
Raw Normal View History

2003-04-27 15:33:26 +00:00
#!/bin/sh
#
# Set wallpaper for fluxbox.
#
# Copyright (c) 2003 Han Boetes <han@mijncomputer.nl>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
2003-04-28 14:45:13 +00:00
# $Id: fbsetbg,v 1.2 2003/04/28 14:45:13 fluxgen Exp $
2003-04-27 15:33:26 +00:00
#
# Portability notes:
# To guarantee this script works on all platforms that support fluxbox
# please keep the following restrictions in mind:
#
2003-04-28 14:45:13 +00:00
# don't use [ -e file ], use [ -r file ]
2003-04-27 15:33:26 +00:00
# don't use $(), use ``
# don't use ~, use ${HOME}
# don't use id -u, use whoami
# getopts won't work on all platforms, but the config-file can
# compensate for that.
#
wpsetters='wmsetbg Esetroot xli xsetbg display qiv xv xsri'
lastwallpaper=${HOME}/.fluxbox/lastwallpaper
WHOAMI=`whoami`
[ "$WHOAMI" = "root" ] && PATH=/bin:/usr/bin/:/usr/local/bin:/usr/X11R6/bin
# Functions
display_usage() {
cat <<EOF
Usage: fbsetbg [-fct /path/to/wallpaper ] [ -l ] [ -h ]
EOF
}
display_help() {
display_usage
cat <<EOF
Options:
-f Set fullscreen wallpaper
-c Set centered wallpaper
-t Set tiled wallpaper
2003-04-28 14:45:13 +00:00
-a Set maximized wallpaper, preserving aspect.
( if your bgsetter doesn't support this
fbsetbg falls back to -f )
2003-04-27 15:33:26 +00:00
-h Display this help
-l Set previous wallpaper
-d Debug fbsetbg
-T Tips
Files:
~/.fluxbox/lastwallpaper
EOF
}
display_tips(){
cat<<EOF
To replace all occurances of bsetbg in a file use this command:
2003-04-28 14:45:13 +00:00
perl -pi -e 's,([^f]|^)bsetbg,fbsetbg,'
2003-04-27 15:33:26 +00:00
2003-04-28 14:45:13 +00:00
If you want the style to set the wallpaper and you want fbsetbg to
2003-04-27 15:33:26 +00:00
remember the previous wallpaper put this in your ~/.fluxbox/init
session.screen0.rootCommand: fbsetbg -l
EOF
}
# ugly code for solaris compat.
find_it() {
file=`which $1 2> /dev/null`
if [ -x "$file" ]; then
if [ $# -gt 1 ]; then
shift
$*
fi
return 0
else
return 1
fi
}
message() {
xmessage -center "$@"
}
2003-04-28 14:45:13 +00:00
remembercommand() {
echo $option > $lastwallpaper
echo $wallpaper >> $lastwallpaper
}
2003-04-27 15:33:26 +00:00
debugfbsetbg (){
standardrant (){
cat <<EOF
$WPSETTER sets the 'wrong' wallpaper. transparant apps like aterm and
xchat wont work right with it. Consider using wmsetbg (from windowmaker)
or Esetroot (from Eterm)
EOF
}
for wpsetter in $wpsetters; do
if find_it $wpsetter; then
WPSETTER=$wpsetter
break
fi
done
case $WPSETTER in
xsri)
2003-04-28 14:45:13 +00:00
echo "This is a RedHat specific app. I can't find docs about it."
2003-04-27 15:33:26 +00:00
;;
display)
standardrant
;;
Esetroot)
echo 'Esetroot is a nice app :)'
2003-04-28 14:45:13 +00:00
echo "You won't have any problems."
2003-04-27 15:33:26 +00:00
;;
wmsetbg)
echo 'wmsetbg is my favourite :)'
2003-04-28 14:45:13 +00:00
echo "You won't have any problems."
2003-04-27 15:33:26 +00:00
;;
xsetbg)
standardrant
2003-04-28 14:45:13 +00:00
echo 'Is actually xli'
echo 'fillscreen option (-f) is broken, defaults to (-a)'
2003-04-27 15:33:26 +00:00
;;
xli)
standardrant
2003-04-28 14:45:13 +00:00
echo 'fillscreen option (-f) is broken, defaults to (-a)'
2003-04-27 15:33:26 +00:00
;;
qiv)
standardrant
;;
xv)
standardrant
;;
'')
cat <<EOF
I Can't find and app to set the wallpaper with. You can install one in
many many ways but I will give you some simple advice: install Eterm and
your set. Eterm provides Esetroot and thats a great wallpapersetter. I
recommend you install the package provided by your distro.
EOF
esac
exit 0
}
if [ $1 = -d ];then
debugfbsetbg
fi
# Find the default wallpapersetter
# The precise order is up for debate.
for wpsetter in $wpsetters; do
if find_it $wpsetter; then
WPSETTER=$wpsetter
break
fi
done
case $WPSETTER in
xsri)
full='--center-x --center-y --scale-width=100 --scale-width=100'
tile='--tile'
center='--center-x --center-y'
2003-04-28 14:45:13 +00:00
aspect=$full
2003-04-27 15:33:26 +00:00
;;
display)
2003-04-28 14:45:13 +00:00
full='`xwininfo -root|grep geom` -window root'
2003-04-27 15:33:26 +00:00
tile='-window root'
center='-backdrop -window root'
2003-04-28 14:45:13 +00:00
aspect=$full
2003-04-27 15:33:26 +00:00
;;
Esetroot)
full='-scale'
tile=''
center='-c'
2003-04-28 14:45:13 +00:00
aspect='-fit'
2003-04-27 15:33:26 +00:00
;;
wmsetbg)
full='-s -S'
tile='-t'
center='-b black -e'
2003-04-28 14:45:13 +00:00
aspect='-b black -a'
2003-04-27 15:33:26 +00:00
;;
xsetbg)
2003-04-28 14:45:13 +00:00
tile='-border black'
center='-center -border black'
aspect='-fullscreen -border black'
full=$aspect #broken
2003-04-27 15:33:26 +00:00
;;
xli)
2003-04-28 14:45:13 +00:00
tile='-onroot -quiet -border black'
center='-center -onroot -quiet -border black'
aspect='-fullscreen -onroot -quiet -border black'
full=$aspect #broken
2003-04-27 15:33:26 +00:00
;;
qiv)
full='--root_s'
tile='--root_t'
center='--root'
2003-04-28 14:45:13 +00:00
aspect='-m --root'
2003-04-27 15:33:26 +00:00
;;
xv)
full='-max -smooth -root -quit'
tile='-root -quit'
center='-rmode 5 -root -quit'
2003-04-28 14:45:13 +00:00
aspect='-maxpect -smooth -root -quit'
2003-04-27 15:33:26 +00:00
;;
'')
message "Can't find and app to set the wallpaper with.
Use fbsetbg -d to find out what to do next"
exit 1
esac
#Get options.
2003-04-28 14:45:13 +00:00
getopts ":a:f:c:t:Tlh-" COMMAND_LINE_ARGUMENT
2003-04-27 15:33:26 +00:00
case "${COMMAND_LINE_ARGUMENT}" in
2003-04-28 14:45:13 +00:00
a) option=$aspect
wallpaper=$OPTARG
remembercommand
;;
2003-04-27 15:33:26 +00:00
f) option=$full
wallpaper=$OPTARG
2003-04-28 14:45:13 +00:00
remembercommand
2003-04-27 15:33:26 +00:00
;;
c) option=$center
wallpaper=$OPTARG
2003-04-28 14:45:13 +00:00
remembercommand
2003-04-27 15:33:26 +00:00
;;
t) option=$tile
wallpaper=$OPTARG
2003-04-28 14:45:13 +00:00
remembercommand
2003-04-27 15:33:26 +00:00
;;
l)
if [ -r $lastwallpaper ];then
option=$(head -n1 $lastwallpaper)
wallpaper=$(tail -n1 $lastwallpaper)
else
message 'No previous wallpaper recorded.'
fi
;;
h) display_help ; exit 0 ;;
T) display_tips ; exit 0 ;;
-) echo "fbsetbg doesn't recognize -- gnu-longopts."
echo "Use fbsetbg -h for a long help message."
display_usage
exit 1
;;
esac
option=${option:=$full}
wallpaper=${wallpaper:=$1}
if [ -z "$wallpaper" ];then
message 'No wallpaper to set'
exit 1
fi
if [ ! -r "$wallpaper" ];then
message "Can't find wallpaper $wallpaper"
exit 1
fi
$WPSETTER $option "$wallpaper" || message "Something went wrong while setting the wallpaper
Run '$WPSETTER $option "$wallpaper"' from an xterm to find out what."
#remember previous wallpaper