1#!sh 2# WMII Configuration 3load std string regex expr echo 4 5argv0 = $0 6 7#mount -Aa {os dial unix!/tmp/ns.kris.:1/wmii >[1=0]} / || raise mount 8#mount -Aa {styxmon {os rc -c 'dial $WMII_ADDRESS' >[1=0]}} / || raise mount 9mount -Aa {os rc -c 'dial $WMII_ADDRESS' >[1=0]} / || raise mount 10 11{`{read} && echo halt>/dev/sysctl}& 12 13MODKEY=Mod1 14UP=k 15DOWN=j 16LEFT=h 17RIGHT=l 18 19WMII_FONT=fixed 20WMII_NORMCOLORS=('#222222' '#5FBF77' '#2A7F3F') 21WMII_FOCUSCOLORS=('#ffffff' '#153F1F' '#2A7F3F') 22WMII_BACKGROUND='#333333' 23 24WMII_TERM=urxvt 25 26fn wmiimenu { 27 (nf nb nil sf sb nil) := ($WMII_NORMCOLORS $WMII_FOCUSCOLORS) 28 os -d ${hostenv HOME} ( 29 dmenu -b -fn $WMII_FONT 30 -nf $nf -nb $nb -sf $sf -sb $sb) 31} 32 33fn 9menu { 34 os -d ${hostenv HOME} ( 35 wmii9menu -font ${hd ${split , $WMII_FONT}} 36 -^(nf nb br)^$WMII_NORMCOLORS 37 -^(sf sb br)^$WMII_FOCUSCOLORS $*) 38} 39 40# Column Rules 41echo '/./ -> 60+40' >/colrules 42 43# Tagging Rules 44echo ' 45/Firefox/ -> www 46/XMMS.*/ -> ~ 47/MPlayer.*/ -> ~ 48/.*/ -> ! 49/.*/ -> 1 50' >/tagrules 51 52subfn seq { 53 result=${expr $* seq} 54} 55 56subfn hostenv { 57 arg := $"* 58 result="{os rc -c 'echo -n $'^$arg </dev/null} 59} 60 61subfn ftl { 62 result=${tl $*} 63 result=$"result 64} 65 66subfn lines { 67 ifs := "{echo} 68 arg := $* 69 result = `{$arg} 70} 71 72fn 'fn?' { 73 args := $* 74 ~ ("{rescue '*' {} {whatis $args >[2]/dev/null}} 75 'load std; fn '*) 76} 77 78fn ifx { 79 (pred fn val args) := $* 80 if {$pred $val} {$fn $val $args} 81} 82 83fn dofn { 84 ifx 'fn?' {$*} $* 85} 86 87fn run_command { 88 os -b -d ${hostenv HOME} $* & 89} 90 91fn dprint { 92 arg := $* 93 or {~ $#debug 0} {~ $debug '' 0} { echo $arg } 94} 95 96subfn config_whatis { 97 result=${lines {os rc -c 'PATH=$WMII_CONFPATH which $*' $* </dev/null} $*} 98} 99 100# Status Bar Info 101fn status { 102 echo ${re mg '[0-9]+\.[0-9]+' "{os uptime}} '|' `{date} 103} 104 105for(i in Key Event Action) { 106 '{fn $i { fn '$i'-$1 ${tl $*} }}' 107} 108 109# Events 110Event Start { 111 if {~ $1 wmiirc} { 112 rm -f $progs_file 113 exit 114 } 115} 116 117Event Key { 118 dprint Key-$1 119 Key-$1 $1 120} 121 122Event CreateTag { echo $WMII_NORMCOLORS $* > /lbar/$"* } 123Event DestroyTag { rm /lbar/$"* } 124Event FocusTag { echo $WMII_FOCUSCOLORS $* > /lbar/$"* } 125Event UnfocusTag { echo $WMII_NORMCOLORS $* > /lbar/$"* } 126Event UrgentTag { echo '*'${ftl $*} > /lbar/${ftl $*} } 127Event NotUrgentTag { echo ${tl $*} > /lbar/${ftl $*} } 128 129Event LeftBarClick { 130 (button name) := $* 131 if {~ $button 1} { echo view $name >/ctl } 132} 133Event LeftBarMouseDown { 134 (button name) := $* 135 if {~ $button 3} { echo view "{9menu ${lines read_tags}} >/ctl & } 136} 137lastcmd='' 138Event ClientMouseDown { 139 (client button) := $* 140 if {~ $button 3} { 141 lastcmd = `{9menu -initial $lastcmd Nop Delete Fullscreen} 142 cmp := {~ $lastcmd $*} 143 if {$cmp Nop} { 144 } {$cmp Delete} { echo kill >/client/$client/ctl 145 } {$cmp Fullscreen} { echo Fullscreen toggle >/client/$client/ctl 146 } 147 } 148} 149 150# Actions 151Action quit { echo quit >>/ctl } 152Action rehash { 153 flag x - 154 proglist ${hostenv PATH} >$progs_file 155} 156Action status { 157 flag x - 158 if {rm /rbar/status >[2]/dev/null} { sleep 1 } 159 echo $WMII_NORMCOLORS >/rbar/status 160 while {status >/rbar/status} { sleep 1 } 161} 162 163ifx {ftest -x $*} {run $*} $home/.wmii-3.5/sh.wmii.local 164fn Key { ifx {! 'fn?' $*} {fn $*} Key-$1 ${tl $*} } 165 166fn Action { 167 (action args) := $* 168 or {dofn Action-$action $args} { 169 ifx {! ~ $#* 0} {run_command $*} ${config_whatis $action} $args 170 } 171} 172 173# Key Bindings 174Key $MODKEY-Control-t { 175 if { ~ `{wc -l /keys} 0 1} { 176 initkeys 177 grabmod $MODKEY >/ctl 178 } { 179 echo $MODKEY-Control-t >/keys 180 echo grabmod Mod3 >/ctl 181 } 182} 183 184Key $MODKEY-$LEFT { echo select left >/tag/sel/ctl } 185Key $MODKEY-$RIGHT { echo select right >/tag/sel/ctl } 186Key $MODKEY-$UP { echo select up >/tag/sel/ctl } 187Key $MODKEY-$DOWN { echo select down >/tag/sel/ctl } 188 189Key $MODKEY-Shift-$LEFT { echo send sel left >/tag/sel/ctl } 190Key $MODKEY-Shift-$RIGHT { echo send sel right >/tag/sel/ctl } 191Key $MODKEY-Shift-$DOWN { echo send sel down >/tag/sel/ctl } 192Key $MODKEY-Shift-$UP { echo send sel up >/tag/sel/ctl } 193 194Key $MODKEY-space { echo select toggle >/tag/sel/ctl } 195Key $MODKEY-Shift-space { echo send sel toggle >/tag/sel/ctl } 196 197Key $MODKEY-d { echo colmode sel default >/tag/sel/ctl } 198Key $MODKEY-s { echo colmode sel stack >/tag/sel/ctl } 199Key $MODKEY-m { echo colmode sel max >/tag/sel/ctl } 200 201Key $MODKEY-f { echo Fullscreen toggle >/client/sel/ctl } 202 203Key $MODKEY-Shift-c { echo kill >/client/sel/ctl } 204 205Key $MODKEY-a { Action `{actionlist | wmiimenu} & } 206Key $MODKEY-p { run_command rc -c "{wmiimenu <$progs_file} & } 207Key $MODKEY-Return { run_command $WMII_TERM & } 208Key $MODKEY-t { echo view `{read_tags | wmiimenu} >/ctl & } 209Key $MODKEY-Shift-t { 210 sel := "{cat /client/sel/ctl} 211 read_tags | wmiimenu >/client/$sel/tags 212} 213 214Key $MODKEY-^${seq 0 9} { echo view ${tl ${splitr $1 -}} >/ctl } 215Key Shift-$MODKEY-${seq 0 9} { echo ${tl ${splitr $1 -}} >/client/sel/tags} 216 217# Functions 218fn proglist { 219 os find ${split : $"*} -maxdepth 1 -type f </dev/null | sed 's,.*/,,' | sort | uniq 220 #for(d in /n/local^${split : $"*}) { 221 # fs filter {mode -d} $d 222 #} | sed 's,.*/,,' | sort | uniq 223} 224 225fn getfuns { 226 ls -p /env | sed -n 's/^fn-' ^ $1 ^ '-//p' 227} 228 229fn actionlist { 230 { rescue '*' {} { 231 proglist ${hostenv WMII_CONFPATH} 232 } 233 getfuns Action 234 } | sort | uniq 235} 236 237fn initkeys { 238 getfuns Key >/keys 239} 240 241fn read_tags { 242 ls -p /tag | grep -v '^sel$' 243} 244 245# WM Configuration 246{ 247 echo grabmod $MODKEY 248 echo border 2 249 echo font $WMII_FONT 250 echo focuscolors $WMII_FOCUSCOLORS 251 echo normcolors $WMII_NORMCOLORS 252} >/ctl 253 254# Misc Setup 255os xsetroot -solid $WMII_BACKGROUND </dev/null 256 257dofn Local-Overrides 258 259Action status & 260progs_file=/tmp/proglist.${pid} 261Action rehash & 262 263# Tag Bar Setup 264seltag=${lines sed 1q /tag/sel/ctl} 265comm -13 ${pipe from {read_tags}} ${pipe from {ls -p /lbar/*}} | 266 getlines { rm /lbar/$line } 267read_tags | getlines { 268 if {~ $line $seltag} { 269 echo $WMII_FOCUSCOLORS $line 270 } { 271 echo $WMII_NORMCOLORS $line 272 } >/lbar/$line 273} 274 275# Keygrab Setup 276initkeys 277 278echo Start wmiirc >/event 279 280# Event Loop 281getlines { 282 (event args) := ${split ' ' $line} 283 dprint Event-$event: $args 284 rescue '*' { dprint Exception: $exception } { 285 dofn Event-$event $args 286 } </dev/null 287 dprint loop 288} </event 289 290