Rearrange some things.

This commit is contained in:
Kris Maglione 2010-06-14 10:30:23 -04:00
parent e5e4ff284d
commit 398533dfd1
80 changed files with 267 additions and 431 deletions

View File

@ -4,7 +4,8 @@ syntax: regexp
\.([oa]|out|o_pic|so|pyc|pyo|diff)$ \.([oa]|out|o_pic|so|pyc|pyo|diff)$
\.(diff|orig|rej|bak)$ \.(diff|orig|rej|bak)$
\.(aux|idx|ilg|ind|log|toc)$ \.(aux|idx|ilg|ind|log|toc)$
^cmd/(stfo|osd|wiwarp|setfocus)(/|$) ^cmd/osd(/|$)
^cmd/x11/(stfo|wiclick)\.
^(pkg|src)/ ^(pkg|src)/
^doxy ^doxy
/bak/ /bak/

View File

@ -2,7 +2,7 @@ ROOT=..
include $(ROOT)/mk/hdr.mk include $(ROOT)/mk/hdr.mk
include $(ROOT)/mk/wmii.mk include $(ROOT)/mk/wmii.mk
BIN = $(ETC)/wmii$(CONFVERSION) BIN = $(GLOBALCONF)
DIRS = python \ DIRS = python \
plan9port \ plan9port \
ruby ruby

View File

@ -5,5 +5,5 @@ include $(ROOT)/mk/wmii.mk
DOCS = README DOCS = README
EXECS = wmiirc EXECS = wmiirc
DIR = $(ETC)/wmii$(CONFVERSION)/plan9port DIR = $(GLOBALCONF)/plan9port
DOCDIR = $(DOC)/alternative_wmiircs/plan9port DOCDIR = $(DOC)/alternative_wmiircs/plan9port

View File

@ -8,7 +8,7 @@ TEXT = wmiirc.py
DIRS = pygmi \ DIRS = pygmi \
pyxp pyxp
DIR = $(ETC)/wmii$(CONFVERSION)/python DIR = $(GLOBALCONF)/python
DOCDIR = $(DOC)/alternative_wmiircs/python DOCDIR = $(DOC)/alternative_wmiircs/python
include $(ROOT)/mk/dir.mk include $(ROOT)/mk/dir.mk

View File

@ -9,4 +9,4 @@ BINARY = __init__.py \
monitor.py \ monitor.py \
util.py util.py
DIR = $(ETC)/wmii$(CONFVERSION)/python/pygmi DIR = $(GLOBALCONF)/python/pygmi

View File

@ -12,4 +12,4 @@ BINARY = __init__.py \
mux.py \ mux.py \
types.py types.py
DIR = $(ETC)/wmii$(CONFVERSION)/python/pyxp DIR = $(GLOBALCONF)/python/pyxp

View File

@ -9,5 +9,5 @@ EXECS = wmiirc
TEXT = config.rb \ TEXT = config.rb \
config.yaml config.yaml
DIR = $(ETC)/wmii$(CONFVERSION)/ruby DIR = $(GLOBALCONF)/ruby
DOCDIR = $(DOC)/alternative_wmiircs/ruby DOCDIR = $(DOC)/alternative_wmiircs/ruby

View File

@ -4,24 +4,18 @@ include $(ROOT)/mk/wmii.mk
wmiir.c: $(ROOT)/mk/wmii.mk wmiir.c: $(ROOT)/mk/wmii.mk
DIRS = wmii \ DIRS = menu \
keyname \
menu \
strut \ strut \
tray tray \
wmii \
x11
TARG = wihack \ TARG = wihack \
wmii.rc \ wmii.rc \
wmii.sh \ wmii.sh \
wmii9menu \
wmiir wmiir
LIBS += $(LIBS9) $(LIBIXP) LIBS += $(LIBS9) $(LIBIXP)
CFLAGS += $(INCX11)
include $(ROOT)/mk/many.mk include $(ROOT)/mk/many.mk
include $(ROOT)/mk/dir.mk include $(ROOT)/mk/dir.mk
O9MENU=wmii9menu.o $(ROOT)/lib/libstuff.a $(LIBIXP)
wmii9menu.out: $(O9MENU)
$(LINK) $@ $(O9MENU) $$(pkg-config --libs $(X11PACKAGES)) -lXext

View File

@ -1,18 +0,0 @@
ROOT= ../..
include $(ROOT)/mk/hdr.mk
include $(ROOT)/mk/wmii.mk
main.c: $(ROOT)/mk/wmii.mk
TARG = click
HFILES= dat.h fns.h
PACKAGES += $(X11PACKAGES) xext xrandr xrender xinerama
LIB = $(LIBIXP) $(LIBS9)
LIBS += -lm -lXtst
CFLAGS += -DIXP_NEEDAPI=86
OBJ = main
include $(ROOT)/mk/one.mk

View File

@ -1,77 +0,0 @@
/* Copyright ©2008-2010 Kris Maglione <maglione.k at Gmail>
* See LICENSE file for license details.
*/
#include "dat.h"
#include <ctype.h>
#include <string.h>
#include "fns.h"
#define strbcmp(str, const) (strncmp((str), (const), sizeof(const)-1))
static int
getbase(const char **s, long *sign) {
const char *p;
int ret;
ret = 10;
*sign = 1;
if(**s == '-') {
*sign = -1;
*s += 1;
}else if(**s == '+')
*s += 1;
p = *s;
if(!strbcmp(p, "0x")) {
*s += 2;
ret = 16;
}
else if(isdigit(p[0])) {
if(p[1] == 'r') {
*s += 2;
ret = p[0] - '0';
}
else if(isdigit(p[1]) && p[2] == 'r') {
*s += 3;
ret = 10*(p[0]-'0') + (p[1]-'0');
}
}
else if(p[0] == '0') {
ret = 8;
}
if(ret != 10 && (**s == '-' || **s == '+'))
*sign = 0;
return ret;
}
bool
getlong(const char *s, long *ret) {
const char *end;
char *rend;
int base;
long sign;
end = s+strlen(s);
base = getbase(&s, &sign);
if(sign == 0)
return false;
*ret = sign * strtol(s, &rend, base);
return (end == rend);
}
bool
getulong(const char *s, ulong *ret) {
const char *end;
char *rend;
int base;
long sign;
end = s+strlen(s);
base = getbase(&s, &sign);
if(sign < 1)
return false;
*ret = strtoul(s, &rend, base);
return (end == rend);
}

View File

@ -1,17 +0,0 @@
#include <fmt.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdlib.h>
#include <unistd.h>
#include <stuff/x.h>
#include <stuff/util.h>
#include <ixp.h>
#define BLOCK(x) do { x; }while(0)
#ifndef EXTERN
# define EXTERN extern
#endif
EXTERN Window win;

View File

@ -1 +0,0 @@

View File

@ -1,60 +0,0 @@
/* Copyright ©2006-2010 Kris Maglione <maglione.k at Gmail>
* See LICENSE file for license details.
*/
#define EXTERN
#include "dat.h"
#include <X11/Xproto.h>
#include <X11/extensions/XTest.h>
#include <locale.h>
#include <string.h>
#include "fns.h"
static const char version[] = "click-"VERSION", "COPYRIGHT"\n";
static void
usage(void) {
fatal("usage: %s [window]\n", argv0);
}
static void
click(Window *w, Point p) {
Rectangle r;
Point rp;
r = getwinrect(w);
rp = subpt(r.max, p);
XTestFakeMotionEvent(display, 0, rp.x, rp.y, 0);
XTestFakeButtonEvent(display, 1, true, 0);
XTestFakeButtonEvent(display, 1, false, 0);
XTestFakeMotionEvent(display, 0, r.max.x, r.max.y, 0);
}
int
main(int argc, char *argv[]) {
char *s;
ARGBEGIN{
default:
usage();
}ARGEND;
initdisplay();
s = ARGF();
if(s && !getulong(s, &win.xid))
usage();
if (!s)
win.xid = getfocus();
if(argc)
usage();
click(&win, Pt(1, 1));
XCloseDisplay(display);
return 0;
}

