From 85bbf8d3d51ef892f4707fcbd6ffc841818175d1 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 6 Feb 2008 16:57:01 +0000 Subject: [PATCH] xinitrc: Support Emacs 22. 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 | 77 +++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/xinitrc b/xinitrc index e2674c6..06adb02 100755 --- 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" -- 2.11.0