______ ____ __ / ___\ \ / / \/ | | | _ \ \ /\ / /| |\/| | | |_| | \ V V / | | | | \____| \_/\_/ |_| |_| ___ _ _ _ _ _ ____ _ _ |_ _|_ __ ___| |_ __ _| | | __ _| |_(_) ___ _ __ / ___|_ _(_) __| | ___ | || '_ \/ __| __/ _` | | |/ _` | __| |/ _ \| '_ \ | | _| | | | |/ _` |/ _ \ | || | | \__ \ || (_| | | | (_| | |_| | (_) | | | | | |_| | |_| | | (_| | __/ |___|_| |_|___/\__\__,_|_|_|\__,_|\__|_|\___/|_| |_| \____|\__,_|_|\__,_|\___| ============================================================================== WHAT IS GWM? ============ The GWM (Generic Window Manager) is an extensible Window Manager for the X Window System Version 11. It is based upon a WOOL (Window Object Oriented Langage) kernel, which is an interpreted dialect of Lisp with specific window management primitives. The user builds a window manager by writing WOOL files to describe objects on the screen, including a Finite State Machine triggering WOOL actions on response to X events (e.g. mouse buttons) on that object. These objects can be used as decorations around X applications windows, as pop-up menus or as independent windows. GWM should be able to emulate efficiently other window managers, and play the same role for window managers as EMACS does for text editors. WHERE IS GWM? ============= All new "official" gwm releases can be found by ftp on: Europe: koala.inria.fr:/pub/gwm/ USA: ftp.x.org:/contrib/window_managers/ and all the ftp.x.org mirrors (find them by a "archie GettingR6") There is a web page: http://www.inria.fr/koala/gwm UNPACKING a new distribution: ============================= Unpack the distrib in a GWMDIR directory created for the compilation process The installation of gwm will look like: GWMDIR | gwm ---shadows----- sun4 -- linux -- dec ... | (symb. links) C source files +----+----+ | | | doc Make data The files will be then compiled in brother directories of "gwm" (sons of GWMDIR) in a stand-alone installation (using the Makefile.noXtree makefile), or directly in the "gwm" directory itself in case of an installation by imake. The Make directory will contain all your configuration options, that you will be able to re-use between different gwm releases. INSTALLATION: ============= ************************************ WARNING ********************************* GWM sends me an udp packet with just the value of "gethostname" for my private statistics on startup. You can disable this feature by (re)compiling with -DNO_GWM_LOG or -DNO_KOALA_SPY, or you can also set the shell environments NO_GWM_LOG or NO_KOALA_SPY to disable this feature without recompilation. ****************************************************************************** Files of interest: INSTALL Documentation on the compilation flags for many architectures PROBLEMS Answer to common compilation problems doc/KNOWN_BUGS known bugs for this version doc/TO_BE_DONE lists the planned enhancements CHANGES summary of the user-visible changes revision.c the detailled internal change log NOTE: some contributed software that can/must be installed by hand are in the contrib/ directory, including emacs modes, and way to interact with gwm from emacs or the shell. among them are: rxterm/ scripts to remote launch X commands on other machines command_menus/ some menus to launch unix commands emacs-mode/ emacs mode to run intarctively wool code on a live gwm gwm-buffer/ same for epoch gwmchat/ C program for typing commands to gwm (obsolete?) gwmsend/ C prog to send commands to gwm gwmsh/ C prog to to run intarctively wool code on a live gwm lisp-modes/ emacs lisp modes to edit wool code widgets/ package to add GWM scrollbars and menus to epoch The "data/" directory contains bitmaps, and wool (gwm built-in lisp) profiles. installing gwm is putting the executable "gwm" somewhere in your path, and copying somewhere the data/ contents (without forgetting the 2 files beginning by .) and make GWMPATH point on it, if not defined already at compile time. Contrib/rxterm contains the "rxterm" shell script used to spawn remote xterms. If you do not have such a script already installed, you should install this script and also make "rx" and "rxload" commands as links to it. (it is NOT installed automatically to preserve existing ones) ____ _ _ _ _ / ___|___ _ __ ___ _ __ (_) | __ _| |_(_) ___ _ __ | | / _ \| '_ ` _ \| '_ \| | |/ _` | __| |/ _ \| '_ \ | |__| (_) | | | | | | |_) | | | (_| | |_| | (_) | | | | \____\___/|_| |_| |_| .__/|_|_|\__,_|\__|_|\___/|_| |_| |_| COMPILING: ========== Then you can either compile gwm via "imake" or in a stand-alone way. WITH IMAKE: The Imakefile is provided. You should know how to use imake to build the Gwm Makefile, by either: ximake TOP if your X source tree is in directory TOP, or: xmkmf if your X source tree has been fully installed then do a "make Makefiles" to build all the subdirectory Makefiles, then do a "make" which will build the "gwm" binary, and then do a "make install" and "make install.man" which will install the gwm binary, the data files in the "data/" subdirectory and the manual page. If it fails, you may edit the Imakefile to add compilation flags to suit your machine. (see make.TEMPLATE for the description of these flags). If you have to modify the provided Imakefile to compile on your machine, PLEASE mail me the changes! NOTE: the installation of the "data" subdir works only with the X11R6, X11R5 and X11R4 users will have to replace XCOMM strings in Imakefiles by #, with X11R3, you will have to do it by hand. (do a "cp data/.*gwm data/* GWMDIR" where GWMDIR can be found in the Imakefile. WITHOUT IMAKE: To compile or install gwm, you must, in the "gwm" directory you just created, do a: cp Makefile.noXtree Makefile and for each type of machine on which you decide to install it: decide which name you will give to this type of machine ("dpx1000", "sun", "vax"). Suppose it is "dpx" in the following. Don't try to name it "gwm" however! type: "make DIR=../dpx sdir" (or make DIR=dpx dir if you don't have symbolic links on your system) This will build a directory "../dpx", link all source files in it, copy the Make.TEMPLATE file to "Make.dpx" in the ../dpx directory, and make a link to this newly created file in "Make" subdirectory. If you want to create the target directory on another filesystem, you can use symbolic links to do so, Just say "make DIR=path sdir" where "path" is the complete pathname of the target directory, for instance "/usr/maalea/local/src/GWM/dpx" go into it ("cd ../dpx"), and edit the "Make.dpx" file to adapt it to your local installation. Then, type "make" and a "gwm" executable should be built. In case of errors, a simple "make" should resume the compilation process after the first "make" command has been issued. If you have the message "Make: Don't know how to make .dir. Stop.", that means that you have forgotten to do "cd ../dpx". VERY IMPORTANT: if you encounter compilation problems, please mail me the problems and the patches you had to apply to make it compile on your system, so that I can include them in future releases! If everything is OK, type "make install", it should copy the executable and the whole ./data subdirectory. If you want to install it by hand, just copy gwm into your path, and the whole contents of the data directory (which can be shared between machines) into the gwm built-in path. (the built-in path is printed by gwm by: gwm -?) Then, you can delete the working directory. The only thing you need to keep is the "Make" directory, which contains all the things you may have defined or adapted for your configuration. A link to the "Make.machine" in the "Make" subdirectory was REPORTING BUGS: =============== See the file doc/BUG_REPORT to mail back bugs to me. nothing formal here, just to be sure you dont forget to send the context of the bug... PS: I maintain a mailing list about gwm: gwm-talk@sophia.inria.fr (all mail sent to these address will be redispatched to all members) mail requests to be added to these lists to: gwm-talk-requests@sophia.inria.fr or gwm@sophia.inria.fr. New updates are announced on the comp.windows.x newsgroup, and on the "gwm-talk" list. If you don't have ftp, use the mail<->ftp gateways ftpmail@decwrl.dec.com or bitftp@pucc.princeton.edu. (send a message with the word HELP in it to these adresses). Here is the list of the various flags you may set up for compiling GWM: ====================================================================== X version: (default is X11R6) --------- -DX11R1 For compiling with vanilla X11R1 library -DX11R2 For compiling with vanilla X11R2 library -DX11R3 For compiling with vanilla X11R3 library (for now the previous defines are equivalent) -DX11R4 For compiling with vanilla X11R4 library -DX11R5 For compiling with vanilla X11R5 library -DX11R6 For compiling with vanilla X11R6 library (for now the previous defines are equivalent) Recommended flags: (you should leave them in DEFINES= ) ----------------- -DSECURE turns on sanity checks on many functions, should be defined. -DUSE_STANDARD_MALLOC Otherwise my malloc is used, but on modern systems it is not needed anymore -DUSER_DEBUG Enable user-level debugging functions (trace) OS variants: ----------- Autodetected: sparc, apollo, linux -DSYSV for System V R3 or previous systems (BSD 4.x is default) -DSVR4 for System V R4 systems (solaris, irix). Do not define SYSV. -DPAGE_SIZE=int for Virtual Memory page size (for SYSV only!) in bytes. (defaults to 8192). -DPTR_TYPE=int What is the (int, long...) type which is the same size as any pointer on your machine? (int is default) -DCARD32=long What is the numerical type 32 bit long? defaults to long -DIBM_RT For compiling on an IBM PC/RT with AIX -Dsm90 for BULL's sps7, dpx -DNO_GETPAGESIZE if you dont have getpagesize() -DSYSV_TIME if you cannot use BSD ftime function -DSYSV_STRINGS if you include instead of -DSYSV_UTSNAME if you don't have gethostname() -DSYSV_SIGNALS if you dont have wait3() -DNO_BCOPY if you dont have bcopy and friends -DHAS_STRCHR if strchr already exists -DNO_MALLOC_DECLARE if your includes already declares char *malloc() -DVOID_SIGNALS if signal handlers return a void * (default an int) -DVOID_MALLOC if your malloc returns a void * (default a char *) -DNO_STRUCTURE_OFFSETS if your compiler cannot compute struct offset on types, only on instances (apollo) Workarounds for bugs: -------------------- -DSTUPID if your compiler chokes on complicated expressions (vax) -DDOUBLE_ALIGN for machines where structure fields MUST be aligned on double float boundaries! (GOULD's powernodes, solaris 2.x) -DDO_NOT_REDEFINE_MALLOC if you are compiling with the standard DEC WINDOWS Xlib, or some very GCC-specific systems where malloc is built-in the compiler (some linuxes?) Debugging-only flags: -------------------- -DTRACE=n Enable tracing at default level n (mofifiable with -T option) -DDEBUG Enable debugging via assertions, include routines for DBX, Replace some macros by function calls, Synchronize X calls. Range checks mallocs. -DMLEAK Enable malloc's leaks tracing (very slow) -DDO_BUS_ERROR Force a bus error on error for debugging via (yeech!) adb -DMONITOR Include flags for profiling information (use -pg Cflags) Exemples: ======== DEFINES= -DSECURE -DUSE_STANDARD_MALLOC -DUSER_DEBUG +these_additional_flags... BSD machines, suns with SUNOS 4.x: none Suns with Solaris (aka SUNOS 5.x): -DSVR4 and: LIBS = -lXext -lX11 -lsocket -lnsl NOTE: some suns seems to require -DUSE_STANDARD_MALLOC, otherwise you get a bus error in color-make at runtime. vax: -DSTUPID sm90: -DSTUPID -DSYSV dpx: -DSYSV Hp9000 -DSYSV +Ns2000 +Nd2000 IBM RS6000/AIX: -DSYSV -DDO_NOT_DECLARE_STRCHR -DNEED_SELECT_H IBM/RT: -DSYSV -DIBM_RT -Nn3000 SGI Irix 5.3: -DSVR4 -DNO_STRUCTURE_OFFSETS Unixware: -DSVR4 -DDO_NOT_REDEFINE_MALLOC linux: no flags, should auto-compile (some linuxes need -DDO_NOT_USE_SBRK to prevent crash) FreeBSD: no flags, should auto-compile (detects __FreeBSD__) decstations 5100 (mips): -DSECURE -DSTATS -DUSER_DEBUG -DSIMPLE_LHS -G 0 -DVOID_MALLOC -DHAS_STRCHR -DNO_STRUCTURE_OFFSETS -I/usr/include/X11/extensions alpha: -DLONG_ALIGN -DNO_STRUCTURE_OFFSETS