View File

@ -1,15 +0,0 @@
ROOT= ../..
include $(ROOT)/mk/hdr.mk
include $(ROOT)/mk/wmii.mk
main.c: $(ROOT)/mk/wmii.mk
TARG = wikeyname
PACKAGES += $(X11PACKAGES)
LIB = $(LIBS9)
OBJ = main
include $(ROOT)/mk/one.mk

View File

@ -8,7 +8,7 @@
static void static void
splice(Item *i) { splice(Item *i) {
if(i->next != nil) if(i->next != nil)
i->next->prev = i->prev; i->next->prev = i->prev;
if(i->prev != nil) if(i->prev != nil)
i->prev->next = i->next; i->prev->next = i->next;

View File

@ -15,28 +15,6 @@ struct Key {
static Key* bindings; static Key* bindings;
static void
init_numlock(void) {
static int masks[] = {
ShiftMask, LockMask, ControlMask, Mod1Mask,
Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
};
XModifierKeymap *modmap;
KeyCode kcode;
int i, max;
modmap = XGetModifierMapping(display);
kcode = keycode("Num_Lock");
if(kcode)
if(modmap && modmap->max_keypermod > 0) {
max = nelem(masks) * modmap->max_keypermod;
for(i = 0; i < max; i++)
if(modmap->modifiermap[i] == kcode)
numlock = masks[i / modmap->max_keypermod];
}
XFreeModifiermap(modmap);
}
/* /*
* To do: Find my red black tree implementation. * To do: Find my red black tree implementation.
*/ */
@ -50,7 +28,7 @@ parse_keys(char *spec) {
int i, nlines, nwords; int i, nlines, nwords;
if(!numlock) if(!numlock)
init_numlock(); numlock = numlockmask();
nlines = tokenize(lines, nelem(lines), spec, '\n'); nlines = tokenize(lines, nelem(lines), spec, '\n');
for(i=0; i < nlines; i++) { for(i=0; i < nlines; i++) {

View File

@ -10,8 +10,8 @@
# pragma varargck argpos event 1 # pragma varargck argpos event 1
# pragma varargck argpos warning 1 # pragma varargck argpos warning 1
# #
# pragma varargck type "a" Area* # pragma varargck type "a" Area*
# pragma varargck type "C" Client* # pragma varargck type "C" Client*
# pragma varargck type "r" void # pragma varargck type "r" void
#endif #endif

View File

@ -6,30 +6,6 @@
#include <X11/keysym.h> #include <X11/keysym.h>
#include "fns.h" #include "fns.h"
void
init_lock_keys(void) {
static int masks[] = {
ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
Mod3Mask, Mod4Mask, Mod5Mask
};
XModifierKeymap *modmap;
KeyCode numlock;
int i, max;
numlock_mask = 0;
modmap = XGetModifierMapping(display);
numlock = keycode("Num_Lock");
if(numlock)
if(modmap && modmap->max_keypermod > 0) {
max = nelem(masks) * modmap->max_keypermod;
for(i = 0; i < max; i++)
if(modmap->modifiermap[i] == numlock)
numlock_mask = masks[i / modmap->max_keypermod];
}
XFreeModifiermap(modmap);
valid_mask = 255 & ~(numlock_mask | LockMask);
}
static void static void
freekey(Key *k) { freekey(Key *k) {
Key *n; Key *n;
@ -43,7 +19,7 @@ freekey(Key *k) {
static void static void
_grab(XWindow w, int keycode, uint mod) { _grab(XWindow w, int keycode, uint mod) {
XGrabKey(display, keycode, mod, w, XGrabKey(display, keycode, mod, w,
true, GrabModeAsync, GrabModeAsync); true, GrabModeAsync, GrabModeAsync);
} }
static void static void
@ -66,12 +42,12 @@ ungrabkey(Key *k) {
} }
} }
static Key * static Key*
name2key(const char *name) { name2key(const char *name) {
Key *k; Key *k;
for(k=key; k; k=k->lnext) for(k=key; k; k=k->lnext)
if(!strncmp(k->name, name, sizeof k->name)) if(!strcmp(k->name, name))
return k; return k;
return nil; return nil;
} }
@ -218,22 +194,21 @@ update_keys(void) {
Key *k; Key *k;
char *l, *p; char *l, *p;
init_lock_keys(); numlock_mask = numlockmask();
valid_mask = 0xff & ~(numlock_mask | LockMask);
while((k = key)) { while((k = key)) {
key = key->lnext; key = key->lnext;
ungrabkey(k); ungrabkey(k);
freekey(k); freekey(k);
} }
for(l = p = def.keys; p && *p;) { for(l = p = def.keys; p && *p; p++) {
if(*p == '\n') { if(*p == '\n') {
*p = 0; *p = 0;
if((k = getkey(l))) if((k = getkey(l)))
grabkey(k); grabkey(k);
*p = '\n'; *p = '\n';
l = ++p; l = p + 1;
} }
else
p++;
} }
if(l < p && strlen(l)) { if(l < p && strlen(l)) {
if((k = getkey(l))) if((k = getkey(l)))

View File

@ -92,9 +92,9 @@ init_environment(void) {
setenv("WMII_ADDRESS", address, true); setenv("WMII_ADDRESS", address, true);
else else
address = smprint("unix!%s/wmii", ns_path); address = smprint("unix!%s/wmii", ns_path);
setenv("WMII_CONFPATH", sxprint("%s/.wmii%s:%s/wmii%s", setenv("WMII_CONFPATH",
getenv("HOME"), CONFVERSION, sxprint("%s/.%s:%s", getenv("HOME"), CONFDIR, GLOBALCONF),
CONFPREFIX, CONFVERSION), true); true);
} }
static void static void
@ -398,7 +398,7 @@ main(int argc, char *argv[]) {
init_traps(); init_traps();
init_cursors(); init_cursors();
init_lock_keys(); update_keys();
ewmh_init(); ewmh_init();
xext_init(); xext_init();

18
cmd/x11/Makefile Normal file
View File

@ -0,0 +1,18 @@
ROOT= ../..
include $(ROOT)/mk/hdr.mk
include $(ROOT)/mk/wmii.mk
TARG = wikeyname \
wmii9menu
PACKAGES += $(X11PACKAGES)
LIB = $(LIBS9) $(LIBIXP)
LIBS += $(LIB)
CFLAGS += $(INCX11)
wiclick.out: wiclick.o
$(LINK) $@ $< -lXtst
include $(ROOT)/mk/many.mk

27
cmd/x11/setfocus.c Normal file
View File

@ -0,0 +1,27 @@
/* Copyight 2008 Kris Maglione <maglione.k at Gmail>
* See LICENSE file for license details.
*/
#include <ctype.h>
#include <stdarg.h>
#include <stdbool.h>
#include <string.h>
#include <stuff/x.h>
#include <stuff/util.h>
#include <fmt.h>
int
main(int argc, char *argv[]) {
XWindow w;
ARGBEGIN{
}ARGEND;
initdisplay();
if(!getulong(EARGF(exit(1)), &w))
exit(1);
XSetInputFocus(display, w, RevertToParent, CurrentTime);
XCloseDisplay(display);
}

View File

@ -30,6 +30,7 @@ main(int argc, char *argv[]) {
if(argc) if(argc)
usage(); usage();
fmtinstall('K', fmtkey);
initdisplay(); initdisplay();
selectinput(&scr.root, KeyPressMask|KeyReleaseMask); selectinput(&scr.root, KeyPressMask|KeyReleaseMask);
@ -46,25 +47,11 @@ main(int argc, char *argv[]) {
static bool static bool
kdown_event(Window *w, void *aux, XKeyEvent *ev) { kdown_event(Window *w, void *aux, XKeyEvent *ev) {
Fmt f;
char buf[32];
char *key;
KeySym ksym;
int num;
USED(aux); USED(w, aux);
nkeys++; nkeys++;
num = XLookupString(ev, buf, sizeof buf, &ksym, 0);
key = XKeysymToString(ksym);
fmtstrinit(&f);
unmask(&f, ev->state, modkey_names, '-');
if(f.nfmt)
fmtrune(&f, '-');
fmtstrcpy(&f, key);
free(keyname); free(keyname);
keyname = fmtstrflush(&f); keyname = smprint("%K", ev);
return false; return false;
} }

34
cmd/x11/wiwarp.c Normal file
View File

@ -0,0 +1,34 @@
/* Copyight 2008 Kris Maglione <maglione.k at Gmail>
* See LICENSE file for license details.
*/
#include <ctype.h>
#include <stdarg.h>
#include <stdbool.h>
#include <string.h>
#include <stuff/x.h>
#include <stuff/util.h>
#include <fmt.h>
int
main(int argc, char *argv[]) {
Point pt;
ARGBEGIN{
}ARGEND;
initdisplay();
if(argc) {
if(!getint(EARGF(exit(1)), &pt.x))
exit(1);
if(!getint(EARGF(exit(1)), &pt.y))
exit(1);
}else {
pt = querypointer(&scr.root);
lprint(1, "%d %d\n", pt.x, pt.y);
}
warppointer(pt);
XCloseDisplay(display);
}

18
debian/copyright vendored
View File

@ -11,18 +11,18 @@ Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense, the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions: Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software. all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
Original debian packaging is (C) 2005-2007, Daniel Baumann <daniel@debian.org> Original debian packaging is (C) 2005-2007, Daniel Baumann <daniel@debian.org>

View File

@ -920,7 +920,7 @@ client. The files in these directories are:
\item[label] The client's window title. May be written to \item[label] The client's window title. May be written to
change the client's title. change the client's title.
\index{filesystem!/client/*/@\clientlabel!label} \index{filesystem!/client/*/@\clientlabel!label}
\item[tags] \item[tags]
\index{filesystem!/client/*/@\clientlabel!tags} \index{filesystem!/client/*/@\clientlabel!tags}
The client's tags. Tag names are separated by |+| The client's tags. Tag names are separated by |+|
signs. Tags beginning and ending with |/| are treated as signs. Tags beginning and ending with |/| are treated as
@ -1006,7 +1006,7 @@ client. The |sel| tag is treated similarly elsewhere. The files
in these directories are: in these directories are:
\begin{description} \begin{description}
\item[ctl] \item[ctl]
The view's control file. The properties are: The view's control file. The properties are:
\index{filesystem!/tag/*/@\taglabel!ctl|(} \index{filesystem!/tag/*/@\taglabel!ctl|(}
\begin{description} \begin{description}

View File

@ -1,5 +1,5 @@
%!PS-Adobe-2.0 EPSF-1.2 %!PS-Adobe-2.0 EPSF-1.2
%%BoundingBox: -1 0 51 27 %%BoundingBox: -1 0 51 27
%%Creator: MetaPost %%Creator: MetaPost
%%CreationDate: 2007.02.27:1944 %%CreationDate: 2007.02.27:1944
%%Pages: 1 %%Pages: 1

View File

@ -18,6 +18,8 @@ extern void init_screens(void);
/* printevent.c */ /* printevent.c */
int fmtevent(Fmt*); int fmtevent(Fmt*);
int fmtkey(Fmt*);
/* xext.c */ /* xext.c */
void randr_event(XEvent*); void randr_event(XEvent*);
bool render_argb_p(Visual*); bool render_argb_p(Visual*);

View File

@ -201,7 +201,7 @@ struct Screen {
# pragma varargck type "A" Atom # pragma varargck type "A" Atom
# pragma varargck type "P" Point # pragma varargck type "P" Point
# pragma varargck type "R" Rectangle # pragma varargck type "R" Rectangle
# pragma varargck type "W" Window* # pragma varargck type "W" Window*
#endif #endif
Display *display; Display *display;
@ -236,10 +236,10 @@ void changeprop_string(Window*, const char*, const char*);
void changeprop_textlist(Window*, const char*, const char*, char*[]); void changeprop_textlist(Window*, const char*, const char*, char*[]);
void changeprop_ulong(Window*, const char*, const char*, ulong[], int); void changeprop_ulong(Window*, const char*, const char*, ulong[], int);
void changeproperty(Window*, const char*, const char*, int width, const uchar*, int); void changeproperty(Window*, const char*, const char*, int width, const uchar*, int);
void cleanupwindow(Window*);
void clientmessage(Window*, const char*, long, int, ClientMessageData); void clientmessage(Window*, const char*, long, int, ClientMessageData);
void copyimage(Image*, Rectangle, Image*, Point); void copyimage(Image*, Rectangle, Image*, Point);
Window* createwindow(Window*, Rectangle, int depth, uint class, WinAttr*, int valuemask); Window* createwindow(Window*, Rectangle, int depth, uint class, WinAttr*, int valuemask);
void cleanupwindow(Window*);
Window* createwindow_visual(Window*, Rectangle, int depth, Visual*, uint class, WinAttr*, int); Window* createwindow_visual(Window*, Rectangle, int depth, Visual*, uint class, WinAttr*, int);
void delproperty(Window*, const char*); void delproperty(Window*, const char*);
void destroywindow(Window*); void destroywindow(Window*);
@ -272,6 +272,7 @@ Font* loadfont(const char*);
void lowerwin(Window*); void lowerwin(Window*);
int mapwin(Window*); int mapwin(Window*);
void movewin(Window*, Point); void movewin(Window*, Point);
int numlockmask(void);
bool parsecolor(const char *name, Color*); bool parsecolor(const char *name, Color*);
bool parsekey(char*, int*, char**); bool parsekey(char*, int*, char**);
ulong pixelvalue(Color); ulong pixelvalue(Color);

View File

@ -14,7 +14,7 @@ bcat(Biobuf *b, char *name)
fprint(2, "writing during %s: %r\n", name); fprint(2, "writing during %s: %r\n", name);
} }
if(n < 0) if(n < 0)
fprint(2, "reading %s: %r\n", name); fprint(2, "reading %s: %r\n", name);
} }
int int

View File

@ -100,7 +100,7 @@ Brdstr(Biobuf *bp, int delim, int nulldelim)
} }
ip += j; ip += j;
} }
/* /*
* full buffer without finding; add to user string and continue * full buffer without finding; add to user string and continue
*/ */

View File

@ -1,7 +1,7 @@
#include "plan9.h" #include "plan9.h"
#include <bio.h> #include <bio.h>
static int static int
fmtBflush(Fmt *f) fmtBflush(Fmt *f)
{ {
Biobuf *bp; Biobuf *bp;

View File

@ -35,22 +35,22 @@ enum
*/ */
static double pows10[] = static double pows10[] =
{ {
1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29,
1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39, 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39,
1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49, 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49,
1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59,
1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, 1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69,
1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79, 1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79,
1e80, 1e81, 1e82, 1e83, 1e84, 1e85, 1e86, 1e87, 1e88, 1e89, 1e80, 1e81, 1e82, 1e83, 1e84, 1e85, 1e86, 1e87, 1e88, 1e89,
1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96, 1e97, 1e98, 1e99, 1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96, 1e97, 1e98, 1e99,
1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109, 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109,
1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119,
1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, 1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129,
1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, 1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139,
1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149, 1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149,
1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159, 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159,
}; };
#define pow10(x) fmtpow10(x) #define pow10(x) fmtpow10(x)

View File

@ -1,6 +1,6 @@
/* /*
* 64-bit IEEE not-a-number routines. * 64-bit IEEE not-a-number routines.
* This is big/little-endian portable assuming that * This is big/little-endian portable assuming that
* the 64-bit doubles and 64-bit integers have the * the 64-bit doubles and 64-bit integers have the
* same byte ordering. * same byte ordering.
*/ */

View File

@ -12,9 +12,9 @@
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*/ */
/* /*
* Plan 9 port version must include libc.h in order to * Plan 9 port version must include libc.h in order to
* get Plan 9 debugging malloc, which sometimes returns * get Plan 9 debugging malloc, which sometimes returns
* different pointers than the standard malloc. * different pointers than the standard malloc.
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>

View File

@ -12,9 +12,9 @@
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*/ */
/* /*
* Plan 9 port version must include libc.h in order to * Plan 9 port version must include libc.h in order to
* get Plan 9 debugging malloc, which sometimes returns * get Plan 9 debugging malloc, which sometimes returns
* different pointers than the standard malloc. * different pointers than the standard malloc.
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>

View File

@ -110,7 +110,7 @@ regerr2(char *s, int c)
while(*s) while(*s)
*cp++ = *s++; *cp++ = *s++;
*cp++ = c; *cp++ = c;
*cp = '\0'; *cp = '\0';
rcerror(buf); rcerror(buf);
} }

View File

@ -46,7 +46,7 @@ regsub(char *sp, /* source string */
*dp++ = *sp; *dp++ = *sp;
break; break;
} }
}else if(*sp == '&'){ }else if(*sp == '&'){
if(mp[0].s.sp != 0 && mp!=0 && ms>0) if(mp[0].s.sp != 0 && mp!=0 && ms>0)
if(mp[0].s.sp != 0) if(mp[0].s.sp != 0)
for(ssp = mp[0].s.sp; for(ssp = mp[0].s.sp;

View File

@ -46,7 +46,7 @@ rregsub(Rune *sp, /* source string */
*dp++ = *sp; *dp++ = *sp;
break; break;
} }
}else if(*sp == '&'){ }else if(*sp == '&'){
if(mp[0].s.rsp != 0 && mp!=0 && ms>0) if(mp[0].s.rsp != 0 && mp!=0 && ms>0)
if(mp[0].s.rsp != 0) if(mp[0].s.rsp != 0)
for(ssp = mp[0].s.rsp; for(ssp = mp[0].s.rsp;

View File

@ -7,6 +7,6 @@ void
event_clientmessage(XClientMessageEvent *ev) { event_clientmessage(XClientMessageEvent *ev) {
Window *w; Window *w;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, message, ev); event_handle(w, message, ev);
} }

View File

@ -7,6 +7,6 @@ void
event_destroynotify(XDestroyWindowEvent *ev) { event_destroynotify(XDestroyWindowEvent *ev) {
Window *w; Window *w;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, destroy, ev); event_handle(w, destroy, ev);
} }

View File

@ -12,6 +12,6 @@ event_enternotify(XCrossingEvent *ev) {
if(ev->mode != NotifyNormal) if(ev->mode != NotifyNormal)
return; return;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, enter, ev); event_handle(w, enter, ev);
} }

View File

@ -7,6 +7,6 @@ void
event_expose(XExposeEvent *ev) { event_expose(XExposeEvent *ev) {
Window *w; Window *w;
if(ev->count == 0 && (w = findwin(ev->window))) if(ev->count == 0 && (w = findwin(ev->window)))
event_handle(w, expose, ev); event_handle(w, expose, ev);
} }

View File

@ -22,6 +22,6 @@ event_focusin(XFocusChangeEvent *ev) {
if((ev->mode == NotifyWhileGrabbed)) if((ev->mode == NotifyWhileGrabbed))
return; return;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, focusin, ev); event_handle(w, focusin, ev);
} }

View File

@ -14,6 +14,6 @@ event_focusout(XFocusChangeEvent *ev) {
||(ev->detail == NotifyAncestor))) ||(ev->detail == NotifyAncestor)))
return; return;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, focusout, ev); event_handle(w, focusout, ev);
} }

