# For the time being, this file follows the lisp bracing # convention. i.e.: # if(frob this) { # frob that # if(frob theother) { # unfrob this # unfrob that}} wmiiscript=$1 wmiikeys=() wi_newline=' ' echo Start $wmiiscript | wmiir write /event >[2]/dev/null \ || exit write if(~ $scriptname '') scriptname=$wmiiscript # Blech. if(! test -x $PLAN9/bin/read) fn read { sh -c 'read -r x || exit 1; echo $x' } fn wi_atexit {} fn sigexit { wi_atexit } fn wi_fatal { echo $scriptname: Fatal: $* exit fatal } fn wi_notice { xmessage $scriptname: Notice: $* } fn wi_readctl { wmiir read /ctl | sed -n 's/^'$1' (.*)/\1/p' } wmiifont=`{wi_readctl font} wmiinormcol=`{wi_readctl normcolors} wmiifocuscol=`{wi_readctl focuscolors} fn wi_fnmenu { group=$1^Menu-$2 last=$group^_last fns=`{wi_getfuns $group} { shift 2 if(! ~ $#fns 0) { res = `{wmii9menu -i $"($last) $fns} \ if(! ~ $res '') { ($last) = $res $group-$res $*}}} } fn wi_fn-p { rc -c 'whatis '$1 >[2]/dev/null | grep -s '^fn ' } fn wi_proglist { ifs=: { wmiir proglist -- `{echo -n $*} | sort | uniq } } fn wi_actions { { wi_proglist $WMII_CONFPATH wi_getfuns Action } | sort | uniq } fn wi_script { noprog=true prog=() { if(~ $1 -f) { shift noprog=/dev/null } prog = `{rc -c 'path=$confpath whatis '$1 >[2]/dev/null \ | grep -v '^fn |=' || echo $noprog} shift; echo $prog $*} } fn wi_initkeys { ifs=() { wmiikeys = `{wmiir read /keys} { mykeys = `{comm -23 \ <{wi_getfuns Key | sort | uniq} \ <{echo $wmiikeys | sort | uniq}} {echo $wmiikeys; wi_getfuns Key} \ | sort | uniq \ | wmiir write /keys }} fn wi_atexit { wi_cleankeys } } fn wi_cleankeys { ifs=() { wmiikeys = `{wmiir read /keys} { comm -23 <{echo $wmiikeys | sort | uniq} \ <{echo $mykeys} \ | wmiir write /keys }} } fn wi_runcmd { @{ rfork ns path=$oldpath if(~ $1 -t) { shift * = (wihack -tags `{wmiir read /tag/sel/ctl | sed 1q} $*) } fn `{env | 9 sed -n 's/^fn#([^=]+).*/\1/p'} mykeys=() if(! ~ $* '') eval exec $* & } } fn wi_getfuns { env | sed -n 's/^fn#'^$1^'-([^=]+).*/\1/p' | sort | uniq } for(i in Key Event Action '*Menu') fns=`{wi_getfuns $i} { if(! ~ $fns '') fn $i-^$fns} fn wi_tags { wmiir ls /tag | sed 's,/,,; /^sel$/d' } fn wi_seltag { wmiir read /tag/sel/ctl | sed 1q } fn wi_selclient { wmiir read /client/sel/ctl | sed 1q } fn wi_readevent { wmiir read /event } fn wi_eventloop { wi_initkeys wi_readevent | while(ifs=$wi_ewlinel{wi_event=`{read}}) { ifs=$wi_newline{ wi_arg=`{echo $wi_event | sed 's/^[^ ]+ //'}} * = `{echo $wi_event} event = $1; shift Event-$"event $* } >[2]/dev/null