index.md (6767B)
1 Kris Maglione aka JG 2 ==================== 3 4 I'm the maintainer of wmii. 5 6 This is a place for me to post the random scripts that I'm compelled to write and consider useful. 7 8 Scripts 9 ------- 10 *Note:* I've updated most of these, and haven't posted the updates... I'll get around to it eventually. 11 12 All of these scripts are written in rc, and require plan9port to run. 13 14 * webpaste - A script which reads its standard input or the files 15 on its command line and prints a URI where the data can be retrieved. Requires: curl. 16 17 * pasteweb - Similar to webpaste, but reads the contents of your 18 clipboard and replaces them with a URI where the contents can be retrieved. 19 Requires: curl, and one of xclip, xsel, or sselp (in which case, it will print the URI) 20 21 * plastfm - An rc script which connects to Last.FM and plays its stream with 22 a command-line mp3 player. Commands are read from the standard input and song info is 23 printed to the standard error. Requires: mpg123 or similar client. *This has been replaced 24 by "last".* 25 26 * eris.rc - This is an IRC bot, written in rc, of course, which prints mercurial 27 commits to channels. The name comes from George Neis' python version. Requires: sic or similar. 28 29 * hgnotify.rc - This is an mailing list bot which posts mercurial commits 30 along with their diffs to a mailing list, or arbitrary mailing address. The sender, subject, 31 and date all reflect those of the commit. Requires: A sendmail compatible MTA. 32 33 * logger.rc - A simple IRC logger bot, which uses the httplog logger to handle 34 log rotation. It also extracts lines beginning with 'BUG' and writes them to a separate file. 35 Requires: httplog, sic. 36 37 38 `wmii` Scripts 39 ============== 40 These are just some of the random wmii scripts I've written. 41 I find them immensely useful, and they serve as good examples. 42 Most use the `wmii.rc` script which I've written to make 43 `rc.wmii` more straightforward, and plugins easier. But, I haven't 44 released it yet, so bear with me. 45 46 `rc.keymap` 47 ----------- 48 A simple keymap-changer applet. It doesn't know any keyboard 49 shortcuts for the moment. 50 51 #!/bin/rc 52 . 9.rc 53 . wmii.rc keymap 54 55 # Begin Configuration 56 bar=s7~1keymap 57 choices=(us dvorak) 58 # End Configuration 59 60 keymap=$choices(1) 61 62 fn setkeymap { 63 if(! ~ $"* '') { 64 keymap=$"* 65 setxkbmap $keymap 66 echo km:$"keymap | wmiir create /rbar/$bar 67 } 68 } 69 70 setkeymap $keymap 71 72 fn Event-RightBarMouseDown { 73 if(! $1 1 && ~ $2 $bar) 74 setkeymap `{wi_9menu -initial $keymap $choices} 75 } 76 77 wi_eventloop 78 79 `rc.vol` 80 -------- 81 Adjust the volume with Alt-Plus/Alt-Minus (should use `$MODKEY`...). 82 My first bar just happens to be named `agabaga`, because I picked 83 a random word which started with a ages ago, and the name stuck. 84 85 #!/bin/rc 86 . 9.rc 87 . wmii.rc 88 89 # Begin Configuration 90 numbars = 20 91 mixer = pcm 92 bar = agabaga 93 delay = 2 94 # End Configuration 95 96 fn mset { 97 var=$1; shift 98 eval $var' = `{hoc -e $"*}' 99 } 100 101 mset div 100 / $numbars 102 103 fn readvol { mixer $* | awk -F'[ :]+' '{print $7}' | head } 104 105 xpid = () 106 107 fn changevol { 108 diff = $1; shift 109 cur = `{readvol $mixer} 110 mset new $cur + '(' $diff ')' 111 112 mixer $mixer $new >/dev/null 113 114 awk -vnew'='$new -vdiv'='$div -vn'='$numbars \ 115 'BEGIN{ s=sprintf("% *s", new/div, "|"); 116 gsub(/ /, "-", s); 117 printf "[% -*s] %d%%", n, s, new; 118 exit }' | 119 wmiir write /rbar/$bar 120 121 /bin/kill $xpid >[2]/dev/null # Let's hope this isn't reused... 122 { sleep $delay; wmiir xwrite /rbar/$bar ' ' }& # Bug... 123 xpid = $apid 124 } 125 126 fn Key-Mod1-^(KP_Add Shift-plus) { 127 changevol $div 128 } 129 130 fn Key-Mod1-^(KP_Subtract Shift-minus) { 131 changevol -$div 132 } 133 134 wi_eventloop 135 136 `rc.mail` 137 --------- 138 A mail monitor. I've posted it elsewhere. It reads the names of 139 windows on the mail tag and checks for mail in Maildirs with 140 corresponding names. It treats `inbox` specially. This is posted 141 elsewhere. 142 143 #!/bin/rc 144 . 9.rc 145 146 # Configuration 147 #How often to check 148 delay=5 149 maildir=$home/Maildir 150 # End Configuration 151 152 echo Start mail | wmiir write /event 153 154 { wmiir read /event & 155 while(echo Tick) 156 sleep $delay 157 } | while(*=`{read}) 158 switch($1) { 159 case Start 160 if(~ $2 mail) 161 exit 162 case Tick 163 wmiir read /tag/mail/index | 164 while(l = `{read}) { 165 b = `{echo $l | awk -F: '{print $3}'} 166 if(~ $b inbox) 167 b = '' 168 if(! ~ $#b 0 && test -d $maildir/.$b/new) { 169 if(~ `{ls -l $maildir/.$b/new | wc -l} 0) 170 wmiir xwrite /client/$l(2)^/ctl Urgent off 171 if not 172 wmiir xwrite /client/$l(2)^/ctl Urgent on 173 } 174 } 175 } 176 177 `rc.status` 178 ----------- 179 My date/time/load average bar. Straightforward. 180 181 #!/bin/rc 182 . 9.rc 183 . wmii.rc rc.status 184 # periodically print date and load average to the bar 185 186 fn date { /bin/date $* } 187 188 bar_load=s5load 189 bar_date=s9date 190 bar_time=time 191 bars=($bar_date $bar_load) 192 193 fn sigterm sigint { 194 for(i in ($bars $bar_time)) 195 wmiir remove /rbar/$i >[2]/dev/null 196 exit 197 } 198 199 for(i in $bars $bar_time) 200 wmiir remove /rbar/$i >[2]/dev/null 201 202 sleep 2 203 for(i in $bars) 204 echo -n $wmiinormcol | wmiir create /rbar/$i 205 echo -n $wmiifocuscol | wmiir create /rbar/$bar_time 206 207 { 208 while (wmiir xwrite /rbar/$bar_time `{date +'%H:%M:%S %Z'} 209 && wmiir xwrite /rbar/$bar_date `{date +'%a, %e %b'} 210 && wmiir xwrite /rbar/$bar_load `{uptime | sed 's/.*://; s/,//g'}) 211 sleep 1 212 } >[2]/dev/null 213 214 `rc.temp` 215 --------- 216 A temperature monitor for the bar. It has Fahrenheit along with 217 Celsius, because I'm stuck using both (tell someone in the US that 218 it's -3°C outside and expect little more than a blank stare). 219 220 This one uses weatherget. It's in ports... I don't know where else 221 to find it. 222 223 #!/bin/rc 224 . 9.rc 225 226 # Begin Configuration 227 zip=12345 # For those outside the us, this needn't be a zip code. 228 bar=/rbar/s7temp 229 pidf=$home/.wmii-3.5/pid.temp 230 231 deg=° 232 # End Configuration 233 234 /usr/bin/kill `{cat $pidf} >[2]/dev/null 235 echo $pid >$pidf 236 237 wmiir create $bar </dev/null 238 239 while() { 240 {weatherget -s $zip -m; weatherget -s $zip -S} | 241 awk '$1=="Temperature"{print $3"'$deg'"$4}' | 242 tr '\012' ' ' | 243 wmiir create $bar || 244 exit 245 sleep 600 246 } 247