sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-08-28 05:57:34 +00:00
commit 88965415ff
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
26235 changed files with 29195616 additions and 0 deletions

98
app/fvwm/docs/ANNOUNCE Normal file
View file

@ -0,0 +1,98 @@
Nobody believed it would ever happen, but
_______ __ __ __
/ _____/__ / / / / / /
/ / /_/ / / / / / /
/ /___ __ ______ _____ / / / / __ __ / /
/ ____/ / / / ____ \ / ___ \ / / / / / / / / / /
/ / / / / / / / / / / / / / / / / / / / /_/
/ / / / / / / / / /__/ / / / / / / /___/ / __
/_/ /_/ /_/ /_/ /_______//_/ /_/ /_____ / /_/
____________________________________________ / / ____
_____/ /
/______/
The F???? Virtual Window Manager workers list is very pleased to
announce the first official version of Fvwm2 ever:
___ __ __ __ __ _ _ ___ ___
| __| || || || || /\\//\ // \\ // \\
||_ || || || || // \/ \\ // //
| _| || || || || || || // //
|| \\// \\ /\ // || || //__ _ //__
|| \/ \//\\/ || || /____| |_| /____|
Available at http://www.fvwm.org/ it includes the following
Highlights:
** GNU autoconf support for better portability.
** Dramatically improved menu handling with animated menus,
proper cursor key navigation and better overall flexibility.
** SnapAttraction and SnapGrid commands allow you to line up
windows and icons with ease.
** FvwmAnimate module controlling animated iconification.
** New syntax for menu styles (MenuStyle) with greatly enhanced
configurability.
** Enhanced focus handling (Direction commands).
** Animated panels in FvwmButtons (like in CDE or VUE).
** FvwmEvent is the more flexible successor of FvwmAudio.
FvwmAudio is still available.
And more...
* The ClickToFocusClickRaises option to the GlobalOpts command
(click in a window to raise it if you use mouse focus).
* A new web site and a bug tracking system.
* Faster startup.
* Limiting color usage with the ColorLimit command.
* Mini titles for FvwmPager (aka Balloons).
* Multiple Icon Boxes, Icon box grids, and Icon box fill
direction control.
* Improved FvwmButtons button placement to give absolute control
over where the buttons are placed.
* FvwmTile and FvwmCascade modules have been combined into the
new module FvwmRearrange. Shell scripts for FvwmTile and
FvwmCascade provide backwards compatibility.
* FvwmPager displays the current desk.
* Consistent page handling commands MoveToPage and MoveToDesk.
* Switch window focus with Alt-Tab, as in other popular GUI
systems (please read question 3.3 in the FAQ).
* The EdgeThickness command offers a way to make auto hide work
more smoothly in FvwmTaskBar.
* New commands DefaultFont, DefaultColors and Emulate.
* More consistent and often simpler syntax of configuration file.
* Lots of bug fixes to improve stability and portability.
* Consistent copying policy.
and many small enhancements too numerous to list here.
More detailed information on the contents of this release can be
found at:
http://www.fvwm.org/NEWS.html

79
app/fvwm/docs/BUGS Normal file
View file

@ -0,0 +1,79 @@
Herein lies the (partial?) list of Known Bugs. Further bug reports
(or even better, solutions) can be sent to the FVWM mailing list (see
the FAQ for address and how to PROPERLY report bugs).
See 'Bugfixes' section of the TODO list for additional known bugs and
be sure to have a look at the bug tracking system that can be reached
from our home page.
======================================================================
======================================================================
- No geometry can be specified for FvwmButtons panels.
- Running fvwm2 on an XNest X server does not work well.
- FvwmSave and FvwmSaveDesk are not up to date.
- The fvwm_convert script is not up to date.
- xscreensaver may not be able to allocate a private colormap
- FvwmButtons and possibly other modules may survive shutdown of the X
server.
- AutoHide in FvwmTaskBar does not work well. See 'EdgeThickness' command in
the manpage.
- DestroyMenu/DestroyFunc causes a coredump if a function/menu destroys
itself.
- Maximize does not work well when applied to a window that is not on
the current page.
- A piperead command may hang if used in .fvwm2rc (if the pipe is never
closed).
- StartsOnPage does not work as expected? Please read the manpage carefully.
======================================================================
======================================================================
Configure remembers too many things, particularly with respect to the
optional libraries. If you ever need to re-run configure, using
different --with options, please remove "config.cache" file first.
----------------------------------------------------------------------
Binding a key to a window decoration but not to the window itself is
discouraged because when the key-press event finally gets to the
window it will be marked as SYNTHETIC and will be ignored by many
applications.
----------------------------------------------------------------------
Sending DESTROY window manager options to applications is a bad way to
close them and should only be used as a last resort. Strange things
can happen. Please try DELETE and CLOSE first.
----------------------------------------------------------------------
Some users have seen intermittent problems with XEmacs version 19.13
not being refreshed correctly after a restart of fvwm2. If this
occurs, you should be able to open a new frame and delete the old one.
I can't debug this, as I don't see this problem. I don't know if the
problem is from XEmacs, fvwm2, or something specific to a few user's
setups.
----------------------------------------------------------------------
Some users have been getting odd startup problems, like total lockups.
I cannot reproduce this, and have no idea why. Let me know if you see
this and find a way to consistently reproduce it.
Actually, I've recently discovered that this is often from not having
a .fvwm2rc file, so check that first... But this is fixed in the
later versions.
----------------------------------------------------------------------
Fvwm attempts to be ICCCM 1.1 compliant. In addition, ICCCM
states that it should be possible for applications to receive ANY
keystroke, which is not consistent with the keyboard shortcut approach
used in fvwm and most other window managers. In particular you
cannot have the same keyboard shortcuts working with your fvwm2 and
another fvwm2 running within Xnest (a nested X server). The same problem
exists with mouse bindings.
----------------------------------------------------------------------

154
app/fvwm/docs/ChangeLog Normal file
View file

@ -0,0 +1,154 @@
1999-10-15 Dominik Vogt <dominik.vogt@gmx.de>
* Makefile.am (HTML): removed version.html again
1999-02-19 Dominik Vogt <dominik_vogt@hp.com>
* download.html: updated for 2.2
* version.html: updated for 2.2
* fvwm.lsm: updated for 2.2
* ANNOUNCE: Updated for 2.2
1999-02-18 Dominik Vogt <dominik_vogt@hp.com>
* FAQ: restructured FAQ and incorporated configuration-hints file
* configuration-hints: file removed
1999-02-15 Dominik Vogt <dominik_vogt@hp.com>
* configuration-hints: Added new file.
* ANNOUNCE: updated for 2.1.13
1999-02-14 Dominik Vogt <dominik_vogt@hp.com>
* Makefile.am (EXTRA_DIST): removed fvwm-2.xx.lsm from distribution
* FAQ (15): Added RedHat configuration question
1999-02-04 Paul D. Smith <psmith@gnu.org>
* cvs.html: Update CVS pserver hostname.
* links.html: Update web site, ftp site, and mailing list URLs.
* FAQ: Ditto.
* download.html: Ditto.
* ftp.html: Ditto.
* fvwm-2.2.lsm: Ditto.
* mailinglist.html: Ditto.
* version.html: Ditto.
* fvwm-2.xx.lsm: Ditto.
1999-02-02 Paul D. Smith <psmith@gnu.org>
* FAQ: Rewrote question 13 about XPM support.
1999-01-19 Paul D. Smith <psmith@gnu.org>
* ANNOUNCE: Update.
* FAQ: Update new URLs.
1999-01-19 Steven Michael ROBBINS <stever@jeff.cs.mcgill.ca>
* cvs.html: Major overhaul, bringing it up-to-date with current
conventions. Added links to the GNU tools needed for building the
CVS tree.
* DEVELOPERS: Fixed a bug in the recipe for building a
distribution (use "cvs tag", rather than "cvs rtag"). Also
updated to reflect the situation after the auto*-generated files
are removed.
* BUGS: Removed Xpm library v4.7 coredump note. The configure
script now ensures up-to-date xpm is used. Added note about
removing config.cache file before reconfiguring.
1999-01-18 Paul D. Smith <psmith@gnu.org>
* BUGS: Remove install-strip issue.
Sun Jan 17 16:07:15 1999 Steve Robbins <steve@nyongwa.montreal.qc.ca>
* FAQ: Fiddled with answers to: 4, 7, 13, 24, 32, 40. A few other
spelling fixes.
1999-01-16 Bob Woodside <proteus@pcnet.com>
* docs/FAQ: Removed Question 20 (why do Motif popups disappear
under the window with Autoraise in effect, etc.?). This no longer
happens as of 2.1.8. Added Question 49 (why can't I use StartIconic
with Netscape, etc.?).
1999-01-16 Dominik Vogt <dominik_vogt@hp.com>
* ANNOUNCE: updated for 2.1.8
1999-01-04 Dan Espen <dane@mk.bellcore.com>
* version.html: Changed to ask for bug reports to be entered into
the Fvwm bug tracking system.
* download.html: Changed to ask for bug reports to be entered into
the Fvwm bug tracking system.
Tue Dec 1 15:33:26 1998 DanEspen <dje@blue>
* download.html: Updated beta download URL to 2.1.4.
1998-11-30 Dan Espen <dane@mk.bellcore.com>
* download.html: Updated beta download URL to 2.1.3.
Added link to /pub/fvwm.
* index.html: Corrected URL for bug tracking system.
1998-11-25 Dan Espen <dane@mk.bellcore.com>
* index.html: Linked main page to bug tracking system.
* black-stone1.jpg: A little darker version.
1998-11-23 Dan Espen <dane@mk.bellcore.com>
* man-pages.html: removed -man from the file names.
1998-11-12 Dan Espen <dane@mk.bellcore.com>
* cvs.html (Deleting Directories and Files): Added description of
file deletion process.
* cvs.html (Getting_Updates): Added example of how to resolve a
conflict during an update.
Tue Nov 10 07:11:44 1998 Steve Robbins <steve@nyongwa.montreal.qc.ca>
* Makefile.am: Fixed up the list of files *again*.
1998-11-05 Steven Michael ROBBINS <stever@jeff.cs.mcgill.ca>
* cvs.html: Fixed the examples of anonymous CVS. Added a note
that the head of the CVS tree is alpha code.
* Makefile.am: Fixed up the distributed-files list to include all
the HTML Dan added yesterday.
1998-11-05 Dan Espen <dane@mk.bellcore.com>
* txt2html.sh (outfile): Replaced txt2html.ksh with txt2html.sh.
Added logic to handle '<>&' special characters in text.
1998-11-04 Dan Espen <dane@mk.bellcore.com>
* Added README, black-stone1.jpg, index.html, fvwm.gif,
download.html features.html, mailinglist.html, docs.html,
modules.html, mod_changes.html, mod_concept.html,
mod_security.html, mod_initialization.html,
mod_m2f_communication.html, mod_f2m_communication.html,
links.html, txt2html.ksh.
The main docs come from the web site, the module docs are restructured,
and updated.

114
app/fvwm/docs/DEVELOPERS Normal file
View file

