Документ взят из кэша поисковой машины. Адрес оригинального документа : http://hea-www.harvard.edu/~fine/Tech/cde-backdrop
Дата изменения: Fri Nov 1 19:59:59 2002
Дата индексирования: Tue Oct 2 00:02:22 2012
Кодировка:

Поисковые слова: п п п п п п п п п п п п п
#!/bin/sh

#
# cde-backdrop
# Copyright © 2002 Thomas A. Fine
# License is hereby granted to redistribute for any use (commercial or
# otherwise), in whole or in part, provided only that this copyright and
# license are preserved.
#
# Version 1.0 Fri Sep 6 15:24:49 EDT 2002
#
# For the latest version and additional information:
# http://hea-www.harvard.edu/~fine/Tech/cde-backdrop.html
#
# To Install:
# 1. stick this file in your path
# 2. edit the PATH line below to add additional directories needed
# to find xprop, xloadimage, xwininfo, djpeg, or tifftopnm
# 3. Make sure the file is executable
#
PATH=/soft/netpbm/bin:/usr/local/bin:$PATH

if [ $# -eq 1 ]
then
targetws=""
image=$1
elif [ $# -eq 2 ]
then
targetws=$1
image=$2
else
echo "usage: $0 "'[ workspace | -select ] image-file'
echo ' "workspace" can be the name shown on the front panel button or'
echo ' a string of the form ws, where is a number starting at 0.'
echo ' If "-select" is chosen, you must click the mouse on the background.'
echo ' If no workspace is given, the current workspace is used.'
echo " $0 "'-list'
echo ' List all available workspaces (for use with other programs).'
echo " $0 "'[ workspace | -select ] -id'
echo ' Show the window id of the cde backdrop for the selected workspace.'
exit 1
fi


setvalues() {
tmpws=$1
shift
eval ${tmpws}_backdrop="$7"
eval ${tmpws}_name=\""$1"\"
}

name2ws() {
for ws in $WS_list
do
eval tmp_name=\$${ws}_name
if [ "$tmp_name" = "$1" ]
then
echo $ws
return 0
fi
done
return 1
}

name2backdrop() {
for ws in $WS_list
do
eval tmp_name=\$${ws}_name
if [ "$tmp_name" = "$1" ]
then
eval echo \$${ws}_backdrop
return 0
fi
done
return 1
}


find_ws_backdrop() {
# The _MOTIF_WM_INFO property of the root window points to another
# window where we can find workspace info
# Similar but less complete info can be found by checking the props from
# the window referred to by _SUN_SdtWmCommPropWindow
win=`xprop -notype -root _MOTIF_WM_INFO | awk '{ print $4 }'`
# Now we get the properties of this new window
info="`xprop -notype -id $win`"
# Extract the current workspace id from the appropriate property
WS_current=`echo "$info" | grep _DT_WORKSPACE_CURRENT | awk '{ print $3 }'`
# Extract a list of all workspaces from the appropriate property
WS_list=`echo "$info" | grep _DT_WORKSPACE_LIST | sed 's/^.* = //' | sed 's/,//g'`

# The _DT_WORKSPACE_INFO_ws0 property contains information on workspace
# ws0, including the name, and the backdrop window id. The setvalues
# function (above) parses this property into the needed fields.
for ws in $WS_list
do
tmp_info="`echo "$info" | grep _DT_WORKSPACE_INFO_$ws | sed 's/^.* = //' | sed 's/,//g'`"
eval ${ws}_info=\'"$tmp_info"\'
eval setvalues $ws "$tmp_info"
done

if [ $# -eq 0 -o "$1" = "current" -o "$1" = "" ]
then
eval backdrop=\$${WS_current}_backdrop
else
backdrop=`name2backdrop "$1"`
if [ "$backdrop" = "" ]
then
case $1 in
ws[0-9])
eval backdrop=\$${1}_backdrop
;;
*)
backdrop=""
;;
esac
fi
fi
echo $backdrop
}

list_backdrops() {
# see comments in find_ws_backdrop()
win=`xprop -notype -root _MOTIF_WM_INFO | awk '{ print $4 }'`
info="`xprop -notype -id $win`"
echo "$info" | grep _DT_WORKSPACE_LIST | sed 's/^.* = //' | sed 's/,//g'
}


if [ "$image" = "-list" ]
then
list_backdrops
exit 0
fi

if [ "$targetws" = "-select" ]
then
echo Please click on the background...

#xwininfo: Window id: 0x3400028 (has no name)
winid=`xwininfo | grep 'Window id:' | sed 's/^.*Window id: //' | sed 's/ .*$//'`
else
winid=`find_ws_backdrop $targetws`
if [ "$winid" = "" ]
then
echo "Can't find workspace called $targetws"
exit 1
fi
fi

if [ "$image" = "-id" ]
then
echo $winid
exit 0
fi

case $image in
*.ppm | *.PPM | *.pgm | *.PGM | *.pbm | *.PBM )
CONVERT_COMMAND=cat
;;
*.gif | *.GIF)
CONVERT_COMMAND=cat
;;
*.jpg | *.JPG | *.jpeg | *.JPEG)
#latest xloadimage might handle JPEG directly (e.g. try using "cat")
CONVERT_COMMAND="djpeg -pnm"
;;
*.tif | *.tiff | *.TIF | *.TIFF | *.Tiff)
#latest xloadimage might handle TIFF directly (e.g. try using "cat")
CONVERT_COMMAND=tifftopnm
;;
*)
echo unrecognized file type, lets hope xloadimage supports it
CONVERT_COMMAND=cat
;;
esac

$CONVERT_COMMAND $image | xloadimage -windowid $winid stdin


## Also tried dtksh, but could only figure out how to get the current backdrop
## window:
##!/usr/dt/bin/dtksh
#
#textDISPLAY=$DISPLAY
#
#XtInitialize WIDGET wsInfo wsInfo
#XtScreen SCREEN $WIDGET
#XtDisplay DISPLAY $WIDGET
#XRootWindowOfScreen ROOTWIN $SCREEN
#
#DtWsmGetWorkspaceList $DISPLAY $ROOTWIN WSLIST
#DtWsmGetCurrentBackdropWindow $DISPLAY $ROOTWIN BDWIN
#
## workspace list (WSLIST) is a list of atoms, to get the names use:
##XmGetAtomName tmp $DISPLAY $atom
## to go in the other direction, use (example below for workspace 2)
##XmInternAtom tmp $DISPLAY ws2 True
#
##This doesn't work - causes a core dump
##DtWsmSetCurrentWorkspace $WIDGET $tmp