#!/bin/bash # LOC ~/scripts/xtermmaker.sh # CVS $Id: xtermmaker.sh,v 1.4 2003/10/13 11:17:20 heinzel Exp $ version='xtermmaker.sh Version 3.4 $Revision: 1.4 $ ($Date: 2003/10/13 11:17:20 $ $Author: heinzel $)' ### config ### xterm=xterm xterm_opts="-sb -sl 1024" many=1 rsh=ssh host="" user="" color=RAND theme=light theme_traditional="SteelBlue,SeaGreen,orange,gold,tomato,CadetBlue,SlateGrey,MediumSeaGreen,Goldenrod" theme_light="SlateGrey,MediumSeaGreen,Goldenrod,IndianRed,CadetBlue,DarkSeaGreen,khaki,CornflowerBlue,orange" theme_blay="lavender,DimGray,SlateGray,LightSlateGray,LightSteelBlue,SkyBlue,CornflowerBlue,SteelBlue" themes="`set | grep "^theme_" | cut -f1 -d= | cut -c7- | tr '\n' ' '`" # if cols > 0, we arange the possitions of the xterms in $cols columns cols=0 hoffset=64 voffset=64 width=499 height=348 space=4 ### functions ### print_version() { echo "$version" } print_help() { cat <] [-C ] [-u ] [-r ] [-c ] [-g] [-b] [-z] [-t ] [-h,--help] [-V,--version] -n Opens xterms (default: $number). -C If specified, the xterms will be aranged in columns. -r Exec remote shell to the specified hostname. -u Specifies the username for the remote host. -c Set the backgroundcolor of the xterms. -g Same as -c Gray. -b Generates 'Bunte XTerms' in serial sequence. -z Generates 'Bunte XTerms' in random sequence (default). -t Use color theme for 'Bunte XTerms'. Possible themes: $themes (default: $theme) EOH } rand() { # Usage: rand local i="${1:-1}" local f="/dev/urandom" local b="" local p=0 b="`dd if=\"$f\" bs=8 count=1 2>/dev/null | md5sum | \ tr -d \"[:alpha:] [:punct:]\" | cut -c-2`" expr \( $b \* $i \) / 100 + 1 } ### argv ### # read arguments from stdin while test $# -gt 0 ; do case "$1" in -h|-help|--help) print_help exit 0 ;; -V|-version|--version) print_version exit 0 ;; -n|-number|--number) many="$2" shift shift ;; -C|-cols|--cols) cols="$2" shift shift ;; -c|-color|--color) color="$2" shift shift ;; -g) color=Gray shift ;; -b) color=BUNT shift ;; -z) color=RAND shift ;; -t|-theme|--theme) theme="$2" shift shift ;; -u|-user|--user) user="$2" shift shift ;; -r|-host|--host) host="$2" shift shift ;; esac done ### action ### test "$many" || number=1 # position of the first window column=1 hpos="$hoffset" vpos="$voffset" eval colors=\$theme_$theme ncolors="`echo \"$colors\" | tr -d [[:alnum:]]`" ncolors="${#ncolors}" xterm_count=1 color_count=1 until test $xterm_count -gt $many ; do title_opt="-title $xterm_count" case "$color" in BUNT) bg_opt="-bg `echo $colors | cut -f $color_count -d ,`" if test "$color_count" -le "$ncolors" ; then color_count=`expr $color_count + 1` else color_count=1 fi ;; RAND) color_count=`rand $ncolors` bg_opt="-bg `echo $colors | cut -f $color_count -d ,`" ;; *) bg_opt="-bg $color" ;; esac fg_opt="-fg black" if test "$cols" -gt 0 ; then # position for this window pos_opt="-geometry +${hpos}+${vpos}" # calculate the position for the next window if test "$column" -lt "$cols" ; then # current column is less than max columns -> # we can place the next window right of this one column="`expr $column + 1`" hpos="`expr $hpos + $width + $space`" else # we need a new row column=1 hpos="$hoffset" vpos="`expr $vpos + $height + $space`" fi else pos_opt="" fi if test "$host" ; then t=$host test "$user" && t="${user}@${host}" exec_opt="-e $rsh $t" fi $xterm $xterm_opts $title_opt $bg_opt $fg_opt $pos_opt $exec_opt & xterm_count=`expr $xterm_count + 1` done exit 0