blob: 92adb8babf86aab733272b713460ee73ae28f40d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
#!/bin/bash
# Let any running instances of wmiirc know that we're starting
wmiir xwrite /event Start
. "$HOME/.wmii/include.sh"
echo ' ==> Starting wmiirc'
mount9p=/opt/plan9/bin/9pfuse
mkdir -p $WMII_NAMESPACE/mnt
$mount9p $WMII_NAMESPACE/{wmii,mnt}
MODKEY=Mod4 # super
UP=p
DOWN=n
LEFT=b
RIGHT=f
# Colors tuples: "<text> <background> <border>"
. `conffile theme-solarized-dark`
# Menu history
hist="`conffile history`"
# Tagging Rules
echo '/Emacs|Navigator/ -> +sel' >> $WMII_DIR/tagrules
echo '/Eclipse/ -> +sel' >> $WMII_DIR/tagrules
echo '/panel/ -> /.*/' >> $WMII_DIR/tagrules
Event() {
event=$1; shift;
case "$event" in
## Mouse event meanings:
## MouseDown = mouse down
## Click = mouse up
## DND = hover, while dragging something (Drag 'n' Drop)
## The associated mouse button is always "1"
##
## Mouse-button IDs:
## 1 = left
## 2 = middle
## 3 = right
## WMII-meta events
Quit) ## No args
echo ' ==> Stopping wmiirc'
echo " -> unmounting WMII_DIR=$WMII_DIR..."
# might complain about /etc/mtab if the x server has already stopped
fusermount -u "$WMII_DIR" 2>>/dev/null
echo " -> rmdir'ing WMII_DIR=$WMII_DIR..."
rmdir "$WMII_DIR"
exit;;
Warning) ## $@=string
notify-send "wmii warning: $*";;
Key) ## $1=keystroke
Key "$@";;
## WMII Window management events
FocusFloating) ## No args
;;
AreaFocus) ## $1=area
;;
DestroyArea) ## $1=area
;;
ColumnFocus) ## $1=column
;;
CreateColumn) ## $1=column
;;
## Client events
CreateClient) ## $1=client
;;
DestroyClient) ## $1=client
;;
Urgent) ## $1=client $2=[Manager|Client]
;;
NotUrgent) ## $1=client $2=[Manager|Client]
;;
ClientMouseDown) ## $1=client $2=button
client=$1
button=$2
case $button in
1) ;;
2) ;;
3)
{
case `wmii9menu Delete Fullscreen` in
Delete)
echo kill |a $WMII_DIR/client/$client/ctl;;
Fullscreen)
echo Fullscreen on |a $WMII_DIR/client/$1/ctl;;
esac
}& ;;
esac;;
ClientClick) ## $1=client $2=button
;;
Unresponsive) ## $1=client
client=$1
client_name=`cat $WMII_DIR/client/$client/label`
msg="The client \`${client_name}' is not responding."
msg+=" What would you like to do?"
{
resp=$(wihack -transient $client \
xmessage -nearmouse -buttons Kill,Wait -print "$msg")
if [ "$resp" = Kill ]; then
echo slay |a $WMII_DIR/client/$client/ctl
fi
}& ;;
Fullscreen) ## $1=client $2=[on|off]
# TODO: hide any clients with the 'panel' class
;;
## Tag events
CreateTag) ## $1=tag
echo "$WMII_NORMCOLORS" $@ |a $WMII_DIR/lbar/$1;;
DestroyTag) ## $1=tag
rm $WMII_DIR/lbar/$1;;
FocusTag) ## $1=tag
echo "$WMII_FOCUSCOLORS" $1 |a $WMII_DIR/lbar/$1;;
UnfocusTag) ## $1=tag
echo "$WMII_NORMCOLORS" $1 |a $WMII_DIR/lbar/$1;;
UrgentTag) ## $1=tag $2=[Manager|Client]
echo "$WMII_URGENTCOLORS" $1 |a $WMII_DIR/lbar/$1;;
NotUrgentTag) ## $1=tag $2=[Manager|Client]
echo "$WMII_NORMCOLORS" $1 |a $WMII_DIR/lbar/$1;;
## LeftBar events (usually tag buttons)
LeftBarMouseDown) ## $1=button $2=bar_item
;;
LeftBarClick) ## $1=button $2=bar_item
shift # ignore the button
echo view "$@" |a $WMII_DIR/ctl;;
LeftMouseDND) ## $1=button $2=bar_item
Event LeftBarClick "$@";;
## RightBar events
RightBarMouseDown) ## $1=button $2=bar_item
;;
RightBarClick) ## $1=button $2=bar_item
;;
RightMouseDND) ## $1=button $2=bar_item
Event RightBarClick "$@";;
## Custom (non-WMII-generated) events
Start) ## No args
Event Quit;; # get out of the way for a new event loop
esac
} ## End Event
# Key Bindings
Key() {
key=$1
case "$key" in
## Moving around
$MODKEY-$LEFT) ## Select the client to the left
echo select left |a $WMII_DIR/tag/sel/ctl;;
$MODKEY-$RIGHT) ## Select the client to the right
echo select right |a $WMII_DIR/tag/sel/ctl;;
$MODKEY-$UP) ## Select the client above
echo select up |a $WMII_DIR/tag/sel/ctl;;
$MODKEY-$DOWN) ## Select the client below
echo select down |a $WMII_DIR/tag/sel/ctl;;
$MODKEY-space) ## Toggle between floating and managed layers
echo select toggle |a $WMII_DIR/tag/sel/ctl;;
## Moving clients around
$MODKEY-Shift-$LEFT) ## Move selected client to the left
wmiir xwrite /tag/sel/ctl send sel left;;
$MODKEY-Shift-$RIGHT) ## Move selected client to the right
wmiir xwrite /tag/sel/ctl send sel right;;
$MODKEY-Shift-$UP) ## Move selected client up
wmiir xwrite /tag/sel/ctl send sel up;;
$MODKEY-Shift-$DOWN) ## Move selected client down
wmiir xwrite /tag/sel/ctl send sel down;;
$MODKEY-Shift-space) ## Toggle selected client between floating and managed layers
wmiir xwrite /tag/sel/ctl send sel toggle;;
## Moving through stacks
$MODKEY-Control-$UP) ## Select the stack above
wmiir xwrite /tag/sel/ctl select up stack;;
$MODKEY-Control-$DOWN) # Select the stack below
wmiir xwrite /tag/sel/ctl select down stack;;
## Client actions
$MODKEY-shift-1) ## Toggle selected client's fullsceen state
wmiir xwrite /client/sel/ctl Fullscreen toggle;;
$MODKEY-shift-0) ## Close client
wmiir xwrite /client/sel/ctl kill;;
## Changing column modes
$MODKEY-d) ## Set column to default mode
wmiir xwrite /tag/sel/ctl colmode sel default-max;;
$MODKEY-s) ## Set column to stack mode
wmiir xwrite /tag/sel/ctl colmode sel stack-max;;
$MODKEY-m) ## Set column to max mode
wmiir xwrite /tag/sel/ctl colmode sel stack+max;;
## Running programs
$MODKEY-a) ## Open wmii actions menu
Action $(path_ls $WMII_CONFPATH | wimenu -h "${hist}.actions" -n 5000) & ;;
$MODKEY-x) ## Open program menu
setsid $(wimenu -h "${hist}.progs" -n 5000 <$progsfile) & ;;
$MODKEY-Return) ## Launch a terminal
setsid x-terminal-emulator & ;;
## Other
$MODKEY-Control-t) ## Toggle all other key bindings
case $(wmiir read /keys | wc -l | tr -d ' \t\n') in
0|1)
echo -n "$Keys" | wmiir write /keys
wmiir xwrite /ctl grabmod $MODKEY;;
*)
wmiir xwrite /keys $MODKEY-Control-t
wmiir xwrite /ctl grabmod Mod3;;
esac;;
## Tag actions
$MODKEY-t) ## Change to another tag
{
tag=$(lstags | wimenu -h "${hist}.tags" -n 50) || return
wmiir xwrite /ctl view $tag
}& ;;
$MODKEY-Shift-t) ## Retag the selected client
sel=$(sed 1q $WMII_DIR/client/sel/ctl)
{
tag=$(lstags | wimenu -h "${hist}.tags" -n 50) || return
wmiir xwrite /client/$sel/tags "$tag"
}& ;;
esac
} ## End Key
# WM Configuration
echo font xft:Monospace-8 |a $WMII_DIR/ctl
echo focuscolors $WMII_FOCUSCOLORS |a $WMII_DIR/ctl
echo normcolors $WMII_NORMCOLORS |a $WMII_DIR/ctl
echo grabmod $MODKEY |a $WMII_DIR/ctl
echo border 1 |a $WMII_DIR/ctl
xsetroot -solid "$WMII_BACKGROUND" &
progsfile=$WMII_NAMESPACE/.proglist
path_ls $PATH > $progsfile &
eval arg `scansection Key|cut -sf2` |a $WMII_DIR/keys
# Clear the LBar
find $WMII_DIR/lbar -type f -delete
# Emulate [Create|Focus]Tag events
seltag=`sed 1q $WMII_DIR/tag/sel/ctl`
lstags | while read tag; do
Event CreateTag "$tag"
if [ "$tag" = "$seltag" ]; then
Event FocusTag "$tag"
fi
done
Action autostart 2>/dev/null &
if [ -f "`conffile wmiirc_local`" ]; then
. "`conffile wmiirc_local`"
fi
trap "Event Quit" EXIT
# use wmiir so it doesn't look like an open file
wmiir read /event 2>/dev/null | while read event; do
Event $event
done
|