View File

@ -9,6 +9,6 @@ event_leavenotify(XCrossingEvent *ev) {
if(!ev->send_event) if(!ev->send_event)
event_xtime = ev->time; event_xtime = ev->time;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, leave, ev); event_handle(w, leave, ev);
} }

View File

@ -9,6 +9,6 @@ event_propertynotify(XPropertyEvent *ev) {
if(!ev->send_event) if(!ev->send_event)
event_xtime = ev->time; event_xtime = ev->time;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, property, ev); event_handle(w, property, ev);
} }

View File

@ -9,7 +9,7 @@ event_selection(XSelectionEvent *ev) {
if(!ev->send_event) if(!ev->send_event)
event_xtime = ev->time; event_xtime = ev->time;
if((w = findwin(ev->requestor))) if((w = findwin(ev->requestor)))
event_handle(w, selection, ev); event_handle(w, selection, ev);
} }

View File

@ -9,6 +9,6 @@ event_selectionclear(XSelectionClearEvent *ev) {
if(!ev->send_event) if(!ev->send_event)
event_xtime = ev->time; event_xtime = ev->time;
if((w = findwin(ev->window))) if((w = findwin(ev->window)))
event_handle(w, selectionclear, ev); event_handle(w, selectionclear, ev);
} }

View File

