#! /bin/bash xx= tt=:; if [ "$XINIT_TEST" != "" ]; then xx=: tt=echo; set -x; fi $xx xrdb -override $HOME/.Xdefaults : ${VNCSESSION=false} export __mdw_sechost="`hostname`" # --- Do some fiddling --- cleanup=":" xset b 10 2000 50 xset r rate 500 50 xset m 1 1 $xx gnome-settings-daemon& $xx mail-notification& $xx $VNCSESSION || $xx gkrellm& if [ "$XINIT_TEST" = "" ] || [ "$XWIDTH" = "" ] || [ "$XHEIGHT" = "" ]; then eval `xscsize -bx` fi # --- Crank up ESD --- if ! $xx [ -r /tmp/.esd/socket ]; then esd -nobeeps -as 10& cleanup="$cleanup; kill $!" fi # --- Picking appropriate programs --- pick_program () { for i in "$@"; do if type -t >/dev/null "$i"; then echo "$i"; return; fi done echo false } # --- Start a nice window manager --- : ${wm=$(pick_program enlightenment e16)} $tt Window manager is $wm. $xx $wm $EOPTS& # --- Crank up a screenlock program --- if ! $xx $VNCSESSION; then xscreensaver-command -exit xscreensaver -no-splash& fi $xx gnome-panel& # --- Emacs window measurements --- # # Horizontal column pixel width = 492; window manager overhead = 34 # Column character width = 82; Emacs magic overhead = -2 # Vertical line pixel height = 13; misc overhead = 52 : ${emacs=$(pick_program emacs22 emacs21)} $tt Using editor $emacs. case "$emacs" in emacs21) e_colwd=492 e_hextra=34 e_colchars=82 e_cextra=-2 e_lineht=13 e_vextra=52 ;; emacs22) e_colwd=492 e_hextra=8 e_colchars=82 e_cextra=-6 e_lineht=13 e_vextra=46 ;; esac # --- Xterm window measurements --- # # Window width is 503 (fixed). # Vertical line pixel height = 13; misc overhead = 23 : ${term=$(pick_program pterm Eterm xterm)} $tt Using terminal $tt case "$term" in pterm) t_wd=503 t_lineht=13 t_vextra=23 geom=-geometry;; Eterm) t_wd=504 t_lineht=13 t_vextra=23 geom=-g;; xterm) t_wd=507 t_lineht=13 t_vextra=27 geom=-geometry;; esac # --- GNOME stuff measurements --- # # GNOME panel width = 113 declare -i xbound="XWIDTH - 113" # --- Choose a width for Emacs --- # # We'd like it to be as wide as possible, allowing for a column of xterms # down the right hand side. However, I'd prefer a double-width Emacs to a # single-width Emacs and xterms. If it's not going to work at all, a single # Emacs column will have to do. Also, there's a strange thing with Emacs21 # and the toolbar, so we add on some rows which are later mysteriously # subtracted. declare -i ecols="(xbound - t_wd - e_hextra)/e_colwd" if (( ecols < 2 && xbound > e_colwd * 2 + e_hextra )); then ecols=2 elif (( ecols < 1 )); then ecols=1 fi declare -i x="ecols * e_colwd + e_hextra" noip $emacs -geometry $((ecols * e_colchars + e_cextra))x$(((XHEIGHT - e_vextra)/e_lineht))+0+0& # --- Now place some xterms --- # # A few smaller xterms are in general better than one great big one. 35 # lines is a good height for most terminals. 25 lines is a minimum. The # strategy for doling out xterms into a column is to make as many 35-liners # as we can, until the remaining space would be too small for a 25-liner. If # we can get two 25s out of that then we do (largest first); otherwise just # make one big one. We stop at the end of a page, once we've made three # xterms. declare -i n=0 pgx=0 l h y ht declare -i hstd="35 * t_lineht + t_vextra" hmin="25 * t_lineht + t_vextra" while true; do if ((x + t_wd > xbound)); then if ((n >= 3)); then break; fi x="pgx + XWIDTH" pgx="pgx + XWIDTH" xbound="xbound + XWIDTH" fi y=0 ht=XHEIGHT while ((ht - hstd >= hmin)); do $term $geom 80x35+$x+$y& y="y + hstd" ht="ht - hstd" n="n + 1" done if ((ht >= 2 * hmin)); then h="ht - hmin"; else h=ht; fi l="(h - t_vextra)/t_lineht" h="l * t_lineht + t_vextra" $term $geom 80x$l+$x+$y& y="y + h" ht="ht - h" n="n + 1" if ((ht >= hmin)); then $term $geom 80x25+$x+$y& n="n + 1" fi x="x + t_wd" done # --- Wait for the world to end --- $xx xwait XWAIT_DIE:XWAIT_DIE_NOW $xx eval "$cleanup"