chiark / gitweb /
xinitrc: Support Emacs 22.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 6 Feb 2008 16:57:01 +0000 (16:57 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 6 Feb 2008 17:00:35 +0000 (17:00 +0000)
Also overhaul it so that it can pick out sensible Emacs and terminal
programs, and parameterize the placement algorithm so that it can cope.

Finally, add some testing infrastructure so that I don't have to log out
and in again to see if I fixed it properly!

xinitrc

diff --git a/xinitrc b/xinitrc
index e2674c6c9af178aa02ce5a7472620c0928030a72..06adb02bd1c35d3276937b17996d46226bffdcc2 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,31 @@ 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 gnome-settings-daemon&
+$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
 
 # --- Start a nice window manager ---
 
-enlightenment $EOPTS&
+$xx enlightenment $EOPTS&
 
 # --- Crank up a screenlock program ---
 
-if ! $VNCSESSION; then
+if ! $xx $VNCSESSION; then
   xscreensaver-command -exit
   xscreensaver -no-splash&
 fi
-gnome-panel&
+$xx gnome-panel&
 
 # --- Emacs window measurements ---
 #
@@ -40,14 +43,40 @@ gnome-panel&
 # Column character width = 82; Emacs magic overhead = -2
 # Vertical line pixel height = 13; misc overhead = 52
 
-emacs="noip emacs"
+pick_program () {
+  for i in "$@"; do
+    if type -t >/dev/null "$i"; then echo "$i"; return; fi
+  done
+  echo false
+}
+
+: ${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
 
-xterm="pterm" 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 +93,15 @@ declare -i xbound="XWIDTH - 113"
 # and the toolbar, so we add on some rows which are later mysteriously
 # subtracted.
 
-declare -i ecols="(xbound - 503 - 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 +114,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 + 503 > 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 + 503"
+  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"