@ -0,0 +1,114 @@
Living with CVS and Autoconf -*-text-*-
----------------------------
These notes are intended for code developers.
You will need to install several GNU tools to be able to use the cvs
sources. If you do not have these tools available, build from the tar
file distribution instead, available from ftp.fvwm.org.
To build from the CVS sources, you will need:
* GNU gcc
* GNU make
* autoconf (version >= 2.13)
* automake (version >= 1.4)
Changing a Makefile
-------------------
First of all, NEVER edit anything named Makefile, or Makefile.in. These
are both derived from the corresponding Makefile.am. The most common
reason for editing is to change the list of sources.
Steps: 1. edit foo/blah/Makefile.am
2. re-run "make" from the top of the build directory
Step 2 will take care of rebuilding the Makefile.in and Makefile from your
changed Makefile.am.
Makefile.am has a simple format, basically:
bin_PROGRAMS = fvwm2
fvmw2_SOURCES = blah.c blah.h foo.c foo.h ...
Notice that you have to add all files, C-code *and* headers, to the
_SOURCES line. This is vital, because this is the list of files that are
packed into the distribution. If you leave one out, nobody will be able
to build the distributed tar file!
Changing configure.in
---------------------
The most common reason to do this is to change the version string. If
you're editing it for any other reason, I will assume you know what you're
doing.
Steps: 1. edit configure.in, and find the line containing
AM_INIT_AUTOMAKE(fvwm, x.y.z) at the top of the file
2. change x.y.z to the new version string
3. re-run "make" from the top of the build directory
Step 3 will take care of rebuilding the configure script, and usually all
the other Makefiles.
Building a distribution
-----------------------
By this, I mean the file "fvwm-x.y.z.tar.gz".
Steps: 1. make sure you have XPM and a C++ compiler
2. configure with the flag --enable-extras
3. make
4. make distcheck
5. ensure that you see the message
"fvwm-x.y.z.tar.gz ready for distribution"
If this is to be an "official" release, then do also the following:
6. tag the CVS tree:
cvs tag version-x_y_z
7. increase the version number in configure.in (see above)
8. upload the file fvwm-x.y.z.tar.gz to
ftp://ftp.fvwm.org/pub/incoming/fvwm
9. notify fvwm-owner@fvwm.org of the upload
One thing I've learned the hard way:
You have to configure with ALL THE OPTIONAL SUBDIRECTORIES
in order to build a distribution!
In short: this means you need Xpm, and a C++ compiler, AND you have to
configure using the flag --enable-extras. The reason for this is that
a couple of subdirectories are only built when using Xpm (xpmroot, for
example) or C++ (extras/FvwmConfig). It is fine for end users to not
build these. However, the distribution-maker has to have all the
directories enabled, else the files don't make it into the
distribution tar file.
Similarly, you need to have actually built everything before packing
the distribution, hence step #4. Among other things, this puts into
the Makefile.in's the proper dependency information.
Step 5 will create the tar file, then unpack it and attempt a build &
install (to a scratch directory, not /usr/local). This makes sure
that you really DID include all the files necessary to build the
package into the tar file. It may be hard to appreciate how useful
this is, until it has reminded you that you forgot file "foo.h" in
some _SOURCES line. But trust me, it will save your bacon in this way
some day!
Modules and Extras
------------------
There are short notes at the top of all the extras/*/Makefile.am files
about what may have differed vis-a-vis the old Imakefiles. Some of
the modules, for example (currently fvwmpython and fvwmperl) have no
install rules at all.

1521
app/fvwm/docs/FAQ Normal file

File diff suppressed because it is too large Load diff

58
app/fvwm/docs/README Normal file
View file

@ -0,0 +1,58 @@
Dan Espen, November 1, 1998. No particular copyright attached.
This directory contains some of the fvwm2 documentation, including the
web pages that normally reside at the fvwm hosting site.
Unless you don't have internet access, there is no reason to install
these files at your site.
In this directory is the shell, txt2html.sh. This is normally run
to take text files from the fvwm source distribution and turn them
into HTML.
Also in this directory is the shell run_man2html.sh. This shell
invokes man2html which must be separately installed. (Special fvwm2
sytle headers and colors are generated by the shell.)
As a release is shipped, txt2html.sh and run_man2html.sh would
normally be run in the directory where the resulting html is wanted.
This shell would be run for the files, NEWS, TODO, and FAQ.
This is a description of the files in this directory, showing the
heirarchical structure of the web pages. Cross-reference type links
from one page to another are not shown.
README - This file
black-stone1.jpg - Background for all the pages
index.html - main page
fvwm.gif - image, only used on index page
download.html
features.html
mailinglist.html
(mail archive not here, tool generated)
docs.html
(FAQ.html - txt2html.sh generated)
(mail archive not here, tool generated)
(TODO.html - txt2html.sh generated)
(manual pages not here, tool generated)
modules.html
mod_changes.html
mod_concept.html
mod_security.html
mod_initialization.html
mod_m2f_communication.html
mod_f2m_communication.html
links.html
(news.html - txt2html.sh generated)
txt2html.sh - shell for converting text to html
run_man2html.sh - shell for generating fvwm sytle man pages
Generated files:
NEWS.html
TODO.html
FAQ.html
All the man pages need to be generated. The need to be installed
before the html can be generated. See run_man2html.sh.

297
app/fvwm/docs/TODO Normal file
View file

@ -0,0 +1,297 @@
======================================================================
TO-DO list for fvwm 2.xx
======================================================================
Please note that not everything on this list will be done, in
particular the ones that end in '?' which are really just meant to be
'think about this and perhaps investigate'. But they are things that
I didn't want to lose track of. It may periodically get out of date
too...
----------------------------------------------------------------------
Cleanups:
- Reindent the code and implement coding conventions(minimal).
- Modules should be installed with 'install-exec', rather than
'install-data' target. This requires putting 'exec' in the
automake variable for the module directory; i.e. moduledir -->
moduleexecdir?
- Make fvwmlib a shared lib?
----------------------------------------------------------------------
Administration:
- Copy the entries from the debian bug tracking system
http://www.debian.org/Bugs/db/pa/lfvwm2.html
----------------------------------------------------------------------
Doc cleanups:
- Add to FAQ
----------------------------------------------------------------------
Old Patches:
- Safer config file reading patch?
----------------------------------------------------------------------
Bugfixes:
- Change flags implementation to allow adding more Styles easily
(bitfields?) - THE GREAT STYLE FLAG REWRITE (GSFR)
- Rewrite VISIBLE/RAISED lags to do something comprehensible.
- Fix Restart to not pass original (fvwm specific) options to other wm's
- Run profiling on FVWM to see if I can speed it up any more
- Try to decrease memory usage a little more
- clean up code duplication (esp in modules) - more stuff in
libfvwm2.a, plus perhaps a second module lib?
- Change Motion vs Click vs DoubleClick to be calculated via a
MotionThreshold and ClickTime:
MotionThreshold exceeded -> Motion
MotionThreshold not exceeded & ClickTime exceeded -> Click
MotionThreshold not exceeded & ClickTime not exceeded -> DoubleClick
- Make transient FvwmWinList reposition itself & pointer if popped up
off the screen (like built in menus)
- Maximize XTerm, change font, UnMaximize, XTerm goes to wrong window size
(still unfixed on 28-Nov-1998)
- Colormaps and xlock -install -mode blank (& swirl) interaction still
isn't 100% correct?
- bring back 'TogglePage'?
- Setting keys via FvwmTalk or Read requires Recapture to take effect?
- System Modal dialogs bug - popup menus shouldn't be allowed?? I think
this is ok, actually...
- Fix FvwmDeskTopScale size calculation
- Need to fix to work correctly under 24bit (TrueColor) displays
- Esc during moves, etc can result in windows being "lost" off desktop
- Should also have way to make windows off desktop be recovered easier
- Transients of transients don't get raised correctly sometimes?
----------------------------------------------------------------------
New stuff:
- Official themes support
- Allow resizing to leave the x/y ratio intact?
- Pin up menus? (aka known as tear-off menus)
- Multi column menus? (for LONG lists) Or scrolling menus?
- Private colormap option for menus?
- Recapture, one window only option
- Access to certain window attribs from .fvwm2rc funcs, and
simple if/else capabilities (or perhaps a module to do so)??
- Simple static variables for .fvwm2rc functions (for toggles, etc)??
- Add StayOnBottom style?
- Add ClickToFocusDontPassClick style (so initial click inside
window doesn't get passed to the app, just changes focus).
- Add ClickToFocusNoInitialFocus so windows don't get the focus when
they pop up.
- Should the previous be parms to ClickToFocus instead of styles?
- Add NeverFocus style?
- Make sure fvwm handles all 4 focus states from the ICCCM (I don't
think it handles a certain one of them 100% correctly).
- Resurrect StubbornPlacement style
- Add StickyOnDesk <number> style, to allow stickyness on certain
desks only, or perhaps a StaysOnDesk <num> style, to replace
StartsOnDesk and work with the Sticky attribute, I'm not sure...
Either way, multiple values need to be allowed
- Need to indicate sticky icons somehow, and perhaps sticky windows
that don't have a titlebar. I'd like to bring back the different
color for the sticky windows as an option, if I can do it cleanly.
Perhaps a special Decor now?
- Function to simulate button presses, to go with CursorMove? Might
not be possible since many apps ignore SYNTHETIC events...
- Easy module name changes from .fvwm2rc (either using changes in
module exec code & rc parser, or in modules themselves)
- Improved FvwmPager (add/rename desktops on fly)
- A module that just has buttons for the active desktops, like desktop
switcher in dtwm (COSE). Could be munged into FvwmPager.
- See if it's possible to drop windows onto the pager ala olvwm?
Don't really think it is.
- Add option to not show sticky windows in pager. Perhaps also add
ability to filter out windows based on name/class/resource?
- "Captive" fvwm (ala ctwm)?
- Allow size geometry specs for FvwmButtons & perhaps other modules
(Pager).
- FvwmAuto additions for AutoLower & per window config (requires keywds?)
- Module to X Select window Name, Class, Resource, ID, etc...??
- FvwmMsgLog module to pop up a log of fvwm error msgs?
- Support for passwords in FvwmForm
- Support for cut & paste in FvwmForm text fields (paste at least)
- Add simple history mechanism for FvwmForm text fields?
- Make FvwmForm have Resource & Class values
- Fix line spacing in FvwmForm for lines that have only text (no buttons)
so that FvwmForm can be used as a "Help" form.
- Add to module commincations to pass titlebar & button window ids to
allow modules to muck with those windows (for animation, or whatever)?
- Mouse button chording?
- Add better overall icon handling options?
Make an optional global free icon placement grid?
- More control over icon appearance (non 3D, fg/bg colors, constant
size, gradients, etc)?
- Implement (or at least investigate) dynamic loading of functions
on systems that support it?
AIX - load
Linux - dld (gnu) or dlopen (ELF)
SunOS, Solaris, OSF - dlopen
HP-UX - shl_*
I don't know how much of a win this is over modules though. Less
portable. Could be useful for changing border and menu styles or
adding complex functions to the rc language dynamically.
(Actually, this might be a big win for some modules, like the
pager, autoraise, and the preprocessor modules - it would
eliminate time delays in socket comm. Idea - dynloaded modules
add hook functions that module comm functions invoke. Gives
modules greater access to fvwm internals, although generic
functions should be provided to actually access them. Both
types of modules, socket & dyn, could be supported
simultaneously?)
- Improve modules communications interface (collect the code, make it
more intuitive, provide more generic interface to it, etc)
- A WindowGravity option that controlls placement direction choices
for SmartPlacement (and perhaps RandomPlacement)? Perhaps make it
a Style option??
- Add option for Prev/Next function to 'wrap' at ends of list?
- Ressurrect OpaqueResize (as a style option)
- Add twm SqeezeTitle functionality to TitleStyle stuff & merge into
Style command, perhaps???
- Allow neg vals for Maximize to indicate from bottom/right of screen
- Allow neg vals for Move to indicate from bottom/right of screen
- Add way to set keyword/value pairs to windows (via Atoms?) as a
way for giving extra info to modules through style commands?
- Make GetConfigLine be more intelligent, to filter out what gets
sent (for instance, pass module prefix to look for) and be able to
ask for PixmapPath, etc instead of sending those w/ all the config
info, so only the modules that need it could ask for it.
(Note there is some functionality in libs/Parse.c to allow this).
- Go to just one IconPath instead of PixmapPath too?
- Allow Resize to have units of "what the window resizes by"
- Bug in:
AddToFunc resize-and-move "I" resize 100 100
+ "I" move 100 300
- ToggleButtonStyle (to keep pushed in)?
- Allow bitmap/mask files to define buttons as well?
(Better: new alternate def like hl(x1,y1,x2,y2) sh(x1,y1,x2,y2))
- Make parm to Restart optional (to just restart current if not specified)
- Add a WaitForExec to force waiting for the last Exec command to
finish, or an ExecAndWait function that doesn't return until
command is finished (perhaps call it 'System', to match the C function)
- Make fvwm look at gravity when moving windows when reparenting, to
change corner that gets "anchored" so windows w/ neg offsets are
still placed correctly when bordered initially
- Investigate internationalization issues (handling of compound
text, messages placed in a message catalog, etc) to see if they
should be added at some point.
- Allow env var to specify an additional read directory ($FVWMRCDIR
or $FVWMHOME or something similiar)?
- New module combining aspects of FvwmButtons, FvwmScript, FvwmForm,
and Wharf to make one super module? (FvwmGUI or something like that?)
- Investigate reporting file, and line number when issuing error messages.
Note that some commands are generated by modules, on pipes and in
these cases it could be a little tricky figuring out where the command
came from, and it doesn't really have a line number.
----------------------------------------------------------------------
My ideas for the GSFR:
Basically, I'd like to replace the current shifted bit masks over the
'unsigned long flags' variable in the FvwmWindow structure with a
union of an array of unsigned ints and a bunch of bitfields. Roughly
like so:
/********************************/
typedef struct FvwmWindow
{
...
union flags
{
unsigned int allflags[NUM_INTS_FOR_FLAGS];
struct f
{
unsigned int StartIconic:1;
unsigned int OnTop:1;
unsigned int Sticky:1;
unsigned int StickyIcon:1;
unsigned int SuppressIcon:1;
unsigned int NoIconTitle:1;
unsigned int Lenience:1;
unsigned int WindowListSkip:1;
unsigned int CirculateSkip:1;
unsigned int CirculateSkipIcon:1;
unsigned int FocusPolicy:2; /* MOUSE, SLOPPY, CLICK, NEVER */
unsigned int ShowOnMap:1;
unsigned int Border:1;
unsigned int Title:1;
unsigned int Mapped:1;
unsigned int Iconified:1;
unsigned int Transient:1;
unsigned int Raised:1;
unsigned int Visible:1;
unsigned int IconOurs:1;
unsigned int PixmapOurs:1;
unsigned int ShapedIcon:1;
unsigned int Maximized:1;
} f;
} flags;
} FvwmWindow;
/********************************/
----------------------------------------------------------------------
----------------------
Bob Woodside's To-Do's
----------------------
- investigate re-implementing the 2.0.46 Animated Windowshade patch
using the module interface, like FvwmAnimate does for iconification
- merge (well, probably re-implement) my 2.0.46 patch to cause icon
positions to be remembered across a Restart
----------------------------------------------------------------------

