wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 5b3cabdd000308cb6dadfacf17dec9b0699b9e73
parent 4d1fb1e901dcbe02f8b8cfc0b6f69b51ce16b49b
Author: Kris Maglione <jg@suckless.org>
Date:   Mon, 25 Jun 2007 19:51:10 -0400

Fix for 64 bit architectures. Some cleanup.

Diffstat:
cmd/wmii/client.c | 2+-
cmd/wmii/frame.c | 3++-
cmd/wmii/main.c | 2+-
cmd/wmii/x11.c | 18+++++++++---------
rc/sh.wmii | 152++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
5 files changed, 109 insertions(+), 68 deletions(-)

diff --git a/cmd/wmii/client.c b/cmd/wmii/client.c @@ -268,7 +268,7 @@ frame_hints(Frame *f, Rectangle r, Align sticky) { static void set_client_state(Client * c, int state) { - long data[] = { state, None }; + Atom data[] = { state, None }; changeprop(&c->w, "WM_STATE", "WM_STATE", data, nelem(data)); } diff --git a/cmd/wmii/frame.c b/cmd/wmii/frame.c @@ -144,7 +144,8 @@ bdown_event(Window *w, XButtonEvent *e) { XAllowEvents(display, ReplayPointer, e->time); break; } - XUngrabPointer(display, e->time); + if(e->button != Button1) + XUngrabPointer(display, e->time); }else{ if(e->button == Button1) { if(frame_to_top(f)) diff --git a/cmd/wmii/main.c b/cmd/wmii/main.c @@ -239,7 +239,7 @@ struct { /* * There's no way to check accesses to destroyed windows, thus - * those cases are ignored (especially on UnmapNotifys). + * those cases are ignored (especially on UnmapNotifies). * Other types of errors call Xlib's default error handler, which * calls exit(). */ diff --git a/cmd/wmii/x11.c b/cmd/wmii/x11.c @@ -464,26 +464,26 @@ loadcolor(CTuple *c, char *str) { Font * loadfont(char *name) { Font *f; - char **missing = nil, *def = "?"; + XFontStruct **xfonts; + char **missing, **font_names; int n, i; + missing = nil; f = emallocz(sizeof *f); f->name = estrdup(name); - - f->set = XCreateFontSet(display, name, &missing, &n, &def); + f->set = XCreateFontSet(display, name, &missing, &n, nil); if(missing) { - fprintf(stderr, "%s: missing fontset%s for '%s':", argv0, - (n > 1 ? "s":""), name); + setvbuf(stderr, nil, _IOLBF, 0); + fprintf(stderr, "%s: note: missing fontset%s for '%s':", argv0, + (n > 1 ? "s" : ""), name); for(i = 0; i < n; i++) - fprintf(stderr, "%s %s", (i ? ",":""), missing[i]); + fprintf(stderr, "%s %s", (i ? "," : ""), missing[i]); fprintf(stderr, "\n"); + setvbuf(stderr, nil, _IONBF, 0); freestringlist(missing); } if(f->set) { - XFontStruct **xfonts; - char **font_names; - XFontsOfFontSet(f->set, &xfonts, &font_names); f->ascent = xfonts[0]->ascent; f->descent = xfonts[0]->descent; diff --git a/rc/sh.wmii b/rc/sh.wmii @@ -1,11 +1,12 @@ #!sh # WMII Configuration -load std -load string -load regex +load std string regex expr echo -mount -Aa {os dial unix!/tmp/ns.kris.:1/wmii >[1=0]} / || exit -#mount -Aa {os rc -c 'dial $WMII_ADDRESS' >[1=0]} / +argv0 = $0 + +#mount -Aa {os dial unix!/tmp/ns.kris.:1/wmii >[1=0]} / || raise mount +#mount -Aa {styxmon {os rc -c 'dial $WMII_ADDRESS' >[1=0]}} / || raise mount +mount -Aa {os rc -c 'dial $WMII_ADDRESS' >[1=0]} / || raise mount MODKEY=Mod1 UP=k @@ -14,6 +15,7 @@ LEFT=h RIGHT=l WMII_FONT=fixed +WMII_FONT='drift,-*-fixed-*-*-*-*-9-*-*-*-*-*-*-*' WMII_NORMCOLORS=('#222222' '#5FBF77' '#2A7F3F') WMII_FOCUSCOLORS=('#ffffff' '#153F1F' '#2A7F3F') WMII_BACKGROUND='#333333' @@ -21,13 +23,15 @@ WMII_BACKGROUND='#333333' WMII_TERM=urxvt fn wmiimenu { - run_command ${re sg '#' '"#"' (dmenu -b -fn $WMII_FONT - -nf ${hd $WMII_NORMCOLORS} -nb ${index 2 $WMII_NORMCOLORS} - -sf ${hd $WMII_FOCUSCOLORS} -sb ${index 2 $WMII_FOCUSCOLORS})} + (nf nb nil sf sb nil) := ($WMII_NORMCOLORS $WMII_FOCUSCOLORS) + os -d ${hostenv HOME} ( + dmenu -b -fn $WMII_FONT + -nf $nf -nb $nb -sf $sf -sb $sb) } fn 9menu { - run_command (wmii9menu -font $WMII_FONT + os -d ${hostenv HOME} ( + wmii9menu -font ${hd ${split , $WMII_FONT}} -^(nf nb br)^$WMII_NORMCOLORS -^(sf sb br)^$WMII_FOCUSCOLORS $*) } @@ -36,21 +40,37 @@ fn 9menu { echo '/./ -> 60+40' >/colrules # Tagging Rules -{ echo '/Firefox/ -> www +echo ' +/Firefox/ -> www /XMMS.*/ -> ~ /MPlayer.*/ -> ~ /.*/ -> ! /.*/ -> 1 -' } >/tagrules +' >/tagrules subfn seq { - arg := $* - result=`{os seq $arg} + result=${expr $* seq} } subfn hostenv { arg := $"* - result="{os sh -c ${quote eval echo -n '$'$arg}} + result="{os rc -c 'echo -n $'^$arg </dev/null} +} + +subfn ftl { + result=${tl $*} + result=$"result +} + +subfn lines { + ifs := "{echo} + arg = $* + result = `{$arg} +} + +fn dprint { + arg := $* + or {~ $#debug 0} {~ $debug '' 0} { echo $arg } } # Status Bar Info @@ -60,43 +80,52 @@ fn status { # Events fn Event-Start { - if { ~ $1 wmiirc } { + if {~ $1 wmiirc} { rm -f $progs_file exit } } fn Event-Key { - echo Key-$1 + dprint Key-$1 Key-$1 $1 } -fn Event-CreateTag { echo $WMII_NORMCOLORS $* >> /lbar/$"* } +fn Event-CreateTag { echo $WMII_NORMCOLORS $* > /lbar/$"* } fn Event-DestroyTag { rm /lbar/$"* } fn Event-FocusTag { echo $WMII_FOCUSCOLORS $* > /lbar/$"* } fn Event-UnfocusTag { echo $WMII_NORMCOLORS $* > /lbar/$"* } -fn Event-UrgentTag { echo '*'${tl $*} > ${quote /lbar/${tl $*} } } -fn Event-NotUrgentTag { echo ${tl $*} > ${quote /lbar/${tl $*} } } +fn Event-UrgentTag { echo '*'${ftl $*} > /lbar/${ftl $*} } +fn Event-NotUrgentTag { echo ${tl $*} > /lbar/${ftl $*} } -fn Event-LeftBarClick { echo view ${tl $*} >/ctl } +fn Event-LeftBarClick { + (button name) := $* + if {~ $button 1} { echo view $name >/ctl } +} +fn Event-LeftBarMouseDown { + (button name) := $* + if {~ $button 3} { echo view "{9menu ${lines read_tags}} >/ctl & } +} lastcmd='' fn Event-ClientMouseDown { (client button) := $* - if { ~ $button 3 } { - lastcmd = `{9menu -initial $lastcmd Nop Delete} - cmp := {~ $do $1} - or {and {$cmp Nop} {echo Do nothing} - } {and {$cmp Delete} {echo kill >/client/$client/ctl}} + if {~ $button 3} { + lastcmd = `{9menu -initial $lastcmd Nop Delete Fullscreen} + cmp := {~ $lastcmd $*} + if {$cmp Nop} { + } {$cmp Delete} { echo kill >/client/$client/ctl + } {$cmp Fullscreen} { echo Fullscreen >/client/$client/ctl + } } } # Actions fn Action { (action args) := $* - if {whatis Action-$action | grep -s '^load std; fn '} { + if {~ "{whatis Action-$action >[2]/dev/null} 'load std; fn '*} { Action-$action $args } { - run_command ${config_whatis $action} $args </dev/null + run_command ${config_whatis $action} $args } } fn Action-quit { echo quit >>/ctl } @@ -105,13 +134,14 @@ fn Action-rehash { proglist ${hostenv PATH} >$progs_file } fn Action-status { - if {rm /rbar/status >[2]/dev/null} { - sleep 2 - } + flag x - + if {rm /rbar/status >[2]/dev/null} { sleep 1 } echo $WMII_NORMCOLORS >/rbar/status - while {status >/rbar/status} { - sleep 1 - } + while {status >/rbar/status} { sleep 1 } +} +fn Action-sh.wmii { + os -b inferno $argv0 & + exit } # Key Bindings @@ -127,8 +157,8 @@ fn Key-$MODKEY-Control-t { fn Key-$MODKEY-$LEFT { echo select left >/tag/sel/ctl } fn Key-$MODKEY-$RIGHT { echo select right >/tag/sel/ctl } -fn Key-$MODKEY-$DOWN { echo select down >/tag/sel/ctl } fn Key-$MODKEY-$UP { echo select up >/tag/sel/ctl } +fn Key-$MODKEY-$DOWN { echo select down >/tag/sel/ctl } fn Key-$MODKEY-Shift-$LEFT { echo send sel left >/tag/sel/ctl } fn Key-$MODKEY-Shift-$RIGHT { echo send sel right >/tag/sel/ctl } @@ -145,7 +175,7 @@ fn Key-$MODKEY-m { echo colmode sel max >/tag/sel/ctl } fn Key-$MODKEY-Shift-c { echo kill >/client/sel/ctl } fn Key-$MODKEY-a { Action `{actionlist | wmiimenu} & } -fn Key-$MODKEY-p { run_command `{wmiimenu <$progs_file} </dev/null & } +fn Key-$MODKEY-p { run_command rc -c "{wmiimenu <$progs_file} & } fn Key-$MODKEY-Return { run_command $WMII_TERM & } fn Key-$MODKEY-t { echo view `{read_tags | wmiimenu} >/ctl & } fn Key-$MODKEY-Shift-t { @@ -153,6 +183,18 @@ fn Key-$MODKEY-Shift-t { read_tags | wmiimenu >/client/$sel/tags } +fn next_tag { + os awk -v curtag'='${lines sed 1q /tag/sel/ctl} ' + NR==1 {first = $0} + $0==curtag { if(getline) print $0; else print first; exit }' +} +fn Key-$MODKEY-n { + echo view `{read_tags | next_tag} >/ctl +} +fn Key-$MODKEY-b { + echo view `{read_tags | tail -r | next_tag} >/ctl +} + for(i in ${seq 0 9}) { fn Key-$MODKEY-$i { echo view ${tl ${splitr $1 -}} >/ctl } fn Key-Shift-$MODKEY-$i { echo ${tl ${splitr $1 -}} >/client/sel/tags} @@ -160,11 +202,10 @@ for(i in ${seq 0 9}) { # Functions fn proglist { - apply {ls -lp $*} /n/local^${split : $"*} | - grep '^[^d][^ ]*x' | - getlines { - echo ${index 10 ${split ' ' $line}} - } | sort | uniq + os find ${split : $"*} -maxdepth 1 -type f | sed 's,.*/,,' | sort | uniq + #for(d in /n/local^${split : $"*}) { + # fs filter {mode -d} $d + #} | sed 's,.*/,,' | sort | uniq } fn getfuns { @@ -190,14 +231,11 @@ fn read_tags { } subfn config_whatis { - result="{os sh -c ${quote eval PATH'='${hostenv WMII_CONFPATH} which $*}} + result=${lines os rc -c 'PATH=$WMII_CONFPATH which $*' $*} } fn run_command { - @{ pctl newpgrp - vars := 'DISPLAY=:1' 'PATH=/home/kris/wmiiinst/bin:$PATH' - os sh -c ${quote eval $vars $*} - } $* + os -b -d ${hostenv HOME} $* & } # WM Configuration @@ -216,16 +254,15 @@ progs_file=/tmp/proglist.${pid} Action rehash & # Tag Bar Setup -seltag="{cat /tag/sel/ctl} -comm -2 ${pipe read_tags} ${pipe ls -p /lbar/*} | getlines { - rm /lbar/$line -} +{ifs:="{echo}; seltag=`{sed 1q /tag/sel/ctl}} +comm -13 ${pipe from {read_tags}} ${pipe from {ls -p /lbar/*}} | + getlines { rm /lbar/$line } read_tags | getlines { if {~ $line $seltag} { - echo $WMII_FOCUSCOLORS $line >/lbar/$line + echo $WMII_FOCUSCOLORS $line } { - echo $WMII_NORMCOLORS $line >/lbar/$line - } + echo $WMII_NORMCOLORS $line + } >/lbar/$line } # Keygrab Setup @@ -236,8 +273,11 @@ echo Start wmiirc >/event # Event Loop getlines { (event args) := ${split ' ' $line} - echo Event-$event: $args - rescue '*' { echo Exception: $exception } { - Event-$event $args - } + dprint Event-$event: $args + rescue '*' { dprint Exception: $exception } { + if {whatis Event-$event >/dev/null >[2=1]} { + Event-$event $args + } + } </dev/null + dprint loop } </event