Sorry, I lost track. See diff.

This commit is contained in:
Kris Maglione 2008-05-29 17:22:56 -04:00
parent d951419167
commit f55337ef2b
11 changed files with 115 additions and 31 deletions

2
TODO
View File

@ -5,6 +5,6 @@ BUGS
4.0 4.0
* Opaque managed moves. I know I've argued against it, but it may be doable. * Opaque managed moves. I know I've argued against it, but it may be doable.
* Resizable managed area * Resizable managed area. Maybe. Struts seem to do everything this might.
* New dmenu, with real cursor; snarfable. * New dmenu, with real cursor; snarfable.

View File

@ -18,6 +18,7 @@ FILTER = sed "s|CONFPREFIX|$(ETC)|g; \
s|CONFVERSION|$(CONFVERSION)|g; \ s|CONFVERSION|$(CONFVERSION)|g; \
s|P9PATHS|$(P9PATHS)|g; \ s|P9PATHS|$(P9PATHS)|g; \
s|LIBDIR|$(LIBDIR)|g; \ s|LIBDIR|$(LIBDIR)|g; \
s|BINSH|$(BINSH)|g; \
s|AWKPATH|$(AWKPATH)|g" s|AWKPATH|$(AWKPATH)|g"
LDFLAGS += -lfmt -lutf LDFLAGS += -lfmt -lutf

View File