View file

@ -0,0 +1,7 @@
Question: Is fvwm1/fvwm2 (version ...) year 2000 compliant?
Answer: Perhaps. Fvwm is a free software project. It is given away without
charge and without any warranty. Everybody is invited to obtain the sources and
check the code for year 2000 compliance (see our web page how to get the latest
sources). We won't make any promises.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

176
app/fvwm/docs/color_combos Normal file
View file

@ -0,0 +1,176 @@
Return-Path: pdcruze@orac.iinet.com.au
Return-Path: <pdcruze@orac.iinet.com.au>
Received: from eagle.lmsc.lockheed.com by rocket (SPCOT.6)
id AA28781; Wed, 8 Jun 94 09:59:32 EDT
Errors-To: postmaster@iinet.com.au
Received: from uniwa.uwa.edu.au by eagle.lmsc.lockheed.com (5.65/Ultrix4.3-C)
id AA13589; Wed, 8 Jun 1994 06:57:23 -0700
Received: from orac by iinet.com.au with smtp
(Smail3.1.28.1 #7) id m0qBO9x-0003dGC; Wed, 8 Jun 94 21:59 WST
Message-Id: <m0qBOB2-000D39C@orac>
Cc: pdcruze@orac.iinet.com.au
Subject: Color schemes
X-Mailer: exmh version 1.3 4/7/94
Date: Wed, 08 Jun 1994 22:00:19 +0800
From: "Patrick D'Cruze" <pdcruze@orac.iinet.com.au>
Errors-To: postmaster@iinet.com.au
Hi Robert,
I managed to compile a few color schemes from replies to my posting on
the mailing list. I don't know whether you want to include them in the
fvwm source files or just place them on a FTP site somewhere. I hope
you find them useful.
Regards,
Patrick D'Cruze
pdcruze@orac.iinet.com.au
-----
Here's a few color schemes that you might want to try out when
configuring Fvwm. The 6 color combinations listed below should at least
provide you with a good starting point for you to continue to play
around to suit your own tastes.
-- Color combo 1 --
contributed by Brian Decker (bdd@melpar.esys.com)
Fvwm settings
HiForeColor Gold
HiBackColor PaleTurquoise4
PagerBackColor #5c54c0
PagerForeColor orchid
MenuForeColor Black
MenuBackColor PaleTurquoise3
MenuStippleColor SlateGrey
Style "*" Color Gold3/Turquoise4
Other settings
xterm white foreground, midnight blue background
-- Color combo 2 --
contributed by Greg Thompson (gregt@porsche.visix.COM)
Fvwm settings
HiForeColor AntiqueWhite1
HiBackColor grey60
StickyForeColor AntiqueWhite1
StickyBackColor grey30
MenuForeColor AntiqueWhite1
MenuBackColor grey60
MenuStippleColor SlateGrey
Font rom14
WindowFont rom14
Style "*" Color AntiqueWhite1/grey40
Other settings
Background xsetroot -default
xterm white foreground/black background
-- Color combo 3 --
contributed by Mathew Harrell (harrell@remus.nrl.navy.mil)
Fvwm settings
HiBackColor #5f589e8ea082
HiForeColor #000000000000
MenuForeColor #000000000000
MenuBackColor #a41898228e1b
MenuStippleColor SlateGrey
StickyForeColor #000000000000
StickyBackColor #464e8261b4bc
Style "*" Color #000000000000/#7F007A007800
Other settings
Background xsetroot -solid black
xterm black foreground/MediumAquamarine background
-- Color combo 4 --
contributed by Lou (nsyslaw@acs.ncsu.edu)
Fvwm settings
HiForeColor Black
HiBackColor #c06077
PagerBackColor #5c54c0
PagerForeColor orchid
StickyForeColor Black
StickyBackColor #60c0a0
MenuForeColor Black
MenuBackColor wheat
MenuStippleColor SlateGrey
Style "*" Color Black/LightSkyBlue
Style "xterm" Icon xterm.xpm, Color black/Green
# And, found inside the Function "InitFunction" section:
#
Exec "I" xpmroot /usr/local/X11/fvwm/pixmaps/fvwm.xpm &
Other settings
XTerm*background: MidnightBlue
XTerm*cursorColor: #ffff00
XTerm*foreground: wheat
-- Color combo 5 --
contributed by Dan Schneidewend (c1idrs@kocrsv01.delcoelect.com)
Fvwm settings
HiForeColor white
HiBackColor DarkSeaGreen
PagerBackColor Black
PagerForeColor CadetBlue
StickyForeColor Black
StickyBackColor MediumSeaGreen
MenuForeColor white
MenuBackColor RosyBrown
MenuStippleColor SlateGrey
Style "*" Color white/MediumSeaGreen
*GoodStuffFore Black
*GoodStuffBack RosyBrown
Other settings
Background xsetroot -bitmap <whatever> -fg Black -bg CadetBlue
xterm black foreground/white background
-- Color combo 6 --
contributed by Patrick D'Cruze (pdcruze@orac.iinet.com.au)
Fvwm settings
HiForeColor Black
HiBackColor #c06077
StickyForeColor Gold
StickyBackColor PaleTurquoise4
MenuForeColor white
MenuBackColor RosyBrown
MenuStippleColor SlateGray
PagerBackColor #5c54c0
PagerForeColor orchid
Style "*" Color Black/#61859a69aeba
Style "xterm" Color AntiqueWhite1/grey60
Other settings
Background xsetroot -solid "#60a0c0"
xterm black foreground/ "#FFFFE79DC71B" background

249
app/fvwm/docs/cvs.html Normal file
View file

@ -0,0 +1,249 @@
<html>
<head>
<title>The Official FVWM Homepage - CVS Procedures</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - CVS Procedures</font></h1>
</center>
Fvwm2 development uses a CVS server.
<p><b>Note:</b> the state of code in the CVS repository fluctuates
wildly. It will contain bugs, maybe ones that crash the program. It
may not even compile for you. Consider it alpha-quality code.
You have been warned.
<H2> <font color="turquoise">Overview</font></h2>
To know what is going in with the source tree you should be reading
mail on the Fvwm Workers List. See the <a
href="mailinglist.html">Mailing List Info</a> page for more
information.
<p>To build fvwm2 from the CVS sources, you need to have several <a
href="http://www.gnu.org/">GNU</a> tools:
<ul>
<li>the <a href="http://www.gnu.org/software/cvs/cvs.html">CVS</a> client
version 1.9 or better,
<li><a href="http://www.gnu.org/software/gcc/gcc.html">GCC</a>,
<li>GNU <a href="http://www.gnu.org/software/make/make.html">make</a>,
<li><a
href="http://www.gnu.org/software/autoconf/autoconf.html">autoconf</a>,
version 2.13 or better, and
<li><a
href="http://www.gnu.org/software/automake/automake.html">automake</a>,
version 1.4 or better.
</ul>
<H2> <font color="turquoise">The Initial Download</font></h2>
To make life easier on yourself, create the file `~/.cvsrc', and
insert the following lines. These set useful default options for the
three most used CVS commands. Do this now before going any further.
<pre><font color="yellow"> diff -u -b -B
checkout -P
update -d -P
</font></pre>
Also, if you are on a slow net link (like a dialup), you'll also want
a line saying `cvs -z3' in the file. This turns on a useful
compression level for all cvs commands. Setting it higher will only
waste your CPU time.
<p>Before you can download development source code for the first time,
you must login.
<pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm login
</font></pre>
The password is `guest'. The command outputs nothing if it works, and
an error message if it failed. You only need to log in once; all
subsequent CVS commands read the password stored in the file
`~/.cvspass'.
<p>Next, you checkout the latest source code.
<pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout fvwm
</font></pre>
This creates a "fvwm" directory in your current directory. Get in
there and get to work.
<pre><font color="yellow"> cd fvwm
autoreconf
</font></pre>
You <em>did</em> remember to install autoconf and automake, right?
<p>Once you are inside the working directory, you no longer need the
long "-d :pserver:..." argument when issuing cvs commands.
<p>CVS commands work from <em>anywhere</em> inside the source tree,
and recurse downwards. So if you happen to issue an update from
inside the `docs' subdirectory, it will work fine, but only update the
docs. In all of the following command examples, we assume that you
have <font color="yellow">cd</font>'d to the top of the fvwm source
tree.
<H2> <font color="turquoise">Code Updates</font></h2>
From time to time, the dedicated FVWM Workers will make changes to the
cvs repository. Announcements of this are automatically sent to the
fvwm-workers list. You will want to be subscribed to this list!
<p>You can update your copy of the sources to match the master
repository with the update command.
<pre><font color="yellow"> cvs update
</font></pre>
<H2> <font color="turquoise">Hacking the Code</font></h2>
So you've found a bug you want to fix? Want to implement a feature
from the TODO list? Got a new feature to implement? Hacking the code
couldn't be easier. Just edit your copy of the sources. No need to copy
files to `.orig' or anything. CVS keeps track of the original files
for you!
<p>When you have the code in a working state, generate a patch against
the <em>current</em> sources in the CVS repository.
<pre><font color="yellow"> cvs update
cvs diff -u &gt; patchfile
</font></pre>
Mail the patch to the fvwm-workers list with a description of what you
did. But read the FAQ file about ChangeLog entries before doing so.
<H2> <font color="turquoise">Conflicts</font></h2>
If someone else has been working on the same files as you have, you may
find that you have made conflicting modifications. You'll discover this
when you try to update your sources.
<pre><font color="yellow"> cvs update
RCS file: /home/cvs/fvwm/fvwm/fvwm/icons.c,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into icons.c
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in fvwm/icons.c
C fvwm/icons.c
</font></pre>
<font color="green">Don't Panic!</font> Your working file, as it
existed before the update, is saved under the filename
`.#icons.c.1.5'; hence you can always recover it, should things go
horribly wrong. The file named `icons.c' now contains <b>both</b> the
old (i.e. your) version and new version of lines that conflicted. You
simply edit the file and resolve each conflict by deleting the
unwanted version of the lines involved.
<pre><font color="yellow"> &lt;&lt;&lt;&lt;&lt;&lt;&lt; icons.c
XpmImage my_image = {0}; /* testing */
=======
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 1.6
</font></pre>
Don't forget to delete the lines with all the "&lt;", "=", and "&gt;"
symbols.
<H2> <font color="turquoise">Getting Other Versions</font></h2>
Sometimes you may want to get a specific version of the sources. For
example, let's say you want the sources as they existed for 2.1.5.
<p>Since you'll want to check out a fresh copy of the sources, you'll
need to <font color="yellow">cd</font> out of the fvwm source tree
before issuing the following command.
<pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout -r version-2_1_5 fvwm
</font></pre>
This creates a directory called `fvwm', with the sources as they
existed for the version 2.1.5. There may be other tags in the
repository, and you can use them as parameters for the `-r' option.
Do <font color="yellow">cvs status -v README</font> for a list.
<H2> <font color="turquoise">Getting Commit Access</font></h2>
Using the procedures described above, and being on the workers list
are a pre-requisite to gaining update access. We expect to have heard
from you more than once on the fvwm-workers list so that we have some
idea who you are.
<p>Doing some testing, submitting some patches, and getting involved
in the discussions will help us know about you.
<p>After you have been involved for a while, if we don't suggest it, then
ask. The fvwm2 development team is not a closed environment, we
welcome new members. There are no required duties, all work is
strictly voluntary.
<p>If there is agreement on the list that you should be given update
access, you will need to choose a CVS user ID and provide an encrypted
password. The latter can be obtained with the following Perl snippet:
<pre><font color="yellow"> perl -e 'print crypt("yourpass",join("",((a..z,A..Z,0..9)[rand(62),rand(62)]))), "\n"'
</font></pre>
Change 'yourpass' to whatever you want your password to be.
<p>Once you have update access, re-do the "login" command above using
your CVS user ID in place of 'anonymous', and your password in place
of 'guest', and you are on your way.
<H2> <font color="turquoise">Starting a Project</font></h2>
Discuss your ideas on the workers list before you start. Someone may
be working on the same thing you have in mind. Or they may have good
ideas about how to go about it.
<p>If you just have a small patch you want to make, you may just
commit it to the main branch. If the change is large, and lots of
other work is going on, you may want to do your changes on a "side
branch" which will get merged into the main branch later on. Before
creating a branch, you discuss the matter with the other workers. If
you are new to CVS, you should read the CVS documentation several
times, and ask for help. The documentation is sufficiently large and
confusing that it is rather difficult to get right the first few
times.
<H2> <font color="turquoise">Adding Directories and Files</font></h2>
First create the new directories and files locally. Then, assuming
the new directory is named "newdir" and the new file is "newmod.c":
<pre><font color="yellow"> cvs add -m "New directory for ..." newdir
cd newdir
cvs add -m "File newmod.c is a module that ..." newmod.c
</font></pre>
<H2> <font color="turquoise">Deleting Directories and Files</font></h2>
You don't directly delete directories, you delete all the files in a
directory and the directory goes away during an "update -dP". To
delete one or more files:
<pre><font color="yellow"> cvs remove -f filename...
cvs commit -m 'deleted files because' filename...
</font></pre>
</body>
</html>

24
app/fvwm/docs/docs.html Normal file
View file

@ -0,0 +1,24 @@
<html>
<head>
<title>The Official FVWM Homepage - Docs, FAQ, &amp; Other Info</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">
The Official FVWM Homepage - Docs, FAQ, &amp; Other Info</font></h1>
</center>
<ul>
<li><a href="FAQ.html">FAQ (Frequently Asked Questions)</a>
<li><a href="http://www.hpc.uh.edu/fvwm/archive/">Mailing List Archives</a>
<li><a href="TODO.html">The TODO list</a>
<li><a href="man-pages.html">Manual Pages</a>
<li><a href="cvs.html">CVS Information</a>
<li><a href="modules.html">Module Developer Information</a>
</ul>
<hr>
</body>
</html>

View file

@ -0,0 +1,53 @@
<html>
<head>
<title>The Official FVWM Homepage - Downloads</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Downloads</font></h1>
</center>
<ul>
<li>Latest Release: <a href="ftp://ftp.fvwm.org/pub/fvwm/version-2/fvwm-2.2.3.tar.gz">2.2.3</a>
<p>
<li>Latest Beta Version: N/A
<p>
<li>Last 1.xx Version: <a
href="ftp://ftp.fvwm.org/pub/fvwm/version-1/fvwm-1.24r.tar.gz">1.24r</a>
(<strong>Note!</strong> This version is no longer supported.)
</ul>
Just click on the version numbers above to download them.
<p>
Older releases of fvwm1 and fvwm2 and (for the brave) the latest alpha
and beta releases, as well as unofficial patches, can be found
<a href="ftp://ftp.fvwm.org/pub/fvwm/">here</a>.
<p>
Please keep in mind that the Beta code can potentially become
unstable or buggy at any time, so USE AT YOUR OWN RISK.
Of course you may find bugs in "Official" versions also.
<p>
If you find any bugs, you can enter them into the
<a href="http://www.fvwm.org/cgi-bin/fvwm-bug">FVWM Bug Tracking System</a>.
If possible, please try searching to see if someone else has already
reported this bug. If you have more or better information, feel
free to add a note!
<p>
If you just have a question, be sure to read our
<a href="docs.html">Documentation</a> first, then you might want to
try our <a href="mailinglist.html">Mailing List</a>.
<p>
When asking for help, of course always remember to provide the release
number of fvwm, your operating system, and any other information you
think might be pertinent.
<p>
<hr>
</body>
</html>

209
app/fvwm/docs/error_codes Normal file
View file

@ -0,0 +1,209 @@
/**********************************************************************
*
* This file contains the codes needed to descipher an Fvwm Internal
* Error. This list is compiled from pieces of the X include files,
* but is not actually used by the fvwm code. It is included for
* debugging purposes.
*********************************************************************/
/*************************************************************************
* Request codes
* From Xproto.h
*************************************************************************/
#define X_CreateWindow 1
#define X_ChangeWindowAttributes 2
#define X_GetWindowAttributes 3
#define X_DestroyWindow 4
#define X_DestroySubwindows 5
#define X_ChangeSaveSet 6
#define X_ReparentWindow 7
#define X_MapWindow 8
#define X_MapSubwindows 9
#define X_UnmapWindow 10
#define X_UnmapSubwindows 11
#define X_ConfigureWindow 12
#define X_CirculateWindow 13
#define X_GetGeometry 14
#define X_QueryTree 15
#define X_InternAtom 16
#define X_GetAtomName 17
#define X_ChangeProperty 18
#define X_DeleteProperty 19
#define X_GetProperty 20
#define X_ListProperties 21
#define X_SetSelectionOwner 22
#define X_GetSelectionOwner 23
#define X_ConvertSelection 24
#define X_SendEvent 25
#define X_GrabPointer 26
#define X_UngrabPointer 27
#define X_GrabButton 28
#define X_UngrabButton 29
#define X_ChangeActivePointerGrab 30
#define X_GrabKeyboard 31
#define X_UngrabKeyboard 32
#define X_GrabKey 33
#define X_UngrabKey 34
#define X_AllowEvents 35
#define X_GrabServer 36
#define X_UngrabServer 37
#define X_QueryPointer 38
#define X_GetMotionEvents 39
#define X_TranslateCoords 40
#define X_WarpPointer 41
#define X_SetInputFocus 42
#define X_GetInputFocus 43
#define X_QueryKeymap 44
#define X_OpenFont 45
#define X_CloseFont 46
#define X_QueryFont 47
#define X_QueryTextExtents 48
#define X_ListFonts 49
#define X_ListFontsWithInfo 50
#define X_SetFontPath 51
#define X_GetFontPath 52
#define X_CreatePixmap 53
#define X_FreePixmap 54
#define X_CreateGC 55
#define X_ChangeGC 56
#define X_CopyGC 57
#define X_SetDashes 58
#define X_SetClipRectangles 59
#define X_FreeGC 60
#define X_ClearArea 61
#define X_CopyArea 62
#define X_CopyPlane 63
#define X_PolyPoint 64
#define X_PolyLine 65
#define X_PolySegment 66
#define X_PolyRectangle 67
#define X_PolyArc 68
#define X_FillPoly 69
#define X_PolyFillRectangle 70
#define X_PolyFillArc 71
#define X_PutImage 72
#define X_GetImage 73
#define X_PolyText8 74
#define X_PolyText16 75
#define X_ImageText8 76
#define X_ImageText16 77
#define X_CreateColormap 78
#define X_FreeColormap 79
#define X_CopyColormapAndFree 80
#define X_InstallColormap 81
#define X_UninstallColormap 82
#define X_ListInstalledColormaps 83
#define X_AllocColor 84
#define X_AllocNamedColor 85
#define X_AllocColorCells 86
#define X_AllocColorPlanes 87
#define X_FreeColors 88
#define X_StoreColors 89
#define X_StoreNamedColor 90
#define X_QueryColors 91
#define X_LookupColor 92
#define X_CreateCursor 93
#define X_CreateGlyphCursor 94
#define X_FreeCursor 95
#define X_RecolorCursor 96
#define X_QueryBestSize 97
#define X_QueryExtension 98
#define X_ListExtensions 99
#define X_ChangeKeyboardMapping 100
#define X_GetKeyboardMapping 101
#define X_ChangeKeyboardControl 102
#define X_GetKeyboardControl 103
#define X_Bell 104
#define X_ChangePointerControl 105
#define X_GetPointerControl 106
#define X_SetScreenSaver 107
#define X_GetScreenSaver 108
#define X_ChangeHosts 109
#define X_ListHosts 110
#define X_SetAccessControl 111
#define X_SetCloseDownMode 112
#define X_KillClient 113
#define X_RotateProperties 114
#define X_ForceScreenSaver 115
#define X_SetPointerMapping 116
#define X_GetPointerMapping 117
#define X_SetModifierMapping 118
#define X_GetModifierMapping 119
#define X_NoOperation 127
/*****************************************************************
* ERROR CODES
* from X.h
*****************************************************************/
#define Success 0 /* everything's okay */
#define BadRequest 1 /* bad request code */
#define BadValue 2 /* int parameter out of range */
#define BadWindow 3 /* parameter not a Window */
#define BadPixmap 4 /* parameter not a Pixmap */
#define BadAtom 5 /* parameter not an Atom */
#define BadCursor 6 /* parameter not a Cursor */
#define BadFont 7 /* parameter not a Font */
#define BadMatch 8 /* parameter mismatch */
#define BadDrawable 9 /* parameter not a Pixmap or Window */
#define BadAccess 10 /* depending on context:
- key/button already grabbed
- attempt to free an illegal
cmap entry
- attempt to store into a read-only
color map entry.
- attempt to modify the access control
list from other than the local host.
*/
#define BadAlloc 11 /* insufficient resources */
#define BadColor 12 /* no such colormap */
#define BadGC 13 /* parameter not a GC */
#define BadIDChoice 14 /* choice not in range or already used */
#define BadName 15 /* font or color name doesn't exist */
#define BadLength 16 /* Request length incorrect */
#define BadImplementation 17 /* server is defective */
#define FirstExtension Error 128
#define LastExtensionError 255
/*************************************************************************
* Event Types
* From X.h
*************************************************************************/
#define KeyPress 2
#define KeyRelease 3
#define ButtonPress 4
#define ButtonRelease 5
#define MotionNotify 6
#define EnterNotify 7
#define LeaveNotify 8
#define FocusIn 9
#define FocusOut 10
#define KeymapNotify 11
#define Expose 12
#define GraphicsExpose 13
#define NoExpose 14
#define VisibilityNotify 15
#define CreateNotify 16
#define DestroyNotify 17
#define UnmapNotify 18
#define MapNotify 19
#define MapRequest 20
#define ReparentNotify 21
#define ConfigureNotify 22
#define ConfigureRequest 23
#define GravityNotify 24
#define ResizeRequest 25
#define CirculateNotify 26
#define CirculateRequest 27
#define PropertyNotify 28
#define SelectionClear 29
#define SelectionRequest 30
#define SelectionNotify 31
#define ColormapNotify 32
#define ClientMessage 33
#define MappingNotify 34
#define LASTEvent 35 /* must be bigger than any event # */

View file

@ -0,0 +1,61 @@
<html>
<head>
<title>The Official FVWM Homepage - Features</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Features</font></h1>
</center>
Partial list of features common to 1.xx and 2.xx:
<ul>
<li>Multiple Disjoint Large Virtual Desktops
<li>Smaller memory usage (more so in 1.xx)
<li>Dynamically extensable via modules
<li>Recognizes Motif MWM hints
<li>Keyboard or Mouse operation
<li>Attempts to be ICCCM 1.1 compliant
<li>3-D look to window frames
<li>Full color shaped icons
<li>M4 preprocesing of the config file
<li>Auto-raising of windows
<li>Multi-screen support
<li>Cursor (Mouse Pointer) control on a context basis
<li>Viewport scrolling by moving the mouse off the edge of the screen
<li>Different window decorations for window that have or don't have focus
<li>Multiple ways to control icon placement
<li>Multiple ways to control initial window placement
</ul>
<p>
Partial list of features new to 2.xx:
<ul>
<li>New more powerful and sensible rc file format
<li>Change more features on per-window basis
<li>Change many features on the fly
<li>Optional Flat or Pixmap window borders
<li>Recogizes Open Look hints
<li>Just about any focus style you can think of
<li>Unwanted features can be removed at compile time
<li>CPP preprocesing of the config file
<li>Titlebars can be suppressed, Pixmaps, gradients, or plain
<li>Titlebar buttons can be vector graphics, pixmaps or gradients
<li>Menu hot-keys, continuation menus, pixmaps in and to the side
of menus
<li>Macro definition in the config file
<li>Animated window movement
<li>A way to limit the amount of color used by fvwm (for 8 bit displays)
<li>Window manager commands can come from external programs
<li>Roll-up type window shading
<li>Some ability to centrally configure fvwm
</ul>
<hr>
</body>
</html>

74
app/fvwm/docs/ftp.html Normal file
View file

@ -0,0 +1,74 @@
<html>
<head>
<title>The Official FVWM Homepage - FTP and Mailing List Info</title>
</head>
<body BACKGROUND="black-stone1.jpg" bgcolor="#000000" text="#ffffff" link="#FFFF66" vlink="#40FF40" alink="#ff0000">
<center>
<h1>The Official FVWM Homepage - FTP and Mailing List Info</h1>
</center>
<h2>FTP and Mailing List Info</h2>
The official FTP site for FVWM is
<p>
<center>
<a href="ftp://ftp.fvwm.org/pub/fvwm/">ftp://ftp.fvwm.org/pub/fvwm/</a>
</center>
<p>
The mailing list addresses are:
<p>
<center>
<a href="mailto:fvwm@fvwm.org">fvwm@fvwm.org (Discussion and questions list)</a> <br>
and<br>
<a href="mailto:fvwm-announce@fvwm.org">fvwm-announce@fvwm.org (Announcement only list)</a> <br>
and<br>
<a href="mailto:fvwm-workers@fvwm.org">fvwm-workers@fvwm.org (Beta testers and contributors list)</a>
</center>
<p>
They are maintained by Jason Tibbitts, and are Majordomo based mailing
lists. To subscribe to a list, send "<code>subscribe</code>"
in the body of a message to the appropriate <code>*-request</code>
address.
<p>
To unsubscribe from the list, send "<code>unsubscribe</code>" in the
body of a message to the appropriate <code>*-request</code> address.
<p>
<code>*-request</code> addresses are:
<ul>
<li> <a href="mailto:fvwm-request@fvwm.org">fvwm-request@fvwm.org</a>
<li> <a href="mailto:fvwm-announce-request@fvwm.org">fvwm-announce-request@fvwm.org</a>
<li> <a href="mailto:fvwm-workers-request@fvwm.org">fvwm-workers-request@fvwm.org</a>
</ul>
<p>
<bold>Subscription requests sent to the list will be ignored!</bold><br>
Please follow the above instructions for subscribing properly.
<p>
To report problems with any of the mailing lists, send mail to
<a href="mailto:fvwm-owner@fvwm.org">fvwm-owner@fvwm.org</a>.
<p>
Also the mailing lists are now <a href="http://www.hpc.uh.edu/fvwm/archive/">archived</a>!
<p>
<hr>
</body>
</html>

BIN
app/fvwm/docs/fvwm.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

22
app/fvwm/docs/fvwm.lsm Normal file
View file

@ -0,0 +1,22 @@
Begin3
Title: FVWM (F? Virtual Window Manager)
Version: 2.2
Entered-date: 19Feb99
Description: FVWM2 is an ICCCM-compliant X window manager providing a 3D
look for window decorations, multiple discontiguous virtual
desktops, a high degree of configurability, and an external
module interface for implementing functional extensions.
Keywords: window manager, X11, virtual
Author: Rob Nation
Maintained-by: Fvwm Workers List <fvwm-workers@fvwm.org>
Primary-site: ftp.fvwm.org
1036k fvwm-2.2.tar.gz
Alternate-site: sunsite.unc.edu/pub/Linux/X11/window-managers/fvwm-2.2.tar.gz
1k fvwm.lsm
1036k fvwm-2.2.tar.gz
Original-site:
Platform: Unix, X, Xpm package (for optional xpm support)
Copying-policy: May only be distributied without restrictions. For further
permissions check the COPYING file that comes with the
distribution.
End

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

58
app/fvwm/docs/index.html Normal file
View file

@ -0,0 +1,58 @@
<html>
<head>
<title>The Official FVWM Homepage</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">Welcome to the Official FVWM Homepage</font></h1>
<p>
<img src="fvwm.gif" width=307 height=129 align=middle>
</center>
<p><hr>
<h3><font color="yellow">NEWS FLASH!</font></h3>
<blockquote>
<p>
FVWM 2.2, the first official version of FVWM 2, is now available for <a
href="download.html">download</a>!
<p>
FVWM version 2 has been available in various stages of beta for years;
now it has finally been officially released. Get your copy today!
</blockquote>
<p><hr>
<p>
FVWM is an ICCCM-compliant multiple virtual desktop window manager for
X11 created by Robert Nation, derived originally from <code>twm</code>
code. Thanks, Rob!
<p>
Rob then passed the torch on to Charles Hines, who passed the torch to
Brady Montz, who passed the torch to the <code>fvwm-workers</code> list.
Jason Tibbitts continues to provide infrastructure in the form of
mailing lists, a web site, an FTP site, a CVS tree, and anonymous rsync.
<p><hr>
<h2>Table Of Contents</h2>
<ul>
<li><a href="download.html">Downloads</a>
<li><a href="features.html">Features</a>
<li><a href="mailinglist.html">Mailing List Info</a>
<li><a href="http://www.hpc.uh.edu/fvwm/archive">Mailing List Archive</a>
<li><a href="docs.html">Docs, FAQ, &amp; Other Info</a>
<li><a href="links.html">Other FVWM Related WWW Sites, etc</a>
<li><a href="NEWS.html">LATEST FVWM NEWS (patches, announcements, etc)</a>
<li><a href="http://www.fvwm.org/cgi-bin/fvwm-bug">FVWM Bug Tracking System</a>
</ul>
<hr>
Created: Jan 31, 1996 ----- Last Updated: February 22, 1999.
</body>
</html>

85
app/fvwm/docs/links.html Normal file
View file

@ -0,0 +1,85 @@
<html>
<head>
<title>The Official FVWM Homepage - Links</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Links</font></h1>
</center>
Here's a few other sites (besides the <a href="http://www.fvwm.org/">official</a> one) that have FVWM info:
<ul>
<!-- <li><a href="http://www.cs.hmc.edu/~tkelly/docs/proj/fvwm.html">T.J. Kelly's FVWM HomePage</a> -->
<!-- <li><a href="http://www.cobaltgroup.com/~roland/fvwm/fvwm.html">Liem Bahneman's FVWM Page</a> (Configuration Examples for fvwm 1.24r) -->
<!-- <li><a href="http://xenon.chem.uidaho.edu/~fvwm/">Todd Postma's FVWM Page</a> (More Configuration Examples) -->
<li><a href="http://mars.superlink.net/user/ekahler/fvwm.html">Eric Kahler's FVWM Page</a>
<li><a href="http://www.public.iastate.edu/~crode/fvwm/">Chris Rode's Configuration Samples page</a>
<!-- <li><a href="ftp://ftp.best.com/pub/tdgilman/Fvwmrcs/">Todd Gilmann's Collection of fvwmrc's</a> (an ftp site) -->
<li><a href="http://www.giccs.georgetown.edu/~ric/software/fvwm/pager.html">Pager Balloon patch</a>
<li><a href="http://www.pcnet.com/~proteus/Fvwm/FvwmPatches.html">Bob Woodside's Miscellaneous patches</a>
<li><a href="http://www.CS.McGill.CA/~stever/software/fvwm/">Steve
Robbins' autofonf patches</a>
<li><a href="http://www.python.org/~bwarsaw/pyware/">Barry Warsaw's
Python/FVWM pages</a>
<li><a
href="http://www.dilnet.upd.edu.ph/~orly/unixcentral/FvwmCDE.html">Orlando Andico's CDE panel lookalike</a>
</ul>
And here's a few others that have info on programs that are designed
to work with FVWM in some manner:
<ul>
<li><a href="http://www.imada.ou.dk/~blackie/dotfile/">The Dotfile Generator Home Page</a> - A program that helps you generate .emacs, .cshrc, .fvwmrc, etc.
<li><a href="http://www.physics.arizona.edu/~lapeyre/fvwmconf">John Lapeyre's FvwmConf</a>
<li><a href="http://www-personal.umich.edu/~markcrim/tkgoodstuff/">The TkGoodStuff Home Page</a> - A Tcl/Tk Program that performs like GoodStuff/FvwmButtons.
</ul>
And here's some window managers that were originally created from fvwm
source, but PLEASE DON'T ASK QUESTIONS ABOUT THEM ON THE FVWM LISTS!
Rather, contact the parties responsible for them directly:
<ul>
<li><a href="http://web.mit.edu/mstachow/www/scwm.html">SCWM</a> - The
Scheme Configurable Window Manager
<li><a href="http://www-acs.ucsd.edu/~byang/bowman/">Bowman</a> - A NeXT Lookalike created from 1.24r (link no longer exists?)
<li><a href="http://www.afterstep.org/">AfterStep</a> - A continuation of Bowman
<li><a href="http://www.terraware.net/ftp/pub/Mirrors/FVWM95/fvwm95.html">Fvwm95</a> - A hack of an fvwm2 beta that looks more like (shudder) Win95
<li><a href="http://fvwm.themes.org/">Fvwm decorations</a> - A collection of fvwm screenshots and config files
<li><a href="http://www.staticbomb.com/fvwm2gnome/">Fvwm decorations</a> - Another collection of fvwm screenshots and config files
<li><a href="http://www.plig.org/~xwinman/fvwm.html">Fvwm decorations</a> - Even more fvwm screenshots and config files
</ul>
And here's an excellent site with all sorts of window manager
information and comparisons (new location):
<ul>
<li><a href="http://www.PLiG.org/xwinman/">Window Managers for X</a>
</ul>
Be sure to vote for FVWM in the voting section! :)
<p>
And don't forget about Newsgroups:
<ul>
<li><a href="news:comp.windows.x.apps">comp.windows.x.apps</a> - for discussing and announcing apps like FVWM.
<li><a href="news:comp.windows.x">comp.windows.x</a> - for general X11 discussions and advice.
</ul>
<p>
And how about an online version of the ICCCM:
<ul>
<li><A HREF="http://tronche.com/gui/x/icccm/">Inter-Client Communication Conventions Manual</A>
</ul>
<hr>
</body>
</html>

