guile: Turn on the persistent history.
[profile] / xinitrc
diff --git a/xinitrc b/xinitrc
index 4e52f4b..43ca142 100755 (executable)
--- a/xinitrc
+++ b/xinitrc
@@ -1,6 +1,7 @@
 #! /bin/bash
 
-xrdb -override $HOME/.Xdefaults
+xx= tt=:; if [ "$XINIT_TEST" != "" ]; then xx=: tt=echo; set -x; fi
+$xx xrdb -override $HOME/.Xdefaults
 : ${VNCSESSION=false}
 export __mdw_sechost="`hostname`"
 
@@ -10,29 +11,42 @@ cleanup=":"
 xset b 10 2000 50
 xset r rate 500 50
 xset m 1 1
-gnome-settings-daemon&
-mail-notification&
-$VNCSESSION || gkrellm&
-eval `xscsize -bx`
+$xx mail-notification&
+$xx $VNCSESSION || $xx gkrellm&
+if [ "$XINIT_TEST" = "" ] || [ "$XWIDTH" = "" ] || [ "$XHEIGHT" = "" ]; then
+  eval `xscsize -bx`
+fi
 
 # --- Crank up ESD ---
 
-if ! [ -r /tmp/.esd/socket ]; then
+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 ---
 
-enlightenment $EOPTS&
+: ${wm=$(pick_program enlightenment e16)}
+$tt Window manager is $wm.
+$xx $wm $EOPTS&
 
 # --- Crank up a screenlock program ---
 
-if ! $VNCSESSION; then
+if ! $xx $VNCSESSION; then
   xscreensaver-command -exit
   xscreensaver -no-splash&
+  $xx gnome-settings-daemon&
+  $xx gnome-panel&
 fi
-gnome-panel&
 
 # --- Emacs window measurements ---
 #
@@ -40,14 +54,33 @@ gnome-panel&
 # Column character width = 82; Emacs magic overhead = -2
 # Vertical line pixel height = 13; misc overhead = 52
 
-emacs="noip emacs"
+: ${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 504 (fixed).
+# Window width is 503 (fixed).
 # Vertical line pixel height = 13; misc overhead = 23
 
-xterm="Eterm" xgeom=-geometry
+: ${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 ---
 #
@@ -64,15 +97,15 @@ declare -i xbound="XWIDTH - 113"
 # and the toolbar, so we add on some rows which are later mysteriously
 # subtracted.
 
-declare -i ecols="(xbound - 504 - 34)/492"
-if (( ecols < 2 && xbound > 492 * 2 + 34 )); then
+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 * 492 + 34"
-$emacs -geometry $((ecols * 82 - 2))x$(((XHEIGHT - 52)/13))+0+0&
+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 ---
 #
@@ -85,29 +118,29 @@ $emacs -geometry $((ecols * 82 - 2))x$(((XHEIGHT - 52)/13))+0+0&
 # xterms.
 
 declare -i n=0 pgx=0 l h y ht
-declare -i hstd="35 * 13 + 23" hmin="25 * 13 + 23"
+declare -i hstd="35 * t_lineht + t_vextra" hmin="25 * t_lineht + t_vextra"
 while true; do
-  if ((x + 504 > xbound)); then
+  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
-    $xterm -$xgeom 80x35+$x+$y&
+    $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 - 23)/13" h="l * 13 + 23"
-  $xterm -$xgeom 80x$l+$x+$y&
+  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
-    $xterm -$xgeom 80x25+$x+$y&
+    $term $geom 80x25+$x+$y&
     n="n + 1"
   fi
-  x="x + 504"
+  x="x + t_wd"
 done
 
 # --- Wait for the world to end ---
 
-xwait XWAIT_DIE:XWAIT_DIE_NOW
-eval "$cleanup"
+$xx xwait XWAIT_DIE:XWAIT_DIE_NOW
+$xx eval "$cleanup"