index.md - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
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