127
app/fvwm/docs/m4_hacks Normal file
View file

@ -0,0 +1,127 @@
Return-Path: dale@felix.dircon.co.uk
Return-Path: <dale@felix.dircon.co.uk>
Received: from eagle.is.lmsc.lockheed.com by rocket (SPCOT.6)
id AA07582; Wed, 30 Mar 94 21:26:48 EST
Received: from felix.dircon.co.uk by eagle.is.lmsc.lockheed.com (5.65/Ultrix4.3-C)
id AA27884; Wed, 30 Mar 1994 18:24:30 -0800
Received: from ISOlde.dale.co.uk by tristan.dale.co.uk with smtp
(Linux Smail3.1.28.1 #25) id m0pm2IB-0002kOC; Wed, 30 Mar 94 16:34 BST
Received: by ISOlde.dale.co.uk (Linux Smail3.1.28.1 #25)
id m0pm2IP-000JHaC; Wed, 30 Mar 94 16:35 BST
Message-Id: <m0pm2IP-000JHaC@ISOlde.dale.co.uk>
Date: Wed, 30 Mar 94 16:35 BST
From: Pete.Chown@dale.dircon.co.uk
Subject: fvwm, copyright infringement, m4, etc...
I came up with a hack in m4 to get round the problem where you get
substitution for ordinary words, like 'include'. I wanted to
substitute a # onto the beginning of every command, so you say
#include as in cpp. I couldn't do that because only the underscore
and the alphabetics are recognised by m4 as being legitimate in
identifiers. However, I put an underscore onto the beginning, and
that seems to work quite well.
Given that you refer to the same problem in the documentation for
fvwm, I thought I would send the hack to you:
------ snip ------ snip ------ snip ------ snip ------ snip ------ snip
divert(-1)
changequote(+,-)
changequote(@`,@')
define(_,@`_dnl @')
# We now add an underscore onto the front of all the builtins, to prevent
# unexpected conflicts with words in the text. The following gross hack does
# this. Understand it if you can... ;-)
define(def,defn(@`define@'))
define(definition,defn(@`defn@'))
define(remove,defn(@`undefine@'))
define(alias,@`def(@`$2@',definition(@`$1@'))@')
define(hack,@`alias(@`$1@',@`_$1@') remove(@`$1@')@')
hack(@`builtin@')
hack(@`changecom@')
hack(@`changequote@')
hack(@`debugfile@')
hack(@`debugmode@')
hack(@`decr@')
hack(@`define@')
hack(@`defn@')
hack(@`divert@')
hack(@`divnum@')
hack(@`dnl@')
hack(@`dumpdef@')
hack(@`errprint@')
hack(@`esyscmd@')
hack(@`eval@')
hack(@`file@')
hack(@`format@')
hack(@`gnu@')
hack(@`ifdef@')
hack(@`ifelse@')
hack(@`include@')
hack(@`incr@')
hack(@`index@')
hack(@`indir@')
hack(@`len@')
hack(@`line@')
hack(@`m4exit@')
hack(@`m4wrap@')
hack(@`maketemp@')
hack(@`patsubst@')
hack(@`popdef@')
hack(@`pushdef@')
hack(@`regexp@')
hack(@`shift@')
hack(@`sinclude@')
hack(@`substr@')
hack(@`syscmd@')
hack(@`sysval@')
hack(@`traceoff@')
hack(@`traceon@')
hack(@`translit@')
hack(@`undefine@')
hack(@`undivert@')
hack(@`unix@')
_undefine(@`def@')
_undefine(@`definition@')
_undefine(@`alias@')
_undefine(@`hack@')
_divert(0)
------ snip ------ snip ------ snip ------ snip ------ snip ------ snip
(I redefine the quotes as well, because I find that the ordinary
single quote characters are much too common in text that you want to
preprocess.)
One problem with this script is that if someone extends m4 by adding a
new builtin command foo, say, then it will not get an underscore
prepended; this is because you can't get m4 to give you a complete
list of builtins. For the same reason, the script will probably give
trouble with System V m4, because it won't have definitions for the
GNU extensions.
Anyway, do what you want with the script - if you think it might be
useful to fvwm users you are more than welcome to include it in the
distribution. Or file it away in /dev/null if you are unimpressed.
I was rather concerned by the little bit of Motif that is getting
distributed along with fvwm. It may be only a couple of pages out of
10M (is Motif really that big? Argh!) but that will not stop you
getting sued. If the Motif people start to get the idea that they are
not selling so many copies because people use fvwm instead of twm,
they will sue you for copyright infringement - not because there is
any particular justice to them protecting two pages of code, but just
because it is the easiest way of making you go away.
It is correct that there is no copyright in structures, only in the
source code that defines them. So you would be quite within your
rights to rewrite the offending two pages, and then I can't see that
there is anything that the Motif people could do.
-------------------------------------------------------------------------------
Pete.Chown@dale.dircon.co.uk "The Pen is mightier than the Quill"
-- anonymous

View file

@ -0,0 +1,65 @@
<html>
<head>
<title>The Official FVWM Homepage - Mailing List Info</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Mailing List Info
</font></h1>
</center>
The mailing list addresses are:
<p>
<center>
<a href="mailto:fvwm@fvwm.org">fvwm@fvwm.org (Discussion and questions list)</a> <br>
and<br>
<a href="mailto:fvwm-announce@fvwm.org">fvwm-announce@fvwm.org (Announcement only list)</a> <br>
and<br>
<a href="mailto:fvwm-workers@fvwm.org">fvwm-workers@fvwm.org (Beta testers and contributors list)</a>
</center>
<p>
They are maintained by Jason Tibbitts, and are Majordomo based mailing
lists. To subscribe to a list, send "<code>subscribe</code>"
in the body of a message to the appropriate <code>*-request</code>
address.
<p>
To unsubscribe from the list, send "<code>unsubscribe</code>" in the
body of a message to the appropriate <code>*-request</code> address.
<p>
<code>*-request</code> addresses are:
<ul>
<li> <a href="mailto:fvwm-request@fvwm.org">fvwm-request@fvwm.org</a>
<li> <a href="mailto:fvwm-announce-request@fvwm.org">fvwm-announce-request@fvwm.org</a>
<li> <a href="mailto:fvwm-workers-request@fvwm.org">fvwm-workers-request@fvwm.org</a>
</ul>
<p>
<strong>Subscription requests sent to the list will be ignored!</strong><br>
Please follow the above instructions for subscribing properly.
<p>
To report problems with any of the mailing lists, send mail to
<a href="mailto:fvwm-owner@fvwm.org">fvwm-owner@fvwm.org</a>.
<p>
Also the mailing lists are now <a href="http://www.hpc.uh.edu/fvwm/archive/">archived</a>!
<p>
<hr>
</body>
</html>

View file

@ -0,0 +1,38 @@
<html>
<head>
<title>The Official FVWM Homepage - Man Pages for FVWM 2.xx</title>
</head>
<body BACKGROUND="black-stone1.jpg" bgcolor="#000000" text="#ffffff" link="#FFFF66" vlink="#40FF40" alink="#ff0000">
<center>
<h1>The Official FVWM Homepage - Man Pages for FVWM 2.xx</h1>
</center>
<hr>
<ul>
<li><a href="fvwm2.html">fvwm2.man</a>
<p>
<li><a href="xpmroot.html">xpmroot.man</a>
<p>
<li><a href="FvwmAudio.html">FvwmAudio.man</a>
<li><a href="FvwmAuto.html">FvwmAuto.man</a>
<li><a href="FvwmBacker.html">FvwmBacker.man</a>
<li><a href="FvwmBanner.html">FvwmBanner.man</a>
<li><a href="FvwmButtons.html">FvwmButtons.man</a>
<li><a href="FvwmCpp.html">FvwmCpp.man</a>
<li><a href="FvwmForm.html">FvwmForm.man</a>
<li><a href="FvwmIconBox.html">FvwmIconBox.man</a>
<li><a href="FvwmIconMan.html">FvwmIconMan.man</a>
<li><a href="FvwmIdent.html">FvwmIdent.man</a>
<li><a href="FvwmM4.html">FvwmM4.man</a>
<li><a href="FvwmPager.html">FvwmPager.man</a>
<li><a href="FvwmRearrange.html">FvwmRearrange.man</a>
<li><a href="FvwmSave.html">FvwmSave.man</a>
<li><a href="FvwmSaveDesk.html">FvwmSaveDesk.man</a>
<li><a href="FvwmScroll.html">FvwmScroll.man</a>
<li><a href="FvwmTalk.html">FvwmTalk.man</a>
<li><a href="FvwmWinList.html">FvwmWinList.man</a>
</ul>
<hr>
</body>
</html>

View file

@ -0,0 +1,49 @@
<html>
<head>
<title>The Official FVWM Homepage - Important Changes Since Fvwm-1.xx</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Important Changes Since Fvwm-1.xx</font></h1>
</center>
<P>
The module interface remained fairly stable when going from Fvwm-1.xx
to Fvwm-2.xx. The change most likely to affect modules is the addition
of an extra value to the header. This value is a timestamp. Most
modules contained the line:
<FONT COLOR="YELLOW"><PRE>
unsigned long header[3];
</FONT></PRE>
This must be changed to:
<FONT COLOR="YELLOW"><PRE>
unsigned long header[HEADER_SIZE];
</FONT></PRE>
The rest of the changes are handled in the library function
ReadFvwmPacket.
<P>
Another notable change is that modules do not have to read the .fvwmrc
file themselves. They can request the appropriate lines from fvwm:
<!-- dje, from FvwmAnimate.c -->
<FONT COLOR="YELLOW"><PRE>
static void ParseOptions() {
char *buf;
while (GetConfigLine(Channel,&amp;buf), buf != NULL) {
ParseConfigLine(buf);
} /* end config lines */
} /* end function */
</FONT></PRE>
This is the preferred method of getting module-specific
configuration lines.
<P>
Starting in fvwm-2.0 pl 1, fvwm2 passes command line arguments
to the modules, so if the user said ``FvwmPager 2 4'', the module
will see argv[6] = 2 and argv[7] = 4, instead of argv[6] = ``2 4''.
<P>
Some new packet types are defined, and a few values were added to
some packet types.
<P>
<hr>
</body>
</html>

View file

@ -0,0 +1,35 @@
<html>
<head>
<title>The Official FVWM Homepage - Concept</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Concept</font></h1>
</center>
<P>
The module interface has several design goals:
<UL>
<LI>Modules are used to implement "extra" or "elaborate" features so
that the additional resources these features take don't affect users that
don't want to sacrifice the resources.
<LI>Modules (user programs) should be able to provide the window
manager with a limited amount of instruction regarding instructions to
execute.
<LI>Modules should not be able to corrupt the internal data bases
maintained by Fvwm, nor should unauthorized modules be able to
interface to Fvwm.
<LI>Modules should be able to extract all or nearly all information
held by the window manager, in a simple manner, to provide users with
feedback not available from built in services.
<LI>Modules should gracefully terminate when the window manager
dies, quits, or is re-started.
<LI>It should be possible for programmer-users to add modules
without understanding the internals of Fvwm. Ideally, modules could be
written in some scripting language such as Tcl/Tk.
</UL>
<P>
<hr>
</body>
</html>

View file

@ -0,0 +1,356 @@
<html>
<head>
<title>The Official FVWM Homepage - Fvwm-to-Module Communication</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Fvwm-to-Module Communication</font></h1>
</center>
<H2> <font color="turquoise">When communication takes place</font></h2>
Fvwm
can send messages to the modules in either a broadcast mode, or a
module specific mode. Certain messages regarding important window or
desktop manipulations are broadcast to all modules, whether they
want it or not. Modules are able to request information about current windows
from fvwm, via the Send_WindowList built-in. When invoked this way,
only requesting module receives the data.
<H2> <font color="turquoise">Communication packet format</font></h2>
Packets from fvwm to modules conform to a standard format, so modules
which are not interested in broadcast messages can easily ignore them.
A header consisting of 4 unsigned long integers, followed by a body of
a variable length make up a packet. The header always begins with
0xffffffff. This is provided to help modules re-synchronize to the
data stream if necessary. The next entry describes the packet type.
Existing packet types are listed in the file fvwm/module.h:
<font color="yellow"><PRE>
#define <A href="#M_NEW_PAGE">M_NEW_PAGE</A> (1)
#define <A href="#M_NEW_DESK">M_NEW_DESK</A> (1&lt;&lt;1)
#define <A href="#M_ADD_WINDOW">M_ADD_WINDOW</A> (1&lt;&lt;2)
#define <A href="#M_RAISE_WINDOW">M_RAISE_WINDOW</A> (1&lt;&lt;3)
#define <A href="#M_LOWER_WINDOW">M_LOWER_WINDOW</A> (1&lt;&lt;4)
#define <A href="#M_CONFIGURE_WINDOW">M_CONFIGURE_WINDOW</A> (1&lt;&lt;5)
#define <A href="#M_FOCUS_CHANGE">M_FOCUS_CHANGE</A> (1&lt;&lt;6)
#define <A href="#M_DESTROY_WINDOW">M_DESTROY_WINDOW</A> (1&lt;&lt;7)
#define <A href="#M_ICONIFY">M_ICONIFY</A> (1&lt;&lt;8)
#define <A href="#M_DEICONIFY">M_DEICONIFY</A> (1&lt;&lt;9)
#define <A href="#M_WINDOW_NAME">M_WINDOW_NAME</A> (1&lt;&lt;10)
#define <A href="#M_ICON_NAME">M_ICON_NAME</A> (1&lt;&lt;11)
#define <A href="#M_RES_CLASS">M_RES_CLASS</A> (1&lt;&lt;12)
#define <A href="#M_RES_NAME">M_RES_NAME</A> (1&lt;&lt;13)
#define <A href="#M_END_WINDOWLIST">M_END_WINDOWLIST</A> (1&lt;&lt;14)
#define <A href="#M_ICON_LOCATION">M_ICON_LOCATION</A> (1&lt;&lt;15)
#define <A href="#M_MAP">M_MAP</A> (1&lt;&lt;16)
#define <A href="#M_ERROR">M_ERROR</A> (1&lt;&lt;17)
#define <A href="#M_CONFIG_INFO">M_CONFIG_INFO</A> (1&lt;&lt;18)
#define <A href="#M_END_CONFIG_INFO">M_END_CONFIG_INFO</A> (1&lt;&lt;19)
#define <A href="#M_ICON_FILE">M_ICON_FILE</A> (1&lt;&lt;20)
#define <A href="#M_DEFAULTICON">M_DEFAULTICON</A> (1&lt;&lt;21)
#define <A href="#M_STRING">M_STRING</A> (1&lt;&lt;22)
#define <A href="#M_MINI_ICON">M_MINI_ICON</A> (1&lt;&lt;23)
#define <A href="#M_WINDOWSHADE">M_WINDOWSHADE</A> (1&lt;&lt;24)
#define <A href="#M_DEWINDOWSHADE">M_DEWINDOWSHADE</A> (1&lt;&lt;25)
#define <A href="#M_LOCKONSEND">M_LOCKONSEND</A> (1&lt;&lt;26)
#define <A href="#M_SENDCONFIG">M_SENDCONFIG</A> (1&lt;&lt;27)
</PRE></font>
<P>
Additional packet types will be defined in the future. The third entry
in the header tells the total length of the packet, in unsigned longs,
including the header. The fourth entry is the last time stamp received
from the X server, which is expressed in milliseconds.
<P>
The body information is packet specific, as described below.
<H2><A NAME="M_NEW_PAGE">M_NEW_PAGE</A></H2>
<P>
These packets contain 5 integers. The first two are the x and y
coordinates of the upper left corner of the current viewport on the
virtual desktop. The third value is the number of the current desktop.
The fourth and fifth values are the maximum allowed values of the
coordinates of the upper-left hand corner of the viewport.
<P>
<H2><A NAME="M_NEW_DESK">M_NEW_DESK</A></H2>
<P>
The body of this packet consists of a single long integer, whose value
is the number of the currently active desktop. This packet is
transmitted whenever the desktop number is changed.
<P>
<H2><A NAME="M_ADD_WINDOW">M_ADD_WINDOW</A>, and <A NAME="M_CONFIGURE_WINDOW">M_CONFIGURE_WINDOW</A></H2>
<P>
These packets contain 24 values. The first 3 identify the window, and
the next twelve identify the location and size, as described in the
table below. Configure packets will be generated when the
viewport on the current desktop changes, or when the size or location
of the window is changed. The flags field is an bitwise OR of the
flags defined in fvwm.h.
<P>
<P><DIV ALIGN=CENTER><P ALIGN=CENTER><TABLE COLS=2 BORDER FRAME=BOX RULES=GROUPS>
<COLGROUP><COL ALIGN=LEFT><COLGROUP><COL ALIGN=LEFT>
<TBODY>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP COLSPAN=2>
Format for Add and Configure Window Packets</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Byte </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Significance </TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>0 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> 0xffffffff - Start of packet </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
1 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> packet type </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
2 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> length of packet, including header, expressed in long integers
</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>3 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the application's top level window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
4 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the Fvwm frame window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
5 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Pointer to the Fvwm database entry </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
6 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> X location of the window's frame </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
7 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Y location of the window's frame</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
8 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Width of the window's frame (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
9 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Height of the window's frame (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
10 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Desktop number</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
11 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Windows flags field</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
12 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Title Height (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
13 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Border Width (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
14 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Base Width (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
15 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Base Height (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
16 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Resize Width Increment(pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
17 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Resize Height Increment (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
18 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Minimum Width (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
19 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Minimum Height (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
20 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Maximum Width Increment(pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
21 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Maximum Height Increment (pixels) </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
22 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Icon Label Window ID, or 0</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
23 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Icon Pixmap Window ID, or 0</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
24 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Window Gravity</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> \
25 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Pixel value of the text color </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
26 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Pixel value of the window border color </TD></TR>
</TBODY>
</TABLE>
</P></DIV><P><H2>
<A NAME="M_LOWER_WINDOW">M_LOWER_WINDOW</A>,
<A NAME="M_RAISE_WINDOW">M_RAISE_WINDOW</A>, and
<A NAME="M_DESTROY_WINDOW">M_DESTROY_WINDOW</A>
</H2>
<P>
These packets contain 3 values, all of the same size as an unsigned
long. The first value is the ID of the affected application's top level
window, the next is the ID of the Fvwm frame window, and the final
value is the pointer to Fvwm's internal database entry for that
window. Although the pointer itself is of no use to a module, it can
be used as a reference number when referring to the window.
<P>
<P><DIV ALIGN=CENTER><P ALIGN=CENTER><TABLE COLS=2 BORDER FRAME=BOX RULES=GROUPS>
<COLGROUP><COL ALIGN=LEFT><COLGROUP><COL ALIGN=LEFT>
<TBODY>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP COLSPAN=2>
Format for Lower, Raise, and Focus Change Packets</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Byte </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Significance </TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>0 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> 0xffffffff - Start of packet </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
1 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> packet type </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
2 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> length of packet, including header, expressed in long integers
</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>3 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the application's top level window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
4 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the Fvwm frame window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
5 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Pointer to the Fvwm database entry </TD></TR>
</TBODY>
</TABLE>
</P></DIV><P><H2><A NAME="M_FOCUS_CHANGE">M_FOCUS_CHANGE</A></H2>
<P>
These packets contain 5 values, all of the same size as an unsigned
long. The first value is the ID of the affected application's (the
application which now has the input focus) top level
window, the next is the ID of the Fvwm frame window, and the final
value is the pointer to Fvwm's internal database entry for that
window. Although the pointer itself is of no use to a module, it can
be used as a reference number when referring to the window. The fourth
and fifth values are the text focus color's pixel value and the window
border's focus color's pixel value. In the
event that the window which now has the focus is not a window which
fvwm recognizes, only the ID of the affected application's top level
window is passed. Zeros are passed for the other values.
<P>
<H2>
<A NAME="M_ICONIFY">M_ICONIFY</A> and
<A NAME="M_ICON_LOCATION">M_ICON_LOCATION</A>
</H2>
<P>
These packets contain up to 11 values. The first 3 are the usual identifiers,
and the next four describe the location and size of the window being iconified,
as described in the table.
Under the conditons where an actual builtin icon is created or destroyed,
the next 4 values describe the location and size of the icon.
Note that M_ICONIFY packets are sent
whenever a window is first iconified, or when the icon window is changed
via the XA_WM_HINTS in a property notify event. An M_ICON_LOCATION
packet will be sent when the icon is moved.
In addition, if a window which has transients is
iconified, then an M_ICONIFY packet is sent for each transient
window, with the x, y, width, and height fields set to 0. This packet
will be sent even if the transients were already iconified. Note that
no icons are actually generated for the transients in this case.
<P>
<P><DIV ALIGN=CENTER><P ALIGN=CENTER><TABLE COLS=2 BORDER FRAME=BOX RULES=GROUPS>
<COLGROUP><COL ALIGN=LEFT><COLGROUP><COL ALIGN=LEFT>
<TBODY>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP COLSPAN=2>
Format for Iconify and Icon Location Packets</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Byte </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>Significance </TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>0 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> 0xffffffff - Start of packet </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
1 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> packet type </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
2 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> length of packet, including header, expressed in long integers
</TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>3 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the application's top level window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
4 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> ID of the Fvwm frame window </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
5 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Pointer to the Fvwm database entry </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
6 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> X location of the window's frame </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
7 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Y location of the window's frame</TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
8 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Width of the window's frame </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP>
9 </TD><TD VALIGN=BASELINE ALIGN=LEFT NOWRAP> Height of the window's frame </TD></TR>
</TBODY>
</TABLE>
</P></DIV><P><H2><A NAME="M_DEICONIFY">M_DEICONIFY</A></H2>
<P>
These packets contain up to 11 values, starting with the usual window
identifiers. The packet is sent when a window is de-iconified.
Like M_ICONIFY, window and icon location and size are sent except
that icon information comes first followed by window information.
<P>
<H2><A NAME="M_MAP">M_MAP</A></H2>
<P>
These packets contain 3 values, which are the usual window
identifiers. The packets are sent when a window is mapped, if it is
not being deiconified. This is useful to determine when a window is
finally mapped, after being added.
<P>
<H2>
<A NAME="M_WINDOW_NAME">M_WINDOW_NAME</A>,
<A NAME="M_ICON_NAME">M_ICON_NAME</A>,
<A NAME="M_RES_CLASS">M_RES_CLASS</A>,
<A NAME="M_RES_NAME">M_RES_NAME</A>,
</H2>
<P>
These packets contain 3 values, which are the usual window
identifiers, followed by a variable length character string. The
packet size field in the header is expressed in units of unsigned
longs, and the packet is zero-padded until it is the size of an
unsigned long. The RES_CLASS and RES_NAME fields are fields in the
XClass structure for the window. Icon and Window name packets will
will be sent upon window creation or whenever the name is changed. The
RES_CLASS and RES_NAME packets are sent on window creation. All
packets are sent in response to a Send_WindowList request from a module.
<P>
<H2><A NAME="M_END_WINDOWLIST">M_END_WINDOWLIST</A></H2>
<P>
These packets contain no values. This packet is sent to mark the end
of transmission in response to a Send_WindowList request. A module
which request Send_WindowList, and processes all packets received
between the request and the M_END_WINDOWLIST will have a snapshot of
the status of the desktop.
<P>
<H2><A NAME="M_ERROR">M_ERROR</A></H2>
<P>
When fvwm has an error message to report, it is echoed to the modules
in a packet of this type. This packet has 3 values, all zero, followed
by a variable length string which contains the error message.
<P>
<H2><A NAME="M_CONFIG_INFO">M_CONFIG_INFO</A></H2>
<P>
Fvwm records all configuration commands that it encounters which
begins with the character ``*''. When the built-in command
``Send_ConfigInfo'' is invoked by a module, this entire list is
transmitted to the module in packets (one line per packet) of this
type. The packet consists of three zeros, followed by a variable
length character string. In addition, the PixmapPath, IconPath, and
ClickTime are sent to the module.
<P>
Note that all the module configuration commands are sent. Each
module has to check the configuration commands to see if
it is a command for that specific module. This is actually
a feature. This way one module can learn about all other
modules configurations. Also fvwm2 doesn't currently know
anything about module aliases so all module configuration
commands have to be sent for at least 2 reasons.
It is unlikely that this behavior will ever change.
<P>
Starting with release 2.0.47, a module can set M_SENDCONFIG on in its
mask and recieve M_CONFIG_INFO packets while it is running.
(M_CONFIG_INFO has to be on also.) A module can use M_SENDCONFIG
to be able to change configuration while it is running.
Refer to module FvwmAnimate for an example.
<P>
<H2><A NAME="M_END_CONFIG_INFO">M_END_CONFIG_INFO</A></H2>
<P>
After fvwm sends all of its M_CONFIG_INFO packets to a module, it
sends a packet of this type to indicate the end of the configuration
information. This packet contains no values.
This packet it not sent for subsequent config lines sent when the
M_SENDCONFIG mask bit is on.
<H2><A NAME="M_ICON_FILE">M_ICON_FILE</A></H2>
This packet is broadcast when a window is added or during
send window list. It is only sent for windows that have icons
defined, and contains the filename of the icon.
<H2><A NAME="M_DEFAULTICON">M_DEFAULTICON</A></H2>
This packet is sent during
send window list. This is the icon associated with Style "*".
The packet contains the filename of the icon.
<H2><A NAME="M_STRING">M_STRING</A></H2>
This packet is sent when a "SendToModule" command is processed.
<H2><A NAME="M_MINI_ICON">M_MINI_ICON</A></H2>
This packet is broadcast when a window is added or during
send window list. It is only sent for windows that have mini_icons
defined, and contains the filename of the mini_icon.
<H2><A NAME="M_WINDOWSHADE">M_WINDOWSHADE</A> and
<A NAME="M_DEWINDOWSHADE">M_DEWINDOWSHADE</A>
</H2>
This packet is sent when a window is window shaded.
It contains no additional information.
<H2><A NAME="M_LOCKONSEND">M_LOCKONSEND</A></H2>
This is a request sent from modules to fvwm and is described
under <a href="mod_m2f_communication.html">Module to Fvwm communication</a>.
<H2><A NAME="M_SENDCONFIG">M_SENDCONFIG</A></H2>
This is a request sent from modules to fvwm and is described
under <a href="mod_m2f_communication.html">Module to Fvwm communication</a>.
<P>
<hr>
</body>
</html>

View file

@ -0,0 +1,124 @@
<html>
<head>
<title>The Official FVWM Homepage - Interface and Initialization Mechanism</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Interface and Initialization Mechanism</font></h1>
</center>
<H2> <font color="turquoise">Module Invocation</font></h2>
Modules MUST be launched by Fvwm. Fvwm will first open a pair of pipes
for communication with the module. One pipe is for messages to Fvwm
from the module, and the other is for messages to the module from
Fvwm. Each module has its own pair of pipes. After the pipes are open,
Fvwm will fork and spawn the module. Modules must be located in the
ModulePath, as specified in the user's .fvwm2rc file. Modules can be
initiated as fvwm starts up, or can be launched part way through an X
session.
<H2> <font color="turquoise">Module Arguments</font></h2>
<h3>Args 0</h3>
Like any UNIX program, arg 0 is the full pathname of the module.
Most modules acquire this for use in error message, parsing their
own configuration commands, some other possible uses.
Arg 0 is related to the optional arg 6 described under "Module Aliases".
<h3>Args 1 and 2</h3>
The pipes are open when the module starts execution. The
integer file descriptors are passed to the module as the first and
second command line arguments.
<h3>Arg 3</h3>
The third command line argument is a character pointer pointing to the
full path name of the last configuration file that fvwm read in.
If there was no configuration file this arg points as to a string
containing "none".
In fvwm2, there is little reason for a module to use this argument.
<h3>Arg 4</h3>
The next command line argument is the application
window in whose context the module was launched. This is 0 if the
module is launched without an application window context.
<h3>Arg 5</h3>
The next
argument is the context of the window decoration in which the module
was launched. Contexts are listed below:
<FONT COLOR="YELLOW"><PRE>#define C_NO_CONTEXT 0 - launched during initialization
#define C_WINDOW 1 - launched from an application window
#define C_TITLE 2 - launched from a title bar
#define C_ICON 4 - launched from an icon window
#define C_ROOT 8 - launched from the root window
#define C_FRAME 16 - launched from a corner piece
#define C_SIDEBAR 32 - launched from a side-bar
#define C_L1 64 - launched from left button #1
#define C_L2 128 - launched from left button #2
#define C_L3 256 - launched from left button #3
#define C_L4 512 - launched from left button #4
#define C_L5 1024 - launched from left button #5
#define C_R1 2048 - launched from right button #1
#define C_R2 4096 - launched from right button #2
#define C_R3 8192 - launched from right button #3
#define C_R4 16384 - launched from right button #4
#define C_R5 32768 - launched from right button #5</FONT></PRE>
<h3>Arg 6 and above</h3>
A number of user specified command line arguments may be present
(optional). Up to 35 arguments may be passed. For example, in:
<FONT COLOR="YELLOW"><PRE>
Module &quot;FvwmIdentify&quot; FvwmIdentify Hello rob! ``-fg purple''
</FONT></PRE>
we would get argv[6] = ``Hello'', argv[7] = ``rob!'', argv[8] = ``-fg purple''.
<P>
<H2> <font color="turquoise">Module Aliases</font></h2>
In the original fvwm, if you wanted to run 2 copies of a module, you
where advised to copy or soft-link the module executable to another name.
For example, you might have had to copies of FvwmButtons running.
Some of the modules now accept arg 6 as an Alias of the module name.
<p>
This alias is used in module generated messages, in recognizing configuration
commands, and possibly other uses. FvwmAnimate makes full use of this
and might provide a good model to follow.
<H2> <font color="turquoise">Acquiring the read/write pipes</font></h2>
The following mechanism is recommended to acquire the pipe
descriptors:
<FONT COLOR="YELLOW"><PRE>
int fd[2];
void main(int argc, char **argv) {
if((argc &lt; 6)) {
fprintf(stderr,
&quot;%s: Should only be executed by fvwm!\n&quot;, argv[0]);
exit(1);
}
fd[0] = atoi(argv[1]);
fd[1] = atoi(argv[2]);</FONT></PRE>
<P>
The descriptor fd[0] is available for the module to send messages to
fvwm, while the descriptor fd[1] is available to read messages from
fvwm.
Since "int fd[2]" is an array, you will often see modules send commands
to fvwm with the construct "SendText(fd,"Command",0);".
Of course, they really mean "SendText(&amp;fd[0],"Command",0);".
<H2> <font color="turquoise">Pipe Status</font></h2>
Special attention is paid to the status of the pipe. If Fvwm gets a
read error on a module-to-fvwm pipe, then it assumes that the module
is terminating,
and all communication with the module is terminated. Similarly, if a
module gets a read error on an fvwm-to-module pipe, then it should
assume that fvwm is terminating, and it should gracefully shut down.
All modules should also allow themselves to be shut down via the
Delete Window protocol for X-11.
<H2> <font color="turquoise">Reading initial configuration information
</font></h2>
In previous implementations, the modules were expected to read and
parse the .fvwmrc file by themselves. This caused some difficulty if a
pre-processor was used on the .fvwmrc file. In fvwm-2.0 and later,
fvwm retains the module command lines (those which start with a
``*''), and passes them to any module on request. Modules can
request the command list by sending a ``Send_ConfigInfo'' command to
fvwm. Modules can request configuration commands interactively,
see M_SENDCONFIG in
<A href="mod_f2m_communication.html">Fvwm-to-Module Communication</a>
and
<A href="mod_m2f_communication.html">Module-to-Fvwm Communication</a>.
<hr>
</body>
</html>

View file

@ -0,0 +1,121 @@
<html>
<head>
<title>The Official FVWM Homepage - Module-to-Fvwm Communication</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Module-to-Fvwm Communication</font></h1>
</center>
<H2> <font color="turquoise">Module Writing</font></h2>
Before you write a module, you will want to look at a few different
fvwm modules. The techniques used have evolved over time, and no
one module contains all the best techniques. Some of them may be on
this page, but undoubtedly some of them are buried in the source code.
<H2> <font color="turquoise">Module communications protocol</font></h2>
Modules communicate with fvwm via a simple protocol. In essence, a
textual command line, similar to a command line which could be bound
to a mouse, or key-stroke in the .fvwm2rc, is transmitted to fvwm.
<P>
First, the module should send the ID of the window which should be
manipulated. A window ID of ``None'' may be used, in which case Fvwm
will prompt the user to select a window if needed. Next, length of
the the command line is send as an integer. After that, the command
line itself is sent. Finally, an integer 1 is sent if the module plans
to continue operating, or 0 if the module is finished. The following
subroutine is provided as an example of a suitable method of sending
messages to fvwm:
<FONT COLOR="YELLOW"><PRE>
void SendText(int *fd, char *message, unsigned long window) {
int w;
if (message != NULL) {
write(fd[0],&amp;win,sizeof(Window));
w=strlen(message); /* calc the length of the message */
write(fd[0],&amp;w,sizeof(int)); /* send the message length */
write(fd[0],message,w); /* send the message itself */
/* send a 1, indicating that this module will keep going */
/* a 0 would mean that this module is done */
w=1;
write(fd[0],&amp;w,sizeof(int));
}
}
</PRE></font>
This routine is available as a library function in libfvwm.
For compatibility with older code, there is a macro "SendInfo"
which can be used instead of the function name SentText.
<H2> <font color="turquoise">Module information requests</font></h2>
There are special built-in functions, Send_WindowList and
Send_ConfigInfo.
Send_WindowList causes fvwm to transmit everything that it is
currently thinking about to the module which requests the information.
This information contains the paging status (enabled/disabled),
current desktop number, position on the desktop, current focus and,
for each window, the window configuration, window, icon, and class
names, and, if the window is iconified, the icon location and size.
For example, some modules during start up want to know the state of
all current windows. The would ask fvwm for this information like this:
<font color="yellow"><pre>
SendText(Channel,"Send_WindowList",0);
</font></pre>
Send_ConfigInfo causes fvwm to send the module a list of all
commands it has received which start with a ``*'', as well as the
PixmapPath, IconPath, ColorLimit, and ClickTime commands that fvwm is
currently using.
This is implemented in fvwm/modconf.c.
Note that "SendConfigInfo" is sort of a memory dump type request,
and the number of commands a module might get from this request
may change over time. The module should be prepared to ignore commands
it is not interested in without generating a warning or error.
This request is normally made during module startup for a module
to read its current configuration and some general information.
Fvwm provides some subroutines to make this process fairly painless.
Here is an example from FvwmAnimate.c:
<font color="yellow"><pre>
static void ParseOptions() {
char *buf;
while (GetConfigLine(Channel,&buf), buf != NULL) {
ParseConfigLine(buf);
} /* end config lines */
} /* end function */
</font></pre>
<H2> <font color="turquoise">Controlling information sent to
modules</font></h2>
fvwm lets each module control exactly what
information is passed to the module. A module can send the
command Set_Mask, followed by
a number which is the bitwise OR of the packet-types the
module wishes to receive. If the module never sends the Set_Mask
command, then all message types in the default mask are sent. The
default mask is defined in fvwm/module.h as "MAX_MASK". This
currently (October 1998) includes all messages except M_LOCKONSEND and
M_SENDCONFIG. A library function, SetMessageMask, makes it
easy to set this mask. Here is an example from FvwmBacker.c: <font
color="yellow"><pre>
SetMessageMask(Fvwm_fd,M_NEW_DESK|M_CONFIG_INFO|M_END_CONFIG_INFO);
</font></pre> This mask is used to reduce the amount of communication
between fvwm and its modules so that a module only gets the messages it
needs.
<H2> <font color="turquoise">Synchronous vs. Asynchronous Operation</font></h2>
A module normally runs asynchrously with fvwm2. For example FvwmPager
may be updating its display to show a window being iconified while fvwm2
may have already iconfied and de-iconified the window. This is usually
desirable.
Other modules might need to synchronize their processing with fvwm.
If this is the case, a module will include in its message mask
"M_LOCKONSEND". When this mask bit is on, every message sent to the
module from fvwm must be answered with an "UNLOCK" message.
FvwmAnimate is (was?) the first module to implement this and should be
used as a reference implementation. Note that FvwmAnimate sends the command
"UNLOCK 1". The "1" is currently ignored but may be used in the future.
This whole facility comes from Afterstep, and we are just tracking what they
have done. The Afterstep documentation doesn't seem to say, but most
likely this is the time in seconds that fvwm should wait for the module
to respond with "UNLOCK" before it proceeds without the module's response.
<hr>
</body>
</html>

View file

@ -0,0 +1,24 @@
<html>
<head>
<title>The Official FVWM Homepage - Security</title>
</head>
<body BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">The Official FVWM Homepage - Security</font></h1>
</center>
<H2><A NAME="SECTION00031000000000000000">Security</A></H2>
<P>
Limited effort has been placed on security issues. In short, modules
can not communicate with Fvwm unless they are launched by Fvwm, which
means that they must be listed in the user's .fvwmrc file.
Modules can only issue commands to Fvwm that could be issued from a
menu or key binding. These measures do not keep a poorly written
module from destroying windows or terminating an X session, but they
do keep users from maliciously connecting to another users window
manager, and it should keep modules from corrupting the Fvwm internal
databases.
<hr>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!-- Modification History -->
<!-- Changed on 10/31/98 by DanEspen (dje): -->
<!-- - This file was originally created from a tex file using -->
<!-- LaTeX2HTML. I'm sorry to not continue with that approach, but -->
<!-- I just don't have a working version of that program. -->
<HTML>
<HEAD>
<TITLE>>The Official FVWM Homepage - Module Interface</TITLE>
<META NAME="description" CONTENT="The Fvwm Module Interface">
<META NAME="keywords" CONTENT="modules">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
</HEAD>
<body LANG="EN" BACKGROUND="black-stone1.jpg"
bgcolor="#000000" text="#ffffff"
link="#FFFF88" vlink="#EEDDDD" alink="#ff0000">
<center>
<h1><font color="pink">
The Official FVWM Homepage - Module Interface</font></h1>
</center>
<hr>
<h2>Table Of Contents</h2>
<UL>
<li><a href="mod_changes.html">Important Changes Since Fvwm-1.xx</a>
<li><a href="mod_concept.html">Concept</a>
<li><a href="mod_security.html">Security</a>
<li><a href="mod_initialization.html">Initialization</a>
<li><a href="mod_m2f_communication.html">Module-to-Fvwm Communication</a>
<li><a href="mod_f2m_communication.html">Fvwm-to-Module Communication</a>
</ul>
<P>
<P>
</BODY>
</HTML>

View file

@ -0,0 +1,49 @@
#/bin/sh
# Modification History
# Created on 11/06/98 by DanEspen (dje):
# - Use man2html to convert fvwm2 man pages to html.
# Arg 1 is the man page name.
# The man pages have to be installed so the man command can find them.
# This has to be run from the directory where the output file is wanted.
#
# If you run, run_man2html.sh fvwm2, this creates "fvwm2.html" in
# the current directory.
name=`basename $1`
outfile=$name.html
# make header:
echo "<html>
<head>
<title>The Official FVWM Homepage - $name Man Page</title>
</head>
<body BACKGROUND=\"black-stone1.jpg\"
bgcolor=\"#000000\" text=\"#ffffff\"
link=\"#FFFF88\" vlink=\"#EEDDDD\" alink=\"#ff0000\">
<center>
<h1><font color=\"pink\">The Official FVWM Homepage - $name Man Page</font></h1>
</center>
<pre>
" > $outfile
# Embed the text with some adjustment:
# Italics are shown in yellow. References, (if there were any)
# would be shown in cyan. Unfortunately bold stuff in man pages
# is lost. Maybe in the man command, maybe in man2html.
# Output looks pretty good anyway (to my eyes).
man $name | man2html -bare \
-uelem 'font color="yellow"'\
-belem 'font color="cyan"'\
>> $outfile
# make footer:
echo "</pre>
<hr>
<!-- This file automatically generated by run_man2html.sh
on `date` -->
</body>
</html>
" >> $outfile

45
app/fvwm/docs/txt2html.sh Normal file
View file

@ -0,0 +1,45 @@
#!/bin/sh
# Modification History
# Changed on 11/05/98 by DanEspen (dje):
# - Changed from ksh to sh for extra portability.
# Created on 10/31/98 by DanEspen (dje):
# - Takes certain text files from the Fvwm distribution and
# converts them to html.
# Arg 1 is the input file name.
# This has to be run from the directory where the output file is wanted.
# This is designed for the files, ChangeLog, TO-DO, FAQ
name=`basename $1`
outfile=$name.html
# make header:
echo "<html>
<head>
<title>The Official FVWM Homepage - $name Information</title>
</head>
<body BACKGROUND=\"black-stone1.jpg\"
bgcolor=\"#000000\" text=\"#ffffff\"
link=\"#FFFF88\" vlink=\"#EEDDDD\" alink=\"#ff0000\">
<center>
<h1><font color=\"pink\">The Official FVWM Homepage - $name Information</font></h1>
</center>
<pre>
" > $outfile
# Embed the text with some adjustment:
sed -e 's/&/\&amp;/' \
-e 's/</\&lt;/' \
-e 's/>/\&gt;/' $1 >> $outfile
# make footer:
echo "</pre>
<hr>
<!-- This file automatically generated by txt2html.sh
on `date` -->
</body>
</html>
" >> $outfile