@ -9,7 +9,7 @@ event_selectionrequest(XSelectionRequestEvent *ev) {
if(!ev->send_event) if(!ev->send_event)
event_xtime = ev->time; event_xtime = ev->time;
if((w = findwin(ev->owner))) if((w = findwin(ev->owner)))
event_handle(w, selectionrequest, ev); event_handle(w, selectionrequest, ev);
} }

View File

@ -1,21 +0,0 @@
#include "fmtdef.h"
void
vseprint(Fmt *f, char *buf, char *e) {
Fmt f;
if(e <= buf)
return nil;
f.runes = 0;
f.start = buf;
f.to = buf;
f.stop = e - 1;
f.flush = 0;
f.farg = nil;
f.nfmt = 0;
va_copy(f.args,args);
dofmt(&f, fmt);
va_end(f.args);
*(char*)f.to = '\0';
return (char*)f.to;
}

View File

@ -19,7 +19,7 @@ MapEnt *NM;
static ulong static ulong
hash(const char *str) { hash(const char *str) {
ulong h; ulong h;
h = 5381; h = 5381;
while (*str != '\0') { while (*str != '\0') {
h += h << 5; /* h *= 33 */ h += h << 5; /* h *= 33 */
@ -31,7 +31,7 @@ hash(const char *str) {
static void static void
insert(Map *m, MapEnt **e, ulong val, const char *key) { insert(Map *m, MapEnt **e, ulong val, const char *key) {
MapEnt *te; MapEnt *te;
m->nmemb++; m->nmemb++;
te = emallocz(sizeof *te); te = emallocz(sizeof *te);
te->hash = val; te->hash = val;
@ -61,7 +61,7 @@ hash_getp(Map *map, const char *str, int create) {
MapEnt **e; MapEnt **e;
ulong h; ulong h;
int cmp; int cmp;
h = hash(str); h = hash(str);
e = map_getp(map, h, create); e = map_getp(map, h, create);
if(*e && (*e)->key == nil) if(*e && (*e)->key == nil)
@ -81,7 +81,7 @@ hash_getp(Map *map, const char *str, int create) {
void** void**
map_get(Map *map, ulong val, bool create) { map_get(Map *map, ulong val, bool create) {
MapEnt *e; MapEnt *e;
e = *map_getp(map, val, create); e = *map_getp(map, val, create);
return e ? &e->val : nil; return e ? &e->val : nil;
} }
@ -89,7 +89,7 @@ map_get(Map *map, ulong val, bool create) {
void** void**
hash_get(Map *map, const char *str, bool create) { hash_get(Map *map, const char *str, bool create) {
MapEnt *e; MapEnt *e;
e = *hash_getp(map, str, create); e = *hash_getp(map, str, create);
return e ? &e->val : nil; return e ? &e->val : nil;
} }
@ -98,7 +98,7 @@ void*
map_rm(Map *map, ulong val) { map_rm(Map *map, ulong val) {
MapEnt **e, *te; MapEnt **e, *te;
void *ret; void *ret;
ret = nil; ret = nil;
e = map_getp(map, val, 0); e = map_getp(map, val, 0);
if(*e) { if(*e) {
@ -115,7 +115,7 @@ void*
hash_rm(Map *map, const char *str) { hash_rm(Map *map, const char *str) {
MapEnt **e, *te; MapEnt **e, *te;
void *ret; void *ret;
ret = nil; ret = nil;
e = hash_getp(map, str, 0); e = hash_getp(map, str, 0);
if(*e) { if(*e) {

View File

@ -10,11 +10,11 @@
* readable form, Part01/01 Message-ID: <1935@wyse.wyse.com> Date: 22 Dec 88 * readable form, Part01/01 Message-ID: <1935@wyse.wyse.com> Date: 22 Dec 88
* 19:28:25 GMT Organization: Wyse Technology, San Jose Lines: 1093 Approved: * 19:28:25 GMT Organization: Wyse Technology, San Jose Lines: 1093 Approved:
* mikew@wyse.com * mikew@wyse.com
* *
* Submitted-by: richsun!darkstar!ken Posting-number: Volume 2, Issue 56 * Submitted-by: richsun!darkstar!ken Posting-number: Volume 2, Issue 56
* Archive-name: showevent/part01 * Archive-name: showevent/part01
* *
* *
* There are times during debugging when it would be real useful to be able to * There are times during debugging when it would be real useful to be able to
* print the fields of an event in a human readable form. Too many times I * print the fields of an event in a human readable form. Too many times I
* found myself scrounging around in section 8 of the Xlib manual looking for * found myself scrounging around in section 8 of the Xlib manual looking for
@ -29,13 +29,13 @@
* functions are not complicated, in fact, they are mind-numbingly boring - * functions are not complicated, in fact, they are mind-numbingly boring -
* but that's just the point nobody wants to spend the time writing functions * but that's just the point nobody wants to spend the time writing functions
* like this, they just want to have them when they need them. * like this, they just want to have them when they need them.
* *
* A simple, sample program is included which does little else but to * A simple, sample program is included which does little else but to
* demonstrate the use of these two functions. These functions have saved me * demonstrate the use of these two functions. These functions have saved me
* many an hour during debugging and I hope you find some benefit to these. * many an hour during debugging and I hope you find some benefit to these.
* If you have any comments, suggestions, improvements, or if you find any * If you have any comments, suggestions, improvements, or if you find any
* blithering errors you can get it touch with me at the following location: * blithering errors you can get it touch with me at the following location:
* *
* ken@richsun.UUCP * ken@richsun.UUCP
*/ */
@ -931,7 +931,7 @@ struct Handler {
int (*fn)(Fmt*, XEvent*); int (*fn)(Fmt*, XEvent*);
}; };
int int
fmtevent(Fmt *fmt) { fmtevent(Fmt *fmt) {
XEvent *e; XEvent *e;
XAnyEvent *ev; XAnyEvent *ev;

View File

@ -6,7 +6,7 @@
char* char*
estrndup(const char *str, uint len) { estrndup(const char *str, uint len) {
char *ret; char *ret;
len = min(len, strlen(str)); len = min(len, strlen(str));
ret = emalloc(len + 1); ret = emalloc(len + 1);
memcpy(ret, str, len); memcpy(ret, str, len);

View File

@ -5,7 +5,7 @@
#include <string.h> #include <string.h>
#include <stuff/util.h> #include <stuff/util.h>
#define strbcmp(str, const) (strncmp((str), (const), sizeof(const)-1)) #define strbcmp(str, const) (strncmp((str), (const), sizeof(const)-1))
int int
getbase(const char **s, long *sign) { getbase(const char **s, long *sign) {
const char *p; const char *p;

View File

@ -22,4 +22,4 @@ strcasestr(const char *dst, const char *src) {
} }
} }
return nil; return nil;
} }

View File

@ -5,7 +5,7 @@
int int
utflcpy(char *to, const char *from, int l) { utflcpy(char *to, const char *from, int l) {
char *p; char *p;
p = utfecpy(to, to+l, from); p = utfecpy(to, to+l, from);
return p-to; return p-to;
} }

View File

@ -7,7 +7,7 @@ XPoint*
convpts(Point *pt, int np) { convpts(Point *pt, int np) {
XPoint *rp; XPoint *rp;
int i; int i;
rp = emalloc(np * sizeof *rp); rp = emalloc(np * sizeof *rp);
for(i = 0; i < np; i++) { for(i = 0; i < np; i++) {
rp[i].x = pt[i].x; rp[i].x = pt[i].x;

View File

@ -6,7 +6,7 @@
void void
drawpoly(Image *dst, Point *pt, int np, int cap, int w, Color col) { drawpoly(Image *dst, Point *pt, int np, int cap, int w, Color col) {
XPoint *xp; XPoint *xp;
xp = convpts(pt, np); xp = convpts(pt, np);
XSetLineAttributes(display, dst->gc, w, LineSolid, cap, JoinMiter); XSetLineAttributes(display, dst->gc, w, LineSolid, cap, JoinMiter);
setgccol(dst, col); setgccol(dst, col);

View File

@ -32,11 +32,10 @@ errorhandler(Display *dpy, XErrorEvent *error) {
int int
traperrors(bool enable) { traperrors(bool enable) {
sync(); sync();
_trap_errors = enable; _trap_errors = enable;
if (enable) if (enable)
nerrors = 0; nerrors = 0;
return nerrors; return nerrors;
} }

View File

@ -55,16 +55,16 @@ initdisplay(void) {
scr.visual32 = DefaultVisual(display, scr.screen); scr.visual32 = DefaultVisual(display, scr.screen);
scr.gc = DefaultGC(display, scr.screen); scr.gc = DefaultGC(display, scr.screen);
scr.depth = DefaultDepth(display, scr.screen); scr.depth = DefaultDepth(display, scr.screen);
scr.white = WhitePixel(display, scr.screen); scr.white = WhitePixel(display, scr.screen);
scr.black = BlackPixel(display, scr.screen); scr.black = BlackPixel(display, scr.screen);
scr.root.xid = RootWindow(display, scr.screen); scr.root.xid = RootWindow(display, scr.screen);
scr.root.r = Rect(0, 0, scr.root.r = Rect(0, 0,
DisplayWidth(display, scr.screen), DisplayWidth(display, scr.screen),
DisplayHeight(display, scr.screen)); DisplayHeight(display, scr.screen));
scr.rect = scr.root.r; scr.rect = scr.root.r;
scr.root.parent = &scr.root; scr.root.parent = &scr.root;
windowmap.bucket = wbucket; windowmap.bucket = wbucket;

View File

@ -3,8 +3,6 @@
*/ */
#include "../x11.h" #include "../x11.h"
typedef struct KMask KMask;
char *modkey_names[] = { char *modkey_names[] = {
"Shift", "Shift",
"", "",
@ -41,3 +39,43 @@ parsekey(char *str, int *mask, char **key) {
else else
return i == nkeys; return i == nkeys;
} }
int
numlockmask(void) {
static int masks[] = {
ShiftMask, LockMask, ControlMask, Mod1Mask,
Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
};
XModifierKeymap *modmap;
KeyCode kcode;
int i, max, numlock;
numlock = 0;
modmap = XGetModifierMapping(display);
kcode = keycode("Num_Lock");
if(kcode && modmap && modmap->max_keypermod > 0) {
max = nelem(masks) * modmap->max_keypermod;
for(i = 0; i < max && !numlock; i++)
if(modmap->modifiermap[i] == kcode)
numlock = masks[i / modmap->max_keypermod];
}
XFreeModifiermap(modmap);
return numlock;
}
int
fmtkey(Fmt *f) {
XKeyEvent *ev;
char *key;
int nfmt;
ev = va_arg(f->args, XKeyEvent*);
key = XKeysymToString(XKeycodeToKeysym(display, ev->keycode, 0));
nfmt = f->nfmt;
unmask(f, ev->state, modkey_names, '-');
if(f->nfmt > nfmt)
fmtrune(f, '-');
return fmtstrcpy(f, key);
}

View File

@ -6,7 +6,7 @@
int int
grabpointer(Window *w, Window *confine, Cursor cur, int mask) { grabpointer(Window *w, Window *confine, Cursor cur, int mask) {
XWindow cw; XWindow cw;
cw = None; cw = None;
if(confine) if(confine)
cw = confine->xid; cw = confine->xid;

View File

@ -9,7 +9,7 @@ pointerscreen(void) {
Point pt; Point pt;
uint ui; uint ui;
int i; int i;
return XQueryPointer(display, scr.root.xid, &win, &win, &i, &i, return XQueryPointer(display, scr.root.xid, &win, &win, &i, &i,
&pt.x, &pt.y, &ui); &pt.x, &pt.y, &ui);
} }

View File

@ -9,7 +9,7 @@ querypointer(Window *w) {
Point pt; Point pt;
uint ui; uint ui;
int i; int i;
XQueryPointer(display, w->xid, &win, &win, &i, &i, &pt.x, &pt.y, &ui); XQueryPointer(display, w->xid, &win, &win, &i, &i, &pt.x, &pt.y, &ui);
return pt; return pt;
} }

View File

@ -8,7 +8,7 @@ Window*
findwin(XWindow xw) { findwin(XWindow xw) {
Window *w; Window *w;
void **e; void **e;
e = map_get(&windowmap, (ulong)xw, false); e = map_get(&windowmap, (ulong)xw, false);
if(e) { if(e) {
w = *e; w = *e;

View File

@ -6,7 +6,7 @@
Atom Atom
xatom(const char *name) { xatom(const char *name) {
void **e, **f; void **e, **f;
e = hash_get(&atommap, name, true); e = hash_get(&atommap, name, true);
if(*e == nil) { if(*e == nil) {
*e = (void*)XInternAtom(display, name, false); *e = (void*)XInternAtom(display, name, false);

View File

@ -15,8 +15,8 @@
#include <plan9.h> #include <plan9.h>
Rune* Rune*
runestrdup(const Rune *s) runestrdup(const Rune *s)
{ {
Rune *ns; Rune *ns;
ns = malloc(sizeof(Rune)*(runestrlen(s) + 1)); ns = malloc(sizeof(Rune)*(runestrlen(s) + 1));

View File

@ -9,7 +9,7 @@ static Atom
xatom(Display *display, char *name) { xatom(Display *display, char *name) {
/* Blech. I don't trust Xlib's cacheing. /* Blech. I don't trust Xlib's cacheing.
MapEnt *e; MapEnt *e;
e = hash_get(&amap, name, 1); e = hash_get(&amap, name, 1);
if(e->val == nil) if(e->val == nil)
e->val = (void*)XInternAtom(display, name, False); e->val = (void*)XInternAtom(display, name, False);

View File

@ -51,7 +51,6 @@ connections. The address takes the form
unix!/tmp/ns.\fB$USER\fR.\fB${DISPLAY\fR%.0\fB}\fR/wmii unix!/tmp/ns.\fB$USER\fR.\fB${DISPLAY\fR%.0\fB}\fR/wmii
.fi .fi
which opens a unix socket per Plan 9 Port conventions. To which opens a unix socket per Plan 9 Port conventions. To
open a TCP socket, listening at port 4332 on the loopback open a TCP socket, listening at port 4332 on the loopback
interface, use: interface, use:
@ -60,7 +59,6 @@ interface, use:
tcp!localhost!4332 tcp!localhost!4332
.fi .fi
\fB$WMII_NAMESPACE\fR is automatically set to this value. \fB$WMII_NAMESPACE\fR is automatically set to this value.
.TP .TP
@ -265,14 +263,12 @@ Rules have the form:
/\fI<regex>\fR/ -> \fI<width>\fR\fI[+\fI<width>\fR]\fR* /\fI<regex>\fR/ -> \fI<width>\fR\fI[+\fI<width>\fR]\fR*
.fi .fi
Where, Where,
.nf .nf
\fI<width>\fR := \fI<percent of screen>\fR | \fI<pixels>\fRpx \fI<width>\fR := \fI<percent of screen>\fR | \fI<pixels>\fRpx
.fi .fi
When a new column, \fI<n>\fR, is created on a view whose name When a new column, \fI<n>\fR, is created on a view whose name
matches \fI<regex>\fR, it is given the \fI<n>\fRth supplied \fI<width>\fR. matches \fI<regex>\fR, it is given the \fI<n>\fRth supplied \fI<width>\fR.
If there is no \fI<n>\fRth width, it is given 1/\fI<ncol>\fRth of the If there is no \fI<n>\fRth width, it is given 1/\fI<ncol>\fRth of the
@ -290,7 +286,6 @@ specified as:
/\fI<regex>\fR/ \fI<key>\fR=\fI<value>\fR ... /\fI<regex>\fR/ \fI<key>\fR=\fI<value>\fR ...
.fi .fi
where each \fI<key>\fR represents a command in the clients \fIctl\fR where each \fI<key>\fR represents a command in the clients \fIctl\fR
file, and each \fI<value>\fR represents the value to assign to it. file, and each \fI<value>\fR represents the value to assign to it.
The rules are applied when the client is first started and The rules are applied when the client is first started and
@ -405,7 +400,9 @@ attached to a new view. Ordinarilly, the value
changes automatically whenever the window is changes automatically whenever the window is
moved between the floating and managed layers. moved between the floating and managed layers.
However, setting a value of \fIalways\fR or \fInever\fR However, setting a value of \fIalways\fR or \fInever\fR
overrides this behavior. overrides this behavior. Additionally, dialogs,
menus, docks, and splash screens will always
float unless this value is set to \fInever\fR.
.TP .TP
fullscreen \fI<on | off | toggle>\fR fullscreen \fI<on | off | toggle>\fR
Sets the client's fullscreen state. Sets the client's fullscreen state.
@ -519,7 +516,6 @@ Selects a column or the floating area.
area ::= \fI<area_spec>\fR | \fI<screen_spec>\fR:\fI<area_spec>\fR area ::= \fI<area_spec>\fR | \fI<screen_spec>\fR:\fI<area_spec>\fR
.fi .fi
When \fI<screen_spec>\fR is omitted and \fI<area_spec>\fR is not "sel", When \fI<screen_spec>\fR is omitted and \fI<area_spec>\fR is not "sel",
0 is assumed. "sel" by itself represents the selected client no 0 is assumed. "sel" by itself represents the selected client no
matter which screen it is on. matter which screen it is on.
@ -528,7 +524,6 @@ matter which screen it is on.
area_spec ::= "~" | \fI<number>\fR | "sel" area_spec ::= "~" | \fI<number>\fR | "sel"
.fi .fi
Where "~" represents the floating area and \fI<number>\fR represents a column Where "~" represents the floating area and \fI<number>\fR represents a column
index, starting at one. index, starting at one.
@ -536,7 +531,6 @@ index, starting at one.
screen_spec ::= \fI<number>\fR screen_spec ::= \fI<number>\fR
.fi .fi
Where \fI<number>\fR representes the 0\-based Xinerama screen number. Where \fI<number>\fR representes the 0\-based Xinerama screen number.
.TP .TP
@ -547,7 +541,6 @@ Selects a client window.
frame ::= \fI<area>\fR \fI<index>\fR | \fI<area>\fR sel | client \fI<window-id>\fR frame ::= \fI<area>\fR \fI<index>\fR | \fI<area>\fR sel | client \fI<window-id>\fR
.fi .fi
Where \fI<index>\fR represents the nth frame of \fI<area>\fR or \fI<window\-id>\fR is Where \fI<index>\fR represents the nth frame of \fI<area>\fR or \fI<window\-id>\fR is
the X11 window id of the given client. the X11 window id of the given client.
@ -559,7 +552,6 @@ The amount to grow or nudge something.
amount ::= \fI<number>\fR | \fI<number>\fRpx amount ::= \fI<number>\fR | \fI<number>\fRpx
.fi .fi
If "px" is given, \fI<number>\fR is interperated as an exact pixel count. If "px" is given, \fI<number>\fR is interperated as an exact pixel count.
Otherwise, it's interperated as a "reasonable" amount, which is Otherwise, it's interperated as a "reasonable" amount, which is
usually either the height of a window's title bar, or its sizing usually either the height of a window's title bar, or its sizing
@ -624,6 +616,7 @@ The namespace directory to use if no address is provided.
wimenu(1), wmii9menu(1), witray(1), wmiir(1), wihack(1) wimenu(1), wmii9menu(1), witray(1), wmiir(1), wihack(1)
.P .P
@DOCDIR@/wmii.pdf @DOCDIR@/wmii.pdf
@DOCDIR@/FAQ
.P .P
\fI[1]\fR http://www.suckless.org/wiki/wmii/tips/9p_tips \fI[1]\fR http://www.suckless.org/wiki/wmii/tips/9p_tips

View File

@ -50,13 +50,11 @@ of the core window manager.
`<protocol>!<address>`. The default is of the form: `<protocol>!<address>`. The default is of the form:
``` unix!/tmp/ns.$USER.${DISPLAY%.0}/wmii ``` unix!/tmp/ns.$USER.${DISPLAY%.0}/wmii
which opens a unix socket per Plan 9 Port conventions. To which opens a unix socket per Plan 9 Port conventions. To
open a TCP socket, listening at port 4332 on the loopback open a TCP socket, listening at port 4332 on the loopback
interface, use: interface, use:
``` tcp!localhost!4332 ``` tcp!localhost!4332
$WMII_NAMESPACE is automatically set to this value. $WMII_NAMESPACE is automatically set to this value.
: -r <wmiirc> : -r <wmiirc>
@ -232,11 +230,9 @@ follows.
Rules have the form: Rules have the form:
``` /<regex>/ -> <width>[+<width>]* ``` /<regex>/ -> <width>[+<width>]*
Where, Where,
``` <width> := <percent of screen> | <pixels>px ``` <width> := <percent of screen> | <pixels>px
When a new column, <n>, is created on a view whose name When a new column, <n>, is created on a view whose name
matches <regex>, it is given the <n>th supplied <width>. matches <regex>, it is given the <n>th supplied <width>.
If there is no <n>th width, it is given 1/<ncol>th of the If there is no <n>th width, it is given 1/<ncol>th of the
@ -250,7 +246,6 @@ follows.
specified as: specified as:
``` /<regex>/ <key>=<value> ... ``` /<regex>/ <key>=<value> ...
where each <key> represents a command in the clients _ctl_ where each <key> represents a command in the clients _ctl_
file, and each <value> represents the value to assign to it. file, and each <value> represents the value to assign to it.
The rules are applied when the client is first started and The rules are applied when the client is first started and
@ -351,7 +346,9 @@ represents the currently selected client.
changes automatically whenever the window is changes automatically whenever the window is
moved between the floating and managed layers. moved between the floating and managed layers.
However, setting a value of _always_ or _never_ However, setting a value of _always_ or _never_
overrides this behavior. overrides this behavior. Additionally, dialogs,
menus, docks, and splash screens will always
float unless this value is set to _never_.
: fullscreen <on | off | toggle> : fullscreen <on | off | toggle>
Sets the client's fullscreen state. Sets the client's fullscreen state.
: group <group id> : group <group id>
@ -375,7 +372,7 @@ represents the currently selected client.
: urgent <on | off | toggle> : urgent <on | off | toggle>
Set or unset the client's urgent hint. Set or unset the client's urgent hint.
<< <<
: label : label
Set or read a client's label (title). Set or read a client's label (title).
: props : props
@ -435,25 +432,21 @@ all of the clients with the given tag applied. The special
Selects a column or the floating area. Selects a column or the floating area.
``` area ::= <area_spec> | <screen_spec>:<area_spec> ``` area ::= <area_spec> | <screen_spec>:<area_spec>
When <screen_spec> is omitted and <area_spec> is not "sel", When <screen_spec> is omitted and <area_spec> is not "sel",
0 is assumed. "sel" by itself represents the selected client no 0 is assumed. "sel" by itself represents the selected client no
matter which screen it is on. matter which screen it is on.
``` area_spec ::= "~" | <number> | "sel" ``` area_spec ::= "~" | <number> | "sel"
Where "~" represents the floating area and <number> represents a column Where "~" represents the floating area and <number> represents a column
index, starting at one. index, starting at one.
``` screen_spec ::= <number> ``` screen_spec ::= <number>
Where <number> representes the 0-based Xinerama screen number. Where <number> representes the 0-based Xinerama screen number.
: frame : frame
Selects a client window. Selects a client window.
``` frame ::= <area> <index> | <area> sel | client <window-id> ``` frame ::= <area> <index> | <area> sel | client <window-id>
Where <index> represents the nth frame of <area> or <window-id> is Where <index> represents the nth frame of <area> or <window-id> is
the X11 window id of the given client. the X11 window id of the given client.
@ -461,7 +454,6 @@ all of the clients with the given tag applied. The special
The amount to grow or nudge something. The amount to grow or nudge something.
``` amount ::= <number> | <number>px ``` amount ::= <number> | <number>px
If "px" is given, <number> is interperated as an exact pixel count. If "px" is given, <number> is interperated as an exact pixel count.
Otherwise, it's interperated as a "reasonable" amount, which is Otherwise, it's interperated as a "reasonable" amount, which is
usually either the height of a window's title bar, or its sizing usually either the height of a window's title bar, or its sizing
@ -517,6 +509,7 @@ thus can be used in actions:
= SEE ALSO = = SEE ALSO =
wimenu(1), wmii9menu(1), witray(1), wmiir(1), wihack(1) + wimenu(1), wmii9menu(1), witray(1), wmiir(1), wihack(1) +
@DOCDIR@/wmii.pdf @DOCDIR@/wmii.pdf
@DOCDIR@/FAQ
[1] http://www.suckless.org/wiki/wmii/tips/9p_tips + [1] http://www.suckless.org/wiki/wmii/tips/9p_tips +
[2] @DOCDIR@/wmii.pdf [2] @DOCDIR@/wmii.pdf

View File

@ -2,7 +2,7 @@ PTARG = $(ROOT)/lib/$(TARG)
LIB = $(PTARG).a LIB = $(PTARG).a
OFILES = $(OBJ:=.o) OFILES = $(OBJ:=.o)
all: $(HFILES) $(LIB) all: $(HFILES) $(LIB)
install: $(PTARG).install install: $(PTARG).install
uninstall: $(PTARG).uninstall uninstall: $(PTARG).uninstall

View File

@ -3,7 +3,7 @@ SO = $(SOPTARG).$(SOEXT)
SONAME = $(TARG).$(SOEXT) SONAME = $(TARG).$(SOEXT)
OFILES_PIC = $(OBJ:=.o_pic) OFILES_PIC = $(OBJ:=.o_pic)
all: $(HFILES) $(SO) all: $(HFILES) $(SO)
install: $(SOPTARG).install install: $(SOPTARG).install
uninstall: $(SOPTARG).uninstall uninstall: $(SOPTARG).uninstall

View File

@ -1,26 +1,31 @@
VERS = hg$$(hg identify -n) VERS = hg$$(hg identify -n)
VERS = $$(test -n "$$WMII_HGVERSION" && echo $$WMII_HGVERSION || \ VERS = $$(test -n "$$WMII_HGVERSION" && echo $$WMII_HGVERSION || \
hg log -r $$(hg id 2>/dev/null | awk -F'[+ ]' '{print $$1}') --template 'hg{rev}' 2>/dev/null) echo -n "hg$$(hg id -n 2>/dev/null)")
WMII_HGVERSION = $(VERS) WMII_HGVERSION = $(VERS)
WMII_HGVERSION := $(shell echo $(VERS)) WMII_HGVERSION := $(shell echo $(VERS))
WMII_HGVERSION != echo $(VERS) WMII_HGVERSION != echo $(VERS)
VERSION = $(WMII_HGVERSION) VERSION = $(WMII_HGVERSION)
CONFVERSION = -hg
COPYRIGHT = ©2010 Kris Maglione COPYRIGHT = ©2010 Kris Maglione
CONFDIR = wmii-hg
LOCALCONF = ~/.$(CONFDIR)
GLOBALCONF = $(ETC)/$(CONFDIR)
.MAKE.EXPORTED += WMII_HGVERSION .MAKE.EXPORTED += WMII_HGVERSION
SUBMAKE_EXPORT = WMII_HGVERSION=$(WMII_HGVERSION) SUBMAKE_EXPORT = WMII_HGVERSION=$(WMII_HGVERSION)
LIBS9 = $(ROOT)/lib/libstuff.a $(ROOT)/lib/libregexp9.a $(ROOT)/lib/libbio.a $(ROOT)/lib/libfmt.a $(ROOT)/lib/libutf.a LIBS9 = $(ROOT)/lib/libstuff.a $(ROOT)/lib/libregexp9.a $(ROOT)/lib/libbio.a $(ROOT)/lib/libfmt.a $(ROOT)/lib/libutf.a
CFLAGS += '-DVERSION=\"$(VERSION)\"' '-DCOPYRIGHT=\"$(COPYRIGHT)\"' \ CFLAGS += '-DVERSION=\"$(VERSION)\"' '-DCOPYRIGHT=\"$(COPYRIGHT)\"' \
'-DCONFVERSION=\"$(CONFVERSION)\"' '-DCONFPREFIX=\"$(ETC)\"' '-DCONFDIR=\"$(CONFDIR)\"' '-DCONFPREFIX=\"$(ETC)\"' \
'-DLOCALCONF=\"$(LOCALCONF)\"' '-DGLOBALCONF=\"$(GLOBALCONF)\"'
FILTER = sed "s|@CONFPREFIX@|$(ETC)|g; \ FILTER = sed "s|@CONFPREFIX@|$(ETC)|g; \
s|@GLOBALCONF@|$(ETC)/wmii$(CONFVERSION)|g; \ s|@GLOBALCONF@|$(GLOBALCONF)|g; \
s|@LOCALCONF@|~/.wmii$(CONFVERSION)|g; \ s|@LOCALCONF@|$(LOCALCONF)|g; \
s|@CONFVERSION@|$(CONFVERSION)|g; \ s|@CONFDIR@|$(CONFDIR)|g; \
s|@DOCDIR@|$(DOC)|g; \ s|@DOCDIR@|$(DOC)|g; \
s|@ALTDOC@|$(DOC)/alternative_wmiircs|g; \ s|@ALTDOC@|$(DOC)/alternative_wmiircs|g; \
s|@EXAMPLES@|$(DOC)/examples|g; \ s|@EXAMPLES@|$(DOC)/examples|g; \

View File

@ -2,7 +2,7 @@ ROOT=..
include $(ROOT)/mk/hdr.mk include $(ROOT)/mk/hdr.mk
include $(ROOT)/mk/wmii.mk include $(ROOT)/mk/wmii.mk
BIN = $(ETC)/wmii$(CONFVERSION) BIN = $(GLOBALCONF)
TARG = wmiirc \ TARG = wmiirc \
welcome welcome

View File

@ -227,8 +227,8 @@ fn getfuns {
} }
fn actionlist { fn actionlist {
{ rescue '*' {} { { rescue '*' {} {
proglist ${hostenv WMII_CONFPATH} proglist ${hostenv WMII_CONFPATH}
} }
getfuns Action getfuns Action
} | sort | uniq } | sort | uniq

View File

@ -5,7 +5,7 @@ TARG = grav
OFILES = ../cmd/util.o \ OFILES = ../cmd/util.o \
../cmd/wmii/map.o \ ../cmd/wmii/map.o \
../cmd/wmii/x11.o ../cmd/wmii/x11.o
LDFLAGS += $(OFILES) -lfmt -lutf -lbio $(LIBX11) -lXext LDFLAGS += $(OFILES) -lfmt -lutf -lbio $(LIBX11) -lXext
CFLAGS += $(INCX11) CFLAGS += $(INCX11)

View File

@ -66,7 +66,7 @@ readfile(file: string): (string, int)
fd := open(file, OREAD); fd := open(file, OREAD);
if(fd == nil) if(fd == nil)
return ("", 0); return ("", 0);
ret := ""; ret := "";
buf := array[512] of byte; buf := array[512] of byte;
while((n := read(fd, buf, len buf)) > 0) while((n := read(fd, buf, len buf)) > 0)
@ -115,7 +115,7 @@ init(draw: ref Draw->Context, argv: list of string)
} }
relist = reverse(relist); relist = reverse(relist);
line: for(;;) { line: for(;;) {
lin := <-line; lin := <-line;
if(lin == nil) if(lin == nil)

View File

@ -96,7 +96,7 @@ prompt() {
unset val unset val
if [ -z "$def" -o -n "$force" ]; then if [ -z "$def" -o -n "$force" ]; then
echo "$@" echo "$@"
echo -n "$var[$def]$(equals) " echo -n "$var[$def]$(equals) "
read val read val
echo echo
fi fi
@ -158,7 +158,7 @@ if $1 -v 2>&1 | grep 'gcc version' >/dev/null; then
echo echo
fi fi
prompt INCPATH Search path for include files prompt INCPATH Search path for include files
prompt LIBS Libraries to be linked with every executable prompt LIBS Libraries to be linked with every executable
prompt CFLAGS Flags for the C compiler prompt CFLAGS Flags for the C compiler

View File

@ -27,9 +27,9 @@ echo LD "$($bin/cleanname ${BASE}$outfile)"
[ -n "$noisycc" ] && echo $LD -o $outfile $ofiles $LDFLAGS $args [ -n "$noisycc" ] && echo $LD -o $outfile $ofiles $LDFLAGS $args
$LD -o $outfile $ofiles $LDFLAGS $args >$xtmp 2>&1 $LD -o $outfile $ofiles $LDFLAGS $args >$xtmp 2>&1
status=$? status=$?
[ $? -eq 0 ] || $LD -o $outfile $ofiles $LDFLAGS $args >&2 [ $status -eq 0 ] || $LD -o $outfile $ofiles $LDFLAGS $args >&2
sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . | sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . |
egrep -v 'is almost always misused|is dangerous, better use|in statically linked applications requires at runtime' egrep -v 'is almost always misused|is dangerous, better use|in statically linked applications requires at runtime'
rm -f $xtmp rm -f $xtmp