@ -14,6 +14,10 @@ _wi_script() {
narg = 1; narg = 1;
body = ""; body = "";
} }
function quote(s) {
gsub(/"'"/, "'\\''", s)
return "'" s "'"
}
function addevent() { function addevent() {
var = arg[1] "s" var = arg[1] "s"
for(i=2; i <= narg; i++) { for(i=2; i <= narg; i++) {
@ -24,11 +28,11 @@ _wi_script() {
if(i == 2) { if(i == 2) {
# There's a bug here. Can you spot it? # There's a bug here. Can you spot it?
gsub("[^a-zA-Z_0-9]", "_", arg[2]); gsub("[^a-zA-Z_0-9]", "_", arg[2]);
body = sprintf("%s_%s \"$@\"", arg[1], arg[2]) body = sprintf("%s %s \"$@\"", arg[1], arg[2])
} }
} }
} }
/^(Event|Key|Action)[ \t]/ { /^(Event|Key|Action|Menu)[ \t]/ {
addevent() addevent()
split($0, arg) split($0, arg)
narg = NF narg = NF
@ -43,13 +47,16 @@ _wi_script() {
for(k in a) { for(k in a) {
split(k, b, SUBSEP) split(k, b, SUBSEP)
c[b[1]] = c[b[1]] b[2] "\n" c[b[1]] = c[b[1]] b[2] "\n"
gsub("[^a-zA-Z_0-9]", "_", b[2]);
if(body != "") if(body != "")
printf "%s_%s() { %s\n }\n", b[1], b[2], a[k] d[b[1]] = d[b[1]] quote(b[2]) ")" a[k] ";;\n"
} }
for(k in c) { for(k in c)
gsub("'", "'\"'\"'", c[k]) printf "%ss=%s\n", k, quote(c[k])
printf "%ss='%s'\n", k, c[k] for(k in d) {
printf "%s() {\n", k
printf " %s=$1; shift\n", tolower(k)
printf "case $%s in\n%s\nesac\n", tolower(k), d[k]
printf "}\n"
} }
} }
! !
@ -62,8 +69,7 @@ Event Start
exit exit
fi fi
Event Key Event Key
fn=$(echo "$@" | sed 's/[^a-zA-Z_0-9]/_/g') Key "$@"
Key_$fn "$@"
! !
eval "cat <<! eval "cat <<!
$(sed "$_sed" | sed '/^[ ]/s/\([$`]\)/\\\1/g') $(sed "$_sed" | sed '/^[ ]/s/\([$`]\)/\\\1/g')
@ -76,6 +82,7 @@ wi_events() {
_sed="s/^$2//" _sed="s/^$2//"
shift 2 shift 2
fi fi
#cho "$(_wi_text | awk "$(_wi_script)")" | cat -n
eval "$(_wi_text | awk "$(_wi_script)")" eval "$(_wi_text | awk "$(_wi_script)")"
} }
@ -105,6 +112,19 @@ wi_9menu() {
wi_9menu "$@" wi_9menu "$@"
} }
wi_fnmenu() {
group="$1-$2"; shift 2
_last="$(echo $group|tr - _)_last"
eval "last=\"\$$_last\""
res=$(set -- $(echo "$Menus" | awk -v "s=$group" 'BEGIN{n=length(s)}
substr($1,1,n) == s{print substr($1,n+2)}')
[ $# != 0 ] && wi_9menu -initial "$last" "$@")
if [ -n "$res" ]; then
eval "$_last="'"$res"'
Menu $group-$res "$@"
fi
}
wi_proglist() { wi_proglist() {
ls -lL $(echo $* | sed 'y/:/ /') 2>/dev/null \ ls -lL $(echo $* | sed 'y/:/ /') 2>/dev/null \
| awk '$1 ~ /^[^d].*x/ { print $NF }' \ | awk '$1 ~ /^[^d].*x/ { print $NF }' \
@ -153,24 +173,29 @@ wi_tags() {
wmiir ls /tag | sed 's,/,,; /^sel$/d' wmiir ls /tag | sed 's,/,,; /^sel$/d'
} }
wi_seltag() {
wmiir read /tag/sel/ctl | sed 1q | tr -d '\012'
}
wi_eventloop() { wi_eventloop() {
echo "$Keys" | wmiir write /keys echo "$Keys" | wmiir write /keys
wmiir read /event | while read wi_event wmiir read /event | while read wi_event
do do
OIFS="$IFS"; IFS="$wi_nl" IFS="$wi_nl"
wi_arg=$(echo "$wi_event" | sed 's/^[^ ]* //') wi_arg=$(echo "$wi_event" | sed 's/^[^ ]* //')
IFS="$OIFS" unset IFS
set -- $wi_event set -- $wi_event
event=$1; shift event=$1; shift
Event_$event $@ Event $event "$@"
done 2>/dev/null done
} }
Action() { action() {
action=$1; shift action=$1; shift
if [ -n "$action" ]; then if [ -n "$action" ]; then
Action_$action "$@" \ set +x
Action $action "$@" \
|| wi_runconf $action "$@" || wi_runconf $action "$@"
fi fi
} }

View File

@ -369,8 +369,11 @@ comp_frame(const void *a, const void *b) {
return ia < ib ? -1 : return ia < ib ? -1 :
ia > ib ? 1 : ia > ib ? 1 :
/* Favor the selected client. */ /* Favor the selected client. */
/* No... don't. Windows shouldn't jump when the mouse
* enters them.
fa == fa->area->sel ? -1 : fa == fa->area->sel ? -1 :
fb == fa->area->sel ? 1 : fb == fa->area->sel ? 1 :
*/
0; 0;
} }
@ -488,7 +491,9 @@ column_arrange(Area *a, bool dirty) {
} }
column_scale(a); column_scale(a);
resize: resize:
area_setsel(a, a->sel); /* XXX */
if(a->sel->collapsed)
area_setsel(a, a->sel);
if(v == screen->sel) { if(v == screen->sel) {
//view_restack(v); //view_restack(v);
client_resize(a->sel->client, a->sel->r); client_resize(a->sel->client, a->sel->r);

View File

@ -568,7 +568,7 @@ move_focus(Frame *old_f, Frame *f) {
void void
frame_focus(Frame *f) { frame_focus(Frame *f) {
Frame *old_f; Frame *old_f, *ff;
View *v; View *v;
Area *a, *old_a; Area *a, *old_a;
@ -576,10 +576,20 @@ frame_focus(Frame *f) {
a = f->area; a = f->area;
old_a = v->sel; old_a = v->sel;
for(; f->collapsed && f->anext; f=f->anext) if(0 && f->collapsed) {
; for(ff=f; ff->collapsed && ff->anext; ff=ff->anext)
for(; f->collapsed && f->aprev; f=f->aprev) ;
; for(; ff->collapsed && ff->aprev; ff=ff->aprev)
;
/* XXX */
f->colr.max.y = f->colr.min.y + Dy(ff->colr);
ff->colr.max.y = ff->colr.min.y + labelh(def.font);
}else {
for(; f->collapsed && f->anext; f=f->anext)
;
for(; f->collapsed && f->aprev; f=f->aprev)
;
}
old_f = old_a->sel; old_f = old_a->sel;
a->sel = f; a->sel = f;
@ -595,7 +605,9 @@ frame_focus(Frame *f) {
move_focus(old_f, f); move_focus(old_f, f);
client_focus(f->client); client_focus(f->client);
/*
if(!a->floating && ((a->mode == Colstack) || (a->mode == Colmax))) if(!a->floating && ((a->mode == Colstack) || (a->mode == Colmax)))
*/
column_arrange(a, false); column_arrange(a, false);
} }

View File

@ -220,6 +220,8 @@ view_update(View *v) {
if(v != screen->sel) if(v != screen->sel)
return; return;
if(starting)
return;
frames_update_sel(v); frames_update_sel(v);
view_arrange(v); view_arrange(v);
@ -313,6 +315,7 @@ view_attach(View *v, Frame *f) {
if(c->sel == nil) if(c->sel == nil)
c->sel = f; c->sel = f;
view_update(v);
} }
void void

View File

@ -1,4 +1,4 @@
#!/bin/sh -f #!BINSH -f
# start wmiirc # start wmiirc
export home="$HOME" export home="$HOME"

View File

@ -28,6 +28,10 @@ AR = ar crs
AWKPATH = $$(which awk) AWKPATH = $$(which awk)
P9PATHS = ${PLAN9}:"'$${HOME}/plan9'":/usr/local/plan9:/usr/local/9:/opt/plan9:/opt/9:/usr/plan9:/usr/9 P9PATHS = ${PLAN9}:"'$${HOME}/plan9'":/usr/local/plan9:/usr/local/9:/opt/plan9:/opt/9:/usr/plan9:/usr/9
# Your make shell. By default, the first found of /bin/dash, /bin/ksh,
# /bin/sh. Except with bsdmake, which assumes /bin/sh is sane. bash and zsh
# are painfully slow, and should be avoided.
#BINSH = /bin/ash
INCX11 = -I/usr/X11R6/include INCX11 = -I/usr/X11R6/include
LIBX11 = -L/usr/X11R6/lib -lX11 LIBX11 = -L/usr/X11R6/lib -lX11

View File

@ -14,6 +14,14 @@ MKCFGSH=if test -f $(ROOT)/config.local.mk; then echo $(ROOT)/config.local.mk; e
MKCFG:=${shell $(MKCFGSH)} MKCFG:=${shell $(MKCFGSH)}
MKCFG!=${MKCFGSH} MKCFG!=${MKCFGSH}
include $(MKCFG) include $(MKCFG)
# and this:
# Try to find a sane shell. /bin/sh is a last resort, because it's
# usually bash on Linux, which means, it's painfully slow.
BINSH := $(shell \
if [ -x /bin/dash ]; then echo /bin/dash; \
elif [ -x /bin/ksh ]; then echo /bin/ksh; \
else echo /bin/sh; fi)
BINSH != echo /bin/sh
.SILENT: .SILENT:
.SUFFIXES: .O .o .o_pic .c .sh .rc .$(SOEXT) .awk .1 .man1 .depend .install .uninstall .clean .SUFFIXES: .O .o .o_pic .c .sh .rc .$(SOEXT) .awk .1 .man1 .depend .install .uninstall .clean

View File

@ -10,6 +10,7 @@ TARG = rc.wmii \
FILTER = sed "s|CONFPREFIX|${ETC}|g; \ FILTER = sed "s|CONFPREFIX|${ETC}|g; \
s|CONFVERSION|${CONFVERSION}|g; \ s|CONFVERSION|${CONFVERSION}|g; \
s|P9PATHS|${P9PATHS}|g; \ s|P9PATHS|${P9PATHS}|g; \
s|BINSH|$(BINSH)|g; \
s|AWKPATH|${AWKPATH}|g" s|AWKPATH|${AWKPATH}|g"
include ${ROOT}/mk/many.mk include ${ROOT}/mk/many.mk

View File

@ -1,4 +1,4 @@
#!/bin/sh -f #!BINSH -f
# Configure wmii # Configure wmii
wmiiscript=wmiirc # For wmii.sh wmiiscript=wmiirc # For wmii.sh
. wmii.sh . wmii.sh
@ -22,8 +22,8 @@ WMII_BACKGROUND='#333333'
WMII_FONT='-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*' WMII_FONT='-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*'
set -- $(echo $WMII_NORMCOLORS $WMII_FOCUSCOLORS) set -- $(echo $WMII_NORMCOLORS $WMII_FOCUSCOLORS)
WMII_MENU="dmenu -b -fn '\$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5'" WMII_MENU='dmenu -b -fn "$WMII_FONT"'" -nf '$1' -nb '$2' -sf '$4' -sb '$5'"
WMII_9MENU="wmii9menu -font '\$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5' -br '$6'" WMII_9MENU='wmii9menu -font "$WMII_FONT"'" -nf '$1' -nb '$2' -sf '$4' -sb '$5' -br '$6'"
WMII_TERM="xterm" WMII_TERM="xterm"
# Column Rules # Column Rules
@ -47,7 +47,7 @@ wi_runconf -s wmiirc_local
echo $WMII_NORMCOLORS | wmiir create $noticebar echo $WMII_NORMCOLORS | wmiir create $noticebar
# Event processing # Event processing
events="$( events() {
sed 's/^ //' <<'!' sed 's/^ //' <<'!'
# Events # Events
Event CreateTag Event CreateTag
@ -97,6 +97,31 @@ events="$(
kill $xpid 2>/dev/null # Let's hope this isn't reused... kill $xpid 2>/dev/null # Let's hope this isn't reused...
{ sleep $noticetimeout; wmiir xwrite $noticebar ' '; }& { sleep $noticetimeout; wmiir xwrite $noticebar ' '; }&
xpid = $! xpid = $!
Menu Client-3-Delete
wmiir xwrite /client/$1/ctl kill
Menu Client-3-Fullscreen {
wmiir xwrite /client/$1/ctl Fullscreen on
Event ClientMouseDown
wi_fnmenu Client $2 $1 &
Menu LBar-3-Delete
tag=$1; clients=$(wmiir read "/tag/$tag/index" | awk '/[^#]/{print $2}')
for c in $clients; do
if [ "$tag" = "$(wmiir read /client/$c/tags)" ]; then
wmiir xwrite /client/$c/ctl kill
else
wmiir xwrite /client/$c/tags -$tag
fi
if [ "$tag" = "$(wi_seltag)" ]; then
newtag=$(wi_tags | awk -v't='$tag '
$1 == t { if(!l) getline l
print l
exit }
{ l = $0 }')
wmiir xwrite /ctl view $newtag
fi
done
Event LeftBarMouseDown
wi_fnmenu LBar "$@" &
# Actions # Actions
Action quit Action quit
wmiir xwrite /ctl quit wmiir xwrite /ctl quit
@ -138,7 +163,7 @@ events="$(
Key $MODKEY-t Key $MODKEY-t
wmiir xwrite /ctl view $(wi_tags | wi_menu) & wmiir xwrite /ctl view $(wi_tags | wi_menu) &
Key $MODKEY-Return Key $MODKEY-Return
eval $WMII_TERM & eval wmiir setsid $WMII_TERM &
Key $MODKEY-Shift-space Key $MODKEY-Shift-space
wmiir xwrite /tag/sel/ctl send sel toggle wmiir xwrite /tag/sel/ctl send sel toggle
Key $MODKEY-f Key $MODKEY-f
@ -172,9 +197,9 @@ events="$(
wmiir xwrite /client/sel/tags "$i" wmiir xwrite /client/sel/tags "$i"
! !
done done
)" }
wi_events <<! wi_events <<!
$events $(events)
$local_events $local_events
! !
unset events local_events unset events local_events
@ -195,7 +220,7 @@ export WMII_FOCUSCOLORS WMII_SELCOLORS WMII_NORMCOLORS
# Misc # Misc
progsfile="$(wmiir namespace)/.proglist" progsfile="$(wmiir namespace)/.proglist"
Action status & action status &
wi_proglist $PATH >$progsfile & wi_proglist $PATH >$progsfile &
# Setup Tag Bar # Setup Tag Bar