Commit | Line | Data |
---|---|---|
f617db13 MW |
1 | #! /bin/bash |
2 | ||
85bbf8d3 MW |
3 | xx= tt=:; if [ "$XINIT_TEST" != "" ]; then xx=: tt=echo; set -x; fi |
4 | $xx xrdb -override $HOME/.Xdefaults | |
ec2de2b7 | 5 | : ${VNCSESSION=false} |
f617db13 MW |
6 | export __mdw_sechost="`hostname`" |
7 | ||
8 | # --- Do some fiddling --- | |
9 | ||
10 | cleanup=":" | |
11 | xset b 10 2000 50 | |
12 | xset r rate 500 50 | |
13 | xset m 1 1 | |
85bbf8d3 MW |
14 | $xx mail-notification& |
15 | $xx $VNCSESSION || $xx gkrellm& | |
16 | if [ "$XINIT_TEST" = "" ] || [ "$XWIDTH" = "" ] || [ "$XHEIGHT" = "" ]; then | |
17 | eval `xscsize -bx` | |
18 | fi | |
f617db13 MW |
19 | |
20 | # --- Crank up ESD --- | |
21 | ||
85bbf8d3 | 22 | if ! $xx [ -r /tmp/.esd/socket ]; then |
f617db13 MW |
23 | esd -nobeeps -as 10& |
24 | cleanup="$cleanup; kill $!" | |
25 | fi | |
26 | ||
eebca092 MW |
27 | # --- Picking appropriate programs --- |
28 | ||
29 | pick_program () { | |
30 | for i in "$@"; do | |
31 | if type -t >/dev/null "$i"; then echo "$i"; return; fi | |
32 | done | |
33 | echo false | |
34 | } | |
35 | ||
f617db13 MW |
36 | # --- Start a nice window manager --- |
37 | ||
eebca092 MW |
38 | : ${wm=$(pick_program enlightenment e16)} |
39 | $tt Window manager is $wm. | |
40 | $xx $wm $EOPTS& | |
f617db13 MW |
41 | |
42 | # --- Crank up a screenlock program --- | |
43 | ||
85bbf8d3 | 44 | if ! $xx $VNCSESSION; then |
f617db13 MW |
45 | xscreensaver-command -exit |
46 | xscreensaver -no-splash& | |
3ca53efc MW |
47 | $xx gnome-settings-daemon& |
48 | $xx gnome-panel& | |
f617db13 | 49 | fi |
f617db13 MW |
50 | |
51 | # --- Emacs window measurements --- | |
52 | # | |
53 | # Horizontal column pixel width = 492; window manager overhead = 34 | |
54 | # Column character width = 82; Emacs magic overhead = -2 | |
55 | # Vertical line pixel height = 13; misc overhead = 52 | |
56 | ||
85bbf8d3 MW |
57 | : ${emacs=$(pick_program emacs22 emacs21)} |
58 | $tt Using editor $emacs. | |
59 | case "$emacs" in | |
60 | emacs21) | |
61 | e_colwd=492 e_hextra=34 | |
62 | e_colchars=82 e_cextra=-2 | |
63 | e_lineht=13 e_vextra=52 | |
64 | ;; | |
65 | emacs22) | |
66 | e_colwd=492 e_hextra=8 | |
67 | e_colchars=82 e_cextra=-6 | |
68 | e_lineht=13 e_vextra=46 | |
69 | ;; | |
70 | esac | |
f617db13 MW |
71 | |
72 | # --- Xterm window measurements --- | |
73 | # | |
1c6b19d4 | 74 | # Window width is 503 (fixed). |
f617db13 MW |
75 | # Vertical line pixel height = 13; misc overhead = 23 |
76 | ||
85bbf8d3 MW |
77 | : ${term=$(pick_program pterm Eterm xterm)} |
78 | $tt Using terminal $tt | |
79 | case "$term" in | |
80 | pterm) t_wd=503 t_lineht=13 t_vextra=23 geom=-geometry;; | |
81 | Eterm) t_wd=504 t_lineht=13 t_vextra=23 geom=-g;; | |
82 | xterm) t_wd=507 t_lineht=13 t_vextra=27 geom=-geometry;; | |
83 | esac | |
f617db13 MW |
84 | |
85 | # --- GNOME stuff measurements --- | |
86 | # | |
87 | # GNOME panel width = 113 | |
88 | ||
89 | declare -i xbound="XWIDTH - 113" | |
90 | ||
91 | # --- Choose a width for Emacs --- | |
92 | # | |
93 | # We'd like it to be as wide as possible, allowing for a column of xterms | |
94 | # down the right hand side. However, I'd prefer a double-width Emacs to a | |
95 | # single-width Emacs and xterms. If it's not going to work at all, a single | |
96 | # Emacs column will have to do. Also, there's a strange thing with Emacs21 | |
97 | # and the toolbar, so we add on some rows which are later mysteriously | |
98 | # subtracted. | |
99 | ||
85bbf8d3 MW |
100 | declare -i ecols="(xbound - t_wd - e_hextra)/e_colwd" |
101 | if (( ecols < 2 && xbound > e_colwd * 2 + e_hextra )); then | |
f617db13 MW |
102 | ecols=2 |
103 | elif (( ecols < 1 )); then | |
104 | ecols=1 | |
105 | fi | |
106 | ||
85bbf8d3 MW |
107 | declare -i x="ecols * e_colwd + e_hextra" |
108 | noip $emacs -geometry $((ecols * e_colchars + e_cextra))x$(((XHEIGHT - e_vextra)/e_lineht))+0+0& | |
f617db13 MW |
109 | |
110 | # --- Now place some xterms --- | |
111 | # | |
112 | # A few smaller xterms are in general better than one great big one. 35 | |
113 | # lines is a good height for most terminals. 25 lines is a minimum. The | |
114 | # strategy for doling out xterms into a column is to make as many 35-liners | |
115 | # as we can, until the remaining space would be too small for a 25-liner. If | |
116 | # we can get two 25s out of that then we do (largest first); otherwise just | |
117 | # make one big one. We stop at the end of a page, once we've made three | |
118 | # xterms. | |
119 | ||
120 | declare -i n=0 pgx=0 l h y ht | |
85bbf8d3 | 121 | declare -i hstd="35 * t_lineht + t_vextra" hmin="25 * t_lineht + t_vextra" |
f617db13 | 122 | while true; do |
85bbf8d3 | 123 | if ((x + t_wd > xbound)); then |
f617db13 MW |
124 | if ((n >= 3)); then break; fi |
125 | x="pgx + XWIDTH" pgx="pgx + XWIDTH" xbound="xbound + XWIDTH" | |
126 | fi | |
127 | y=0 ht=XHEIGHT | |
128 | while ((ht - hstd >= hmin)); do | |
85bbf8d3 | 129 | $term $geom 80x35+$x+$y& |
f617db13 MW |
130 | y="y + hstd" ht="ht - hstd" n="n + 1" |
131 | done | |
132 | if ((ht >= 2 * hmin)); then h="ht - hmin"; else h=ht; fi | |
85bbf8d3 MW |
133 | l="(h - t_vextra)/t_lineht" h="l * t_lineht + t_vextra" |
134 | $term $geom 80x$l+$x+$y& | |
f617db13 MW |
135 | y="y + h" ht="ht - h" n="n + 1" |
136 | if ((ht >= hmin)); then | |
85bbf8d3 | 137 | $term $geom 80x25+$x+$y& |
f617db13 MW |
138 | n="n + 1" |
139 | fi | |
85bbf8d3 | 140 | x="x + t_wd" |
f617db13 MW |
141 | done |
142 | ||
143 | # --- Wait for the world to end --- | |
144 | ||
85bbf8d3 MW |
145 | $xx xwait XWAIT_DIE:XWAIT_DIE_NOW |
146 | $xx eval "$cleanup" |