]> git.decadent.org.uk Git - ion3-doc.git/commitdiff
[svn-inject] Installing original source of ion3 ion3-20061223
authorBen Hutchings <ben@decadent.org.uk>
Sat, 24 Mar 2007 18:52:31 +0000 (18:52 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 24 Mar 2007 18:52:31 +0000 (18:52 +0000)
95 files changed:
ChangeLog [new file with mode: 0644]
LICENSE [new file with mode: 0644]
Makefile [new file with mode: 0644]
README [new file with mode: 0644]
artikel3.perl [new file with mode: 0644]
conf-bindings.tex [new file with mode: 0644]
conf-menus.tex [new file with mode: 0644]
conf-winprops.tex [new file with mode: 0644]
conf.tex [new file with mode: 0644]
confintro.tex [new file with mode: 0644]
cstyle.tex [new file with mode: 0644]
de.tex [new file with mode: 0644]
designnotes.tex [new file with mode: 0644]
exact-version [new file with mode: 0644]
fnref.tex [new file with mode: 0644]
fullhierarchy.tex [new file with mode: 0644]
gpl.tex [new file with mode: 0644]
hookref.tex [new file with mode: 0644]
ionconf.dvi.gz [new file with mode: 0644]
ionconf.out [new file with mode: 0644]
ionconf.ps.gz [new file with mode: 0644]
ionconf.tex [new file with mode: 0644]
ionconf/WARNINGS [new file with mode: 0644]
ionconf/contents.png [new file with mode: 0644]
ionconf/images.aux [new file with mode: 0644]
ionconf/images.idx [new file with mode: 0644]
ionconf/images.log [new file with mode: 0644]
ionconf/images.out [new file with mode: 0644]
ionconf/images.pl [new file with mode: 0644]
ionconf/images.tex [new file with mode: 0644]
ionconf/img1.png [new file with mode: 0644]
ionconf/img2.png [new file with mode: 0644]
ionconf/img3.png [new file with mode: 0644]
ionconf/img4.png [new file with mode: 0644]
ionconf/img5.png [new file with mode: 0644]
ionconf/img6.png [new file with mode: 0644]
ionconf/index.html [new file with mode: 0644]
ionconf/index.png [new file with mode: 0644]
ionconf/internals.pl [new file with mode: 0644]
ionconf/ionconf.css [new file with mode: 0644]
ionconf/ionconf.html [new file with mode: 0644]
ionconf/labels.pl [new file with mode: 0644]
ionconf/next.png [new file with mode: 0644]
ionconf/next_g.png [new file with mode: 0644]
ionconf/node1.html [new file with mode: 0644]
ionconf/node10.html [new file with mode: 0644]
ionconf/node11.html [new file with mode: 0644]
ionconf/node12.html [new file with mode: 0644]
ionconf/node2.html [new file with mode: 0644]
ionconf/node3.html [new file with mode: 0644]
ionconf/node4.html [new file with mode: 0644]
ionconf/node5.html [new file with mode: 0644]
ionconf/node6.html [new file with mode: 0644]
ionconf/node7.html [new file with mode: 0644]
ionconf/node8.html [new file with mode: 0644]
ionconf/node9.html [new file with mode: 0644]
ionconf/prev.png [new file with mode: 0644]
ionconf/prev_g.png [new file with mode: 0644]
ionconf/up.png [new file with mode: 0644]
ionnotes.dvi.gz [new file with mode: 0644]
ionnotes.out [new file with mode: 0644]
ionnotes.ps.gz [new file with mode: 0644]
ionnotes.tex [new file with mode: 0644]
ionnotes/WARNINGS [new file with mode: 0644]
ionnotes/contents.png [new file with mode: 0644]
ionnotes/crossref.png [new file with mode: 0644]
ionnotes/index.html [new file with mode: 0644]
ionnotes/index.png [new file with mode: 0644]
ionnotes/internals.pl [new file with mode: 0644]
ionnotes/ionnotes.css [new file with mode: 0644]
ionnotes/ionnotes.html [new file with mode: 0644]
ionnotes/labels.pl [new file with mode: 0644]
ionnotes/next.png [new file with mode: 0644]
ionnotes/next_g.png [new file with mode: 0644]
ionnotes/node1.html [new file with mode: 0644]
ionnotes/node2.html [new file with mode: 0644]
ionnotes/node3.html [new file with mode: 0644]
ionnotes/node4.html [new file with mode: 0644]
ionnotes/node5.html [new file with mode: 0644]
ionnotes/node6.html [new file with mode: 0644]
ionnotes/node7.html [new file with mode: 0644]
ionnotes/node8.html [new file with mode: 0644]
ionnotes/node9.html [new file with mode: 0644]
ionnotes/prev.png [new file with mode: 0644]
ionnotes/prev_g.png [new file with mode: 0644]
ionnotes/up.png [new file with mode: 0644]
luaif.tex [new file with mode: 0644]
macros.tex [new file with mode: 0644]
objects.tex [new file with mode: 0644]
objectsimpl.tex [new file with mode: 0644]
predist.sh [new file with mode: 0644]
prelim.tex [new file with mode: 0644]
rapport3.perl [new file with mode: 0644]
statusd.tex [new file with mode: 0644]
tricks.tex [new file with mode: 0644]

diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..5e3a3d1
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,667 @@
+2006-12-23 15:00 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20061223
+
+2006-10-30 21:08 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updates
+
+2006-10-28 23:16 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20061029
+
+2006-10-17 22:02 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Mention the 'float' winprop
+
+2006-10-15 17:53 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20061015
+
+2006-10-15 14:36 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Documentation updates.
+
+2006-08-03 09:05 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * much->match
+
+2006-06-20 18:16 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20060620
+
+2006-06-08 17:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Moving usepackage{dvipdfm} before everything else seems to fix things.
+
+2006-02-12 15:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added documentation for region_activity_hook.
+
+2006-01-25 23:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated bar_inside_border stuf.
+
+2006-01-07 21:03 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20060107
+
+2005-12-10 20:46 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20051210
+
+2005-12-10 00:39 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added missing min_size winprop and changes in winprop listing.
+
+2005-11-10 20:22 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated frame style documentation.
+
+2005-10-23 22:40 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20051023
+
+2005-08-26 17:37 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * List oneshot winprop.
+
+2005-08-20 11:37 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050820
+
+2005-07-28 17:40 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050728
+
+2005-06-25 15:16 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050625
+
+2005-06-07 13:14 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050607
+
+2005-06-07 13:13 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * predist.sh updates.
+
+2005-06-01 17:07 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added a note on NoModifier.
+
+2005-05-02 14:56 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050502
+
+2005-03-25 17:41 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added documentation on ion-statusd monitors.
+
+2005-03-25 17:41 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed a typo, etc.
+
+2005-03-22 14:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050322
+
+2005-03-21 00:16 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed typos.
+
+2005-03-19 13:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added documentation on ioncore_sigchld_hook.
+
+2005-03-13 12:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed typos etc.
+
+2005-03-13 12:27 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * fnrefx macro was still wrong.
+
+2005-03-09 23:12 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Moved new layer documentation to scripting chapter.
+
+2005-03-09 22:23 UTC  Matthieu.Moy@imag.fr
+  * More doc on layer 2 and placement hooks
+  
+  Be warned that:
+  
+  * I missed some LaTeX package, and therefore couldn't compile my
+    changes,
+  
+  * I don't know ion's internal well enough to be sure of what I write.
+  
+
+2005-03-07 09:35 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed copy-paste error.
+
+2005-03-04 08:39 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050304
+
+2005-03-03 18:42 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added a note on hooks being called in protected mode.
+
+2005-03-03 18:39 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated ionws_placement_alt documentation.
+
+2005-02-27 13:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3ds-20050227
+
+2005-02-22 22:54 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3-svn2darcs
+
+2005-01-16 11:52 UTC  tuomov
+  tagged ion-doc-3ds-20050116
+
+2005-01-16 11:29 UTC  tuomov
+  * trunk: changeset 1931
+  fixed predist.sh
+
+2005-01-16 11:08 UTC  tuomov
+  * trunk: changeset 1930
+  Fixed undefined references.
+
+2005-01-15 21:33 UTC  tuomov
+  * trunk: changeset 1928
+  Updated some scripting docs.
+
+2005-01-15 21:20 UTC  tuomov
+  * trunk: changeset 1926
+  tabularx header changes.
+
+2005-01-15 21:03 UTC  tuomov
+  * trunk: changeset 1924
+  Tuning for latex2html etc.
+
+2005-01-15 17:29 UTC  tuomov
+  * trunk: changeset 1923
+  Added hook reference and updated hook documentation.
+
+2005-01-15 17:29 UTC  tuomov
+  * trunk: changeset 1922
+  Improved function reference macros to use lists instead of tables.
+
+2005-01-14 14:47 UTC  tuomov
+  * trunk: changeset 1920
+  Some minor fixes.
+
+2005-01-14 14:25 UTC  tuomov
+  * trunk: changeset 1918
+  - Improved menu documentation.
+  
+  - Other minor improvements.
+
+2005-01-13 16:49 UTC  tuomov
+  * trunk: changeset 1917
+  Updated graphical styles documentation.
+
+2005-01-13 14:40 UTC  tuomov
+  * trunk: changeset 1915
+  Updated winprop documentation.
+
+2005-01-13 14:27 UTC  tuomov
+  * trunk: changeset 1914
+  Updated binding and menu definition documentation.
+
+2005-01-11 20:18 UTC  tuomov
+  * trunk: changeset 1913
+  Brought config file intro up-to-date
+
+2005-01-11 15:31 UTC  tuomov
+  * trunk: changeset 1912
+  Updated class hierarchy documentation etc.
+
+2004-10-11 14:16 UTC  tuomov
+  * trunk: changeset 1821
+  Just testing some settings...
+
+2004-10-09 06:16 UTC  tuomov
+  * trunk: changeset 1804
+  libextl related changes.
+
+2004-10-09 05:56 UTC  tuomov
+  * trunk: changeset 1801
+  Added predist.sh
+
+2004-10-09 05:56 UTC  tuomov
+  * trunk: changeset 1800
+  Fixed a typo.
+
+2004-09-16 22:04 UTC  tuomov
+  * trunk: changeset 1754
+  Source file path updates.
+
+2004-07-31 22:25 UTC  tuomov
+  * trunk: changeset 1697
+  Updated Makefile to point to the new location of mkexports.lua.
+
+2004-07-26 21:57 UTC  tuomov
+  * trunk: changeset 1646
+  Function reference generation updates.
+
+2004-05-14 12:29 UTC  tuomov
+  * trunk: changeset 1485
+  Fixed punctuation.
+
+2004-03-15 16:32 UTC  tuomov
+  * trunk: changeset 1402
+  Changed makefile to account for changes in Ion module directories.
+
+2004-03-15 16:23 UTC  tuomov
+  * trunk: changeset 1400
+  Added install target to Makefile.
+
+2004-03-15 08:35 UTC  tuomov
+  * trunk: changeset 1398
+  Brought document generation up-to-date with module name changes.
+
+2004-03-10 21:57 UTC  tuomov
+  * trunk: changeset 1383
+  Merged omission and other fixes from stable branch.
+
+2004-03-05 23:49 UTC  tuomov
+  * trunk: changeset 1346
+  Some more minor documentation fixes. Just to test this new svn setup.
+
+2004-03-05 23:00 UTC  tuomov
+  * trunk: changeset 1345
+  Minor documentation fixes.
+
+2004-02-16 20:33 UTC  tuomov
+  * trunk: changeset 1323
+  Build process changed for Ion3.
+
+2004-02-07 01:55 UTC  tuomov
+  * trunk: changeset 1255
+  Added documentation on alternative get_winprop implementations.
+
+2004-02-07 01:42 UTC  tuomov
+  * trunk: changeset 1254
+  Removed unobfuscated email addresses.
+
+2004-01-28 22:04 UTC  tuomov
+  * trunk: changeset 1239
+  Removed extra word, added function reference.
+
+2004-01-27 22:30 UTC  tuomov
+  * trunk: changeset 1235
+  Added 'are' in 'that they are transient for'
+
+2004-01-27 22:26 UTC  tuomov
+  * trunk: changeset 1234
+  Improved xprop/transient help and winprop examples.
+
+2004-01-27 13:54 UTC  tuomov
+  * trunk: changeset 1231
+  Minor spelling mistake fix.
+
+2004-01-25 18:42 UTC  tuomov
+  * trunk: changeset 1225
+  Some minor clarifications in a few sentences and put URL:s on their
+  own lines.
+
+2004-01-25 18:05 UTC  tuomov
+  * trunk: changeset 1222
+  Typo and spelling fixes.
+
+2004-01-23 17:32 UTC  tuomov
+  * trunk: changeset 1215
+  Fixed a few typos and added an example.
+
+2004-01-22 21:25 UTC  tuomov
+  * trunk: changeset 1213
+  Added dock documentation.
+
+2004-01-14 22:29 UTC  tuomov
+  * trunk: changeset 1193
+  Minor cleanup.
+
+2004-01-08 22:32 UTC  tuomov
+  * trunk: changeset 1183
+  Updated winprop documentation.
+
+2003-12-22 23:58 UTC  tuomov
+  * trunk: changeset 162
+  Added discussion on modules and improved the main introduction and
+  object hierarchy introduction.
+
+2003-12-21 00:17 UTC  tuomov
+  * trunk: changeset 161
+  Removed duplicate label.
+
+2003-12-20 19:49 UTC  tuomov
+  * trunk: changeset 160
+  Added a list of functions.
+
+2003-12-20 15:18 UTC  tuomov
+  * trunk: changeset 159
+  Fixed a typo.
+
+2003-12-20 15:15 UTC  tuomov
+  * trunk: changeset 158
+  Oops.
+
+2003-12-20 15:14 UTC  tuomov
+  * trunk: changeset 157
+  Added a section on object references.
+
+2003-12-19 22:08 UTC  tuomov
+  * trunk: changeset 156
+  Mention stylemenu.
+
+2003-12-18 21:37 UTC  tuomov
+  * trunk: changeset 155
+  Added a section on special menus.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20031211
+
+2003-12-11 17:29 UTC  tuomov
+  * trunk: changeset 154
+  Updates for 20031211 release.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20031119
+
+2003-11-19 21:57 UTC  tuomov
+  * trunk: changeset 153
+  Removed 'executive' from summary.
+
+2003-11-19 21:57 UTC  tuomov
+  * trunk: changeset 152
+  Removed mplexfns reference.
+
+2003-11-17 00:42 UTC  tuomov
+  * trunk: changeset 151
+  Added an "executive summary" to the object hierarchy chapter.
+
+2003-11-14 18:15 UTC  tuomov
+  * trunk: changeset 150
+  Documented menus. Changes to reflect changes in configuration files.
+
+2003-10-30 10:04 UTC  tuomov
+  * trunk: changeset 149
+  Get documentation from luaextl/*.c as well.
+
+2003-10-29 12:05 UTC  tuomov
+  * trunk: changeset 148
+  LICENSE file changed to GPL.
+
+2003-10-29 11:55 UTC  tuomov
+  * trunk: changeset 147
+  Removed fdl.tex.
+
+2003-10-29 11:55 UTC  tuomov
+  * trunk: changeset 146
+  Changed license to GPL due to problems with the GFDL.
+
+2003-10-29 11:54 UTC  tuomov
+  * trunk: changeset 145
+  Changed \chapter->\xchapter, \section*->\xsectionstar
+
+2003-10-29 11:22 UTC  tuomov
+  * trunk: changeset 144
+  Added gpl.tex; GNU General Public License.
+
+2003-10-29 11:20 UTC  tuomov
+  * trunk: changeset 143
+  Added menu reference and updated drawing engine documentation to
+  reflect the change in style names.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030811
+
+2003-08-10 23:45 UTC  tuomov
+  * trunk: changeset 142
+  Fixed a few more typos and such.
+
+2003-08-10 23:37 UTC  tuomov
+  * trunk: changeset 141
+  Fixed a typo.
+
+2003-08-10 23:37 UTC  tuomov
+  * trunk: changeset 140
+  The files draw-DISPLAY.SCREEN.lua were still being referenced to.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030810
+
+2003-08-09 12:48 UTC  tuomov
+  * trunk: changeset 139
+  Added a quote.
+
+2003-08-09 12:45 UTC  tuomov
+  * trunk: changeset 138
+  Added a few spaces.
+
+2003-08-09 12:45 UTC  tuomov
+  * trunk: changeset 137
+  Added a walk-through of ioncore.lua.
+
+2003-08-08 21:56 UTC  tuomov
+  * trunk: changeset 136
+  Added an introduction and some design decision rationale.
+
+2003-08-07 21:45 UTC  tuomov
+  * trunk: changeset 135
+  Added information on winprop name field and improved winprop lookup
+  order explanation.
+
+2003-08-06 15:08 UTC  tuomov
+  * trunk: changeset 134
+  look-cleanviolet.lua was changed and so the example.
+
+2003-08-06 15:06 UTC  tuomov
+  * trunk: changeset 133
+  The 'urgent' attributes was renamed 'activity'.
+
+2003-08-01 05:54 UTC  tuomov
+  * trunk: changeset 132
+  Added mention of ignore_cfgrq.
+
+2003-07-31 21:24 UTC  tuomov
+  * trunk: changeset 131
+  Started a new chapter on assorted tricks.
+
+2003-07-31 15:21 UTC  tuomov
+  * trunk: changeset 130
+  A few fixes.
+
+2003-07-31 15:17 UTC  tuomov
+  * trunk: changeset 129
+  Improved drawing engine and style documentation.
+
+2003-07-30 22:47 UTC  tuomov
+  * trunk: changeset 128
+  Added a \docode kludge to have latex2html interpret figure
+  environments instead of generating images.
+
+2003-07-30 22:27 UTC  tuomov
+  * trunk: changeset 127
+  Started documenting drawing engines.
+
+2003-07-25 20:48 UTC  tuomov
+  * trunk: changeset 126
+  Moved WRootWin under WWindow in class hierarchy.
+
+2003-07-24 19:35 UTC  tuomov
+  * trunk: changeset 125
+  Some bindings setup documentation improvements.
+
+2003-07-13 22:16 UTC  tuomov
+  * trunk: changeset 124
+  Changes to accommodate for more OO bindings.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030710
+
+2003-07-10 17:18 UTC  tuomov
+  * trunk: changeset 123
+  Class explanations improved.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030628
+
+2003-06-27 22:58 UTC  tuomov
+  * trunk: changeset 122
+  Typos etc.
+
+2003-06-27 20:56 UTC  tuomov
+  * trunk: changeset 121
+  Fixed QueryLib introduction.
+
+2003-06-17 21:02 UTC  tuomov
+  * trunk: changeset 120
+  Removed mention of region_close and make_current_or_self_fn as this
+  binding does not work.
+
+2003-06-17 10:25 UTC  tuomov
+  * trunk: changeset 119
+  Added notes on C coding style.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030614
+
+2003-06-14 19:06 UTC  tuomov
+  * trunk: changeset 118
+  Fixed "or"->"are".
+
+2003-06-14 18:01 UTC  tuomov
+  * trunk: changeset 117
+  \date{} setting moved to distribution building script.
+
+2003-06-14 17:54 UTC  tuomov
+  * trunk: changeset 116
+  Minor bug was fixed.
+
+2003-06-14 17:53 UTC  tuomov
+  * trunk: changeset 115
+  Some clarifications were made in a few explanations and a note on
+  anonymous functions was added.
+
+2003-06-14 17:53 UTC  tuomov
+  * trunk: changeset 114
+  Redefined the itemize environment to look better.
+
+2003-06-14 15:10 UTC  tuomov
+  * trunk: changeset 113
+  Updated the documentation to use the new binding setting functions.
+
+2003-06-08 17:58 UTC  tuomov
+  * trunk: changeset 112
+  Added FDL as a plaintext file LICENSE.
+
+2003-06-08 17:56 UTC  tuomov
+  * trunk: changeset 111
+  Documentation updated to mention WMPlexes.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030531
+
+2003-05-31 15:39 UTC  tuomov
+  * trunk: changeset 110
+  Dates updated.
+
+2003-05-30 21:32 UTC  tuomov
+  * trunk: changeset 109
+  Updated the parts that refer to the files that were moved to SHAREDIR.
+
+2003-05-29 13:11 UTC  tuomov
+  * trunk: changeset 108
+  Added a note on char* and const char *.
+
+2003-05-29 12:51 UTC  tuomov
+  * trunk: changeset 107
+  Added one more note on deferred destroy.
+
+2003-05-29 12:47 UTC  tuomov
+  * trunk: changeset 106
+  Added a note on deferred destroy.
+
+2003-05-17 13:33 UTC  tuomov
+  * trunk: changeset 105
+  Updated the documentation to switch to using WRootWins for X screens
+  and WScreens for physical screens.
+
+2003-05-13 05:22 UTC  tuomov
+  * trunk: changeset 104
+  Some minor fixes.
+
+2003-12-23 20:18 UTC  unknown
+  tagged ion-doc-20030510
+
+2003-05-10 20:09 UTC  tuomov
+  * trunk: changeset 103
+  Removed repeated word.
+
+2003-05-10 20:02 UTC  tuomov
+  * trunk: changeset 102
+  Fixed some typos.
+
+2003-05-10 18:55 UTC  tuomov
+  * trunk: changeset 101
+  Oops. The all-ps rule was broken.
+
+2003-05-10 18:51 UTC  tuomov
+  * trunk: changeset 100
+  License notes changed to use \copyright instead of "(c)"
+
+2003-05-10 18:28 UTC  tuomov
+  * trunk: changeset 99
+  A README was added.
+
+2003-05-10 18:26 UTC  tuomov
+  * trunk: changeset 98
+  File removed.
+
+2003-05-10 18:26 UTC  tuomov
+  * trunk: changeset 97
+  Object system implementation was split out from the chapter/section on
+  object and class hierarchies.
+
+2003-05-10 18:25 UTC  tuomov
+  * trunk: changeset 96
+  Added implementation of artikel3 for latex2html.
+
+2003-05-10 18:24 UTC  tuomov
+  * trunk: changeset 95
+  Implementation of rapport3 for latex2html was added.
+
+2003-05-10 18:24 UTC  tuomov
+  * trunk: changeset 94
+  The macros were cleaned up
+
+2003-05-10 18:24 UTC  tuomov
+  * trunk: changeset 93
+  Better Makefile
+
+2003-05-10 18:23 UTC  tuomov
+  * trunk: changeset 92
+  FDL was modified to use the \xchapter etc. macros to enable embedding
+  it in articles.
+
+2003-05-10 18:23 UTC  tuomov
+  * trunk: changeset 91
+  Clarifications (hopefully) ein the explanation of the object and class
+  hierarchies.
+
+2003-05-10 18:22 UTC  tuomov
+  * trunk: changeset 90
+  The configuration files were documented.
+
+2003-05-10 18:22 UTC  tuomov
+  * trunk: changeset 89
+  The original document "Ion: Objects and extending" was split into
+  separate documents "Ion: Configuring and extending with Lua" and "Ion:
+  notes for the module and patch writer".
+
+2003-05-10 15:50 UTC  tuomov
+  * trunk: changeset 88
+  Added the GNU Free Documentation License.
+
+2003-05-08 18:31 UTC  tuomov
+  * trunk: changeset 87
+  Added more documentation on binding configuration.
+
+2003-05-07 18:43 UTC  tuomov
+  * trunk: changeset 86
+  Added QueryLib and Ioncorelib references. Moved function reference
+  .tex generation code here from ion.
+
+2003-05-06 19:46 UTC  tuomov
+  * trunk: changeset 85
+  Did some reorganization and added links to Lua documentation.
+
+2003-05-06 17:48 UTC  tuomov
+  * trunk: changeset 84
+  Added a \hline in the type table.
+
+2003-05-06 17:35 UTC  tuomov
+  * trunk: changeset 83
+  Added Makefile rules to generate postscript and pdf
+
+2003-05-06 17:33 UTC  tuomov
+  * trunk: changeset 82
+  Added a Makefile
+
+2005-02-16 07:18 UTC  tailor@f281.ttorni.ton.tut.fi
+  * Tailorization of trunk
+  Import of the upstream sources from the repository
+  
+   http://tao.uab.es/ion/svn/ion-doc/trunk
+  
+  as of revision 80
+  
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..bd580ca
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,136 @@
+# Settings
+######################################
+
+TOPDIR=../ion-3
+
+include $(TOPDIR)/build/system-inc.mk
+
+L2H=latex2html -show_section_numbers -short_index -local_icons -noaddress \
+    -up_url http://iki.fi/tuomov/ion/ -up_title "Ion homepage" -nofootnode\
+##    -style greyviolet.css
+
+
+# Function documentation to build
+######################################
+
+DOCS=ionconf ionnotes
+
+FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \
+       mod_query-fns.tex de-fns.tex mod_menu-fns.tex \
+       mod_dock-fns.tex mod_sp-fns.tex
+
+# Generic rules
+######################################
+
+nothing:
+       @ echo "Please read the README first."
+
+%.ps: %.dvi
+       dvips $<
+
+%.pdf: %.dvi
+       dvipdfm -p a4 $<
+
+%.dvi: %.tex
+       latex $<
+
+# Install
+######################################
+
+install:
+       $(INSTALLDIR) $(DOCDIR); \
+       for d in $(DOCS); do \
+           for e in ps pdf dvi; do \
+             test -f $$d.$$e && $(INSTALL) -m $(DATA_MODE) $$d.$$e $(DOCDIR); \
+            done; \
+           $(INSTALLDIR) $(DOCDIR)/$$d; \
+            for i in $$d/*; do \
+                $(INSTALL) -m $(DATA_MODE) $$i $(DOCDIR)/$$i; \
+           done; \
+        done
+
+# ionconf rules
+######################################
+ionconf-dvi-full:
+       latex ionconf
+       latex ionconf
+       latex ionconf
+       makeindex ionconf.idx
+       latex ionconf
+
+ionconf-html: 
+       $(L2H) -split 3 ionconf
+
+fntexes: $(FNTEXES)
+
+ionconf-all: fntexes fnlist.tex ionconf-dvi-full ionconf-html
+
+# ionnotes rules
+######################################
+
+ionnotes-dvi-full:
+       latex ionnotes
+       latex ionnotes
+       latex ionnotes
+       makeindex ionnotes.idx
+       latex ionnotes
+
+ionnotes-html: 
+       $(L2H) -split 4 ionnotes
+
+ionnotes-all: ionnotes-dvi-full ionnotes-html
+
+# More generic rules
+######################################
+
+all: ionconf-all ionnotes-all
+
+all-ps: ionconf.ps ionnotes.ps
+
+all-pdf: ionconf.pdf ionnotes.pdf
+
+
+# Clean
+######################################
+
+clean:
+       rm -f $(FNTEXES) fnlist.tex
+       rm -f *.aux *.toc *.log
+       rm -f *.idx *.ild *.ilg *.ind
+        
+realclean: clean
+       rm -f *.ps *.pdf *.dvi
+       rm -rf $(DOCS)
+
+
+# Function reference rules
+######################################
+
+ioncore-fns.tex: $(TOPDIR)/ioncore/*.c $(TOPDIR)/ioncore/*.lua
+       $(MKEXPORTS) -module ioncore -mkdoc -o $@ $+
+
+mod_tiling-fns.tex: $(TOPDIR)/mod_tiling/*.c
+       $(MKEXPORTS) -module mod_tiling -mkdoc -o $@ $+
+
+mod_query-fns.tex: $(TOPDIR)/mod_query/*.c $(TOPDIR)/mod_query/mod_query.lua
+       $(MKEXPORTS) -module mod_query -mkdoc -o $@ $+
+
+mod_menu-fns.tex: $(TOPDIR)/mod_menu/*.c $(TOPDIR)/mod_menu/mod_menu.lua
+       $(MKEXPORTS) -module mod_menu -mkdoc -o $@ $+
+
+mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c
+       $(MKEXPORTS) -module mod_dock -mkdoc -o $@ $+
+
+mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c
+       $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+
+
+de-fns.tex: $(TOPDIR)/de/*.c
+       $(MKEXPORTS) -module de -mkdoc -o $@ $+
+
+# Function list
+######################################
+
+fnlist.tex: $(FNTEXES)
+       grep hyperlabel $+ | \
+       sed 's/.*fn:\([^}]*\).*/\\fnlisti{\1}/;'|sort -d -f \
+       > $@
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..604bf85
--- /dev/null
+++ b/README
@@ -0,0 +1,23 @@
+
+Ion-doc
+
+Tuomo Valkonen <tuomov at iki.fi>
+
+
+This package contains some (advanced user and module writer)
+documentation for the Ion window manager.
+
+You will need to install latex2html to build the HTML documents.
+
+How to build:
+
+ 1. Modify TOPDIR in Makefile point to your top-level Ion source
+    directory, containing a working system.mk (or system-ac.mk).
+
+ 3. After the above has been done, you may run 'make all' to build the
+    (hyperlinked) DVI and HTML versions of the documents. You may have
+    increase TeX pool size.
+
+ 4. If you want Postcript versions of the documents, run 'make all-ps'.
+    For PDF you need to have dvipdfm installed. The PDF:s are obviously
+    built with 'make all-pdf'.
diff --git a/artikel3.perl b/artikel3.perl
new file mode 100644 (file)
index 0000000..110f32c
--- /dev/null
@@ -0,0 +1,12 @@
+# artikel3.perl by Tuomo Valkonen, <tuomov at iki.fi>, 2003-05-10
+#
+# Implementation of the documentclass for latex2html. Just load
+# article.
+#
+
+package main;
+
+&do_require_package("article");
+
+1;
+
diff --git a/conf-bindings.tex b/conf-bindings.tex
new file mode 100644 (file)
index 0000000..9afb2b8
--- /dev/null
@@ -0,0 +1,269 @@
+\section{Keys and rodents}
+\label{sec:bindings}
+
+In the stock configuration file setup, most key and mouse bindings are set
+from the file \file{cfg\_ioncore.lua} while module-specific bindings
+are set from the modules' main configuration files (\file{cfg\_modname.lua}).
+This, however, does not have to be so as long as the module has been
+loaded prior to defining any module-specific bindings.
+
+Bindings are defined by calling the function 
+\fnrefx{ioncore}{defbindings} with the ''context'' of the
+bindings and the a table of new bindings to make. The context is simply
+string indicating one of the classes of regions (or modes such as
+\type{WMoveresMode}) introduced in section \ref{sec:objects}, and fully
+listed in appendix \ref{app:fullhierarchy}, although not all define
+a binding map. For example, the following skeleton would be used to 
+define new bindings for all frames:
+
+\begin{verbatim}
+defbindings("WFrame", {
+    -- List of bindings to make goes here.
+})
+\end{verbatim}
+
+There has been some confusion among users about the need to define the
+''context'' for each binding, so let me try to explain this design
+decision here. The thing is that if there was a just a simple 'bind this 
+key to this action' method without knowledge of the context, some 
+limitations would have to be made on the available actions and writing 
+custom handlers would be more complicated. In addition one may want to 
+bind the same function to different key for different types of objects.
+Indeed, the workspace and frame tab switching functions are the same both
+classes being based on \type{WMPlex}, and in the stock configuration the 
+switch to $n$:th workspaces is bound to \key{Mod1+n} while the switch to 
+$n$:th tab is bound to the sequence \key{Mod1+k n}.
+
+Currently known ''contexts'' include: 
+\code{WScreen},
+\code{WMPlex},
+\code{WMPlex.toplevel},
+\code{WFrame},
+\code{WFrame.toplevel},
+\code{WFrame.floating},
+\code{WFrame.tiled},
+\code{WFrame.transient},
+\code{WMoveresMode},
+\code{WGroup},
+\code{WGroupCW},
+\code{WGroupWS},
+\code{WClientWin},
+\code{WTiling}, and
+\code{WStatusBar}.
+Most of these should be self-explanatory, corresponding to objects
+of class with the same name. The ones with \code{.toplevel} suffix
+refer to screens and ''toplevel''  frames, i.e. frames that are
+not used for transient windows. Likewise \code{.transient} refers
+to frames in transient mode, and \code{.tiled} and \code{.floating}
+to frames in, respectively, tiled and floating modes. 
+
+                                                        
+
+The following subsections describe how to construct elements of the
+binding table. Note that \fnrefx{ioncore}{defbindings} adds
+the the newly defined bindings to the previous bindings of the context,
+overriding duplicates. To unbind an event, set the handler parameter
+to \code{nil} for each of the functions to be described in the following
+subsections.
+
+Also note that when multiple objects want to handle a binding, the 
+innermost (when the root window is considered the outermost) active object
+in the parent--child hierarchy (see Figure \ref{fig:parentship}) of objects 
+gets to handle the action.
+
+
+\subsection{Binding handlers and special variables}
+
+Unlike in Ion2, in Ion3 binding handlers are not normally passed as
+''anonymous functions'', although this is still possible. The preferred
+method now is to pass the code of the handler as a string. Two special 
+variables are available in this code. These are
+
+\begin{tabularx}{\linewidth}{lX}
+    \tabhead{Variable & Description}
+    \code{_} (underscore) &
+      Reference to the object on which the 
+      binding was triggered. The object is of the same class as the the
+      context of the \fnrefx{ioncore}{defbindings} call
+      defining the binding. \\
+    \code{_sub} &
+      Usually, the currently active \emph{managed object} of the 
+      object referred to by \code{_}, but sometimes (e.g. mouse actions
+      on tabs of frames) something else relevant to the action triggering
+      the binding. \\
+    \code{_chld} &
+      Object corresponding to the currently active child window of the
+       object referred to by \code{_}.
+\end{tabularx}
+
+For example, supposing '\code{_}' is a \type{WFrame}, the following
+handler should move the active window to the right, if possible:
+
+\begin{verbatim}
+"_:inc_index(_sub)"
+\end{verbatim}
+
+\subsection{Guards}
+
+To suppress error messages, each binding handler may also be accompanied
+by a ''guard'' expression that blocks the handler from being called when
+the guard condition is not met. Currently the following guard expressions
+are supported (for both \code{_sub} and \code{_chld}):
+
+\begin{tabularx}{\linewidth}{lX}
+    \tabhead{Guard & Description}
+    \code{"_sub:non-nil"} & The \code{_sub} parameter must be set. \\
+    \code{"_sub:SomeClass"} & The \code{_sub} parameter must be member
+      of class \type{SomeClass}. \\
+\end{tabularx}
+
+
+\subsection{Defining the bindings}
+\label{sec:binddef}
+
+The descriptions of the individual bindings in the binding table argument
+to \fnrefx{ioncore}{defbindings} should be constructed with the following
+functions.
+
+Key presses:
+\begin{itemize}
+    \item \fnref{kpress}\code{(keyspec, handler [, guard])},
+    \item \fnref{kpress_wait}\code{(keyspec, handler [, guard])} and
+    \item \fnref{submap}\code{(keyspec, \{ ... more key bindings ... \})}.
+\end{itemize}
+Mouse actions:
+\begin{itemize}
+    \item \fnref{mclick}\code{(buttonspec, handler [, guard])},
+    \item \fnref{mdblclick}\code{(buttonspec, handler [, guard])}, 
+    \item \fnref{mpress}\code{(buttonspec, handler [, guard])} and
+    \item \fnref{mdrag}\code{(buttonspec, handler [, guard])}.
+\end{itemize}
+
+The actions that most of these functions correspond to should be clear
+and as explained in the reference, \fnref{kpress_wait} is simply
+\fnref{kpress} with a flag set instructing Ioncore wait for all
+modifiers to be released before processing any further actions.
+This is to stop one from accidentally calling e.g.
+\fnref{WRegion.rqclose} multiple times in a row. The \fnref{submap}
+function is used to define submaps or ''prefix maps''. The second
+argument to this function is table listing the key press actions
+(\fnref{kpress}) in the submap
+
+The parameters \var{keyspec} and \var{buttonspec} are explained below
+in detail. The parameter \var{handler} is the handler for the binding,
+and the optional parameter \var{guard} its guard. These should normally
+be strings as explained above. 
+
+\subsection{Examples}
+
+For example, to just bind the key \key{Mod1+1} to switch to the first
+workspace and \key{Mod1+Right} to the next workspace, you would make the
+following call
+\begin{verbatim}
+defbindings("WScreen", {
+    kpress("Mod1+Right", "_:switch_next()"),
+    kpress("Mod1+1", "_:switch_nth(1)"),
+})
+\end{verbatim}
+
+Note that \code{_:switch_nth(1)} is the same as calling
+\fnref{WMPlex.switch_next}\code{(_, 1)} as \type{WScreen} inherits
+\type{WMPlex} and this is where the function is actually defined.
+
+Similarly to the above example, to bind the key sequence \key{Mod1+k n} 
+switch to the next managed object within a frame, and \key{Mod1+k 1} to the
+first, you would issue the following call:
+\begin{verbatim}
+defbindings("WFrame", {
+    submap("Mod1+K", {
+        kpress("Right", "_:switch_next()"),
+        kpress("1", "_:switch_nth(1)"),
+   }),
+})
+\end{verbatim}
+
+
+\subsection{Key specifications}
+
+As seen above, the functions that create key binding specifications require
+a \var{keyspec} argument. This argument should be a string containing the
+name of a key as listed in the X header file \file{keysymdef.h}%
+\footnote{This file can usually be found in the directory
+\file{/usr/X11R6/include/X11/}.} without the \code{XK_} prefix.
+\index{keysymdef.h@\file{keysymdef.h}}
+Most of the key names are quite intuitive while some are not. For example,
+the \key{Enter} key on the main part of the keyboard has the less common
+name \key{Return} while the one the numpad is called \key{KP\_Enter}.
+
+The \var{keyspec} string may optionally have multiple ''modifier'' names
+followed by a plus sign (\code{+}) as a prefix. X defines the following
+modifiers:
+\begin{quotation}
+\key{Shift}, \key{Control}, \key{Mod1} to \key{Mod5},
+\key{AnyModifier} and \key{Lock}.
+\index{Shift@\key{Shift}}
+\index{Control@\key{Control}}
+\index{ModN@\key{ModN}}
+\index{AnyModifier@\key{AnyModifier}}
+\index{Lock@\key{Lock}}
+\end{quotation}
+
+X allows binding all of these modifiers to almost any key and while this
+list of modifiers does not explicitly list keys such as 
+\key{Alt}\index{Alt@\key{Alt}} that are common on modern keyboards, such
+keys are bound to one of the \key{ModN}. On systems running XFree86
+\key{Alt} is usually \key{Mod1}. On Suns \key{Mod1} is the diamond key
+and \key{Alt} something else. One of the ''flying window'' keys on so
+called Windows-keyboards is probably mapped to \key{Mod3} if you have
+such a key. Use the program \file{xmodmap}\index{xmodmap@\file{xmodmap}}
+to find out what exactly is bound where. 
+
+Ion defaults to \key{AnyModifier} in submaps. This can sometimes lead to
+unwanted effects when the same key is used with and without explicitly
+specified modifiers in nested regions. For this reason, Ion recognises
+\key{NoModifier} as a special modifier that can be used to reset this
+default.
+
+Ion ignores the \key{Lock} modifier and any \key{ModN} ($N=1{\ldots} 5$)
+bound to \key{NumLock}\index{NumLock@\key{NumLock}} or
+\key{ScrollLock}\index{ScrollLock@\key{ScrollLock}}
+by default because such\footnote{Completely useless keys that should be
+gotten rid of in the author's opinion.} locking keys may otherwise
+cause confusion.
+
+
+\subsection{Button specifications}
+
+Button specifications are similar to key definitions but now
+instead of specifying modifiers and a key, you specify modifiers
+and one of the button names \key{Button1} to
+\key{Button5}\index{Button-n@\key{Button-n}}. Additionally the
+specification may end with an optional area name following an @-sign.
+Only frames currently support areas, and the supported values in this
+case are
+\code{"border"}, \code{"tab"}, \code{"empty_tab"}, \code{"client"} and
+\code{nil} (for the whole frame).
+
+For example, the following code binds dragging a tab with the first 
+button pressed to initiate tab drag\&drop handling:
+
+\begin{verbatim}
+defbindings("WFrame", {
+    mdrag("Button1@tab", "_:p_tabdrag()"),
+})
+\end{verbatim}
+
+
+\subsection{A further note on the default binding configuration}
+
+The default binding configuration contains references to the variables
+\code{META} and \code{ALTMETA} instead of directly using the default
+values of \code{"Mod1+"} and \code{""} (nothing). As explained in
+section \ref{sec:walkthrough}, the definitions of these variables
+appear in \file{cfg\_ion.lua}. This way you can easily change the the
+modifiers used by all bindings in the default configuration without 
+changing the whole binding configuration. Quite a few people prefer 
+to use the Windows keys as modifiers because many applications already
+use \key{Alt}. Nevertheless, \key{Mod1} is the default as a key bound 
+to it is available virtually everywhere.
+
diff --git a/conf-menus.tex b/conf-menus.tex
new file mode 100644 (file)
index 0000000..3f9ee17
--- /dev/null
@@ -0,0 +1,120 @@
+\section{Menus}
+\label{sec:menus}
+
+\subsection{Defining menus}
+
+\index{menus}
+\index{defmenu@\code{defmenu}}
+\index{menuentry@\code{menuentry}}
+\index{submenu@\code{submenu}}
+In the stock configuration file setup, menus are defined in the file
+\file{cfg\_menus.lua} as previously mentioned. The \file{mod\_menu} module
+must be loaded for one to be able to define menus, and this is done with
+the function \fnrefx{mod_menu}{defmenu} provided by it.
+
+Here's an example of the definition of a rather simple menu with a submenu:
+
+\begin{verbatim}
+defmenu("exitmenu", {
+    menuentry("Restart", "ioncore.restart()"),
+    menuentry("Exit", "ioncore.shutdown()"),
+})
+
+defmenu("mainmenu", {
+    menuentry("Lock screen", "ioncore.exec('xlock')"),
+    menuentry("Help", "mod_query.query_man(_)"),
+    submenu("Exit", "exitmenu"),
+})
+\end{verbatim}
+
+
+The \fnrefx{mod_menu}{menuentry} function is used to create an entry in the 
+menu with a title and an entry handler to be called when the menu entry
+is activated. The parameters to the handler are similar to those of binding
+handlers, and usually the same as those of the binding that opened the menu.
+
+The \fnrefx{mod_menu}{submenu} function is used to insert a submenu at that 
+point in the menu. (One could as well just pass a table with the menu
+entries, but it is not encouraged.)
+
+\subsection{Special menus}
+
+The menu module predefines the following special menus. These can be used
+just like the menus defined as above.
+
+\begin{tabularx}{\linewidth}{lX}
+    \tabhead{Menu name & Description}
+    \code{windowlist} & 
+    List of all client windows. Activating an entry jumps to that window. \\
+    \code{workspacelist} & 
+    List of all workspaces. Activating an entry jumps to that workspaces. \\
+    \code{stylemenu} &
+    List of available \file{look\_*.lua} style files. Activating an entry
+    loads that style and ask to save the selection. \\
+    \code{ctxmenu} &
+    Context menu for given object. \\
+\end{tabularx}
+
+
+\subsection{Defining context menus}
+
+The ''ctxmenu'' is a special menu that is assembled from a defined context
+menu for the object for which the menu was opened for, but also includes
+the context menus for the manager objects as submenus.
+
+Context menus for a given region class are defined with the
+\fnrefx{mod_menu}{defctxmenu} function. This is other ways similar to
+\fnrefx{mod_menu}{defmenu}, but the first argument instead being the name
+of the menu, the name of the region class to define context menu for.
+For example, here's part of the stock \type{WFrame} context menu 
+definition:
+
+\begin{verbatim}
+defctxmenu("WFrame", {
+    menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"),
+    menuentry("Kill",  "WClientWin.kill(_sub)", "_sub:WClientWin"),
+})
+\end{verbatim}
+
+Some of the same ''modes'' as were available for some bindings
+may also be used: \code{WFrame.tiled}, \code{WFrame.floating},
+and \code{WFrame.transient}.
+
+
+\subsection{Displaying menus}
+\label{sec:menudisp}
+
+The following functions may be used to display menus from binding
+handlers (and elsewhere):
+
+\begin{tabularx}{\linewidth}{lX}
+    \tabhead{Function & Description}
+    \fnref{mod_menu.menu} &
+      Keyboard (or mouse) operated menus that open in the bottom-left corner
+      of a screen or frame. \\
+    \fnref{mod_menu.bigmenu} &
+      Same as previous, but uses another graphical style. \\
+    \fnref{mod_menu.pmenu} &
+      Mouse-operated drop-down menus. This function can only be called from a
+      mouse press or drag handler. \\
+    \fnref{mod_menu.grabmenu} &
+      A special version of \fnref{mod_menu.menu} that grabs the keyboard
+      and is scrolled with a given key until all modifiers have been released,
+      after which the selected entry is activated. This function is meant to 
+      be used for implementing, for example, Win***s-style \key{Alt-Tab} 
+      handling.\footnote{See the \file{wcirculate.lua} script in the Ion 
+        scripts repository \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.} \\
+\end{tabularx}
+
+The \fnrefx{mod_menu}{grabmenu} function takes the extra key parameter, but
+aside from that each of these functions takes three arguments, which when
+called from a binding handler, should be the parameters to the handler, and
+the name of the menu. For example, the following snippet of of code binds
+the both ways to open a context menu for a frame:
+
+\begin{verbatim}
+defbindings("WFrame", {
+    kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
+})
+\end{verbatim}
diff --git a/conf-winprops.tex b/conf-winprops.tex
new file mode 100644 (file)
index 0000000..10c1c10
--- /dev/null
@@ -0,0 +1,279 @@
+\section{Winprops}
+\label{sec:winprops}
+
+The so-called ''winprops''\index{Winprops} can be used to change how
+specific windows are handled and to set up some kludges to deal with
+badly behaving applications. They are defined by calling the function
+\code{defwinprop} with a table containing the properties to set and the
+necessary information to identify a window. The currently supported
+winprops are listed below, and the subsequent subsections explain the
+usual method of identifying windows, and how to obtain this information.
+
+%\begin{table}
+%\begin{htmlonly}
+%\docode % latex2html kludge
+%\end{htmlonly}
+%\caption{Supported winprops}
+%\label{tab:winprops}
+
+\newenvironment{winprop}[2]{
+  \begin{function}%
+      % Sigh. (La)TeX is a mess.
+      %\index{%
+      %  \ifx\\#1\\%
+      %  #2\else#1\fi%
+      %  @\expandafter\var{#2}}
+      \item[Winprop:] \var{#1} (#2)
+      \item[Description:]
+}
+{
+  \end{function}
+}
+
+
+\begin{winprop}{acrobatic}{boolean}
+    \index{acrobatic@\var{acrobatic}}
+    Set this to \code{true} for Acrobat Reader. It has an annoying
+    habit of trying to manage its dialogs instead of setting them as
+    transients and letting the window manager do its job, causing
+    Ion and acrobat go a window-switching loop when a dialog is
+    opened. 
+\end{winprop}
+
+
+\begin{winprop}{aspect}{table}
+    \index{aspect@\var{aspect}}
+    The table should contain the entries \var{w} and \var{h} that
+    override application-supplied aspect ratio hint.
+\end{winprop}
+
+
+\begin{winprop}{float}{boolean}
+    \index{float@\var{float}}
+    Set this to open the window in a floating frame, when
+    in a group.
+\end{winprop}
+
+
+\begin{winprop}{fullscreen}{boolean}
+    \index{fullscreen@\var{fullscreen}}
+    Should the window be initially in full screen mode?
+\end{winprop}
+
+
+\begin{winprop}{ignore_cfgrq}{boolean}
+    \index{ignore-cfgrq@\var{ignore_cfgrq}}
+    Should configure requests on the window be ignored?
+    Only has effect on floating windows.
+\end{winprop}
+
+
+\begin{winprop}{ignore_net_active_window}{boolean}
+    \index{ignore-net-active-window@\var{ignore_net_active_window}}
+    Ignore extended WM hints \code{_NET_ACTIVE_WINDOW} request. 
+\end{winprop}
+
+
+\begin{winprop}{ignore_resizeinc}{boolean}
+    \index{ignore-resizeinc@\var{ignore_resizeinc}}
+    Should application supplied size increments be ignored?
+\end{winprop}
+
+
+\begin{winprop}{jumpto}{boolean}
+    \index{jumpto@\var{jumpto}}
+    Should a newly created client window always be made
+    active, even if the allocated frame isn't. 
+\end{winprop}
+
+
+\begin{winprop}{max_size}{table}
+    \index{max-size@\var{max_size}}
+    The table should contain the entries \var{w} and \var{h} that
+    override application-supplied maximum size hint. 
+\end{winprop}
+
+
+\begin{winprop}{min_size}{table}
+    \index{min-size@\var{min_size}}
+    Similar to \var{max_size} but for the minimum size hint. 
+\end{winprop}
+
+
+\begin{winprop}{oneshot}{boolean}
+    \index{oneshot@\var{oneshot}}
+    Discard this winprop after first use. 
+\end{winprop}
+
+
+\begin{winprop}{switchto}{boolean}
+    \index{switchto@\var{switchto}}
+    Should a newly mapped client window be switched to within
+    its frame.
+\end{winprop}
+        
+
+\begin{winprop}{target}{string}
+    \index{target@\var{target}}
+    The name of an object (workspace, frame) that should manage 
+    windows of this type. 
+\end{winprop}
+
+        
+\begin{winprop}{transient_mode}{string}
+    \index{transient-mode@\var{transient_mode}}
+    "normal": No change in behaviour. "current": The window
+    should be thought of as a transient for the current active
+    client window (if any) even if it is not marked as a
+    transient by the application. "off": The window should be
+    handled as a normal window even if it is marked as a
+    transient by the application. 
+\end{winprop}
+
+
+\begin{winprop}{transients_at_top}{boolean}
+    \index{transients-at-top@\var{transients_at_top}}
+    When transients are managed by the client window itself (as it
+    is the case on tiled workspaces), should the transients be
+    placed at the top of the window instead of bottom? 
+\end{winprop}
+
+
+\begin{winprop}{transparent}{boolean}
+    \index{transparent@\var{transparent}}
+    Should frames be made transparent when this window is selected? \\
+\end{winprop}
+
+
+
+\subsection{Classes, roles and instances}
+\label{sec:classesrolesinstances}
+
+The identification information in the winprop specification is usually the
+\var{class}\index{class@\var{class}!winprop},
+\var{role}\index{role@\var{role}!winprop},
+\var{instance}\index{instance@\var{instance}!winprop} and
+\var{name}
+of the window. The \var{name} field is a Lua-style regular expression
+matched against the window's title and the rest are strings that must
+exactly match the corresponding window information. It is not necessary
+to specify all of these fields.
+
+Ion looks for a matching winprop in the order listed by the following
+table. An 'E' indicates that the field must be set in the winprop
+and it must match the window's corresponding property exactly or, in
+case of \var{name}, the regular expression must match the window
+title. An asterisk '*' indicates that a winprop where the field is
+not specified (or is itself an asterisk in case of the first three
+fields) is tried.
+
+\begin{center}
+\begin{tabular}{llll}
+  \tabhead{\var{class} & \var{role} & \var{instance} & \var{name}}
+  E           & E          & E              & E \\
+  E           & E          & E              & * \\
+  E           & E          & *              & E \\
+  E           & E          & *              & * \\
+  E           & *          & E              & E \\
+  E           & *          & E              & * \\
+  E           & *          & *              & E \\
+  \vdots       & \vdots     & \vdots         & etc. \\
+\end{tabular}
+\end{center}
+
+If there are multiple winprops with other identification information 
+the same but different \var{name}, the longest match is chosen.
+
+\subsection{Finding window identification}
+
+The 'Window info' context menu entry (\key{Mod1+M} or \key{Button3} on a tab)
+can be used to list the identification information required to set winprops
+for a window and all the transient windows managed within it. 
+
+\index{xprop} 
+Another way to get the identification information is to use \command{xprop}.
+Simply run To get class and instance, simply run \command{xprop WM_CLASS}
+and click on the particular window of interest. The class is the latter of
+the strings while the instance is the former.  To get the role -- few
+windows have this property -- use the command \command{xprop WM_ROLE}. 
+This method, however, will not work on transients. 
+
+\index{transient}
+So-called ''transient windows'' are usually short-lived dialogs (although
+some programs abuse this property) that have a parent window that they are
+''transient for''. On tiled workspaces Ion displays these windows 
+simulatenously with the parent window at the bottom of the same frame.
+Unfortunately \command{xprop} is stupid and can't cope with this situation,
+returning the parent window's properties when the transient is clicked on.
+For this reason you'll have to do a little extra work to get the properties
+for that window.\footnote{There's a patch to \command{xprop} to
+fix this, but nothing seems to be happening with respect to including it in 
+XFree86.}
+
+Finally, it should be mentioned that too many authors these days
+''forget'' to set this vital identification to anything meaningful:
+everything except name is the same for all of the programs's 
+windows, for example.
+
+\subsection{Some common examples}
+
+\subsubsection{Acrobat Reader}
+
+The following is absolutely necessary for Acrobat reader:
+
+\begin{verbatim}
+defwinprop{
+    class = "AcroRead",
+    instance = "documentShell",
+    acrobatic = true,
+}
+\end{verbatim}
+
+\subsubsection{Fixing a Mozilla Firebird transient}
+
+Mozilla Firebird (0.7) incorrectly does not set the \code{WM_TRANSIENT_FOR} 
+property for the dialog that is used to ask the action to take for a file.
+It, however, sets the the property point to the main window for the save
+dialog. This can be annoying and confusing, as the first dialog is not 
+closed before the second is displayed.
+
+We'd like the first dialog to be transient to the main window. The closest
+we can get to that is to consider it transient to the current window (if
+there's one). Unfortunately Firebird does not set any meaningful classes, 
+instances or roles for the windows, so we'll have to rely on an ugly title
+match.
+
+\begin{verbatim}
+defwinprop{
+    class = "MozillaFirebird-bin",
+    name = "Opening .*",
+    transient_mode = "current",
+}
+\end{verbatim}
+
+\subsubsection{Forcing newly created windows in named frames}
+
+The following winprop should place xterm started with command-line parameter
+\mbox{\code{-name sysmon}} and running a system monitoring program in a
+particular frame:
+\begin{verbatim}
+defwinprop{
+    class = "XTerm",
+    instance = "sysmon",
+    target = "sysmonframe",
+}
+\end{verbatim}
+
+For this example to work, we have to somehow create a frame named
+\code{sysmonframe}. One way to do this is to make the following
+call in the \key{Mod1+F3} Lua code query:
+
+\begin{verbatim}
+mod_query.query_renameframe(_)
+\end{verbatim}
+
+Recall that \code{_} points to the multiplexer (frame or screen) in which 
+the query was opened. Running this code should open a new query prefilled
+with the current name of the frame. In our example we would change the 
+name to \code{sysmonframe}, but we could just as well have used the 
+default name formed from the frame's class name and an instance number.
diff --git a/conf.tex b/conf.tex
new file mode 100644 (file)
index 0000000..109093b
--- /dev/null
+++ b/conf.tex
@@ -0,0 +1,178 @@
+
+\chapter{Basic configuration}
+\label{chap:config}
+
+This chapter should help your configure Ion to your liking. As  the your
+probably already know, Ion uses Lua as a configuration and extension 
+language. If you're new to it, you might first want to read some Lua 
+documentation as already suggested and pointed to in the Introduction
+before continuing with this chapter.
+
+Section \ref{sec:conffiles} is an overview of the multiple configuration
+files Ion uses and as a perhaps more understandable introduction to the
+general layout of the configuration files, a walk-through of the main 
+configuration file \file{ion.lua} is provided in section 
+\ref{sec:walkthrough}.
+How keys and mouse action are bound to functions is described in detail
+in \ref{sec:bindings} and in section \ref{sec:winprops} winprops are
+explained. For a reference on exported functions, see section
+\ref{sec:exports}.
+
+\section{The configuration files}
+\label{sec:conffiles}
+
+Ion3, to which document applies, stores its stock configuration files in
+\file{/usr/local/etc/ion3/} unless you, the OS package maintainer or 
+whoever  installed the package on the system has modified the variables
+\code{PREFIX}\index{PREFIX@\code{PREFIX}} or
+\code{ETCDIR}\index{ETCDIR@\code{ETCDIR}} in
+\file{system.mk}\index{system.mk@\file{system.mk}} before compiling Ion.
+In the first case you probably know where to find the files and in 
+the other case the system administrator or the OS package maintainer
+should  have provided documentation to point to the correct location. 
+If these instructions are no help in locating the correct directory, 
+the command \code{locate cfg_ion.lua} might help provided \code{updatedb} 
+has been run recently. 
+
+User configuration files go in \file{\~{}/.ion3/}. 
+Ion always searches the user configuration file directory before the stock
+configuration file directory for files. Therefore, if you want to change
+some setting, it is advised against that you modify the stock configuration
+files in-place as subsequent installs of Ion will restore the stock
+configuration files. Instead you should always make a copy of the stock
+file in \file{\~{}/.ion3/} and modify this file. When searching
+for a file, if no extension or path component is given, compiled \file{.lc} 
+files are attempted before \file{.lua} files.
+
+All the configuration files are named \file{cfg\_*.lua} with the ''\file{*}''
+part varying. The configuration file for each module \file{mod\_modname} is
+\file{cfg\_modname.lua}, with \file{modname} varying by the module in
+question. The following table summarises these and other configuration
+files:
+
+\begin{tabularx}{\linewidth}{
+      p{\widthof{cfg-bindings.lua}}%
+      X}
+    \hline
+    File & Description \\
+    \hline
+    \file{cfg\_ion.lua} & 
+    The main configuration file \\
+    %
+    \file{cfg\_ioncore.lua} & 
+    Configuration file for Ion's core library.
+    Most of the bindings and menus are configured here. Bindings that are
+    specific to some module are configured in the module's configuration
+    file. For details, see section \ref{sec:bindings}. \\
+    %
+    \file{cfg\_kludges.lua} & 
+    Settings to get some applications behave more nicely have been 
+    collected here. See section \ref{sec:winprops}. \\
+    %
+    \file{cfg\_tiling.lua} 
+    \file{cfg\_query.lua} 
+    \file{cfg\_menu.lua} 
+    \file{cfg\_dock.lua} 
+    \file{cfg\_statusbar.lua} 
+    \dots & Configuration files for different modules. \\
+\end{tabularx}
+
+Additionally, there's the file \file{look.lua} that configures the 
+drawing engine, but it is covered in chapter \ref{chap:gr}.
+
+\section{A walk through \file{cfg\_ion.lua}}
+\label{sec:walkthrough}
+
+As already mentioned \file{cfg\_ion.lua} is Ion's main configuration
+file. Some basic 'feel' settings are usually configured there and
+the necessary modules and other configuration files configuring some 
+more specific aspects of Ion are loaded there. In this section we
+take a walk through the stock \file{cfg\_ion.lua}.
+Notice that most of the settings are commented-out (\code{--} is a 
+line comment in Lua) in the actual file, as they're the defaults
+nevertheless.
+
+The first thing one in the file is to set
+\begin{verbatim}
+META="Mod1+"
+ALTMETA=""
+\end{verbatim}
+These settings cause most of Ion's key bindings to use \key{Mod1} as the
+modifier key. If \code{ALTMETA} is set, it is used as modifier for the keys
+that don't normally use a modifier. for details on modifiers and key 
+binding setup in general see section \ref{sec:bindings}.
+
+Next we do some basic feel configuration:
+
+\begin{verbatim}
+ioncore.set{
+    dblclick_delay=250,
+    kbresize_delay=1500,
+}
+\end{verbatim}
+
+These two will set the delay between button presses in a double click, and
+the timeout to quit resize mode in milliseconds.
+
+\begin{verbatim}
+ioncore.set{
+    opaque_resize=true,
+    warp=true
+}
+\end{verbatim}
+
+The first of these two settings enables opaque resize mode: in move/resize
+move frames and other objects mirror you actions immediately. If opaque
+resize is disabled, a XOR rubber band is shown during the mode instead.
+This will, unfortunately, cause Ion to also grab the X server and has some
+side effects.
+
+Next we load the configuration for Ion's core, and some kludges:
+
+\begin{verbatim}
+dopath("cfg_ioncore")
+dopath("cfg_kludges")
+\end{verbatim}
+
+Most bindings and menus are defined in \file{cfg\_ioncore.lua}.
+Details on making such definitions follow in sections \ref{sec:bindings} 
+and \ref{sec:menus}, respectively. 
+some kludges or ''winprops'' to make some applications behave better
+under Ion are colledted in \file{cfg\_kludges.lua}; see section
+\ref{sec:winprops} for details. In addition to these, this file
+lists quite a few statements of the form
+\begin{verbatim}
+ioncore.defshortening("[^:]+: (.*)(<[0-9]+>)", "$1$2$|$1$<...$2")
+\end{verbatim}
+These are used to configure how Ion attempts to shorten window titles
+when they do not fit in a Tab. The first argument is a POSIX regular
+expression that is used to match against the title and the next is
+a rule to construct a new title of a match occurs. This particular
+rule is used to shorten e.g. 'Foo: barbaz<3>' to 'barba{\ldots}<3>'; for
+details see the function reference entry for \fnref{ioncore.defshortening}.
+
+To actually be able to do something besides display windows in full screen
+mode, we must next load some modules:
+
+\begin{verbatim}
+dopath("cfg_modules")
+--dopath("mod_query")
+--dopath("mod_menu")
+--dopath("mod_tiling")
+--dopath("mod_statusbar")
+--dopath("mod_dock")
+--dopath("mod_sp")
+\end{verbatim}
+
+We actually load there another file listing the default selection of
+modules. If you only want to load additional modules, just uncomment
+the corresponding line. If you want to disable loading some modules,
+comment out the the line loading \file{cfg\_modules}, and uncomment
+the lines for the modules you want, or add more.
+
+
+\input{conf-bindings.tex}
+
+\input{conf-menus.tex}
+
+\input{conf-winprops.tex}
diff --git a/confintro.tex b/confintro.tex
new file mode 100644 (file)
index 0000000..9331614
--- /dev/null
@@ -0,0 +1,52 @@
+
+\chapter{Introduction}
+
+This document is an ''advanced user'' manual for Ion, the X11 window manager,
+and version 3 specifically. It is an attempt attempt at documenting what is 
+in Ion's configuration files, how to configure Ion by simple modifications 
+to these files and how to write more complex extensions in Lua, the 
+lightweight configuration and scripting language used by Ion. 
+
+Readers unfamiliar with Lua is advised to first glance at the Lua manual at 
+
+\centerurl{http://www.lua.org/docs.html}
+
+and perhaps some tutorial pages at the lua-users wiki:
+
+\centerurl{http://lua-users.org/wiki/LuaTutorial}
+
+Back in this document, first in chapter \ref{chap:prelim} some key
+concepts and relations are explained. These include the module system
+and Ion's object and class hierarchies. While it might not at first 
+occur that knowing such things would be necessary to \emph{configure} 
+a program, this  material is essential because of the object-oriented 
+nature of most of Ion's scripting interface.
+
+The new user, fed up with the default key bindings and eager to just
+quickly configure Ion to his liking may question the reasons for 
+exposing the ''heavy'' internal OO structure in the scripting and
+configuration interface. I'm not the one to  blame him for that. 
+Sure it would be faster to configure Ion to everyone's liking
+if a simpler binding configuration interface was provided. Such an
+interface would, however, also be far more limited and make writing
+extensions more complicated and the advantages from using a real 
+scripting language would be partly lost. One more advantage from
+a rich scripting and configuration interface is that it allows 
+implementing scripts to read alternate configuration file formats,
+ones that could be, for example, modified by external configuration tools. 
+
+In chapter \ref{chap:config} the very basic Ion configuration know-how
+is provided. All the different configuration files and their locations
+are explained and instructions are given to allow the reader to
+configure bindings and so-called ''winprops''. Chapter \ref{chap:gr}
+explains the notion of drawing engines and graphical styles and how to
+write new looks for Ion and more advanced aspects of Ion's scripting 
+interface are documented in chapter \ref{chap:tricks} (a work in 
+progress).
+
+Finally, most of the functions provided by Ion's scripting interface
+are listed and documented in the Function reference in chapter
+\ref{sec:exports}. At the end of the document is an alphabetical
+listing of all these functions.
+
+
diff --git a/cstyle.tex b/cstyle.tex
new file mode 100644 (file)
index 0000000..328a7c3
--- /dev/null
@@ -0,0 +1,118 @@
+\section{C coding style}
+
+If you want to submit patches to Ion, you MUST follow my coding 
+style, even if you think it is the root of all evil. We don't want
+the code to be an incomprehensible mess of styles and I have better
+things to do than fix other people's style to match mine. The style
+should be obvious by studying the source, but here's a list of some
+things to take note of.
+
+\subsection{Whitespace}
+
+\begin{itemize}
+  \item Indentations of 4 with \emph{tab size=4}. 
+    
+  \item No extra spaces between operators, delimiters etc. except
+    \begin{itemize}
+      \item around logical and, or (\code{&&}, \code{||})
+      \item around the conditional \code{a ? b : c}
+      \item after commas and semicolons
+    \end{itemize}  
+    In my opinion this helps pointing out arithmetic or other
+    expressions within logical expressions or parameter lists.
+    
+  \item All kinds of labels are out-tended to the level of the higher
+    level block. For example:
+
+\begin{verbatim}    
+void foo()
+{
+again:
+    switch(asdf){
+    case 1:
+        ...
+        break;
+    default:
+        ...
+        break;
+    }
+}
+\end{verbatim}
+\end{itemize}
+
+\subsection{Braces}
+
+\begin{itemize}
+\item Opening brace is at the end of the line, except in function
+    bodies, where it is at the beginning of the line following
+    the definition.
+
+\item Never put the body of a control statement on the same line
+    with the statement (e.g. \verb!if(foo){ bar() }!).
+
+For example, the block
+\begin{verbatim}    
+void foo(int a, int b)
+{
+    if(a==b && c+d==e){
+        ...
+    }
+}
+\end{verbatim}
+
+has correct style while the block
+
+\begin{verbatim}   
+void foo(int a,int b) {
+    if (a == b && c + d == e) {
+        ...
+    }
+}
+\end{verbatim}
+
+does not.
+
+  \item The \code{else} keyword follows immediately after the closing brace of
+    previous \code{if}, if any. (This might change so I don't care if you put
+    it on the next line.)
+    
+  \item I have used the convention that control statement bodies containing
+    a single statement do not need braces around the block if, in case of
+    the \code{if} all the blocks in  \code{if ...  else if ... else}
+    contain just one statement. If you want to, just use braces in every 
+    case.
+\end{itemize}
+
+\subsection{Names}
+
+\begin{itemize}
+  \item Function and variable names only have lower case letters. Type
+    names are in mixed case while constants and macros (\code{#define}s)
+    are in upper case letters.
+\end{itemize}
+
+\subsection{Miscellaneous}
+
+\begin{itemize}
+  \item In the definition of a pointer variable, the asterisk is attached
+    to the variable name: \code{char *s;}. (One could claim this an 
+    exception to the second rule.)
+    
+  \item You might optionally want to use Jed's foldings to group blocks
+    of related code in a file to keep it organized:
+
+\begin{verbatim}    
+/*{{{ Many related functions */
+       
+void code()
+{
+    ...        
+}
+
+...
+
+/*}}}*/
+\end{verbatim}
+\end{itemize}
+
+I think that's mostly it. Study the source when in doubt.
diff --git a/de.tex b/de.tex
new file mode 100644 (file)
index 0000000..6c8c2b4
--- /dev/null
+++ b/de.tex
@@ -0,0 +1,388 @@
+
+\chapter{Graphical styles}
+\label{chap:gr}
+
+This chapter first gives in section \ref{sec:engines} a general outline 
+of how drawing engines are used, of style specifications and then
+in section \ref{sec:defaultde} describes how to specify styles
+for the default drawing engine.
+
+\section{Drawing engines, style specifications and sub-styles}
+\label{sec:engines}
+\index{style}\index{drawing engine}
+
+Ion's drawing routines are abstracted into so-called drawing engine
+modules that can, again depending on the system, be dynamically
+loaded as needed. The drawing engine modules provide ''brushes''
+that objects can use to draw some high-level primitives such
+as borders and text boxes (in addition to simple text and rectangle
+drawing) on their windows and configure e.g. the shape and 
+background of the window. While the drawing engines therefore
+do not directly implement looks for each possible object (that
+would hardly be maintainable), different brush styles can be
+used to give a distinctive look to different objects and engines
+could interpret some styles as special cases. Style specifications 
+are strings of the form
+
+\begin{verbatim}
+element1-element2-...-elementn
+\end{verbatim}
+
+An example of such a style specification is \code{tab-frame};
+see the table in subsection \ref{sec:styles} for more styles.
+
+When an object asks for a brush of certain style, the selected
+drawing engine will attempt to find the closest match to this
+specification. The styles/brushes defined by the drawing engines 
+may have asterisks (\verb!*!) as some of the elements indicating
+a match to anything. Exact matches are preferred to asterisk
+matches and longer matches to shorter. For example, let a brush
+for style \code{foo-bar-baz} be queried, then the following
+brushes are in order of preference:
+
+\begin{verbatim}
+foo-bar-baz
+foo-*-baz
+foo-bar
+*
+foo-baz   -- Doesn't match, not selected!
+\end{verbatim}
+
+Some of the drawing primitives allow extra attributes to be
+specified, also in the form
+\begin{verbatim}
+attr1-attr2-...-attrn
+\end{verbatim}
+These extra attributes are called \emph{substyles}\index{substyle}
+and allow, for example, the state of the object to be indicated 
+by  different colour sets while keeping the interface at an 
+abstract level and the drawing engine completely ignorant 
+of the semantics -- only the writer of the drawing engine
+configuration file has to know them. However the drawing 
+engine can again interpret known substyles as special cases
+and the default engine indeed does so with frame tab 
+tag and drag states.)
+
+
+\subsection{Known styles and substyles}
+\label{sec:styles}
+
+\subsubsection{Frames}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Style name & Description}
+\code{frame} & Style for frames. 
+       Substyles: \code{active}, \code{inactive}. \\
+\code{frame-tiled} & A more specific style for tiled frames.
+        Substyles as for \code{frame}. \\
+\code{frame-tiled-alt} & An alternative style for tiled frames.
+        Often used to disable the tab-bar. \\
+\code{frame-floating} & A more specific style for floating
+        frames. \\
+\code{frame-transient} & A more specific style for frames
+        containing transient windows. \\
+\end{tabularx}
+
+\subsubsection{Tabs and menu entries}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Style name & Description}
+\code{tab} & Style for frames' tabs and menu entries. 
+       Substyles: combinations of the form \code{a-s} where
+       \code{a} is one of \code{active}\nobreak/\code{inactive} and
+       \code{s} is one of \code{selected}\nobreak/\code{unselected} \\
+\code{tab-frame} & A more specific style for frames' tabs.
+       Substyles: combinations of the form \code{a-s-t-d-u} where
+       \code{a} and \code{s} are as above and
+       \code{t} is one of \code{tagged}\nobreak/\code{not_tagged},
+       \code{d} is one of \code{dragged}\nobreak/\code{not_dragged} and
+       \code{u} is one of \code{activity}\nobreak/\code{no_activity}. \\
+\code{tab-frame-tiled}, & \\
+\code{tab-frame-tiled-alt}, & \\
+\code{tab-frame-floating}, & \\
+\code{tab-frame-transient} & More specific styles for frames in the
+        different modes. \\
+\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. \\
+\code{tab-menuentry-bigmenu} & An alternate style for entries in \type{WMenu}s. \\
+\end{tabularx}
+
+\subsubsection{The rest}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Style name & Description}
+\code{input} & A style for \type{WInput}s. \\
+\code{input-edln} & A more specific style for \type{WEdln}s. 
+       Substyles: \code{selection} for selected text and
+       \code{cursor} for the cursor indicating current editing point. \\
+\code{input-message} & A more specific style for \type{WMessage}s. \\
+\code{input-menu} & A more specific style for \type{WMenu}s. \\
+\code{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\
+\code{moveres_display} & The box displaying position/size when
+       moving or resizing frames. \\
+\code{dock} & The dock. \\     
+\end{tabularx}
+
+
+\section{Defining styles for the default drawing engine}
+\label{sec:defaultde}
+
+Drawing engine style files are usually named
+\file{look\_foo.lua} where \file{foo} is the name of the
+style. The file that Ion loads on startup or when
+\fnref{gr.read_config} is called, however, is \file{look.lua}
+and should usually be symlinked to or a copy of of some
+\file{look\_foo.lua}.
+
+\subsection{The structure of the configuration files}
+
+The first thing to do in a stylefile is to choose the drawing
+engine, possibly loading the module as well. This is done
+with the following chunk of code.
+
+\begin{verbatim}
+if not gr.select_engine("de") then 
+    return 
+end
+\end{verbatim}
+
+The \fnref{gr.select_engine} function sees if the engine
+given as argument is registered (the default drawing engine is
+simply called ''de''). If the engine could not be found, it
+tries to load a module of the same name. If the engine still
+is not registered, \fnref{gr.select_engine} returns \code{false}
+and in this case we also exit the style setup script.
+If the engine was found, \fnref{gr.select_engine} sees that
+further requests for brushes are forwarded to that engine
+and returns \code{true}.
+
+Before defining new styles it may be a good idea to clear old
+styles from memory so if the old configuration defines more
+specific styles than the new, the old styles don't override 
+those specified by the new configuration. That can be done by
+calling
+
+\begin{verbatim}
+de.reset()
+\end{verbatim}
+
+After this the new styles can be defined with \fnref{de.defstyle}
+as explained in the next subsection. Finally, after the styles have
+been defined we must ask objects on the screen to look up new brushes
+to reflect the changes in configuration. This is done with
+
+\begin{verbatim}
+gr.refresh()
+\end{verbatim}
+
+\subsection{Defining the styles}
+
+Styles for the default drawing engine are defined with the
+function \fnref{de.defstyle}. It has two arguments the first being
+a style specification as explained in previous sections and the second
+a table whose fields describe the style:
+
+\begin{verbatim}
+de.defstyle("some-style", {
+    attribute = value,
+    ...
+})
+\end{verbatim}
+
+The supported attributes are described in tables below. The different
+border elements and styles referred to there are explained in Figure
+\ref{fig:borders}.
+
+\begin{figure}
+\begin{htmlonly}
+\docode % Kludge to make latex2html interpret contents instead of
+       % creating an image.
+\end{htmlonly}    
+\begin{verbatim}
+Elevated:        Inlaid:         Ridge:            Groove:        
+  hhhhhhhhhhhs     ............           hhhhhhhhhhhs      sssssssssssh
+  h..........s     .sssssssssh.           h..........s      s..........h
+  h.        .s     .s        h.           h.sssssssh.s      s.hhhhhhhs.h
+  h.        .s     .s        h.           h.s      h.s      s.h      s.h
+  h.        .s     .s        h.           h.shhhhhhh.s      s.hsssssss.h
+  h..........s     .shhhhhhhhh.           h..........s      s..........h
+  hsssssssssss     ............           hsssssssssss      shhhhhhhhhhh
+
+h = highlight, s = shadow, . = padding
+\end{verbatim}
+\caption{Sketch of different border styles and elements}
+\label{fig:borders}
+\end{figure}
+
+\subsubsection{Colours}
+
+Each of these fields a string of the form that can be
+passed to \code{XAllocNamedColor}. Valid strings are e.g.
+hexadecimal RGB specifications of the form
+\code{#RRGGBB} and colour names as specified
+in \file{/usr/X11R6/lib/X11/rgb.txt} (exact path varying).
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\var{highlight_colour} &  
+       Colour for the ''highlight'' part of a border. \\
+\var{shadow_colour}    &  
+       Colour for the ''highlight'' part of a border. \\
+\var{foreground_colour} &  
+       Colour for the normal drawing operations, e.g. text. \\
+\var{background_colour} &  
+       Window background colour (unless transparency is enabled) and
+       background colour boxes. \\
+\var{padding_colour} &  
+       Colour for the ''padding'' part of a border border. Set to 
+       \var{background_colour} if unset. \\
+\end{tabularx}
+
+
+\subsubsection{Borders and widths}
+
+All other fields below except \var{border_style} are non-negative integers
+indicating a number of pixels.
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\var{border_style} & A string indicating the style of border; one of
+                    elevated/inlaid/ridge/groove as seen in the
+                    above sketch. \\
+\var{highlight_pixels} &  
+       Width of the highlight part of the border in pixels. \\
+\var{shadow_pixels}    &  
+       Width of the shadow part of the border in pixels. \\
+\var{padding_pixels} &  
+       Width of the padding part of the border in pixels. \\
+\var{spacing} &
+       Space to be left between all kinds of boxes. \\
+\end{tabularx}
+
+
+\subsubsection{Text}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\var{font} & Font to be used in text-drawing operations; standard X font
+            name. \\
+\var{text_align} & How text is to be aligned in text boxes/tabs; one of
+                  the strings left\nobreak/right\nobreak/center. \\
+\end{tabularx}
+
+
+\subsubsection{Miscellaneous}
+
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\var{transparent_background} & Should windows' that use this style
+       background be transparent? true/false. \\
+\var{based_on} & The name of a previously defined style that this
+       style should be based on. \\
+\end{tabularx}
+
+
+\subsubsection{Substyles}
+
+As discussed in previous sections, styles may have substyles to e.g.
+indicate different states of the object being drawn. The ''de'' engine
+limits what can be configured in substyles to the set of colours in the
+first table above, but also specifically interprets for the main style
+\code{tab-frame} the substyles \code{*-*-tagged} and \code{*-*-*-dragged}
+by, respectively, drawing a right angle shape at the top right corner 
+of a tab and by shading the tab with a stipple pattern. Also for
+menus the substyles \code{*-*-submenu} are handled as a special case.
+
+Substyles are defined with the function \fnref{de.substyle} within the
+table defining the main style. The parameters to this function are 
+similar to those of \fnref{de.defstyle}.
+
+\begin{verbatim}
+de.defstyle("some-style", {
+   ...
+   de.substyle("some-substyle", {
+      ...
+   }),
+   ...
+})
+\end{verbatim}
+
+
+\subsection{An example}
+
+The following shortened segment from \file{look\_cleanviolet.lua}
+should help to clarify the matters discussed in the previous
+subsection.
+
+\begin{verbatim}
+de.defstyle("*", {
+    -- Gray background
+    highlight_colour = "#eeeeee",
+    shadow_colour = "#eeeeee",
+    background_colour = "#aaaaaa",
+    foreground_colour = "#000000",
+    
+    shadow_pixels = 1,
+    highlight_pixels = 1,
+    padding_pixels = 1,
+    spacing = 0,
+    border_style = "elevated",
+    
+    font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
+    text_align = "center",
+})
+
+de.defstyle("tab-frame", {
+    based_on = "*",
+    
+    de.substyle("active-selected", {
+        -- Violet tab
+        highlight_colour = "#aaaacc",
+        shadow_colour = "#aaaacc",
+        background_colour = "#666699",
+        foreground_colour = "#eeeeee",
+    }),
+
+    --  More substyles would follow ...
+})
+\end{verbatim}
+
+
+\section{Miscellaneous settings}
+
+The following style fields are independent of the drawing engine used,
+but are related to objects' styles and therefore configured in the drawing
+engine configuration file.
+
+\subsection{Extra fields for style \code{frame}}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\code{bar} & Controls the style of the tab-bar. Possible values
+        are the strings \code{"none"}, \code{"inside"}, \code{"outside"}
+        and \code{"shaped"}, with the last providing the PWM-style
+        tab-bars for floating frames. \\
+\code{floatframe_tab_min_w} & Minimum tab width in pixels for
+        the shaped style, given that this number times number of tabs
+        doesn't exceed frame width. \\
+\code{floatframe_bar_max_w_q} & Maximum tab-bar width quotient of
+       frame width for the shaped styles. A number in the 
+       interval $(0, 1]$.
+\end{tabularx}
+
+\subsection{Extra fields for style \code{dock}}
+
+\begin{tabularx}{\linewidth}{lX}
+\tabhead{Field  & Description}
+\code{outline_style} & How borders are drawn:
+                       \code{"none"} -- no border,
+                       \code{"all"} -- border around whole dock,
+                       \code{"each"} -- border around each dockapp. \\
+\code{tile_size} & A table with entries \code{width} and \code{height},
+       indicating the width and height of tiles in pixels.
+\end{tabularx}
+
+
+Hopefully that's enough to get you started in writing new style
+configuration files for Ion. When in doubt, study the existing
+style configuration files.
diff --git a/designnotes.tex b/designnotes.tex
new file mode 100644 (file)
index 0000000..4bb6485
--- /dev/null
@@ -0,0 +1,54 @@
+\section{Miscellaneous design notes}
+
+\subsection{Destroying \type{WObj}:s}
+
+To keep Ion's code as simple as possible yet safe, there are restrictions
+when the \type{WObj}
+\code{destroy_obj}\index{destroy-obj@\code{destroy_obj}}
+function that calls watches, the deinit routine and frees memory may
+be called directly. In all other cases the 
+\code{defer_destroy}\index{defer-destroy@\code{defer_destroy}}
+function should be used to defer the call of \code{destroy_obj} until
+Ioncore returns to its main event loop. 
+
+Calling the \code{destroy_obj} function directly is allowed in the
+following cases:
+\begin{itemize}
+    \item In the deinit handler for another object. Usually managed objects
+      are destroyed this way.
+    \item The object was created during the current call to the function
+      that wants to get rid of the object. This is the case, for example,
+      when the function created a frame to manage some other object but for
+      some reason failed to reparent the object to this frame.
+    \item In a deferred action handler set with
+      \code{defer_action}\index{defer-action@\code{defer_action}}.
+      Like deferred destroys, other deferred actions are called when
+      Ioncore has returned to the main loop.
+    \item You are absolute sure that C code outside your code has no
+      references to the object.
+\end{itemize}
+
+If there are no serious side effects from deferring destroying the
+object or you're unsure whether it is safe to destroy the object
+immediately, use \code{defer_destroy}.
+
+\subsection{The types \code{char*} and \code{const char*} as function
+  parameters and return values}
+
+The following rules should apply to using strings as return values and
+parameters to functions. 
+
+\begin{tabularx}{\linewidth}{lXX}
+    \tabhead{Type & Return value & Parameter}
+    \code{const char*} & The string is owned by the called function
+       and the caller is only quaranteed short-term read access to the
+       string. &
+       The called function may only read the string during its execution.
+       For further reference a copy must be made. \\
+    \code{char*} & The string is the caller's responsibility and it
+       \emph{must} free it when no longer needed. &
+       The called function may modify the string but the ''owner'' of
+       the string is case-dependant. \\
+\end{tabularx}
+
+
diff --git a/exact-version b/exact-version
new file mode 100644 (file)
index 0000000..0413a6b
--- /dev/null
@@ -0,0 +1,5 @@
+
+Context:
+
+[TAG ion-doc-3ds-20061223
+Tuomo Valkonen <tuomov@iki.fi>**20061223150012] 
diff --git a/fnref.tex b/fnref.tex
new file mode 100644 (file)
index 0000000..c270a5a
--- /dev/null
+++ b/fnref.tex
@@ -0,0 +1,38 @@
+\chapter{Function reference}
+\label{sec:exports}
+
+\section{Functions defined in \file{ioncore}}
+\label{sec:ioncoreref}
+\input{ioncore-fns.tex}
+
+\section{Functions defined in \file{mod\_tiling}}
+\label{sec:tilingref}
+\input{mod_tiling-fns.tex}
+
+%\section{Functions defined in \file{mod\_panews}}
+%\label{sec:panewsref}
+%\input{mod_panews-fns.tex}
+
+\section{Functions defined in \file{mod\_query}}
+\label{sec:queryref}
+\input{mod_query-fns.tex}
+
+\section{Functions defined in \file{mod\_menu}}
+\label{sec:menuref}
+\input{mod_menu-fns.tex}
+
+\section{Functions defined in \file{mod\_dock}}
+\label{sec:dockref}
+\input{mod_dock-fns.tex}
+
+\section{Functions defined in \file{mod\_sp}}
+\label{sec:spref}
+\input{mod_sp-fns.tex}
+
+\section{Functions defined in \file{de}}
+\label{sec:deref}
+\input{de-fns.tex}
+
+\section{Hooks}
+\label{sec:hookref}
+\input{hookref}
diff --git a/fullhierarchy.tex b/fullhierarchy.tex
new file mode 100644 (file)
index 0000000..d5d5a39
--- /dev/null
@@ -0,0 +1,43 @@
+\chapter{Full class hierarchy visible to Lua-side}
+\label{app:fullhierarchy}
+  
+%\begin{figure}
+%\begin{htmlonly}
+%\docode % latex2html kludge
+%\end{htmlonly}
+{\small
+\begin{verbatim}
+    Obj
+     |-->WHook
+     |-->WTimer
+     |-->WMoveresMode
+     |-->WMgmtMode (mod_mgmtmode)
+     |-->WRegion
+     |    |-->WClientWin
+     |    |-->WWindow
+     |    |    |-->WRootWin
+     |    |    |-->WMPlex
+     |    |    |    |-->WScreen
+     |    |    |    |-->WFrame
+     |    |    |-->WInfoWin
+     |    |    |    |-->WStatusBar (mod_statusbar)
+     |    |    |-->WMenu (mod_menu)
+     |    |    |-->WInput (mod_query)
+     |    |         |-->WEdln (mod_query)
+     |    |         |-->WMessage (mod_query)
+     |    |-->WGroup
+     |    |    |-->WGroupWS
+     |    |    |-->WGroupCW
+     |    |-->WTiling (mod_tiling)
+     |-->WSplit (mod_tiling)
+          |-->WSplitInner (mod_tiling)
+          |    |-->WSplitSplit (mod_tiling)
+          |         |-->WSplitFloat (mod_tiling)
+          |-->WSplitRegion (mod_tiling)
+               |-->WSplitST (mod_tiling)
+\end{verbatim}
+}
+%\caption{Full Ioncore and most common modules' class hierarchy
+%  visible to Lua side.}
+%\label{fig:fullclasshierarchy}
+%\end{figure}
diff --git a/gpl.tex b/gpl.tex
new file mode 100644 (file)
index 0000000..d4de1de
--- /dev/null
+++ b/gpl.tex
@@ -0,0 +1,416 @@
+\xchapter{The GNU General Public License}
+
+\begin{center}
+{\parindent 0in
+
+Version 2, June 1991
+
+Copyright \copyright\ 1989, 1991 Free Software Foundation, Inc.
+
+\bigskip
+
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+\bigskip
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+}
+\end{center}
+
+\begin{center}
+{\bf\large Preamble}
+\end{center}
+
+
+The licenses for most software are designed to take away your freedom to
+share and change it.  By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software---to
+make sure the software is free for all its users.  This General Public
+License applies to most of the Free Software Foundation's software and to
+any other program whose authors commit to using it.  (Some other Free
+Software Foundation software is covered by the GNU Library General Public
+License instead.)  You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.
+Our General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service
+if you wish), that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free programs;
+and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights.  These
+restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have.  You
+must make sure that they, too, receive or can get the source code.  And
+you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If
+the software is modified by someone else and passed on, we want its
+recipients to know that what they have is not the original, so that any
+problems introduced by others will not reflect on the original authors'
+reputations.
+
+Finally, any free program is threatened constantly by software patents.
+We wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program
+proprietary.  To prevent this, we have made it clear that any patent must
+be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+\begin{center}
+{\Large \sc Terms and Conditions For Copying, Distribution and
+  Modification}
+\end{center}
+
+
+%\renewcommand{\theenumi}{\alpha{enumi}}
+\begin{enumerate}
+
+\addtocounter{enumi}{-1}
+
+\item 
+
+This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the
+terms of this General Public License.  The ``Program'', below, refers to
+any such program or work, and a ``work based on the Program'' means either
+the Program or any derivative work under copyright law: that is to say, a
+work containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language.  (Hereinafter,
+translation is included without limitation in the term ``modification''.)
+Each licensee is addressed as ``you''.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+\item You may copy and distribute verbatim copies of the Program's source
+  code as you receive it, in any medium, provided that you conspicuously
+  and appropriately publish on each copy an appropriate copyright notice
+  and disclaimer of warranty; keep intact all the notices that refer to
+  this License and to the absence of any warranty; and give any other
+  recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+\item
+
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+\begin{enumerate}
+
+\item 
+
+You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+\item
+
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+\item
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License.  (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+
+\end{enumerate}
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+\item
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+\begin{enumerate}
+
+\item
+
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+\item
+
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+\item
+
+Accompany it with the information you received as to the offer
+to distribute corresponding source code.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+
+\end{enumerate}
+
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+\item
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+\item
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+\item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+\item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+\item
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+\item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+\item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+\begin{center}
+{\Large\sc
+No Warranty
+}
+\end{center}
+
+\item
+{\sc Because the program is licensed free of charge, there is no warranty
+for the program, to the extent permitted by applicable law.  Except when
+otherwise stated in writing the copyright holders and/or other parties
+provide the program ``as is'' without warranty of any kind, either expressed
+or implied, including, but not limited to, the implied warranties of
+merchantability and fitness for a particular purpose.  The entire risk as
+to the quality and performance of the program is with you.  Should the
+program prove defective, you assume the cost of all necessary servicing,
+repair or correction.}
+
+\item
+{\sc In no event unless required by applicable law or agreed to in writing
+will any copyright holder, or any other party who may modify and/or
+redistribute the program as permitted above, be liable to you for damages,
+including any general, special, incidental or consequential damages arising
+out of the use or inability to use the program (including but not limited
+to loss of data or data being rendered inaccurate or losses sustained by
+you or third parties or a failure of the program to operate with any other
+programs), even if such holder or other party has been advised of the
+possibility of such damages.}
+
+\end{enumerate}
+
+
+\begin{center}
+{\Large\sc End of Terms and Conditions}
+\end{center}
+
+
+\pagebreak[2]
+
+\xsectionstar{Appendix: How to Apply These Terms to Your New Programs}
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+  To do so, attach the following notices to the program.  It is safest to
+  attach them to the start of each source file to most effectively convey
+  the exclusion of warranty; and each file should have at least the
+  ``copyright'' line and a pointer to where the full notice is found.
+
+\begin{quote}
+one line to give the program's name and a brief idea of what it does. \\
+Copyright (C) yyyy  name of author \\
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+\end{quote}
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+\begin{quote}
+Gnomovision version 69, Copyright (C) yyyy  name of author \\
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+\end{quote}
+
+
+The hypothetical commands {\tt show w} and {\tt show c} should show the
+appropriate parts of the General Public License.  Of course, the commands
+you use may be called something other than {\tt show w} and {\tt show c};
+they could even be mouse-clicks or menu items---whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary.  Here is a sample; alter the names:
+
+\begin{quote}
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\
+`Gnomovision' (which makes passes at compilers) written by James Hacker. \\
+
+signature of Ty Coon, 1 April 1989 \\
+Ty Coon, President of Vice
+\end{quote}
+
+
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications
+with the library.  If this is what you want to do, use the GNU Library
+General Public License instead of this License.
diff --git a/hookref.tex b/hookref.tex
new file mode 100644 (file)
index 0000000..f4f2a9e
--- /dev/null
@@ -0,0 +1,241 @@
+
+\begin{function}
+    \index{clientwin-do-manage-alt@\code{clientwin_do_manage_alt}}
+    \hookname{clientwin_do_manage_alt}
+    \hookparams{(WClientWin, table)}
+    \begin{funcdesc}
+      Called when we want to manage a new client window.
+      The table argument contains the following fields:
+      
+      \begin{tabularx}{\linewidth}{llX}
+          \tabhead{Field & Type & Description}
+          \var{switchto} & bool & Do we want to switch to the client window. \\
+          \var{jumpto} & bool & Do we want to jump to the client window. \\
+          \var{userpos} & bool & Geometry set by user. \\
+          \var{dockapp} & bool & Client window is a dockapp. \\
+          \var{maprq} & bool & Map request (and not initialisation scan). \\
+          \var{gravity} & number & Window gravity. \\
+          \var{geom} & table & Requested geometry; \var{x}, \var{y}, \var{w}, \var{h}.\\
+          \var{tfor} & WClientWin & Transient for window.
+      \end{tabularx}
+
+      This hook is not called in protected mode and can be used for
+      arbitrary placement policies (deciding in which workspace a new
+      \type{WClientWin} should go). In this case, you can call
+\begin{verbatim}
+reg:attach(cwin)
+\end{verbatim}
+      where \var{reg} is the region where the window should go, and
+      \var{cwin} is the first argument of the function added to the
+      hook.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{clientwin-mapped-hook@\code{clientwin_mapped_hook}}
+    \hookname{clientwin_mapped_hook}
+    \hookparams{WClientWin}
+    \begin{funcdesc}
+      Called when we have started to manage a client window.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{clientwin-unmapped-hook@\code{clientwin_unmapped_hook}}
+    \hookname{clientwin_unmapped_hook}
+    \hookparams{number}
+    \begin{funcdesc}
+      Called when we no longer manage a client window. The parameter
+      is the X ID of the window; see \fnref{WClientWin.xid}.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{frame-managed-changed-hook@\code{frame_managed_changed_hook}}
+    \hookname{frame_managed_changed_hook}
+    \hookparams{table}
+    \begin{funcdesc}
+      Called when there are changes in the objects managed by a frame
+      or their order. The table parameter has the following fields:
+
+      \begin{tabularx}{\linewidth}{llX}
+          \tabhead{Field & Type & Description}
+          \var{reg} & WFrame & The frame in question \\
+          \var{mode} & string & \var{"switchonly"}, \var{"reorder"},
+                                \var{"add"} or \var{"remove"} \\
+          \var{sw} & bool & Switch occured \\
+          \var{sub} & WRegion & The managed region (primarily) affected \\
+      \end{tabularx}
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{ioncore-sigchld-hook@\code{ioncore_sigchld_hook}}
+    \hookname{ioncore_sigchld_hook}
+    \hookparams{integer}
+    \begin{funcdesc}
+      Called when a child process has exited. The parameter
+      is the PID of the process.
+    \end{funcdesc}
+\end{function}
+
+\begin{function}
+    \index{ioncore-deinit-hook@\code{ioncore_deinit_hook}}
+    \hookname{ioncore_deinit_hook}
+    \hookparams{()}
+    \begin{funcdesc}
+      Called when Ion is deinitialising and about to quit.
+    \end{funcdesc}
+\end{function}
+
+%ioncore_handle_event_alt -- not available to lua side
+
+\begin{function}
+    \index{ioncore-post-layout-setup-hook@\code{ioncore_post_layout_setup_hook}}
+    \hookname{ioncore_post_layout_setup_hook}
+    \hookparams{()}
+    \begin{funcdesc}
+      Called when Ion has done all initialisation and is almost ready to
+      enter the mainloop, except no windows are yet being managed.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{ioncore-snapshot-hook@\code{ioncore_snapshot_hook}}
+    \hookname{ioncore_snapshot_hook}
+    \hookparams{()}
+    \begin{funcdesc}
+      Called to signal scripts and modules to save their state (if any).
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{tiling-placement-alt@\code{tiling_placement_alt}}
+    \hookname{tiling_placement_alt}
+    \hookparams{table}
+    \begin{funcdesc}
+      Called when a client window is about to be managed by a \type{WTiling}
+      to allow for alternative placement policies. The table has the
+      following fields:
+      \begin{tabularx}{\linewidth}{llX}
+          \tabhead{Field & Type & Description}
+          \var{tiling} & \type{WTiling} & The tiling \\
+          \var{reg} & \type{WRegion} & The region (always a WClientWin at 
+              the moment) to be placed \\
+          \var{mp} & \type{table} & This table contains the same fields as
+            the parameter of \fnref{clientwin_do_manage_alt} \\
+          \var{res_frame} & \type{WFrame} & A succesfull handler should 
+            return the target frame here. \\
+      \end{tabularx}
+      This hook is just for placing within a given workspace after the
+      workspace has been decided by the default workspace selection
+      policy. It is called in protected mode. For arbitrary placement
+      policies, \fnref{clientwin_do_manage_alt} should be used; it
+      isn't called in protected mode,
+    \end{funcdesc}
+\end{function}
+
+
+%\begin{function}
+%    \index{panews-init-layout-alt@\code{panews_init_layout_alt}}
+%    \hookname{panews_init_layout_alt}
+%    \hookparams{table}
+%    \begin{funcdesc}
+%      Called to initialise panews layout. The table parameter has
+%      initially a single field \var{ws} pointing to the workspace,
+%      but the succesfull handler should set the field \var{layout}
+%      to a proper layout (as those saved in the layout savefiles).
+%    \end{funcdesc}
+%\end{function}
+
+
+\begin{function}
+    \index{panews-make-placement-alt@\code{panews_make_placement_alt}}
+    \hookname{panews_make_placement_alt}
+    \hookparams{table}
+    \begin{funcdesc}
+      Called to make a placement on panews. The parameter table has
+      the following fields:
+      
+      \begin{tabularx}{\linewidth}{llX}
+          \tabhead{Field & Type & Description}
+          \var{ws} & \type{WPaneWS} & The workspace \\
+          \var{frame} & \type{WFrame} & A frame initially allocated for the
+              region to be placed \\
+          \var{reg} & \type{WRegion} & The region to be placed \\
+          \var{specifier} & \type{WRegion} & For drag\&drop on handling empty areas\\
+      \end{tabularx}
+      
+      The handler should set some of these fields on success:
+
+      \begin{tabularx}{\linewidth}{llX}
+          \tabhead{Field & Type & Description}
+          \var{res_node} & \type{WSplit} & Target split \\
+          \var{res_config} & \type{WFrame} &  New configuration for it, unless
+              \type{WSplitRegion} \\
+          \var{res_w} & integer & New width for target split (optional) \\
+          \var{res_h} & integer & New height for target split (optional) \\
+      \end{tabularx}
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{region-activated-hook@\code{region_activated_hook}}
+    \hookname{region_activated_hook}
+    \hookparams{WRegion}
+    \begin{funcdesc}
+      Signalled when a region or one of its children has received the focus.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{region-activity-hook@\code{region_activity_hook}}
+    \hookname{region_activity_hook}
+    \hookparams{WRegion}
+    \begin{funcdesc}
+      This hook is triggered when the activity flag of the parameter 
+      region has been changed.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{region-do-warp-alt@\code{region_do_warp_alt}}
+    \hookname{region_do_warp_alt}
+    \hookparams{WRegion}
+    \begin{funcdesc}
+      This alt-hook exist to allow for alternative pointer warping
+      implementations.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{region-inactivated-hook@\code{region_inactivated_hook}}
+    \hookname{region_inactivated_hook}
+    \hookparams{WRegion}
+    \begin{funcdesc}
+      Signalled when the focus has moved from the parameter region or
+      one of its children to a non-child region of the parameter region.
+    \end{funcdesc}
+\end{function}
+
+
+\begin{function}
+    \index{screen-managed-changed-hook@\code{screen_managed_changed_hook}}
+    \hookname{screen_managed_changed_hook}
+    \hookparams{table}
+    \begin{funcdesc}
+      Called when there are changes in the objects managed by a screen
+      or their order. The table parameter is similar to that of
+      \fnref{frame_managed_changed_hook}.
+    \end{funcdesc}
+\end{function}
diff --git a/ionconf.dvi.gz b/ionconf.dvi.gz
new file mode 100644 (file)
index 0000000..905ef66
Binary files /dev/null and b/ionconf.dvi.gz differ
diff --git a/ionconf.out b/ionconf.out
new file mode 100644 (file)
index 0000000..060a02d
--- /dev/null
@@ -0,0 +1,82 @@
+\BOOKMARK [0][-]{chapter.1}{ Introduction}{}
+\BOOKMARK [0][-]{chapter.2}{ Preliminaries: Key concepts and relations}{}
+\BOOKMARK [1][-]{section.2.1}{ Modules}{chapter.2}
+\BOOKMARK [1][-]{section.2.2}{ Class and object hierarchies}{chapter.2}
+\BOOKMARK [2][-]{subsection.2.2.1}{ Class hierarchy}{section.2.2}
+\BOOKMARK [2][-]{subsection.2.2.2}{ Object hierarchies: WRegion parents and managers}{section.2.2}
+\BOOKMARK [2][-]{subsection.2.2.3}{ Summary}{section.2.2}
+\BOOKMARK [0][-]{chapter.3}{ Basic configuration}{}
+\BOOKMARK [1][-]{section.3.1}{ The configuration files}{chapter.3}
+\BOOKMARK [1][-]{section.3.2}{ A walk through cfg\137ion.lua}{chapter.3}
+\BOOKMARK [1][-]{section.3.3}{ Keys and rodents}{chapter.3}
+\BOOKMARK [2][-]{subsection.3.3.1}{ Binding handlers and special variables}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.2}{ Guards}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.3}{ Defining the bindings}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.4}{ Examples}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.5}{ Key specifications}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.6}{ Button specifications}{section.3.3}
+\BOOKMARK [2][-]{subsection.3.3.7}{ A further note on the default binding configuration}{section.3.3}
+\BOOKMARK [1][-]{section.3.4}{ Menus}{chapter.3}
+\BOOKMARK [2][-]{subsection.3.4.1}{ Defining menus}{section.3.4}
+\BOOKMARK [2][-]{subsection.3.4.2}{ Special menus}{section.3.4}
+\BOOKMARK [2][-]{subsection.3.4.3}{ Defining context menus}{section.3.4}
+\BOOKMARK [2][-]{subsection.3.4.4}{ Displaying menus}{section.3.4}
+\BOOKMARK [1][-]{section.3.5}{ Winprops}{chapter.3}
+\BOOKMARK [2][-]{subsection.3.5.1}{ Classes, roles and instances}{section.3.5}
+\BOOKMARK [2][-]{subsection.3.5.2}{ Finding window identification}{section.3.5}
+\BOOKMARK [2][-]{subsection.3.5.3}{ Some common examples}{section.3.5}
+\BOOKMARK [0][-]{chapter.4}{ Graphical styles}{}
+\BOOKMARK [1][-]{section.4.1}{ Drawing engines, style specifications and sub-styles}{chapter.4}
+\BOOKMARK [2][-]{subsection.4.1.1}{ Known styles and substyles}{section.4.1}
+\BOOKMARK [1][-]{section.4.2}{ Defining styles for the default drawing engine}{chapter.4}
+\BOOKMARK [2][-]{subsection.4.2.1}{ The structure of the configuration files}{section.4.2}
+\BOOKMARK [2][-]{subsection.4.2.2}{ Defining the styles}{section.4.2}
+\BOOKMARK [2][-]{subsection.4.2.3}{ An example}{section.4.2}
+\BOOKMARK [1][-]{section.4.3}{ Miscellaneous settings}{chapter.4}
+\BOOKMARK [2][-]{lstlisting.4.-385}{ Extra fields for style !frame!}{section.4.3}
+\BOOKMARK [2][-]{lstlisting.4.-407}{ Extra fields for style !dock!}{section.4.3}
+\BOOKMARK [0][-]{chapter.5}{ Scripting}{}
+\BOOKMARK [1][-]{section.5.1}{ Hooks}{chapter.5}
+\BOOKMARK [1][-]{section.5.2}{ Referring to regions}{chapter.5}
+\BOOKMARK [2][-]{subsection.5.2.1}{ Direct object references}{section.5.2}
+\BOOKMARK [2][-]{subsection.5.2.2}{ Name-based lookups}{section.5.2}
+\BOOKMARK [1][-]{section.5.3}{ Alternative winprop selection criteria}{chapter.5}
+\BOOKMARK [1][-]{lstlisting.5.-448}{ Writing !ion-statusd! monitors}{chapter.5}
+\BOOKMARK [0][-]{chapter.6}{ Function reference}{}
+\BOOKMARK [1][-]{section.6.1}{ Functions defined in ioncore}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.1.1}{ WClientWin functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.2}{ WFrame functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.3}{ WGroup functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.4}{ WGroupCW functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.5}{ WGroupWS functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.6}{ WInfoWin functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.7}{ WMPlex functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.8}{ WMoveresMode functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.9}{ WRegion functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.10}{ WRootWin functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.11}{ WScreen functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.12}{ WWindow functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.13}{ global functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.14}{ gr functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.15}{ string functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.16}{ table functions}{section.6.1}
+\BOOKMARK [1][-]{section.6.2}{ Functions defined in mod\137tiling}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.2.1}{ WSplit functions}{section.6.2}
+\BOOKMARK [2][-]{subsection.6.2.2}{ WSplitInner functions}{section.6.2}
+\BOOKMARK [2][-]{subsection.6.2.3}{ WSplitRegion functions}{section.6.2}
+\BOOKMARK [2][-]{subsection.6.2.4}{ WSplitSplit functions}{section.6.2}
+\BOOKMARK [2][-]{subsection.6.2.5}{ WTiling functions}{section.6.2}
+\BOOKMARK [1][-]{section.6.3}{ Functions defined in mod\137query}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.3.1}{ WComplProxy functions}{section.6.3}
+\BOOKMARK [2][-]{subsection.6.3.2}{ WEdln functions}{section.6.3}
+\BOOKMARK [2][-]{subsection.6.3.3}{ WInput functions}{section.6.3}
+\BOOKMARK [1][-]{section.6.4}{ Functions defined in mod\137menu}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.4.1}{ WMenu functions}{section.6.4}
+\BOOKMARK [1][-]{section.6.5}{ Functions defined in mod\137dock}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.5.1}{ WDock functions}{section.6.5}
+\BOOKMARK [1][-]{section.6.6}{ Functions defined in mod\137sp}{chapter.6}
+\BOOKMARK [1][-]{section.6.7}{ Functions defined in de}{chapter.6}
+\BOOKMARK [1][-]{section.6.8}{ Hooks}{chapter.6}
+\BOOKMARK [0][-]{appendix.A}{ The GNU General Public License}{}
+\BOOKMARK [0][-]{appendix.B}{ Full class hierarchy visible to Lua-side}{}
+\BOOKMARK [0][-]{section*.17}{Index}{}
diff --git a/ionconf.ps.gz b/ionconf.ps.gz
new file mode 100644 (file)
index 0000000..055828e
Binary files /dev/null and b/ionconf.ps.gz differ
diff --git a/ionconf.tex b/ionconf.tex
new file mode 100644 (file)
index 0000000..9dd71c8
--- /dev/null
@@ -0,0 +1,73 @@
+\documentclass[english,a4paper,11pt,oldtoc,mctitle]{rapport3}
+\input{macros}
+
+% For including some files from articles
+\newcommand{\xchapter}[1]{\chapter{#1}}
+\newcommand{\xsection}[1]{\section{#1}}
+\newcommand{\xsectionstar}[1]{\section*{#1}}
+\newcommand{\xsubsection}[1]{\subsection{#1}}
+
+
+\title{Configuring and extending Ion3 with Lua}
+\author{Tuomo Valkonen \\ tuomov at iki.fi}
+\date{2006-12-23}
+
+\makeindex
+
+
+\begin{document}
+
+\maketitle
+
+Configuring and extending Ion3 with Lua\\
+Copyright \copyright\  2003--2005 Tuomo Valkonen.
+
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+chapter entitled ''GNU General Public License'' for more details.
+
+\tableofcontents
+
+\input{confintro}
+
+\input{prelim}
+
+\input{conf}
+
+\input{de}
+
+\input{tricks}
+
+\input{fnref}
+
+\appendix
+
+\input{gpl}
+
+\input{fullhierarchy}
+
+\chapter*{List of functions}
+\markboth{\MakeUppercase{List of functions}}%
+         {\MakeUppercase{List of functions}}%
+
+%begin{latexonly}
+\makeatletter
+\def\fnlisti#1{\@dottedtocline{1}{0em}{1.5em}{\lstinline!#1!}{\pageref{fn:#1}}}
+{\parskip\z@\input{fnlist}}
+\makeatother
+%end{latexonly}
+
+\begin{htmlonly}
+\newcommand{\fnlisti}[1]{\fnref{#1}\\}
+\input{fnlist}
+\end{htmlonly}
+
+\printindex
+
+\end{document}
diff --git a/ionconf/WARNINGS b/ionconf/WARNINGS
new file mode 100644 (file)
index 0000000..726c0ef
--- /dev/null
@@ -0,0 +1,8 @@
+No implementation found for style `hyperref'
+No implementation found for style `ae'
+No implementation found for style `url'
+No implementation found for style `tocbibind'
+No implementation found for style `geometry'
+No implementation found for style `calc'
+
+Substitution of arg to newlabelxx delayed.
diff --git a/ionconf/contents.png b/ionconf/contents.png
new file mode 100644 (file)
index 0000000..0c752c6
Binary files /dev/null and b/ionconf/contents.png differ
diff --git a/ionconf/images.aux b/ionconf/images.aux
new file mode 100644 (file)
index 0000000..3b687b9
--- /dev/null
@@ -0,0 +1,19 @@
+\relax 
+\ifx\hyper@anchor\@undefined
+\global \let \oldcontentsline\contentsline
+\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global \let \oldnewlabel\newlabel
+\gdef \newlabel#1#2{\newlabelxx{#1}#2}
+\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\let \contentsline\oldcontentsline
+\let \newlabel\oldnewlabel}
+\else
+\global \let \hyper@last\relax 
+\fi
+
+\select@language{english}
+\@writefile{toc}{\select@language{english}}
+\@writefile{lof}{\select@language{english}}
+\@writefile{lot}{\select@language{english}}
+\@ifundefined{unitindent}{\newdimen\unitindent\let \@indentset\relax }{}
+\global \unitindent=38.41783pt\relax\@indentset\relax
diff --git a/ionconf/images.idx b/ionconf/images.idx
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/images.log b/ionconf/images.log
new file mode 100644 (file)
index 0000000..952589a
--- /dev/null
@@ -0,0 +1,396 @@
+This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2006.11.18)  23 DEC 2006 17:03
+entering extended mode
+**./images.tex
+(./images.tex
+LaTeX2e <2003/12/01>
+Babel <v3.8d> and hyphenation patterns for american, french, german, ngerman, b
+ahasa, basque, bulgarian, catalan, croatian, czech, danish, dutch, esperanto, e
+stonian, finnish, greek, icelandic, irish, italian, latin, magyar, norsk, polis
+h, portuges, romanian, russian, serbian, slovak, slovene, spanish, swedish, tur
+kish, ukrainian, nohyphenation, loaded.
+
+(/usr/share/texmf-tetex/tex/latex/ntgclass/rapport3.cls
+Document Class: rapport3 2004/06/07 v2.1a NTG LaTeX document class
+(/usr/share/texmf-tetex/tex/latex/ntgclass/ntg11.clo
+File: ntg11.clo 2004/06/07 v2.1a NTG LaTeX file (size option)
+)
+\unitindent=\dimen102
+\othermargin=\dimen103
+\c@part=\count79
+\c@chapter=\count80
+\c@section=\count81
+\c@subsection=\count82
+\c@subsubsection=\count83
+\c@paragraph=\count84
+\c@subparagraph=\count85
+\c@figure=\count86
+\c@table=\count87
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+LaTeX Info: Redefining \em on input line 826.
+\bibindent=\dimen104
+) (/usr/share/texmf-tetex/tex/latex/base/ifthen.sty
+Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
+) (/usr/share/texmf-tetex/tex/generic/babel/babel.sty
+Package: babel 2004/11/20 v3.8d The Babel package
+(/usr/share/texmf-tetex/tex/generic/babel/english.ldf
+Language: english 2004/06/14 v3.3o English support from the babel system
+(/usr/share/texmf-tetex/tex/generic/babel/babel.def
+File: babel.def 2004/11/20 v3.8d Babel common definitions
+\babel@savecnt=\count88
+\U@D=\dimen105
+)
+\l@british = a dialect from \language\l@english 
+\l@UKenglish = a dialect from \language\l@english 
+\l@canadian = a dialect from \language\l@american 
+\l@australian = a dialect from \language\l@british 
+\l@newzealand = a dialect from \language\l@british 
+)) (/usr/share/texmf-tetex/tex/latex/base/inputenc.sty
+Package: inputenc 2004/02/05 v1.0d Input encoding file
+(/usr/share/texmf-tetex/tex/latex/base/latin1.def
+File: latin1.def 2004/02/05 v1.0d Input encoding file
+)) (/usr/share/texmf-tetex/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2003/11/30 v6.74m Hypertext links for LaTeX
+(/usr/share/texmf-tetex/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks14
+)
+\@linkdim=\dimen106
+\Hy@linkcounter=\count89
+\Hy@pagecounter=\count90
+(/usr/share/texmf-tetex/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2003/11/30 v6.74m Hyperref: PDFDocEncoding definition (HO)
+) (/usr/share/texmf-tetex/tex/latex/hyperref/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive and teTeX
+)
+Package hyperref Info: Hyper figures OFF on input line 1880.
+Package hyperref Info: Link nesting OFF on input line 1885.
+Package hyperref Info: Hyper index ON on input line 1888.
+Package hyperref Info: Plain pages ON on input line 1893.
+Package hyperref Info: Backreferencing OFF on input line 1900.
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks ON on input line 2004.
+(/usr/share/texmf/tex/latex/latex2html/url.sty
+Package: url 1999/03/02  ver 1.4  Verb mode for urls, email addresses, and file
+ names
+)
+LaTeX Info: Redefining \url on input line 2143.
+\Fld@menulength=\count91
+\Field@Width=\dimen107
+\Fld@charsize=\dimen108
+\Choice@toks=\toks15
+\Field@toks=\toks16
+Package hyperref Info: Hyper figures OFF on input line 2618.
+Package hyperref Info: Link nesting OFF on input line 2623.
+Package hyperref Info: Hyper index ON on input line 2626.
+Package hyperref Info: backreferencing OFF on input line 2633.
+Package hyperref Info: Link coloring OFF on input line 2638.
+\c@Item=\count92
+\c@Hfootnote=\count93
+)
+*hyperref using driver hdvipdfm*
+(/usr/share/texmf-tetex/tex/latex/hyperref/hdvipdfm.def
+File: hdvipdfm.def 2003/11/30 v6.74m Hyperref driver for dvipdfm
+\pdfm@box=\box26
+\Fld@listcount=\count94
+\@outlinefile=\write3
+) (/usr/share/texmf-tetex/tex/latex/ae/ae.sty
+Package: ae 2001/02/12 1.3 Almost European Computer Modern
+(/usr/share/texmf-tetex/tex/latex/base/fontenc.sty
+Package: fontenc 2004/02/22 v1.99f Standard LaTeX package
+(/usr/share/texmf-tetex/tex/latex/base/t1enc.def
+File: t1enc.def 2004/02/22 v1.99f Standard LaTeX file
+LaTeX Font Info:    Redeclaring font encoding T1 on input line 43.
+)
+LaTeX Font Info:    Try loading font information for T1+aer on input line 100.
+(/usr/share/texmf-tetex/tex/latex/ae/t1aer.fd
+File: t1aer.fd 1997/11/16 Font definitions for T1/aer.
+))) (/usr/share/texmf/tex/latex/html/html.sty
+Package: html 1999/07/19 v1.38 hypertext commands for latex2html (nd, hws, rrm)
+
+\c@lpart=\count95
+\c@lchapter=\count96
+\c@lsection=\count97
+\c@lsubsection=\count98
+\c@lsubsubsection=\count99
+\c@lparagraph=\count100
+\c@lsubparagraph=\count101
+\c@lsubsubparagraph=\count102
+\ptrfile=\write4
+) (/usr/share/texmf-tetex/tex/latex/base/makeidx.sty
+Package: makeidx 2000/03/29 v1.0m Standard LaTeX package
+) (/usr/share/texmf-tetex/tex/latex/tools/tabularx.sty
+Package: tabularx 1999/01/07 v2.07 `tabularx' package (DPC)
+(/usr/share/texmf-tetex/tex/latex/tools/array.sty
+Package: array 2003/12/17 v2.4a Tabular extension package (FMi)
+\col@sep=\dimen109
+\extrarowheight=\dimen110
+\NC@list=\toks17
+\extratabsurround=\skip43
+\backup@length=\skip44
+)
+\TX@col@width=\dimen111
+\TX@old@table=\dimen112
+\TX@old@col=\dimen113
+\TX@target=\dimen114
+\TX@delta=\dimen115
+\TX@cols=\count103
+\TX@ftn=\toks18
+) (/usr/share/texmf-tetex/tex/latex/base/textcomp.sty
+Package: textcomp 2004/02/22 v1.99f Standard LaTeX package
+Package textcomp Info: Sub-encoding information:
+(textcomp)               5 = only ISO-Adobe without \textcurrency
+(textcomp)               4 = 5 + \texteuro
+(textcomp)               3 = 4 + \textohm
+(textcomp)               2 = 3 + \textestimated + \textcurrency
+(textcomp)               1 = TS1 - \textcircled - \t
+(textcomp)               0 = TS1 (full)
+(textcomp)             Font families with sub-encoding setting implement
+(textcomp)             only a restricted character set as indicated.
+(textcomp)             Family '?' is the default used for unknown fonts.
+(textcomp)             See the documentation for details.
+Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71.
+(/usr/share/texmf-tetex/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+)
+LaTeX Info: Redefining \oldstylenums on input line 266.
+Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281.
+Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282.
+Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283.
+Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284.
+Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285.
+Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286.
+Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287.
+Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288.
+Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289.
+Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290.
+Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291.
+Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292.
+Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293.
+Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294.
+Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295.
+Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296.
+Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297.
+Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298.
+Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299.
+Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300.
+Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301.
+Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302.
+Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303.
+Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304.
+
+Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305.
+Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306.
+Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307.
+Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308.
+Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309.
+Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310.
+Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 311.
+Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 312.
+Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 313.
+Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 314.
+Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 315.
+Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 316.
+Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 317.
+Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 318.
+Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 319.
+Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 320.
+Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 321.
+Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 322.
+Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 323.
+Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 324.
+Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 325.
+Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 326.
+) (/usr/share/texmf-tetex/tex/latex/tocbibind/tocbibind.sty
+Package: tocbibind 2003/03/13 v1.5g extra ToC listings
+
+Package tocbibind Note: The document has chapter divisions.
+
+
+Package tocbibind Note: Using chapter style headings, unless overridden.
+
+) (/usr/share/texmf-tetex/tex/latex/tools/enumerate.sty
+Package: enumerate 1999/03/05 v3.00 enumerate extensions (DPC)
+\@enLab=\toks19
+) (/usr/share/texmf-tetex/tex/latex/geometry/geometry.sty
+Package: geometry 2002/07/08 v3.2 Page Geometry
+\Gm@cnth=\count104
+\Gm@cntv=\count105
+\c@Gm@tempcnt=\count106
+\Gm@bindingoffset=\dimen116
+\Gm@wd@mp=\dimen117
+\Gm@odd@mp=\dimen118
+\Gm@even@mp=\dimen119
+\Gm@dimlist=\toks20
+(/usr/share/texmf-tetex/tex/latex/geometry/geometry.cfg)) (/usr/share/texmf-tet
+ex/tex/latex/tools/calc.sty
+Package: calc 1998/07/07 v4.1b Infix arithmetic (KKT,FJ)
+\calc@Acount=\count107
+\calc@Bcount=\count108
+\calc@Adimen=\dimen120
+\calc@Bdimen=\dimen121
+\calc@Askip=\skip45
+\calc@Bskip=\skip46
+LaTeX Info: Redefining \setlength on input line 59.
+LaTeX Info: Redefining \addtolength on input line 60.
+\calc@denominator=\count109
+)
+\@indexfile=\write5
+\openout5 = `images.idx'.
+
+Writing index file images.idx
+(/usr/share/texmf-tetex/tex/latex/graphics/color.sty
+Package: color 1999/02/16 v1.0i Standard LaTeX Color (DPC)
+(/usr/share/texmf-tetex/tex/latex/graphics/color.cfg
+File: color.cfg 2005/02/03 v1.3 color configuration of teTeX/TeXLive
+)
+Package color Info: Driver file: dvips.def on input line 125.
+(/usr/share/texmf-tetex/tex/latex/graphics/dvips.def
+File: dvips.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
+) (/usr/share/texmf-tetex/tex/latex/graphics/dvipsnam.def
+File: dvipsnam.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
+))
+\sizebox=\box27
+\lthtmlwrite=\write6
+(./images.aux)
+\openout1 = `images.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 198.
+LaTeX Font Info:    ... okay on input line 198.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 198.
+LaTeX Font Info:    Try loading font information for TS1+cmr on input line 198.
+
+(/usr/share/texmf-tetex/tex/latex/base/ts1cmr.fd
+File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    ... okay on input line 198.
+Package hyperref Info: Link coloring OFF on input line 198.
+(/usr/share/texmf-tetex/tex/latex/hyperref/nameref.sty
+Package: nameref 2003/12/03 v2.21 Cross-referencing by name of section
+\c@section@level=\count110
+)
+LaTeX Info: Redefining \ref on input line 198.
+LaTeX Info: Redefining \pageref on input line 198.
+\openout3 = `images.out'.
+
+-------------------- Geometry parameters
+paper: a4paper
+landscape: --
+twocolumn: --
+twoside: --
+asymmetric: --
+h-parts: 89.62709pt, 0.7\paperwidth , 89.6271pt (default)
+v-parts: 101.40665pt, 0.7\paperheight , 152.11pt (default)
+hmarginratio: 1:1
+vmarginratio: 2:3
+lines: --
+heightrounded: --
+bindingoffset: 0.0pt
+truedimen: --
+includehead: --
+includefoot: --
+includemp: --
+driver: 
+-------------------- Page layout dimensions and switches
+\paperwidth  597.50787pt
+\paperheight 845.04684pt
+\textwidth  349.0pt
+\textheight 650.66685pt
+\oddsidemargin  17.3571pt
+\evensidemargin 17.3571pt
+\topmargin  0.0pt
+\headheight 0.0pt
+\headsep    0.0pt
+\footskip   0.0pt
+\marginparwidth 71.0pt
+\marginparsep   10.0pt
+\columnsep  10.0pt
+\skip\footins  10.0pt plus 4.0pt minus 2.0pt
+\hoffset 0.0pt
+\voffset 0.0pt
+\mag 1000
+
+(1in=72.27pt, 1cm=28.45pt)
+-----------------------
+
+latex2htmlLength hsize=349.0pt
+
+latex2htmlLength vsize=650.66685pt
+
+latex2htmlLength hoffset=0.0pt
+
+latex2htmlLength voffset=0.0pt
+
+latex2htmlLength topmargin=0.0pt
+
+latex2htmlLength topskip=0.00003pt
+
+latex2htmlLength headheight=0.0pt
+
+latex2htmlLength headsep=0.0pt
+
+latex2htmlLength parskip=6.8pt plus 1.36008pt minus 1.36008pt
+
+latex2htmlLength oddsidemargin=17.3571pt
+
+latex2htmlLength evensidemargin=17.3571pt
+
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <10.95> on input line 235.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <8> on input line 235.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <6> on input line 235.
+l2hSize :tex2html_wrap_inline1028:7.0626pt::0.0pt::7.1201pt.
+[1
+
+
+
+]
+l2hSize :tex2html_wrap_inline1032:7.48248pt::0.0pt::48.86426pt.
+[2
+
+
+]
+l2hSize :tex2html_wrap_inline1981:8.7125pt::8.7125pt::23.6642pt.
+[3
+
+
+]
+l2hSize :tex2html_wrap_inline6076:7.5626pt::7.5626pt::14.53923pt.
+[4
+
+
+]
+l2hSize :tex2html_wrap_inline6080:7.5626pt::7.5626pt::14.53923pt.
+[5
+
+
+]
+l2hSize :tex2html_wrap_inline9064:8.7125pt::8.7125pt::86.9574pt.
+[6
+
+
+] (./images.aux) ) 
+Here is how much of TeX's memory you used:
+ 4428 strings out of 94501
+ 62627 string characters out of 1175793
+ 121207 words of memory out of 1000000
+ 7572 multiletter control sequences out of 10000+50000
+ 7874 words of font info for 24 fonts, out of 500000 for 2000
+ 580 hyphenation exceptions out of 8191
+ 28i,5n,21p,200b,182s stack positions out of 1500i,500n,5000p,200000b,5000s
+
+Output written on images.dvi (6 pages, 3608 bytes).
diff --git a/ionconf/images.out b/ionconf/images.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/images.pl b/ionconf/images.pl
new file mode 100644 (file)
index 0000000..6d0ccb4
--- /dev/null
@@ -0,0 +1,6 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate images original text with physical files.
+
+
+1;
+
diff --git a/ionconf/images.tex b/ionconf/images.tex
new file mode 100644 (file)
index 0000000..d950261
--- /dev/null
@@ -0,0 +1,371 @@
+\batchmode
+\documentclass[english,a4paper,11pt,oldtoc,mctitle]{rapport3}
+\RequirePackage{ifthen}
+
+
+\usepackage{babel}
+\usepackage[latin1]{inputenc}
+\usepackage[dvipdfm]{hyperref}
+\usepackage{ae}
+\usepackage{url}
+\usepackage{html}
+\usepackage{makeidx}
+\usepackage{tabularx}
+\usepackage{textcomp}
+\usepackage[nottoc]{tocbibind}
+\usepackage{enumerate} 
+\usepackage[a4paper]{geometry}
+\usepackage{calc}
+
+
+\urlstyle{rm}%
+\providecommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}} 
+
+%
+\providecommand{\note}[1]{\color{red}**#1**}%
+\providecommand{\file}[1]{\emph{#1}}%
+\providecommand{\type}[1]{#1}%
+\providecommand{\spec}[1]{#1}%
+\providecommand{\indextype}[1]{\index{#1@#1}} 
+
+%
+\providecommand{\key}[1]{\textbf{#1}}%
+\providecommand{\code}[1]{\texttt{#1}}%
+\providecommand{\var}[1]{\texttt{#1}}%
+\providecommand{\command}[1]{\texttt{#1}} 
+
+%
+\providecommand{\hyperlabel}[1]{\label{#1}}%
+\providecommand{\fnref}[1]{\htmlref{\texttt{#1}}{fn:#1}}%
+\providecommand{\fnrefx}[2]{\htmlref{\texttt{#2}}{fn:#1.#2}}%
+\providecommand{\myhref}[2]{\htmlref{#2}{#1}} 
+
+%
+\providecommand{\tabhead}[1]{\hline #1 \\\hline} 
+
+
+
+%
+\newenvironment{function}{
+  \begin{description}
+}{
+  \end{description}
+} 
+
+%
+\providecommand{\synopsis}[1]{
+  \item[Synopsis:] \texttt{#1}
+}%
+\providecommand{\funcname}[1]{
+  \item[Function:] \texttt{#1}
+}%
+\providecommand{\hookname}[1]{
+  \item[Hook name:] \label{#1}\texttt{#1}
+}%
+\providecommand{\hookparams}[1]{
+  \item[Parameters:] \texttt{#1}
+} 
+
+%
+\newenvironment{funcdesc}{
+  \item[Description:]
+}{} 
+
+
+
+%
+\providecommand{\xchapter}[1]{\chapter{#1}}%
+\providecommand{\xsection}[1]{\section{#1}}%
+\providecommand{\xsectionstar}[1]{\section*{#1}}%
+\providecommand{\xsubsection}[1]{\subsection{#1}} 
+
+
+\title{Configuring and extending Ion3 with Lua}
+\author{Tuomo Valkonen \\tuomov at iki.fi}
+\date{2006-12-23}
+
+
+\makeindex
+
+
+
+
+\usepackage[dvips]{color}
+
+
+\pagecolor[gray]{.7}
+
+\usepackage[latin1]{inputenc}
+
+
+
+\makeatletter
+
+\makeatletter
+\count@=\the\catcode`\_ \catcode`\_=8 
+\newenvironment{tex2html_wrap}{}{}%
+\catcode`\<=12\catcode`\_=\count@
+\newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}%
+\newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}%
+  \expandafter\renewcommand\csname #1\endcsname}%
+\newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}%
+\let\newedcommand\renewedcommand
+\let\renewedenvironment\newedenvironment
+\makeatother
+\let\mathon=$
+\let\mathoff=$
+\ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi
+\newbox\sizebox
+\setlength{\hoffset}{0pt}\setlength{\voffset}{0pt}
+\addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt}
+\addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt}
+\addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt}
+\addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt}
+\setlength{\textwidth}{349pt}
+\newwrite\lthtmlwrite
+\makeatletter
+\let\realnormalsize=\normalsize
+\global\topskip=2sp
+\def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float
+\def\@float{\let\@savefreelist\@freelist\real@float}
+\def\liih@math{\ifmmode$\else\bad@math\fi}
+\def\end@float{\realend@float\global\let\@freelist\@savefreelist}
+\let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float
+\let\@largefloatcheck=\relax
+\let\if@boxedmulticols=\iftrue
+\def\@dbflt{\let\@savefreelist\@freelist\real@dbflt}
+\def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize
+ \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}%
+ \def\phantompar{\csname par\endcsname}\normalsize}%
+\def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}%
+\newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }%
+\newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }%
+\newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup %
+ \let\ifinner=\iffalse \let\)\liih@math }%
+\newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}%
+ \expandafter\box\next\egroup}%
+\newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}%
+\newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox
+  \ifdim\dimen0>.95\vsize
+   \lthtmltypeout{%
+*** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}%
+   \ht\sizebox.95\vsize \dp\sizebox\z@ \fi
+  \lthtmltypeout{l2hSize %
+:\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}%
+\newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist
+       \lthtmlmathtype{#1}\lthtmlvboxmathA}%
+\newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}%
+\newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup
+       \let\@savefreelist\@freelist \lthtmlhboxmathB}%
+\newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}%
+\newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox
+       \global\let\@freelist\@savefreelist}%
+\newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}%
+\newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}%
+\newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}%
+  \lthtmldisplayA{#1}\let\@eqnnum\relax}%
+\newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}%
+\newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB}
+\newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA
+  \vrule height1.5ex width0pt }%
+\newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}%
+\newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}%
+\newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
+  \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline}
+\newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
+  \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath}
+\newcommand\lthtmlindisplaymathZ{\egroup %
+  \centerinlinemath\lthtmllogmath\lthtmlsetmath}
+\def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{%
+  \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi
+  \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
+\def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{%
+  \kern.1em\kern0.8 pt\hbox{\hglue.17em\copy\sizebox\hglue0.8 pt}}\kern.3pt%
+  \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.8 pt%
+  \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
+\def\centerinlinemath{%
+  \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi
+  \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 
+ \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax}
+
+\def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize 
+  \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill
+  \else\expandafter\vss\fi}%
+\providecommand{\selectlanguage}[1]{}%
+\makeatletter \tracingstats = 1 
+
+
+\begin{document}
+\pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}%
+\makeatletter
+\if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}%
+\else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi%
+\lthtmltypeout{}%
+\makeatother
+\setcounter{page}{1}
+\onecolumn
+
+% !!! IMAGES START HERE !!!
+
+\stepcounter{chapter}
+\stepcounter{chapter}
+\stepcounter{section}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsection}
+\stepcounter{chapter}
+\stepcounter{section}
+\stepcounter{section}
+\stepcounter{section}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline1028}%
+$n$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline1032}%
+$N=1{\ldots} 5$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+
+
+\newedenvironment{winprop}[2]{
+  
+  \begin{description}
+%
+      \item[Winprop:] \texttt{#1} (#2)
+      \item[Description:]
+}
+{
+  
+  \end{description}
+}%
+
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{chapter}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline1981}%
+$(0, 1]$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{subsection}
+\stepcounter{chapter}
+\stepcounter{section}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{section}
+\stepcounter{chapter}
+\stepcounter{section}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline6076}%
+$-1$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline6080}%
+$-2$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{section}
+\stepcounter{subsection}
+{\newpage\clearpage
+\lthtmlinlinemathA{tex2html_wrap_inline9064}%
+$\{t,m,b\}\times\{t,c,b\}$%
+\lthtmlinlinemathZ
+\lthtmlcheckvsize\clearpage}
+
+\stepcounter{section}
+\stepcounter{section}
+\stepcounter{section}
+\appendix
+\stepcounter{chapter}
+\addtocounter{enumi}{-1}
+\stepcounter{chapter}
+
+%
+\providecommand{\fnlisti}[1]{\htmlref{\texttt{#1}}{fn:#1}\\}%
+
+
+\end{document}
diff --git a/ionconf/img1.png b/ionconf/img1.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/img2.png b/ionconf/img2.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/img3.png b/ionconf/img3.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/img4.png b/ionconf/img4.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/img5.png b/ionconf/img5.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/img6.png b/ionconf/img6.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ionconf/index.html b/ionconf/index.html
new file mode 100644 (file)
index 0000000..7a0a20d
--- /dev/null
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Configuring and extending Ion3 with Lua</TITLE>
+<META NAME="description" CONTENT="Configuring and extending Ion3 with Lua">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html19"
+  HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html13"
+  HREF="http://iki.fi/tuomov/ion/">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png"> 
+<A NAME="tex2html15"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html17"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html20"
+  HREF="node1.html">Contents</A>
+<B> Up:</B> <A NAME="tex2html14"
+  HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
+ &nbsp; <B>  <A NAME="tex2html16"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html18"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+<H1 ALIGN="CENTER">Configuring and extending Ion3 with Lua</H1>
+<DIV CLASS="author_info">
+
+<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
+<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
+<P ALIGN="CENTER"><STRONG>2006-12-23</STRONG></P>
+</DIV>
+
+<P>
+Configuring and extending Ion3 with Lua
+<BR>
+Copyright &#169;  2003-2005 Tuomo Valkonen.
+
+<P>
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+<P>
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+chapter entitled ''GNU General Public License'' for more details.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html21"
+  HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html22"
+  HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
+<LI><A NAME="tex2html23"
+  HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
+<UL>
+<LI><A NAME="tex2html24"
+  HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
+<LI><A NAME="tex2html25"
+  HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html26"
+  HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html27"
+  HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html28"
+  HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html29"
+  HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<LI><A NAME="tex2html30"
+  HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html31"
+  HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
+<UL>
+<LI><A NAME="tex2html32"
+  HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
+<LI><A NAME="tex2html33"
+  HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN  CLASS="textit">cfg_ion.lua</SPAN></A>
+<LI><A NAME="tex2html34"
+  HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
+<UL>
+<LI><A NAME="tex2html35"
+  HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
+<LI><A NAME="tex2html36"
+  HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
+<LI><A NAME="tex2html37"
+  HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
+<LI><A NAME="tex2html38"
+  HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
+<LI><A NAME="tex2html39"
+  HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
+<LI><A NAME="tex2html40"
+  HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
+<LI><A NAME="tex2html41"
+  HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
+</UL>
+<LI><A NAME="tex2html42"
+  HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
+<UL>
+<LI><A NAME="tex2html43"
+  HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
+<LI><A NAME="tex2html44"
+  HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
+<LI><A NAME="tex2html45"
+  HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
+<LI><A NAME="tex2html46"
+  HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
+</UL>
+<LI><A NAME="tex2html47"
+  HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
+<UL>
+<LI><A NAME="tex2html48"
+  HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Classes, roles and instances</A>
+<LI><A NAME="tex2html49"
+  HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Finding window identification</A>
+<LI><A NAME="tex2html50"
+  HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Some common examples</A>
+<UL>
+<LI><A NAME="tex2html51"
+  HREF="node4.html#SECTION00453100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+<LI><A NAME="tex2html52"
+  HREF="node4.html#SECTION00453200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+<LI><A NAME="tex2html53"
+  HREF="node4.html#SECTION00453300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+</UL>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html54"
+  HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
+<UL>
+<LI><A NAME="tex2html55"
+  HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
+<UL>
+<LI><A NAME="tex2html56"
+  HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
+<UL>
+<LI><A NAME="tex2html57"
+  HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
+<LI><A NAME="tex2html58"
+  HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
+<LI><A NAME="tex2html59"
+  HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
+</UL>
+</UL>
+<LI><A NAME="tex2html60"
+  HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
+<UL>
+<LI><A NAME="tex2html61"
+  HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
+<LI><A NAME="tex2html62"
+  HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
+<UL>
+<LI><A NAME="tex2html63"
+  HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
+<LI><A NAME="tex2html64"
+  HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
+<LI><A NAME="tex2html65"
+  HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
+<LI><A NAME="tex2html66"
+  HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+<LI><A NAME="tex2html67"
+  HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
+</UL>
+<LI><A NAME="tex2html68"
+  HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
+</UL>
+<LI><A NAME="tex2html69"
+  HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+<UL>
+<LI><A NAME="tex2html70"
+  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+<LI><A NAME="tex2html71"
+  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html72"
+  HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
+<UL>
+<LI><A NAME="tex2html73"
+  HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
+<LI><A NAME="tex2html74"
+  HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
+<UL>
+<LI><A NAME="tex2html75"
+  HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
+<LI><A NAME="tex2html76"
+  HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
+</UL>
+<LI><A NAME="tex2html77"
+  HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
+<LI><A NAME="tex2html78"
+  HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html79"
+  HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
+<UL>
+<LI><A NAME="tex2html80"
+  HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN  CLASS="textit">ioncore</SPAN></A>
+<UL>
+<LI><A NAME="tex2html81"
+  HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+<LI><A NAME="tex2html82"
+  HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+<LI><A NAME="tex2html83"
+  HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+<LI><A NAME="tex2html84"
+  HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+<LI><A NAME="tex2html85"
+  HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+<LI><A NAME="tex2html86"
+  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<LI><A NAME="tex2html87"
+  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<LI><A NAME="tex2html88"
+  HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<LI><A NAME="tex2html89"
+  HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<LI><A NAME="tex2html90"
+  HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html91"
+  HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html92"
+  HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html93"
+  HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<LI><A NAME="tex2html94"
+  HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<LI><A NAME="tex2html95"
+  HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<LI><A NAME="tex2html96"
+  HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</UL>
+<LI><A NAME="tex2html97"
+  HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN  CLASS="textit">mod_tiling</SPAN></A>
+<UL>
+<LI><A NAME="tex2html98"
+  HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+<LI><A NAME="tex2html99"
+  HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+<LI><A NAME="tex2html100"
+  HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+<LI><A NAME="tex2html101"
+  HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+<LI><A NAME="tex2html102"
+  HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</UL>
+<LI><A NAME="tex2html103"
+  HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN  CLASS="textit">mod_query</SPAN></A>
+<UL>
+<LI><A NAME="tex2html104"
+  HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+<LI><A NAME="tex2html105"
+  HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+<LI><A NAME="tex2html106"
+  HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</UL>
+<LI><A NAME="tex2html107"
+  HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN  CLASS="textit">mod_menu</SPAN></A>
+<UL>
+<LI><A NAME="tex2html108"
+  HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</UL>
+<LI><A NAME="tex2html109"
+  HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN  CLASS="textit">mod_dock</SPAN></A>
+<UL>
+<LI><A NAME="tex2html110"
+  HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</UL>
+<LI><A NAME="tex2html111"
+  HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN  CLASS="textit">mod_sp</SPAN></A>
+<LI><A NAME="tex2html112"
+  HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN  CLASS="textit">de</SPAN></A>
+<LI><A NAME="tex2html113"
+  HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html114"
+  HREF="node8.html">A. The GNU General Public License</A>
+<UL>
+<LI><A NAME="tex2html115"
+  HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html116"
+  HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
+<LI><A NAME="tex2html117"
+  HREF="node10.html">List of functions</A>
+<LI><A NAME="tex2html118"
+  HREF="node11.html">Index</A>
+<LI><A NAME="tex2html119"
+  HREF="node12.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/index.png b/ionconf/index.png
new file mode 100644 (file)
index 0000000..698f09c
Binary files /dev/null and b/ionconf/index.png differ
diff --git a/ionconf/internals.pl b/ionconf/internals.pl
new file mode 100644 (file)
index 0000000..d2d476e
--- /dev/null
@@ -0,0 +1,1306 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate internals original text with physical files.
+
+
+$key = q/sec:queryref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.version/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_nth/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.select_engine/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_window_property/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.context/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_exec/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_first/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.insstr/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.quote_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameworkspace/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.is_shaded/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_activity/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.farthest/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.create_ws/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.finish/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bskip_word/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.mark/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_prev/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.unsplit_at/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.dec_index/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.current/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hookref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:config/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_mapped/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.is_fullscreen/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_prev_screen/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_words/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:ioncoreref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defbindings/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_resize/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WComplProxy.set_completions/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.shutdown/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getbindings/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:styles/;
+$ref_files{$key} = "$dir".q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_stdisp/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_get_winprop_fn/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:borders/;
+$ref_files{$key} = "$dir".q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.reset/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_script/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.id/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_mode/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.resize/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_nth/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.mode/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn_traced/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:modules/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.tl/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.mkbottom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defctxmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_selection/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrollup/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name_exact/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_nth/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.prev_completion/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec_on/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.menuentry/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.forward/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.menu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.set/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_screen_id/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:bindings/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInfoWin.set_text/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.snapshot/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_do_warp_alt/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.resign/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_unmapped_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.write_savefile/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/panews_make_placement_alt/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exports/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hooks/;
+$ref_files{$key} = "$dir".q|node6.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.xid/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.get_ident/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown_on/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_prev/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:binddef/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_eol/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_editfile/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.read_config/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_at/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_tabdrag/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.screen_of/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.bottom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_search/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.node_of/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRootWin.current_scr/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_first/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_bol/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.load_module/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menuref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menudisp/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_vert/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitInner.current/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.attach/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_tagged/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/app:fullhierarchy/;
+$ref_files{$key} = "$dir".q|node9.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/frame_managed_changed_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:tricks/;
+$ref_files{$key} = "$dir".q|node6.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_savefile/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_push/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_clientwin/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_set_text_property/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:winprops/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.parent/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getctxmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_inactivated_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_horiz/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_move/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:objects/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.set_managed_offset/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.set/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_dir_for/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.point/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_prev/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:engines/;
+$ref_files{$key} = "$dir".q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.pmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_dock.set_floating_shown_on/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_ssh/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_atom_name/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_workspace/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.typeahead_clear/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.copy/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.rqgeom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tags_first/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_mark/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/screen_managed_changed_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_count/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_menu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.move/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.flip_at/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_region/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defshortening/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.refresh_stylelist/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_about_ion/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.inc_index/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_delete_property/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_activity/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_runfile/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_context/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_tree/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.contents/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.region_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_current/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.message/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.compile_cmd/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:deref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bol/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_tagged/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.br/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.managed_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:string.shell_safe/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_restart/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.managed_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.set/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.backspace/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroupWS.attach_framed/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:dockref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating_at/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.warn/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.current/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose_propagate/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.clear_mark/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/tiling_placement_alt/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.begin_kbresize/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:classesrolesinstances/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_tagged/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.next_completion/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_hidden/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.cancel/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.nudge/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_nth_screen/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_mapped_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.set_fullscreen/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.paste/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.xid/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.name/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_text_property/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_attachclient/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.append/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mclick/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_index/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_clear/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_switch_tab/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_intern_atom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.finish/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_gotoclient/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_deinit_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.geom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_previous/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_manager/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_paths/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:walkthrough/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_numbers/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.cancel/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submap/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_active/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bkill_word/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_new/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdblclick/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.flip/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_top/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activity_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.progname/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.popen_completions/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defwinprop/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.popen_bgread/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdrag/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.kill/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.transpose/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_snapshot_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clear_tags/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.map/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.dir/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_shaded/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_stdisp/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.manager/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_change_property/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.cancel/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.parent/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.finish/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.back/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.TR/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menus/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameframe/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.geom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress_wait/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_do_manage_alt/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rootwin_of/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.transpose_at/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_sigchld_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.match_winprop_name/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.nextto/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.substyle/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.copy/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.is_histcompl/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.is_i18n/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.refresh/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqorder/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.grabmenu/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitRegion.reg/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.size_hints/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.delete/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getwinprop/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tagged_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.request_selection/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_man/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.cut/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.goto/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next_screen/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_paths/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:conffiles/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clientwin_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.aboutmsg/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:prelim/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.managed_list/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$ref_files{$key} = "$dir".q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.read_savefile/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart_other/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_activity/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqgeom/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrolldown/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activated_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_table/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:defaultde/;
+$ref_files{$key} = "$dir".q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mpress/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:tilingref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.detach/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.join/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_first/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:spref/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.is_hidden/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.get/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_yesno/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_next/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.eol/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.defcmd/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.bdoc/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.chdir_for/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_lua/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:export/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:gr/;
+$ref_files{$key} = "$dir".q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.set/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_word/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle_rootwin/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_post_layout_setup_hook/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.icat/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_line/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.resize/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_shutdown/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_index/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.skip_word/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.complete/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach_new/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_chars/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_tree/;
+$ref_files{$key} = "$dir".q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+1;
+
diff --git a/ionconf/ionconf.css b/ionconf/ionconf.css
new file mode 100644 (file)
index 0000000..f0cd026
--- /dev/null
@@ -0,0 +1,38 @@
+/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */
+.MATH    { font-family: "Century Schoolbook", serif; }
+.MATH I  { font-family: "Century Schoolbook", serif; font-style: italic }
+.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold }
+
+/* implement both fixed-size and relative sizes */
+SMALL.XTINY            { font-size : xx-small }
+SMALL.TINY             { font-size : x-small  }
+SMALL.SCRIPTSIZE       { font-size : smaller  }
+SMALL.FOOTNOTESIZE     { font-size : small    }
+SMALL.SMALL            {  }
+BIG.LARGE              {  }
+BIG.XLARGE             { font-size : large    }
+BIG.XXLARGE            { font-size : x-large  }
+BIG.HUGE               { font-size : larger   }
+BIG.XHUGE              { font-size : xx-large }
+
+/* heading styles */
+H1             {  }
+H2             {  }
+H3             {  }
+H4             {  }
+H5             {  }
+
+/* mathematics styles */
+DIV.displaymath                { }     /* math displays */
+TD.eqno                        { }     /* equation-number cells */
+
+
+/* document-specific styles come next */
+DIV.navigation         {   }
+DIV.center             {   }
+SPAN.sc                {   }
+DIV.quote              {   }
+PRE.preform            {   }
+SPAN.textit            { font-style: italic  }
+SPAN.arabic            {   }
+SPAN.textbf            { font-weight: bold  }
diff --git a/ionconf/ionconf.html b/ionconf/ionconf.html
new file mode 100644 (file)
index 0000000..7a0a20d
--- /dev/null
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Configuring and extending Ion3 with Lua</TITLE>
+<META NAME="description" CONTENT="Configuring and extending Ion3 with Lua">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html19"
+  HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html13"
+  HREF="http://iki.fi/tuomov/ion/">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png"> 
+<A NAME="tex2html15"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html17"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html20"
+  HREF="node1.html">Contents</A>
+<B> Up:</B> <A NAME="tex2html14"
+  HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
+ &nbsp; <B>  <A NAME="tex2html16"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html18"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+<H1 ALIGN="CENTER">Configuring and extending Ion3 with Lua</H1>
+<DIV CLASS="author_info">
+
+<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
+<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
+<P ALIGN="CENTER"><STRONG>2006-12-23</STRONG></P>
+</DIV>
+
+<P>
+Configuring and extending Ion3 with Lua
+<BR>
+Copyright &#169;  2003-2005 Tuomo Valkonen.
+
+<P>
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+<P>
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+chapter entitled ''GNU General Public License'' for more details.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html21"
+  HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html22"
+  HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
+<LI><A NAME="tex2html23"
+  HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
+<UL>
+<LI><A NAME="tex2html24"
+  HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
+<LI><A NAME="tex2html25"
+  HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html26"
+  HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html27"
+  HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html28"
+  HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html29"
+  HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<LI><A NAME="tex2html30"
+  HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html31"
+  HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
+<UL>
+<LI><A NAME="tex2html32"
+  HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
+<LI><A NAME="tex2html33"
+  HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN  CLASS="textit">cfg_ion.lua</SPAN></A>
+<LI><A NAME="tex2html34"
+  HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
+<UL>
+<LI><A NAME="tex2html35"
+  HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
+<LI><A NAME="tex2html36"
+  HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
+<LI><A NAME="tex2html37"
+  HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
+<LI><A NAME="tex2html38"
+  HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
+<LI><A NAME="tex2html39"
+  HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
+<LI><A NAME="tex2html40"
+  HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
+<LI><A NAME="tex2html41"
+  HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
+</UL>
+<LI><A NAME="tex2html42"
+  HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
+<UL>
+<LI><A NAME="tex2html43"
+  HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
+<LI><A NAME="tex2html44"
+  HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
+<LI><A NAME="tex2html45"
+  HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
+<LI><A NAME="tex2html46"
+  HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
+</UL>
+<LI><A NAME="tex2html47"
+  HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
+<UL>
+<LI><A NAME="tex2html48"
+  HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Classes, roles and instances</A>
+<LI><A NAME="tex2html49"
+  HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Finding window identification</A>
+<LI><A NAME="tex2html50"
+  HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Some common examples</A>
+<UL>
+<LI><A NAME="tex2html51"
+  HREF="node4.html#SECTION00453100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+<LI><A NAME="tex2html52"
+  HREF="node4.html#SECTION00453200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+<LI><A NAME="tex2html53"
+  HREF="node4.html#SECTION00453300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+</UL>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html54"
+  HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
+<UL>
+<LI><A NAME="tex2html55"
+  HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
+<UL>
+<LI><A NAME="tex2html56"
+  HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
+<UL>
+<LI><A NAME="tex2html57"
+  HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
+<LI><A NAME="tex2html58"
+  HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
+<LI><A NAME="tex2html59"
+  HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
+</UL>
+</UL>
+<LI><A NAME="tex2html60"
+  HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
+<UL>
+<LI><A NAME="tex2html61"
+  HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
+<LI><A NAME="tex2html62"
+  HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
+<UL>
+<LI><A NAME="tex2html63"
+  HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
+<LI><A NAME="tex2html64"
+  HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
+<LI><A NAME="tex2html65"
+  HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
+<LI><A NAME="tex2html66"
+  HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+<LI><A NAME="tex2html67"
+  HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
+</UL>
+<LI><A NAME="tex2html68"
+  HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
+</UL>
+<LI><A NAME="tex2html69"
+  HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+<UL>
+<LI><A NAME="tex2html70"
+  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+<LI><A NAME="tex2html71"
+  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html72"
+  HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
+<UL>
+<LI><A NAME="tex2html73"
+  HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
+<LI><A NAME="tex2html74"
+  HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
+<UL>
+<LI><A NAME="tex2html75"
+  HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
+<LI><A NAME="tex2html76"
+  HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
+</UL>
+<LI><A NAME="tex2html77"
+  HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
+<LI><A NAME="tex2html78"
+  HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html79"
+  HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
+<UL>
+<LI><A NAME="tex2html80"
+  HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN  CLASS="textit">ioncore</SPAN></A>
+<UL>
+<LI><A NAME="tex2html81"
+  HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+<LI><A NAME="tex2html82"
+  HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+<LI><A NAME="tex2html83"
+  HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+<LI><A NAME="tex2html84"
+  HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+<LI><A NAME="tex2html85"
+  HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+<LI><A NAME="tex2html86"
+  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<LI><A NAME="tex2html87"
+  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<LI><A NAME="tex2html88"
+  HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<LI><A NAME="tex2html89"
+  HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<LI><A NAME="tex2html90"
+  HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html91"
+  HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html92"
+  HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html93"
+  HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<LI><A NAME="tex2html94"
+  HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<LI><A NAME="tex2html95"
+  HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<LI><A NAME="tex2html96"
+  HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</UL>
+<LI><A NAME="tex2html97"
+  HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN  CLASS="textit">mod_tiling</SPAN></A>
+<UL>
+<LI><A NAME="tex2html98"
+  HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+<LI><A NAME="tex2html99"
+  HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+<LI><A NAME="tex2html100"
+  HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+<LI><A NAME="tex2html101"
+  HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+<LI><A NAME="tex2html102"
+  HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</UL>
+<LI><A NAME="tex2html103"
+  HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN  CLASS="textit">mod_query</SPAN></A>
+<UL>
+<LI><A NAME="tex2html104"
+  HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+<LI><A NAME="tex2html105"
+  HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+<LI><A NAME="tex2html106"
+  HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</UL>
+<LI><A NAME="tex2html107"
+  HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN  CLASS="textit">mod_menu</SPAN></A>
+<UL>
+<LI><A NAME="tex2html108"
+  HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</UL>
+<LI><A NAME="tex2html109"
+  HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN  CLASS="textit">mod_dock</SPAN></A>
+<UL>
+<LI><A NAME="tex2html110"
+  HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</UL>
+<LI><A NAME="tex2html111"
+  HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN  CLASS="textit">mod_sp</SPAN></A>
+<LI><A NAME="tex2html112"
+  HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN  CLASS="textit">de</SPAN></A>
+<LI><A NAME="tex2html113"
+  HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html114"
+  HREF="node8.html">A. The GNU General Public License</A>
+<UL>
+<LI><A NAME="tex2html115"
+  HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html116"
+  HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
+<LI><A NAME="tex2html117"
+  HREF="node10.html">List of functions</A>
+<LI><A NAME="tex2html118"
+  HREF="node11.html">Index</A>
+<LI><A NAME="tex2html119"
+  HREF="node12.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/labels.pl b/ionconf/labels.pl
new file mode 100644 (file)
index 0000000..cbfa297
--- /dev/null
@@ -0,0 +1,2613 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate labels original text with physical files.
+
+
+$key = q/sec:queryref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.version/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_nth/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.select_engine/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_window_property/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.context/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_exec/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_first/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.insstr/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.quote_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameworkspace/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.is_shaded/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_activity/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.farthest/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.create_ws/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.finish/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bskip_word/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.mark/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_prev/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.unsplit_at/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.dec_index/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.current/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hookref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:config/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_mapped/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.is_fullscreen/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_prev_screen/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_words/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:ioncoreref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defbindings/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_resize/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WComplProxy.set_completions/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.shutdown/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getbindings/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:styles/;
+$external_labels{$key} = "$URL/" . q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_stdisp/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_get_winprop_fn/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:borders/;
+$external_labels{$key} = "$URL/" . q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.reset/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_script/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.id/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_mode/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.resize/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_nth/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.mode/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn_traced/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:modules/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.tl/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.mkbottom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defctxmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_selection/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrollup/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name_exact/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_nth/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.prev_completion/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec_on/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.menuentry/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.forward/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.menu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_screen_id/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:bindings/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInfoWin.set_text/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.snapshot/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_do_warp_alt/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.resign/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_unmapped_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.write_savefile/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/panews_make_placement_alt/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exports/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hooks/;
+$external_labels{$key} = "$URL/" . q|node6.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.xid/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.get_ident/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown_on/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_prev/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:binddef/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_eol/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_editfile/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.read_config/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_at/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_tabdrag/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.screen_of/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.bottom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_search/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.node_of/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRootWin.current_scr/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_first/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_bol/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.load_module/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menuref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menudisp/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_vert/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitInner.current/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.attach/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_tagged/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/app:fullhierarchy/;
+$external_labels{$key} = "$URL/" . q|node9.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/frame_managed_changed_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:tricks/;
+$external_labels{$key} = "$URL/" . q|node6.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_savefile/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_push/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_clientwin/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_set_text_property/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:winprops/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.parent/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getctxmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_inactivated_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_horiz/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_move/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:objects/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.set_managed_offset/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_dir_for/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.point/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_prev/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:engines/;
+$external_labels{$key} = "$URL/" . q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.pmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_dock.set_floating_shown_on/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_ssh/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_atom_name/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_workspace/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.typeahead_clear/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.copy/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.rqgeom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tags_first/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_mark/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/screen_managed_changed_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_count/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_menu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.move/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.flip_at/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_region/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defshortening/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.refresh_stylelist/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_about_ion/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.inc_index/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_delete_property/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_activity/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_runfile/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_context/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_tree/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.contents/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.region_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_current/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.message/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.compile_cmd/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:deref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bol/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_tagged/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.br/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.managed_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:string.shell_safe/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_restart/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.managed_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.backspace/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroupWS.attach_framed/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:dockref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating_at/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.warn/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.current/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose_propagate/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.clear_mark/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/tiling_placement_alt/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.begin_kbresize/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:classesrolesinstances/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_tagged/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.next_completion/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_hidden/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.cancel/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.nudge/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_nth_screen/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_mapped_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.set_fullscreen/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.paste/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.xid/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.name/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_text_property/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_attachclient/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.append/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mclick/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_index/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_clear/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_switch_tab/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_intern_atom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.finish/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_gotoclient/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_deinit_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.geom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_previous/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_manager/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_paths/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:walkthrough/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_numbers/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.cancel/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submap/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_active/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bkill_word/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_new/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdblclick/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.flip/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_top/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activity_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.progname/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.popen_completions/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defwinprop/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.popen_bgread/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdrag/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.kill/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.transpose/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_snapshot_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clear_tags/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.map/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.dir/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_shaded/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_stdisp/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.manager/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_change_property/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.cancel/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.parent/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.finish/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.back/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.TR/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menus/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameframe/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.geom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress_wait/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_do_manage_alt/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rootwin_of/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.transpose_at/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_sigchld_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.match_winprop_name/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.nextto/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.substyle/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.copy/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.is_histcompl/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.is_i18n/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.refresh/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqorder/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.grabmenu/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitRegion.reg/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.size_hints/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.delete/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getwinprop/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tagged_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.request_selection/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_man/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.cut/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.goto/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next_screen/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_paths/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:conffiles/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clientwin_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.aboutmsg/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:prelim/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.managed_list/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$external_labels{$key} = "$URL/" . q|node3.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.read_savefile/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart_other/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_activity/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqgeom/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrolldown/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activated_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_table/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:defaultde/;
+$external_labels{$key} = "$URL/" . q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mpress/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:tilingref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.detach/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.join/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_first/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:spref/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.is_hidden/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.get/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_yesno/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_next/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.eol/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.defcmd/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.bdoc/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.chdir_for/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_lua/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:export/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:gr/;
+$external_labels{$key} = "$URL/" . q|node5.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_word/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle_rootwin/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_post_layout_setup_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.icat/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_line/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.resize/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_shutdown/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_index/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.skip_word/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.complete/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach_new/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_chars/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_tree/;
+$external_labels{$key} = "$URL/" . q|node7.html|; 
+$noresave{$key} = "$nosave";
+
+1;
+
+
+# LaTeX2HTML 2002-2-1 (1.71)
+# labels from external_latex_labels array.
+
+
+$key = q/sec:queryref/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.version/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_nth/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.select_engine/;
+$external_latex_labels{$key} = q|6.1.14|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_window_property/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.context/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_exec/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_first/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.insstr/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.quote_next/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameworkspace/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.is_shaded/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_list/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_activity/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.farthest/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.create_ws/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.finish/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bskip_word/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.mark/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_prev/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.unsplit_at/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.dec_index/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.current/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hookref/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:config/;
+$external_latex_labels{$key} = q|3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_mapped/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.is_fullscreen/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_prev_screen/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_words/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:ioncoreref/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defbindings/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_resize/;
+$external_latex_labels{$key} = q|6.1.12|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WComplProxy.set_completions/;
+$external_latex_labels{$key} = q|6.3.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.shutdown/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getbindings/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:styles/;
+$external_latex_labels{$key} = q|4.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_stdisp/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defmenu/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_get_winprop_fn/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:borders/;
+$external_latex_labels{$key} = q|4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_next/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.reset/;
+$external_latex_labels{$key} = q|6.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_get/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_script/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.id/;
+$external_latex_labels{$key} = q|6.1.11|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_mode/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.resize/;
+$external_latex_labels{$key} = q|6.1.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_nth/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.mode/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn_traced/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_next/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:modules/;
+$external_latex_labels{$key} = q|2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.tl/;
+$external_latex_labels{$key} = q|6.2.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.mkbottom/;
+$external_latex_labels{$key} = q|6.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defctxmenu/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_selection/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrollup/;
+$external_latex_labels{$key} = q|6.3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name_exact/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_nth/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.prev_completion/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec_on/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.menuentry/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.forward/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.menu/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.set/;
+$external_latex_labels{$key} = q|6.5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown/;
+$external_latex_labels{$key} = q|6.6|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_screen_id/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:bindings/;
+$external_latex_labels{$key} = q|3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInfoWin.set_text/;
+$external_latex_labels{$key} = q|6.1.6|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.snapshot/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_do_warp_alt/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.resign/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_unmapped_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.write_savefile/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/panews_make_placement_alt/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exports/;
+$external_latex_labels{$key} = q|6|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:hooks/;
+$external_latex_labels{$key} = q|5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.xid/;
+$external_latex_labels{$key} = q|6.1.12|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_list/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.get_ident/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$external_latex_labels{$key} = q|2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_sp.set_shown_on/;
+$external_latex_labels{$key} = q|6.6|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_prev/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:binddef/;
+$external_latex_labels{$key} = q|3.3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_eol/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_editfile/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.read_config/;
+$external_latex_labels{$key} = q|6.1.14|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_at/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_tabdrag/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.screen_of/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.switch_next/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.bottom/;
+$external_latex_labels{$key} = q|6.1.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_search/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.node_of/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRootWin.current_scr/;
+$external_latex_labels{$key} = q|6.1.10|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.navi_first/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_to_bol/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.load_module/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menuref/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menudisp/;
+$external_latex_labels{$key} = q|3.4.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_vert/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitInner.current/;
+$external_latex_labels{$key} = q|6.2.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.attach/;
+$external_latex_labels{$key} = q|6.5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_tagged/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/app:fullhierarchy/;
+$external_latex_labels{$key} = q|B|; 
+$noresave{$key} = "$nosave";
+
+$key = q/frame_managed_changed_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:tricks/;
+$external_latex_labels{$key} = q|5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_savefile/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_push/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.get/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_clientwin/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_set_text_property/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:winprops/;
+$external_latex_labels{$key} = q|3.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.parent/;
+$external_latex_labels{$key} = q|6.2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getctxmenu/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_inactivated_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.maximize_horiz/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WWindow.p_move/;
+$external_latex_labels{$key} = q|6.1.12|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:objects/;
+$external_latex_labels{$key} = q|2.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WScreen.set_managed_offset/;
+$external_latex_labels{$key} = q|6.1.11|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.set/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_dir_for/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.point/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.select_prev/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:engines/;
+$external_latex_labels{$key} = q|4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.pmenu/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_dock.set_floating_shown_on/;
+$external_latex_labels{$key} = q|6.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_ssh/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_atom_name/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_workspace/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.typeahead_clear/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.copy/;
+$external_latex_labels{$key} = q|6.1.16|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.rqgeom/;
+$external_latex_labels{$key} = q|6.2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tags_first/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_mark/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/screen_managed_changed_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_count/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$external_latex_labels{$key} = q|2.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_menu/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.move/;
+$external_latex_labels{$key} = q|6.1.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.get/;
+$external_latex_labels{$key} = q|6.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.flip_at/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.lookup_region/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defshortening/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.refresh_stylelist/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_about_ion/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.inc_index/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_delete_property/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_activity/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_runfile/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.set_context/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.show_tree/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.contents/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.exec/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.region_list/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.mx_current/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.message/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.compile_cmd/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:deref/;
+$external_latex_labels{$key} = q|6.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bol/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submenu/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_tagged/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.br/;
+$external_latex_labels{$key} = q|6.2.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.managed_list/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:string.shell_safe/;
+$external_latex_labels{$key} = q|6.1.15|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_restart/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.managed_list/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.set/;
+$external_latex_labels{$key} = q|6.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.backspace/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle/;
+$external_latex_labels{$key} = q|6.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroupWS.attach_framed/;
+$external_latex_labels{$key} = q|6.1.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:dockref/;
+$external_latex_labels{$key} = q|6.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.set_floating_at/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.warn/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.current/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqclose_propagate/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.clear_mark/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/tiling_placement_alt/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.warn/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.begin_kbresize/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:classesrolesinstances/;
+$external_latex_labels{$key} = q|3.5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_tagged/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.next_completion/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_hidden/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.cancel/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.nudge/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_nth_screen/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_mapped_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.set_fullscreen/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.paste/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.xid/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.name/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_get_text_property/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_attachclient/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.append/;
+$external_latex_labels{$key} = q|6.1.16|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mclick/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_index/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_clear/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.p_switch_tab/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_intern_atom/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.finish/;
+$external_latex_labels{$key} = q|6.1.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_gotoclient/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_deinit_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.geom/;
+$external_latex_labels{$key} = q|6.2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_previous/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.find_manager/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.get_paths/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:walkthrough/;
+$external_latex_labels{$key} = q|3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_numbers/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMoveresMode.cancel/;
+$external_latex_labels{$key} = q|6.1.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.submap/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_active/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.bkill_word/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.attach_new/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach/;
+$external_latex_labels{$key} = q|6.1.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdblclick/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.flip/;
+$external_latex_labels{$key} = q|6.2.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_top/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activity_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.progname/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.popen_completions/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.defwinprop/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.popen_bgread/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mdrag/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WClientWin.kill/;
+$external_latex_labels{$key} = q|6.1.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplit.transpose/;
+$external_latex_labels{$key} = q|6.2.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_snapshot_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clear_tags/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.map/;
+$external_latex_labels{$key} = q|6.1.16|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitSplit.dir/;
+$external_latex_labels{$key} = q|6.2.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WFrame.set_shaded/;
+$external_latex_labels{$key} = q|6.1.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.set_stdisp/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.manager/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.x_change_property/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.cancel/;
+$external_latex_labels{$key} = q|6.3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.parent/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMenu.finish/;
+$external_latex_labels{$key} = q|6.4.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.back/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.TR/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:menus/;
+$external_latex_labels{$key} = q|3.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_renameframe/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.geom/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.kpress_wait/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/clientwin_do_manage_alt/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rootwin_of/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.transpose_at/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_sigchld_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.match_winprop_name/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.nextto/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.get/;
+$external_latex_labels{$key} = q|6.5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.substyle/;
+$external_latex_labels{$key} = q|6.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.copy/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.is_histcompl/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getmenu/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.is_i18n/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:gr.refresh/;
+$external_latex_labels{$key} = q|6.1.14|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqorder/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.grabmenu/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WSplitRegion.reg/;
+$external_latex_labels{$key} = q|6.2.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.size_hints/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.delete/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.getwinprop/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tagged_list/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.request_selection/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_man/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.cut/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.goto/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.goto_next_screen/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set_paths/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:conffiles/;
+$external_latex_labels{$key} = q|3.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.clientwin_list/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.aboutmsg/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:prelim/;
+$external_latex_labels{$key} = q|2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.managed_list/;
+$external_latex_labels{$key} = q|6.1.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$external_latex_labels{$key} = q|2.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.read_savefile/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.restart_other/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.is_activity/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.rqgeom/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WInput.scrolldown/;
+$external_latex_labels{$key} = q|6.3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/region_activated_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.history_table/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:defaultde/;
+$external_latex_labels{$key} = q|4.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.set/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.mpress/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:tilingref/;
+$external_latex_labels{$key} = q|6.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_tiling.detach/;
+$external_latex_labels{$key} = q|6.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WRegion.set_name/;
+$external_latex_labels{$key} = q|6.1.9|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.join/;
+$external_latex_labels{$key} = q|6.1.16|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.activity_first/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:spref/;
+$external_latex_labels{$key} = q|6.6|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.is_hidden/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.get/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_yesno/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.history_next/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.eol/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.defcmd/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.bdoc/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.chdir_for/;
+$external_latex_labels{$key} = q|6.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_lua/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:export/;
+$external_latex_labels{$key} = q|6.1.13|; 
+$noresave{$key} = "$nosave";
+
+$key = q/chap:gr/;
+$external_latex_labels{$key} = q|4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_menu.set/;
+$external_latex_labels{$key} = q|6.4|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_word/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:de.defstyle_rootwin/;
+$external_latex_labels{$key} = q|6.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/ioncore_post_layout_setup_hook/;
+$external_latex_labels{$key} = q|6.8|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:table.icat/;
+$external_latex_labels{$key} = q|6.1.16|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.kill_line/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WDock.resize/;
+$external_latex_labels{$key} = q|6.5.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_query.query_shutdown/;
+$external_latex_labels{$key} = q|6.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WMPlex.get_index/;
+$external_latex_labels{$key} = q|6.1.7|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.skip_word/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.complete/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WGroup.attach_new/;
+$external_latex_labels{$key} = q|6.1.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WEdln.transpose_chars/;
+$external_latex_labels{$key} = q|6.3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTiling.split_tree/;
+$external_latex_labels{$key} = q|6.2.5|; 
+$noresave{$key} = "$nosave";
+
+1;
+
diff --git a/ionconf/next.png b/ionconf/next.png
new file mode 100644 (file)
index 0000000..1628652
Binary files /dev/null and b/ionconf/next.png differ
diff --git a/ionconf/next_g.png b/ionconf/next_g.png
new file mode 100644 (file)
index 0000000..9d3f591
Binary files /dev/null and b/ionconf/next_g.png differ
diff --git a/ionconf/node1.html b/ionconf/node1.html
new file mode 100644 (file)
index 0000000..ee25b4d
--- /dev/null
@@ -0,0 +1,276 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Contents</TITLE>
+<META NAME="description" CONTENT="Contents">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node2.html">
+<LINK REL="previous" HREF="ionconf.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node2.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html130"
+  HREF="node2.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html126"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html120"
+  HREF="ionconf.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>  
+<A NAME="tex2html128"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html131"
+  HREF="node2.html">1. Introduction</A>
+<B> Up:</B> <A NAME="tex2html127"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html121"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+ &nbsp; <B>  <A NAME="tex2html129"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION00100000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL CLASS="TofC">
+<LI><A NAME="tex2html132"
+  HREF="node2.html">1. Introduction</A>
+<LI><A NAME="tex2html133"
+  HREF="node3.html">2. Preliminaries: Key concepts and relations</A>
+<UL>
+<LI><A NAME="tex2html134"
+  HREF="node3.html#SECTION00310000000000000000">2.1 Modules</A>
+<LI><A NAME="tex2html135"
+  HREF="node3.html#SECTION00320000000000000000">2.2 Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html136"
+  HREF="node3.html#SECTION00321000000000000000">2.2.1 Class hierarchy</A>
+<LI><A NAME="tex2html137"
+  HREF="node3.html#SECTION00322000000000000000">2.2.2 Object hierarchies: WRegion parents and managers</A>
+<LI><A NAME="tex2html138"
+  HREF="node3.html#SECTION00323000000000000000">2.2.3 Summary</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html139"
+  HREF="node4.html">3. Basic configuration</A>
+<UL>
+<LI><A NAME="tex2html140"
+  HREF="node4.html#SECTION00410000000000000000">3.1 The configuration files</A>
+<LI><A NAME="tex2html141"
+  HREF="node4.html#SECTION00420000000000000000">3.2 A walk through cfg_ion.lua</A>
+<LI><A NAME="tex2html142"
+  HREF="node4.html#SECTION00430000000000000000">3.3 Keys and rodents</A>
+<UL>
+<LI><A NAME="tex2html143"
+  HREF="node4.html#SECTION00431000000000000000">3.3.1 Binding handlers and special variables</A>
+<LI><A NAME="tex2html144"
+  HREF="node4.html#SECTION00432000000000000000">3.3.2 Guards</A>
+<LI><A NAME="tex2html145"
+  HREF="node4.html#SECTION00433000000000000000">3.3.3 Defining the bindings</A>
+<LI><A NAME="tex2html146"
+  HREF="node4.html#SECTION00434000000000000000">3.3.4 Examples</A>
+<LI><A NAME="tex2html147"
+  HREF="node4.html#SECTION00435000000000000000">3.3.5 Key specifications</A>
+<LI><A NAME="tex2html148"
+  HREF="node4.html#SECTION00436000000000000000">3.3.6 Button specifications</A>
+<LI><A NAME="tex2html149"
+  HREF="node4.html#SECTION00437000000000000000">3.3.7 A further note on the default binding configuration</A>
+</UL>
+<LI><A NAME="tex2html150"
+  HREF="node4.html#SECTION00440000000000000000">3.4 Menus</A>
+<UL>
+<LI><A NAME="tex2html151"
+  HREF="node4.html#SECTION00441000000000000000">3.4.1 Defining menus</A>
+<LI><A NAME="tex2html152"
+  HREF="node4.html#SECTION00442000000000000000">3.4.2 Special menus</A>
+<LI><A NAME="tex2html153"
+  HREF="node4.html#SECTION00443000000000000000">3.4.3 Defining context menus</A>
+<LI><A NAME="tex2html154"
+  HREF="node4.html#SECTION00444000000000000000">3.4.4 Displaying menus</A>
+</UL>
+<LI><A NAME="tex2html155"
+  HREF="node4.html#SECTION00450000000000000000">3.5 Winprops</A>
+<UL>
+<LI><A NAME="tex2html156"
+  HREF="node4.html#SECTION00451000000000000000">3.5.1 Classes, roles and instances</A>
+<LI><A NAME="tex2html157"
+  HREF="node4.html#SECTION00452000000000000000">3.5.2 Finding window identification</A>
+<LI><A NAME="tex2html158"
+  HREF="node4.html#SECTION00453000000000000000">3.5.3 Some common examples</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html159"
+  HREF="node5.html">4. Graphical styles</A>
+<UL>
+<LI><A NAME="tex2html160"
+  HREF="node5.html#SECTION00510000000000000000">4.1 Drawing engines, style specifications and sub-styles</A>
+<UL>
+<LI><A NAME="tex2html161"
+  HREF="node5.html#SECTION00511000000000000000">4.1.1 Known styles and substyles</A>
+</UL>
+<LI><A NAME="tex2html162"
+  HREF="node5.html#SECTION00520000000000000000">4.2 Defining styles for the default drawing engine</A>
+<UL>
+<LI><A NAME="tex2html163"
+  HREF="node5.html#SECTION00521000000000000000">4.2.1 The structure of the configuration files</A>
+<LI><A NAME="tex2html164"
+  HREF="node5.html#SECTION00522000000000000000">4.2.2 Defining the styles</A>
+<LI><A NAME="tex2html165"
+  HREF="node5.html#SECTION00523000000000000000">4.2.3 An example</A>
+</UL>
+<LI><A NAME="tex2html166"
+  HREF="node5.html#SECTION00530000000000000000">4.3 Miscellaneous settings</A>
+<UL>
+<LI><A NAME="tex2html167"
+  HREF="node5.html#SECTION00531000000000000000">4.3.1 Extra fields for style frame</A>
+<LI><A NAME="tex2html168"
+  HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style dock</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html169"
+  HREF="node6.html">5. Scripting</A>
+<UL>
+<LI><A NAME="tex2html170"
+  HREF="node6.html#SECTION00610000000000000000">5.1 Hooks</A>
+<LI><A NAME="tex2html171"
+  HREF="node6.html#SECTION00620000000000000000">5.2 Referring to regions</A>
+<UL>
+<LI><A NAME="tex2html172"
+  HREF="node6.html#SECTION00621000000000000000">5.2.1 Direct object references</A>
+<LI><A NAME="tex2html173"
+  HREF="node6.html#SECTION00622000000000000000">5.2.2 Name-based lookups</A>
+</UL>
+<LI><A NAME="tex2html174"
+  HREF="node6.html#SECTION00630000000000000000">5.3 Alternative winprop selection criteria</A>
+<LI><A NAME="tex2html175"
+  HREF="node6.html#SECTION00640000000000000000">5.4 Writing ion-statusd monitors</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html176"
+  HREF="node7.html">6. Function reference</A>
+<UL>
+<LI><A NAME="tex2html177"
+  HREF="node7.html#SECTION00710000000000000000">6.1 Functions defined in ioncore</A>
+<UL>
+<LI><A NAME="tex2html178"
+  HREF="node7.html#SECTION00711000000000000000">6.1.1 WClientWin functions</A>
+<LI><A NAME="tex2html179"
+  HREF="node7.html#SECTION00712000000000000000">6.1.2 WFrame functions</A>
+<LI><A NAME="tex2html180"
+  HREF="node7.html#SECTION00713000000000000000">6.1.3 WGroup functions</A>
+<LI><A NAME="tex2html181"
+  HREF="node7.html#SECTION00714000000000000000">6.1.4 WGroupCW functions</A>
+<LI><A NAME="tex2html182"
+  HREF="node7.html#SECTION00715000000000000000">6.1.5 WGroupWS functions</A>
+<LI><A NAME="tex2html183"
+  HREF="node7.html#SECTION00716000000000000000">6.1.6 WInfoWin functions</A>
+<LI><A NAME="tex2html184"
+  HREF="node7.html#SECTION00717000000000000000">6.1.7 WMPlex functions</A>
+<LI><A NAME="tex2html185"
+  HREF="node7.html#SECTION00718000000000000000">6.1.8 WMoveresMode functions</A>
+<LI><A NAME="tex2html186"
+  HREF="node7.html#SECTION00719000000000000000">6.1.9 WRegion functions</A>
+<LI><A NAME="tex2html187"
+  HREF="node7.html#SECTION007110000000000000000">6.1.10 WRootWin functions</A>
+<LI><A NAME="tex2html188"
+  HREF="node7.html#SECTION007111000000000000000">6.1.11 WScreen functions</A>
+<LI><A NAME="tex2html189"
+  HREF="node7.html#SECTION007112000000000000000">6.1.12 WWindow functions</A>
+<LI><A NAME="tex2html190"
+  HREF="node7.html#SECTION007113000000000000000">6.1.13 global functions</A>
+<LI><A NAME="tex2html191"
+  HREF="node7.html#SECTION007114000000000000000">6.1.14 gr functions</A>
+<LI><A NAME="tex2html192"
+  HREF="node7.html#SECTION007115000000000000000">6.1.15 string functions</A>
+<LI><A NAME="tex2html193"
+  HREF="node7.html#SECTION007116000000000000000">6.1.16 table functions</A>
+</UL>
+<LI><A NAME="tex2html194"
+  HREF="node7.html#SECTION00720000000000000000">6.2 Functions defined in mod_tiling</A>
+<UL>
+<LI><A NAME="tex2html195"
+  HREF="node7.html#SECTION00721000000000000000">6.2.1 WSplit functions</A>
+<LI><A NAME="tex2html196"
+  HREF="node7.html#SECTION00722000000000000000">6.2.2 WSplitInner functions</A>
+<LI><A NAME="tex2html197"
+  HREF="node7.html#SECTION00723000000000000000">6.2.3 WSplitRegion functions</A>
+<LI><A NAME="tex2html198"
+  HREF="node7.html#SECTION00724000000000000000">6.2.4 WSplitSplit functions</A>
+<LI><A NAME="tex2html199"
+  HREF="node7.html#SECTION00725000000000000000">6.2.5 WTiling functions</A>
+</UL>
+<LI><A NAME="tex2html200"
+  HREF="node7.html#SECTION00730000000000000000">6.3 Functions defined in mod_query</A>
+<UL>
+<LI><A NAME="tex2html201"
+  HREF="node7.html#SECTION00731000000000000000">6.3.1 WComplProxy functions</A>
+<LI><A NAME="tex2html202"
+  HREF="node7.html#SECTION00732000000000000000">6.3.2 WEdln functions</A>
+<LI><A NAME="tex2html203"
+  HREF="node7.html#SECTION00733000000000000000">6.3.3 WInput functions</A>
+</UL>
+<LI><A NAME="tex2html204"
+  HREF="node7.html#SECTION00740000000000000000">6.4 Functions defined in mod_menu</A>
+<UL>
+<LI><A NAME="tex2html205"
+  HREF="node7.html#SECTION00741000000000000000">6.4.1 WMenu functions</A>
+</UL>
+<LI><A NAME="tex2html206"
+  HREF="node7.html#SECTION00750000000000000000">6.5 Functions defined in mod_dock</A>
+<UL>
+<LI><A NAME="tex2html207"
+  HREF="node7.html#SECTION00751000000000000000">6.5.1 WDock functions</A>
+</UL>
+<LI><A NAME="tex2html208"
+  HREF="node7.html#SECTION00760000000000000000">6.6 Functions defined in mod_sp</A>
+<LI><A NAME="tex2html209"
+  HREF="node7.html#SECTION00770000000000000000">6.7 Functions defined in de</A>
+<LI><A NAME="tex2html210"
+  HREF="node7.html#SECTION00780000000000000000">6.8 Hooks</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html211"
+  HREF="node8.html">A. The GNU General Public License</A>
+<LI><A NAME="tex2html212"
+  HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
+<LI><A NAME="tex2html213"
+  HREF="node11.html">Index</A>
+</UL>
+<!--End of Table of Contents-->
+<P>
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/node10.html b/ionconf/node10.html
new file mode 100644 (file)
index 0000000..f33c3b7
--- /dev/null
@@ -0,0 +1,377 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>List of functions</TITLE>
+<META NAME="description" CONTENT="List of functions">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node11.html">
+<LINK REL="previous" HREF="node9.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node11.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html425"
+  HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html419"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html413"
+  HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html421"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html423"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html426"
+  HREF="node11.html">Index</A>
+<B> Up:</B> <A NAME="tex2html420"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html414"
+  HREF="node9.html">B. Full class hierarchy</A>
+ &nbsp; <B>  <A NAME="tex2html422"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html424"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION001000000000000000000">
+List of functions</A>
+</H1>
+
+<P>
+<A HREF="node7.html#fn:de.defstyle"><TT>de.defstyle</TT></A>
+<BR><A HREF="node7.html#fn:de.defstyle_rootwin"><TT>de.defstyle_rootwin</TT></A>
+<BR><A HREF="node7.html#fn:de.reset"><TT>de.reset</TT></A>
+<BR><A HREF="node7.html#fn:de.substyle"><TT>de.substyle</TT></A>
+<BR><A HREF="node7.html#fn:export"><TT>export</TT></A>
+<BR><A HREF="node7.html#fn:gr.read_config"><TT>gr.read_config</TT></A>
+<BR><A HREF="node7.html#fn:gr.refresh"><TT>gr.refresh</TT></A>
+<BR><A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.aboutmsg"><TT>ioncore.aboutmsg</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.activity_first"><TT>ioncore.activity_first</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.activity_list"><TT>ioncore.activity_list</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.bdoc"><TT>ioncore.bdoc</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.chdir_for"><TT>ioncore.chdir_for</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.clear_tags"><TT>ioncore.clear_tags</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.clientwin_list"><TT>ioncore.clientwin_list</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.compile_cmd"><TT>ioncore.compile_cmd</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.create_ws"><TT>ioncore.create_ws</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.current"><TT>ioncore.current</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defbindings"><TT>ioncore.defbindings</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defctxmenu"><TT>ioncore.defctxmenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defmenu"><TT>ioncore.defmenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defshortening"><TT>ioncore.defshortening</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defwinprop"><TT>ioncore.defwinprop</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.exec"><TT>ioncore.exec</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.exec_on"><TT>ioncore.exec_on</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.find_manager"><TT>ioncore.find_manager</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.find_screen_id"><TT>ioncore.find_screen_id</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.get"><TT>ioncore.get</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.getbindings"><TT>ioncore.getbindings</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.getctxmenu"><TT>ioncore.getctxmenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.get_dir_for"><TT>ioncore.get_dir_for</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.getmenu"><TT>ioncore.getmenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.get_paths"><TT>ioncore.get_paths</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.get_savefile"><TT>ioncore.get_savefile</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.getwinprop"><TT>ioncore.getwinprop</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_activity"><TT>ioncore.goto_activity</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_first"><TT>ioncore.goto_first</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_next"><TT>ioncore.goto_next</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_next_screen"><TT>ioncore.goto_next_screen</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_nth_screen"><TT>ioncore.goto_nth_screen</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_previous"><TT>ioncore.goto_previous</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.goto_prev_screen"><TT>ioncore.goto_prev_screen</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.is_i18n"><TT>ioncore.is_i18n</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.kpress"><TT>ioncore.kpress</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.kpress_wait"><TT>ioncore.kpress_wait</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.load_module"><TT>ioncore.load_module</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.lookup_clientwin"><TT>ioncore.lookup_clientwin</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.lookup_region"><TT>ioncore.lookup_region</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.lookup_script"><TT>ioncore.lookup_script</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.match_winprop_name"><TT>ioncore.match_winprop_name</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.mclick"><TT>ioncore.mclick</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.mdblclick"><TT>ioncore.mdblclick</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.mdrag"><TT>ioncore.mdrag</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.menuentry"><TT>ioncore.menuentry</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.mpress"><TT>ioncore.mpress</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.navi_first"><TT>ioncore.navi_first</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.popen_bgread"><TT>ioncore.popen_bgread</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.progname"><TT>ioncore.progname</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.read_savefile"><TT>ioncore.read_savefile</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.refresh_stylelist"><TT>ioncore.refresh_stylelist</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.region_list"><TT>ioncore.region_list</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.request_selection"><TT>ioncore.request_selection</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.resign"><TT>ioncore.resign</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.restart"><TT>ioncore.restart</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.restart_other"><TT>ioncore.restart_other</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.set"><TT>ioncore.set</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.set_get_winprop_fn"><TT>ioncore.set_get_winprop_fn</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.set_paths"><TT>ioncore.set_paths</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.set_selection"><TT>ioncore.set_selection</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.shutdown"><TT>ioncore.shutdown</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.snapshot"><TT>ioncore.snapshot</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.submap"><TT>ioncore.submap</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.submenu"><TT>ioncore.submenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.tagged_list"><TT>ioncore.tagged_list</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.tags_first"><TT>ioncore.tags_first</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.TR"><TT>ioncore.TR</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.version"><TT>ioncore.version</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.warn"><TT>ioncore.warn</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.warn_traced"><TT>ioncore.warn_traced</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.write_savefile"><TT>ioncore.write_savefile</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_change_property"><TT>ioncore.x_change_property</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_delete_property"><TT>ioncore.x_delete_property</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_get_atom_name"><TT>ioncore.x_get_atom_name</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_get_text_property"><TT>ioncore.x_get_text_property</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_get_window_property"><TT>ioncore.x_get_window_property</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_intern_atom"><TT>ioncore.x_intern_atom</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.x_set_text_property"><TT>ioncore.x_set_text_property</TT></A>
+<BR><A HREF="node7.html#fn:mod_dock.set_floating_shown_on"><TT>mod_dock.set_floating_shown_on</TT></A>
+<BR><A HREF="node7.html#fn:mod_menu.get"><TT>mod_menu.get</TT></A>
+<BR><A HREF="node7.html#fn:mod_menu.grabmenu"><TT>mod_menu.grabmenu</TT></A>
+<BR><A HREF="node7.html#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A>
+<BR><A HREF="node7.html#fn:mod_menu.pmenu"><TT>mod_menu.pmenu</TT></A>
+<BR><A HREF="node7.html#fn:mod_menu.set"><TT>mod_menu.set</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.defcmd"><TT>mod_query.defcmd</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.get"><TT>mod_query.get</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.history_clear"><TT>mod_query.history_clear</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.history_get"><TT>mod_query.history_get</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.history_push"><TT>mod_query.history_push</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.history_search"><TT>mod_query.history_search</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.history_table"><TT>mod_query.history_table</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.message"><TT>mod_query.message</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.popen_completions"><TT>mod_query.popen_completions</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query"><TT>mod_query.query</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_attachclient"><TT>mod_query.query_attachclient</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_editfile"><TT>mod_query.query_editfile</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_exec"><TT>mod_query.query_exec</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_gotoclient"><TT>mod_query.query_gotoclient</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_lua"><TT>mod_query.query_lua</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_man"><TT>mod_query.query_man</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_menu"><TT>mod_query.query_menu</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_renameframe"><TT>mod_query.query_renameframe</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_renameworkspace"><TT>mod_query.query_renameworkspace</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_restart"><TT>mod_query.query_restart</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_runfile"><TT>mod_query.query_runfile</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_shutdown"><TT>mod_query.query_shutdown</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_ssh"><TT>mod_query.query_ssh</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_workspace"><TT>mod_query.query_workspace</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.query_yesno"><TT>mod_query.query_yesno</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.set"><TT>mod_query.set</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.show_about_ion"><TT>mod_query.show_about_ion</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.show_tree"><TT>mod_query.show_tree</TT></A>
+<BR><A HREF="node7.html#fn:mod_query.warn"><TT>mod_query.warn</TT></A>
+<BR><A HREF="node7.html#fn:mod_sp.set_shown"><TT>mod_sp.set_shown</TT></A>
+<BR><A HREF="node7.html#fn:mod_sp.set_shown_on"><TT>mod_sp.set_shown_on</TT></A>
+<BR><A HREF="node7.html#fn:mod_tiling.detach"><TT>mod_tiling.detach</TT></A>
+<BR><A HREF="node7.html#fn:mod_tiling.get"><TT>mod_tiling.get</TT></A>
+<BR><A HREF="node7.html#fn:mod_tiling.mkbottom"><TT>mod_tiling.mkbottom</TT></A>
+<BR><A HREF="node7.html#fn:mod_tiling.set"><TT>mod_tiling.set</TT></A>
+<BR><A HREF="node7.html#fn:string.shell_safe"><TT>string.shell_safe</TT></A>
+<BR><A HREF="node7.html#fn:table.append"><TT>table.append</TT></A>
+<BR><A HREF="node7.html#fn:table.copy"><TT>table.copy</TT></A>
+<BR><A HREF="node7.html#fn:table.icat"><TT>table.icat</TT></A>
+<BR><A HREF="node7.html#fn:table.join"><TT>table.join</TT></A>
+<BR><A HREF="node7.html#fn:table.map"><TT>table.map</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.get_ident"><TT>WClientWin.get_ident</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.is_fullscreen"><TT>WClientWin.is_fullscreen</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.kill"><TT>WClientWin.kill</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.nudge"><TT>WClientWin.nudge</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.quote_next"><TT>WClientWin.quote_next</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.set_fullscreen"><TT>WClientWin.set_fullscreen</TT></A>
+<BR><A HREF="node7.html#fn:WClientWin.xid"><TT>WClientWin.xid</TT></A>
+<BR><A HREF="node7.html#fn:WComplProxy.set_completions"><TT>WComplProxy.set_completions</TT></A>
+<BR><A HREF="node7.html#fn:WDock.attach"><TT>WDock.attach</TT></A>
+<BR><A HREF="node7.html#fn:WDock.get"><TT>WDock.get</TT></A>
+<BR><A HREF="node7.html#fn:WDock.resize"><TT>WDock.resize</TT></A>
+<BR><A HREF="node7.html#fn:WDock.set"><TT>WDock.set</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.back"><TT>WEdln.back</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.backspace"><TT>WEdln.backspace</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.bkill_word"><TT>WEdln.bkill_word</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.bol"><TT>WEdln.bol</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.bskip_word"><TT>WEdln.bskip_word</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.clear_mark"><TT>WEdln.clear_mark</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.complete"><TT>WEdln.complete</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.contents"><TT>WEdln.contents</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.context"><TT>WEdln.context</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.copy"><TT>WEdln.copy</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.cut"><TT>WEdln.cut</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.delete"><TT>WEdln.delete</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.eol"><TT>WEdln.eol</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.finish"><TT>WEdln.finish</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.forward"><TT>WEdln.forward</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.history_next"><TT>WEdln.history_next</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.history_prev"><TT>WEdln.history_prev</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.insstr"><TT>WEdln.insstr</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.is_histcompl"><TT>WEdln.is_histcompl</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.kill_line"><TT>WEdln.kill_line</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.kill_to_bol"><TT>WEdln.kill_to_bol</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.kill_to_eol"><TT>WEdln.kill_to_eol</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.kill_word"><TT>WEdln.kill_word</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.mark"><TT>WEdln.mark</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.next_completion"><TT>WEdln.next_completion</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.paste"><TT>WEdln.paste</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.point"><TT>WEdln.point</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.prev_completion"><TT>WEdln.prev_completion</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.set_context"><TT>WEdln.set_context</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.set_mark"><TT>WEdln.set_mark</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.skip_word"><TT>WEdln.skip_word</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.transpose_chars"><TT>WEdln.transpose_chars</TT></A>
+<BR><A HREF="node7.html#fn:WEdln.transpose_words"><TT>WEdln.transpose_words</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.is_shaded"><TT>WFrame.is_shaded</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.maximize_horiz"><TT>WFrame.maximize_horiz</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.maximize_vert"><TT>WFrame.maximize_vert</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.mode"><TT>WFrame.mode</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.p_switch_tab"><TT>WFrame.p_switch_tab</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.p_tabdrag"><TT>WFrame.p_tabdrag</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.set_mode"><TT>WFrame.set_mode</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.set_numbers"><TT>WFrame.set_numbers</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.set_shaded"><TT>WFrame.set_shaded</TT></A>
+<BR><A HREF="node7.html#fn:WGroup.attach"><TT>WGroup.attach</TT></A>
+<BR><A HREF="node7.html#fn:WGroup.attach_new"><TT>WGroup.attach_new</TT></A>
+<BR><A HREF="node7.html#fn:WGroup.bottom"><TT>WGroup.bottom</TT></A>
+<BR><A HREF="node7.html#fn:WGroup.managed_list"><TT>WGroup.managed_list</TT></A>
+<BR><A HREF="node7.html#fn:WGroupWS.attach_framed"><TT>WGroupWS.attach_framed</TT></A>
+<BR><A HREF="node7.html#fn:WInfoWin.set_text"><TT>WInfoWin.set_text</TT></A>
+<BR><A HREF="node7.html#fn:WInput.cancel"><TT>WInput.cancel</TT></A>
+<BR><A HREF="node7.html#fn:WInput.scrolldown"><TT>WInput.scrolldown</TT></A>
+<BR><A HREF="node7.html#fn:WInput.scrollup"><TT>WInput.scrollup</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.cancel"><TT>WMenu.cancel</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.finish"><TT>WMenu.finish</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.select_next"><TT>WMenu.select_next</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.select_nth"><TT>WMenu.select_nth</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.select_prev"><TT>WMenu.select_prev</TT></A>
+<BR><A HREF="node7.html#fn:WMenu.typeahead_clear"><TT>WMenu.typeahead_clear</TT></A>
+<BR><A HREF="node7.html#fn:WMoveresMode.cancel"><TT>WMoveresMode.cancel</TT></A>
+<BR><A HREF="node7.html#fn:WMoveresMode.finish"><TT>WMoveresMode.finish</TT></A>
+<BR><A HREF="node7.html#fn:WMoveresMode.move"><TT>WMoveresMode.move</TT></A>
+<BR><A HREF="node7.html#fn:WMoveresMode.resize"><TT>WMoveresMode.resize</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.attach"><TT>WMPlex.attach</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.attach_tagged"><TT>WMPlex.attach_tagged</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.dec_index"><TT>WMPlex.dec_index</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.get_index"><TT>WMPlex.get_index</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.get_stdisp"><TT>WMPlex.get_stdisp</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.inc_index"><TT>WMPlex.inc_index</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.is_hidden"><TT>WMPlex.is_hidden</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.managed_list"><TT>WMPlex.managed_list</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.mx_count"><TT>WMPlex.mx_count</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.mx_current"><TT>WMPlex.mx_current</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.mx_list"><TT>WMPlex.mx_list</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.mx_nth"><TT>WMPlex.mx_nth</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.set_hidden"><TT>WMPlex.set_hidden</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.set_index"><TT>WMPlex.set_index</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.set_stdisp"><TT>WMPlex.set_stdisp</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.switch_next"><TT>WMPlex.switch_next</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.switch_nth"><TT>WMPlex.switch_nth</TT></A>
+<BR><A HREF="node7.html#fn:WMPlex.switch_prev"><TT>WMPlex.switch_prev</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.begin_kbresize"><TT>WRegion.begin_kbresize</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.current"><TT>WRegion.current</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.geom"><TT>WRegion.geom</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.goto"><TT>WRegion.goto</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.is_active"><TT>WRegion.is_active</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.is_activity"><TT>WRegion.is_activity</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.is_mapped"><TT>WRegion.is_mapped</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.is_tagged"><TT>WRegion.is_tagged</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.manager"><TT>WRegion.manager</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.name"><TT>WRegion.name</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.parent"><TT>WRegion.parent</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.rootwin_of"><TT>WRegion.rootwin_of</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.rqclose_propagate"><TT>WRegion.rqclose_propagate</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.rqgeom"><TT>WRegion.rqgeom</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.rqorder"><TT>WRegion.rqorder</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.screen_of"><TT>WRegion.screen_of</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.set_activity"><TT>WRegion.set_activity</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.set_name"><TT>WRegion.set_name</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.set_name_exact"><TT>WRegion.set_name_exact</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.set_tagged"><TT>WRegion.set_tagged</TT></A>
+<BR><A HREF="node7.html#fn:WRegion.size_hints"><TT>WRegion.size_hints</TT></A>
+<BR><A HREF="node7.html#fn:WRootWin.current_scr"><TT>WRootWin.current_scr</TT></A>
+<BR><A HREF="node7.html#fn:WScreen.id"><TT>WScreen.id</TT></A>
+<BR><A HREF="node7.html#fn:WScreen.set_managed_offset"><TT>WScreen.set_managed_offset</TT></A>
+<BR><A HREF="node7.html#fn:WSplit.geom"><TT>WSplit.geom</TT></A>
+<BR><A HREF="node7.html#fn:WSplitInner.current"><TT>WSplitInner.current</TT></A>
+<BR><A HREF="node7.html#fn:WSplit.parent"><TT>WSplit.parent</TT></A>
+<BR><A HREF="node7.html#fn:WSplitRegion.reg"><TT>WSplitRegion.reg</TT></A>
+<BR><A HREF="node7.html#fn:WSplit.rqgeom"><TT>WSplit.rqgeom</TT></A>
+<BR><A HREF="node7.html#fn:WSplitSplit.br"><TT>WSplitSplit.br</TT></A>
+<BR><A HREF="node7.html#fn:WSplitSplit.dir"><TT>WSplitSplit.dir</TT></A>
+<BR><A HREF="node7.html#fn:WSplitSplit.flip"><TT>WSplitSplit.flip</TT></A>
+<BR><A HREF="node7.html#fn:WSplitSplit.tl"><TT>WSplitSplit.tl</TT></A>
+<BR><A HREF="node7.html#fn:WSplit.transpose"><TT>WSplit.transpose</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.farthest"><TT>WTiling.farthest</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.flip_at"><TT>WTiling.flip_at</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.managed_list"><TT>WTiling.managed_list</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.nextto"><TT>WTiling.nextto</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.node_of"><TT>WTiling.node_of</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.set_floating"><TT>WTiling.set_floating</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.set_floating_at"><TT>WTiling.set_floating_at</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.split"><TT>WTiling.split</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.split_at"><TT>WTiling.split_at</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.split_top"><TT>WTiling.split_top</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.split_tree"><TT>WTiling.split_tree</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.transpose_at"><TT>WTiling.transpose_at</TT></A>
+<BR><A HREF="node7.html#fn:WTiling.unsplit_at"><TT>WTiling.unsplit_at</TT></A>
+<BR><A HREF="node7.html#fn:WWindow.p_move"><TT>WWindow.p_move</TT></A>
+<BR><A HREF="node7.html#fn:WWindow.p_resize"><TT>WWindow.p_resize</TT></A>
+<BR><A HREF="node7.html#fn:WWindow.xid"><TT>WWindow.xid</TT></A>
+<BR>
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html425"
+  HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html419"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html413"
+  HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html421"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html423"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html426"
+  HREF="node11.html">Index</A>
+<B> Up:</B> <A NAME="tex2html420"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html414"
+  HREF="node9.html">B. Full class hierarchy</A>
+ &nbsp; <B>  <A NAME="tex2html422"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html424"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node11.html b/ionconf/node11.html
new file mode 100644 (file)
index 0000000..2c12ab2
--- /dev/null
@@ -0,0 +1,1091 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Index</TITLE>
+<META NAME="description" CONTENT="Index">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node12.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node12.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html437"
+  HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html433"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html427"
+  HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html435"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>  
+<BR>
+<B> Next:</B> <A NAME="tex2html438"
+  HREF="node12.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html434"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html428"
+  HREF="node10.html">List of functions</A>
+ &nbsp; <B>  <A NAME="tex2html436"
+  HREF="node1.html">Contents</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION001100000000000000000">
+Index</A>
+</H2><HR><DL>
+<DD><STRONG><TT>aboutmsg</TT></STRONG>
+ : <A HREF="node7.html#4229"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>acrobatic</TT></STRONG>
+ : <A HREF="node4.html#1410"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>activity_first</TT></STRONG>
+ : <A HREF="node7.html#4231"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>activity_list</TT></STRONG>
+ : <A HREF="node7.html#4233"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Alt</SPAN></STRONG>
+ : <A HREF="node4.html#865"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">AnyModifier</SPAN></STRONG>
+ : <A HREF="node4.html#863"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>append</TT></STRONG>
+ : <A HREF="node7.html#4520"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>aspect</TT></STRONG>
+ : <A HREF="node4.html#1411"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>attach</TT></STRONG>
+ : <A HREF="node7.html#4384"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#4400"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+ | <A HREF="node7.html#9001"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>attach_framed</TT></STRONG>
+ : <A HREF="node7.html#4394"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>attach_new</TT></STRONG>
+ : <A HREF="node7.html#4386"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#4402"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>attach_tagged</TT></STRONG>
+ : <A HREF="node7.html#4404"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>back</TT></STRONG>
+ : <A HREF="node7.html#7896"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>backspace</TT></STRONG>
+ : <A HREF="node7.html#7898"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bdoc</TT></STRONG>
+ : <A HREF="node7.html#4191"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>begin_kbresize</TT></STRONG>
+ : <A HREF="node7.html#4448"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>bkill_word</TT></STRONG>
+ : <A HREF="node7.html#7900"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bol</TT></STRONG>
+ : <A HREF="node7.html#7902"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bottom</TT></STRONG>
+ : <A HREF="node7.html#4388"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>br</TT></STRONG>
+ : <A HREF="node7.html#6806"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>bskip_word</TT></STRONG>
+ : <A HREF="node7.html#7904"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Button-n</SPAN></STRONG>
+ : <A HREF="node4.html#869"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DD><STRONG><TT>cancel</TT></STRONG>
+ : <A HREF="node7.html#4439"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+ | <A HREF="node7.html#7963"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#8789"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>chdir_for</TT></STRONG>
+ : <A HREF="node7.html#4193"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>class</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1426"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>clear_mark</TT></STRONG>
+ : <A HREF="node7.html#7906"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>clear_tags</TT></STRONG>
+ : <A HREF="node7.html#4235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>clientwin_do_manage_alt</TT></STRONG>
+ : <A HREF="node7.html#9401"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>clientwin_list</TT></STRONG>
+ : <A HREF="node7.html#4237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>clientwin_mapped_hook</TT></STRONG>
+ : <A HREF="node7.html#9402"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>clientwin_unmapped_hook</TT></STRONG>
+ : <A HREF="node7.html#9403"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>compile_cmd</TT></STRONG>
+ : <A HREF="node7.html#4195"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>complete</TT></STRONG>
+ : <A HREF="node7.html#7908"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>contents</TT></STRONG>
+ : <A HREF="node7.html#7910"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>context</TT></STRONG>
+ : <A HREF="node7.html#7912"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Control</SPAN></STRONG>
+ : <A HREF="node4.html#861"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>copy</TT></STRONG>
+ : <A HREF="node7.html#4522"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+ | <A HREF="node7.html#7914"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>create_ws</TT></STRONG>
+ : <A HREF="node7.html#4197"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>current</TT></STRONG>
+ : <A HREF="node7.html#4239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4450"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ | <A HREF="node7.html#6800"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>current_scr</TT></STRONG>
+ : <A HREF="node7.html#4493"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
+<DD><STRONG><TT>cut</TT></STRONG>
+ : <A HREF="node7.html#7916"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>de</TT></STRONG><DL>
+<DD><STRONG><TT>defstyle</TT></STRONG> : <A HREF="node7.html#9173"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>defstyle_rootwin</TT></STRONG> : <A HREF="node7.html#9175"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>reset</TT></STRONG> : <A HREF="node7.html#9177"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>substyle</TT></STRONG> : <A HREF="node7.html#9179"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+</DL>
+<DD><STRONG><TT>dec_index</TT></STRONG>
+ : <A HREF="node7.html#4406"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>defbindings</TT></STRONG>
+ : <A HREF="node7.html#4199"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defcmd</TT></STRONG>
+ : <A HREF="node7.html#7833"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>defctxmenu</TT></STRONG>
+ : <A HREF="node7.html#4201"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defmenu</TT></STRONG>
+ : <A HREF="node4.html#1170"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4203"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defshortening</TT></STRONG>
+ : <A HREF="node7.html#4241"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defstyle</TT></STRONG>
+ : <A HREF="node7.html#9174"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>defstyle_rootwin</TT></STRONG>
+ : <A HREF="node7.html#9176"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>defwinprop</TT></STRONG>
+ : <A HREF="node7.html#4205"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>delete</TT></STRONG>
+ : <A HREF="node7.html#7918"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>detach</TT></STRONG>
+ : <A HREF="node7.html#6782"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>dir</TT></STRONG>
+ : <A HREF="node7.html#6808"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG>drawing engine</STRONG>
+ : <A HREF="node5.html#1666"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>eol</TT></STRONG>
+ : <A HREF="node7.html#7920"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>ETCDIR</TT></STRONG>
+ : <A HREF="node4.html#586"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>exec</TT></STRONG>
+ : <A HREF="node7.html#4243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>exec_on</TT></STRONG>
+ : <A HREF="node7.html#4207"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>export</TT></STRONG>
+ : <A HREF="node7.html#4507"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN></A>
+<DD><STRONG><TT>farthest</TT></STRONG>
+ : <A HREF="node7.html#6819"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>find_manager</TT></STRONG>
+ : <A HREF="node7.html#4217"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>find_screen_id</TT></STRONG>
+ : <A HREF="node7.html#4245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>finish</TT></STRONG>
+ : <A HREF="node7.html#4441"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+ | <A HREF="node7.html#7922"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ | <A HREF="node7.html#8791"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>flip</TT></STRONG>
+ : <A HREF="node7.html#6810"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>flip_at</TT></STRONG>
+ : <A HREF="node7.html#6815"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>float</TT></STRONG>
+ : <A HREF="node4.html#1412"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>forward</TT></STRONG>
+ : <A HREF="node7.html#7924"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>frame_managed_changed_hook</TT></STRONG>
+ : <A HREF="node7.html#9404"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>fullscreen</TT></STRONG>
+ : <A HREF="node4.html#1413"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>geom</TT></STRONG>
+ : <A HREF="node7.html#4452"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ | <A HREF="node7.html#6791"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get</TT></STRONG>
+ : <A HREF="node7.html#4247"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#6784"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ | <A HREF="node7.html#7835"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#8782"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ | <A HREF="node7.html#9003"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_dir_for</TT></STRONG>
+ : <A HREF="node7.html#4219"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_ident</TT></STRONG>
+ : <A HREF="node7.html#4350"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_index</TT></STRONG>
+ : <A HREF="node7.html#4408"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>get_paths</TT></STRONG>
+ : <A HREF="node7.html#4249"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_savefile</TT></STRONG>
+ : <A HREF="node7.html#4211"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_stdisp</TT></STRONG>
+ : <A HREF="node7.html#4410"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>getbindings</TT></STRONG>
+ : <A HREF="node7.html#4221"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getctxmenu</TT></STRONG>
+ : <A HREF="node7.html#4223"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getmenu</TT></STRONG>
+ : <A HREF="node7.html#4225"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getwinprop</TT></STRONG>
+ : <A HREF="node7.html#4227"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto</TT></STRONG>
+ : <A HREF="node7.html#4454"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>goto_activity</TT></STRONG>
+ : <A HREF="node7.html#4251"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_first</TT></STRONG>
+ : <A HREF="node7.html#4253"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_next</TT></STRONG>
+ : <A HREF="node7.html#4255"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_next_screen</TT></STRONG>
+ : <A HREF="node7.html#4257"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_nth_screen</TT></STRONG>
+ : <A HREF="node7.html#4259"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_prev_screen</TT></STRONG>
+ : <A HREF="node7.html#4261"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_previous</TT></STRONG>
+ : <A HREF="node7.html#4263"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>gr</TT></STRONG><DL>
+<DD><STRONG><TT>read_config</TT></STRONG> : <A HREF="node7.html#4509"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+<DD><STRONG><TT>refresh</TT></STRONG> : <A HREF="node7.html#4511"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+<DD><STRONG><TT>select_engine</TT></STRONG> : <A HREF="node7.html#4513"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+</DL>
+<DD><STRONG><TT>grabmenu</TT></STRONG>
+ : <A HREF="node7.html#8778"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>history_clear</TT></STRONG>
+ : <A HREF="node7.html#7837"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_get</TT></STRONG>
+ : <A HREF="node7.html#7839"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_next</TT></STRONG>
+ : <A HREF="node7.html#7926"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>history_prev</TT></STRONG>
+ : <A HREF="node7.html#7928"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>history_push</TT></STRONG>
+ : <A HREF="node7.html#7841"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_search</TT></STRONG>
+ : <A HREF="node7.html#7843"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_table</TT></STRONG>
+ : <A HREF="node7.html#7845"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>icat</TT></STRONG>
+ : <A HREF="node7.html#4524"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>id</TT></STRONG>
+ : <A HREF="node7.html#4496"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DD><STRONG><TT>ignore_cfgrq</TT></STRONG>
+ : <A HREF="node4.html#1414"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>ignore_net_active_window</TT></STRONG>
+ : <A HREF="node4.html#1415"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>ignore_resizeinc</TT></STRONG>
+ : <A HREF="node4.html#1416"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>inc_index</TT></STRONG>
+ : <A HREF="node7.html#4412"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>insstr</TT></STRONG>
+ : <A HREF="node7.html#7930"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>instance</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1428"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>ioncore</TT></STRONG><DL>
+<DD><STRONG><TT>aboutmsg</TT></STRONG> : <A HREF="node7.html#4228"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>activity_first</TT></STRONG> : <A HREF="node7.html#4230"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>activity_list</TT></STRONG> : <A HREF="node7.html#4232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>bdoc</TT></STRONG> : <A HREF="node7.html#4190"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>chdir_for</TT></STRONG> : <A HREF="node7.html#4192"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>clear_tags</TT></STRONG> : <A HREF="node7.html#4234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>clientwin_list</TT></STRONG> : <A HREF="node7.html#4236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>compile_cmd</TT></STRONG> : <A HREF="node7.html#4194"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>create_ws</TT></STRONG> : <A HREF="node7.html#4196"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4238"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defbindings</TT></STRONG> : <A HREF="node7.html#4198"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defctxmenu</TT></STRONG> : <A HREF="node7.html#4200"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defmenu</TT></STRONG> : <A HREF="node7.html#4202"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defshortening</TT></STRONG> : <A HREF="node7.html#4240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defwinprop</TT></STRONG> : <A HREF="node7.html#4204"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>exec</TT></STRONG> : <A HREF="node7.html#4242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>exec_on</TT></STRONG> : <A HREF="node7.html#4206"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>find_manager</TT></STRONG> : <A HREF="node7.html#4216"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>find_screen_id</TT></STRONG> : <A HREF="node7.html#4244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#4246"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_dir_for</TT></STRONG> : <A HREF="node7.html#4218"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_paths</TT></STRONG> : <A HREF="node7.html#4248"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get_savefile</TT></STRONG> : <A HREF="node7.html#4210"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getbindings</TT></STRONG> : <A HREF="node7.html#4220"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getctxmenu</TT></STRONG> : <A HREF="node7.html#4222"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getmenu</TT></STRONG> : <A HREF="node7.html#4224"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>getwinprop</TT></STRONG> : <A HREF="node7.html#4226"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_activity</TT></STRONG> : <A HREF="node7.html#4250"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_first</TT></STRONG> : <A HREF="node7.html#4252"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_next</TT></STRONG> : <A HREF="node7.html#4254"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_next_screen</TT></STRONG> : <A HREF="node7.html#4256"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_nth_screen</TT></STRONG> : <A HREF="node7.html#4258"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_prev_screen</TT></STRONG> : <A HREF="node7.html#4260"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>goto_previous</TT></STRONG> : <A HREF="node7.html#4262"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>is_i18n</TT></STRONG> : <A HREF="node7.html#4264"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>kpress</TT></STRONG> : <A HREF="node7.html#4326"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>kpress_wait</TT></STRONG> : <A HREF="node7.html#4328"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>load_module</TT></STRONG> : <A HREF="node7.html#4266"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>lookup_clientwin</TT></STRONG> : <A HREF="node7.html#4268"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>lookup_region</TT></STRONG> : <A HREF="node7.html#4270"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>lookup_script</TT></STRONG> : <A HREF="node7.html#4212"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>match_winprop_name</TT></STRONG> : <A HREF="node7.html#4330"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mclick</TT></STRONG> : <A HREF="node7.html#4332"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mdblclick</TT></STRONG> : <A HREF="node7.html#4334"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mdrag</TT></STRONG> : <A HREF="node7.html#4336"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>menuentry</TT></STRONG> : <A HREF="node7.html#4338"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mpress</TT></STRONG> : <A HREF="node7.html#4340"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>navi_first</TT></STRONG> : <A HREF="node7.html#4272"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>navi_next</TT></STRONG> : <A HREF="node7.html#4274"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>popen_bgread</TT></STRONG> : <A HREF="node7.html#4276"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>progname</TT></STRONG> : <A HREF="node7.html#4278"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>read_savefile</TT></STRONG> : <A HREF="node7.html#4208"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>refresh_stylelist</TT></STRONG> : <A HREF="node7.html#4342"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>region_list</TT></STRONG> : <A HREF="node7.html#4280"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>request_selection</TT></STRONG> : <A HREF="node7.html#4282"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>resign</TT></STRONG> : <A HREF="node7.html#4284"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>restart</TT></STRONG> : <A HREF="node7.html#4286"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>restart_other</TT></STRONG> : <A HREF="node7.html#4288"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#4290"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_get_winprop_fn</TT></STRONG> : <A HREF="node7.html#4292"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_paths</TT></STRONG> : <A HREF="node7.html#4294"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_selection</TT></STRONG> : <A HREF="node7.html#4296"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>shutdown</TT></STRONG> : <A HREF="node7.html#4298"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>snapshot</TT></STRONG> : <A HREF="node7.html#4300"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>submap</TT></STRONG> : <A HREF="node7.html#4344"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>submenu</TT></STRONG> : <A HREF="node7.html#4346"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>tagged_list</TT></STRONG> : <A HREF="node7.html#4302"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>tags_first</TT></STRONG> : <A HREF="node7.html#4304"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>TR</TT></STRONG> : <A HREF="node7.html#4188"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>version</TT></STRONG> : <A HREF="node7.html#4306"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#4308"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>warn_traced</TT></STRONG> : <A HREF="node7.html#4310"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>write_savefile</TT></STRONG> : <A HREF="node7.html#4214"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_change_property</TT></STRONG> : <A HREF="node7.html#4312"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_delete_property</TT></STRONG> : <A HREF="node7.html#4314"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_atom_name</TT></STRONG> : <A HREF="node7.html#4316"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_text_property</TT></STRONG> : <A HREF="node7.html#4318"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_window_property</TT></STRONG> : <A HREF="node7.html#4320"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_intern_atom</TT></STRONG> : <A HREF="node7.html#4322"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_set_text_property</TT></STRONG> : <A HREF="node7.html#4324"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>ioncore_deinit_hook</TT></STRONG>
+ : <A HREF="node7.html#9406"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>ioncore_post_layout_setup_hook</TT></STRONG>
+ : <A HREF="node7.html#9407"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>ioncore_sigchld_hook</TT></STRONG>
+ : <A HREF="node7.html#9405"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>ioncore_snapshot_hook</TT></STRONG>
+ : <A HREF="node7.html#9408"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>is_active</TT></STRONG>
+ : <A HREF="node7.html#4456"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_activity</TT></STRONG>
+ : <A HREF="node7.html#4458"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_fullscreen</TT></STRONG>
+ : <A HREF="node7.html#4352"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>is_hidden</TT></STRONG>
+ : <A HREF="node7.html#4414"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>is_histcompl</TT></STRONG>
+ : <A HREF="node7.html#7932"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>is_i18n</TT></STRONG>
+ : <A HREF="node7.html#4265"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>is_mapped</TT></STRONG>
+ : <A HREF="node7.html#4460"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_shaded</TT></STRONG>
+ : <A HREF="node7.html#4365"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>is_tagged</TT></STRONG>
+ : <A HREF="node7.html#4462"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>join</TT></STRONG>
+ : <A HREF="node7.html#4526"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>jumpto</TT></STRONG>
+ : <A HREF="node4.html#1417"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textit">keysymdef.h</SPAN></STRONG>
+ : <A HREF="node4.html#859"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>kill</TT></STRONG>
+ : <A HREF="node7.html#4354"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>kill_line</TT></STRONG>
+ : <A HREF="node7.html#7934"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_to_bol</TT></STRONG>
+ : <A HREF="node7.html#7936"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_to_eol</TT></STRONG>
+ : <A HREF="node7.html#7938"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_word</TT></STRONG>
+ : <A HREF="node7.html#7940"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kpress</TT></STRONG>
+ : <A HREF="node7.html#4327"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>kpress_wait</TT></STRONG>
+ : <A HREF="node7.html#4329"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>load_module</TT></STRONG>
+ : <A HREF="node7.html#4267"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Lock</SPAN></STRONG>
+ : <A HREF="node4.html#864"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>lookup_clientwin</TT></STRONG>
+ : <A HREF="node7.html#4269"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>lookup_region</TT></STRONG>
+ : <A HREF="node7.html#4271"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>lookup_script</TT></STRONG>
+ : <A HREF="node7.html#4213"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>managed_list</TT></STRONG>
+ : <A HREF="node7.html#4390"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#4416"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+ | <A HREF="node7.html#6821"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>manager</TT></STRONG>
+ : <A HREF="node3.html#391"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4464"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>map</TT></STRONG>
+ : <A HREF="node7.html#4528"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>mark</TT></STRONG>
+ : <A HREF="node7.html#7942"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>match_winprop_name</TT></STRONG>
+ : <A HREF="node7.html#4331"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>max_size</TT></STRONG>
+ : <A HREF="node4.html#1418"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>maximize_horiz</TT></STRONG>
+ : <A HREF="node7.html#4367"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>maximize_vert</TT></STRONG>
+ : <A HREF="node7.html#4369"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>mclick</TT></STRONG>
+ : <A HREF="node7.html#4333"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mdblclick</TT></STRONG>
+ : <A HREF="node7.html#4335"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mdrag</TT></STRONG>
+ : <A HREF="node7.html#4337"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>menu</TT></STRONG>
+ : <A HREF="node7.html#8780"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>menuentry</TT></STRONG>
+ : <A HREF="node4.html#1171"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4339"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>menus</STRONG>
+ : <A HREF="node4.html#1115"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>message</TT></STRONG>
+ : <A HREF="node7.html#7847"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>min_size</TT></STRONG>
+ : <A HREF="node4.html#1419"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>mkbottom</TT></STRONG>
+ : <A HREF="node7.html#6786"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>mod_dock</TT></STRONG><DL>
+<DD><STRONG><TT>set_floating_shown_on</TT></STRONG> : <A HREF="node7.html#8997"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+</DL>
+<DD><STRONG><TT>mod_menu</TT></STRONG><DL>
+<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#8781"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>grabmenu</TT></STRONG> : <A HREF="node7.html#8777"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>menu</TT></STRONG> : <A HREF="node7.html#8779"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>pmenu</TT></STRONG> : <A HREF="node7.html#8785"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#8783"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+</DL>
+<DD><STRONG><TT>mod_query</TT></STRONG><DL>
+<DD><STRONG><TT>defcmd</TT></STRONG> : <A HREF="node7.html#7832"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#7834"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_clear</TT></STRONG> : <A HREF="node7.html#7836"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_get</TT></STRONG> : <A HREF="node7.html#7838"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_push</TT></STRONG> : <A HREF="node7.html#7840"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_search</TT></STRONG> : <A HREF="node7.html#7842"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>history_table</TT></STRONG> : <A HREF="node7.html#7844"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>message</TT></STRONG> : <A HREF="node7.html#7846"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>popen_completions</TT></STRONG> : <A HREF="node7.html#7852"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query</TT></STRONG> : <A HREF="node7.html#7854"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_attachclient</TT></STRONG> : <A HREF="node7.html#7856"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_editfile</TT></STRONG> : <A HREF="node7.html#7858"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_exec</TT></STRONG> : <A HREF="node7.html#7860"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_gotoclient</TT></STRONG> : <A HREF="node7.html#7862"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_lua</TT></STRONG> : <A HREF="node7.html#7864"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_man</TT></STRONG> : <A HREF="node7.html#7866"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_menu</TT></STRONG> : <A HREF="node7.html#7868"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_renameframe</TT></STRONG> : <A HREF="node7.html#7870"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_renameworkspace</TT></STRONG> : <A HREF="node7.html#7872"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_restart</TT></STRONG> : <A HREF="node7.html#7874"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_runfile</TT></STRONG> : <A HREF="node7.html#7876"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_shutdown</TT></STRONG> : <A HREF="node7.html#7878"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_ssh</TT></STRONG> : <A HREF="node7.html#7880"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_workspace</TT></STRONG> : <A HREF="node7.html#7883"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_yesno</TT></STRONG> : <A HREF="node7.html#7885"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#7848"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>show_about_ion</TT></STRONG> : <A HREF="node7.html#7887"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>show_tree</TT></STRONG> : <A HREF="node7.html#7889"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#7850"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+</DL>
+<DD><STRONG><TT>mod_sp</TT></STRONG><DL>
+<DD><STRONG><TT>set_shown</TT></STRONG> : <A HREF="node7.html#9106"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DD><STRONG><TT>set_shown_on</TT></STRONG> : <A HREF="node7.html#9108"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+</DL>
+<DD><STRONG><TT>mod_tiling</TT></STRONG><DL>
+<DD><STRONG><TT>detach</TT></STRONG> : <A HREF="node7.html#6781"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#6783"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>mkbottom</TT></STRONG> : <A HREF="node7.html#6785"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#6787"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
+<DD><STRONG><TT>mode</TT></STRONG>
+ : <A HREF="node7.html#4371"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">ModN</SPAN></STRONG>
+ : <A HREF="node4.html#862"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>move</TT></STRONG>
+ : <A HREF="node7.html#4443"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>mpress</TT></STRONG>
+ : <A HREF="node7.html#4341"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mx_count</TT></STRONG>
+ : <A HREF="node7.html#4418"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_current</TT></STRONG>
+ : <A HREF="node7.html#4420"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_list</TT></STRONG>
+ : <A HREF="node7.html#4422"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_nth</TT></STRONG>
+ : <A HREF="node7.html#4424"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>name</TT></STRONG>
+ : <A HREF="node7.html#4466"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>navi_first</TT></STRONG>
+ : <A HREF="node7.html#4273"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>navi_next</TT></STRONG>
+ : <A HREF="node7.html#4275"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>next_completion</TT></STRONG>
+ : <A HREF="node7.html#7944"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>nextto</TT></STRONG>
+ : <A HREF="node7.html#6823"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>node_of</TT></STRONG>
+ : <A HREF="node7.html#6825"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>nudge</TT></STRONG>
+ : <A HREF="node7.html#4356"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">NumLock</SPAN></STRONG>
+ : <A HREF="node4.html#867"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG>Obj</STRONG>
+ : <A HREF="node3.html#419"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>oneshot</TT></STRONG>
+ : <A HREF="node4.html#1420"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>p_move</TT></STRONG>
+ : <A HREF="node7.html#4501"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG><TT>p_resize</TT></STRONG>
+ : <A HREF="node7.html#4503"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG><TT>p_switch_tab</TT></STRONG>
+ : <A HREF="node7.html#4373"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>p_tabdrag</TT></STRONG>
+ : <A HREF="node7.html#4375"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>panews_make_placement_alt</TT></STRONG>
+ : <A HREF="node7.html#9410"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>parent</TT></STRONG>
+ : <A HREF="node3.html#376"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4468"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ | <A HREF="node7.html#6793"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>paste</TT></STRONG>
+ : <A HREF="node7.html#7946"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>pmenu</TT></STRONG>
+ : <A HREF="node7.html#8786"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>point</TT></STRONG>
+ : <A HREF="node7.html#7948"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>popen_bgread</TT></STRONG>
+ : <A HREF="node7.html#4277"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>popen_completions</TT></STRONG>
+ : <A HREF="node7.html#7853"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>PREFIX</TT></STRONG>
+ : <A HREF="node4.html#585"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>prev_completion</TT></STRONG>
+ : <A HREF="node7.html#7950"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>progname</TT></STRONG>
+ : <A HREF="node7.html#4279"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>query</TT></STRONG>
+ : <A HREF="node7.html#7855"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_attachclient</TT></STRONG>
+ : <A HREF="node7.html#7857"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_editfile</TT></STRONG>
+ : <A HREF="node7.html#7859"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_exec</TT></STRONG>
+ : <A HREF="node7.html#7861"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_gotoclient</TT></STRONG>
+ : <A HREF="node7.html#7863"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_lua</TT></STRONG>
+ : <A HREF="node7.html#7865"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_man</TT></STRONG>
+ : <A HREF="node7.html#7867"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_menu</TT></STRONG>
+ : <A HREF="node7.html#7869"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_renameframe</TT></STRONG>
+ : <A HREF="node7.html#7871"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_renameworkspace</TT></STRONG>
+ : <A HREF="node7.html#7873"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_restart</TT></STRONG>
+ : <A HREF="node7.html#7875"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_runfile</TT></STRONG>
+ : <A HREF="node7.html#7877"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_shutdown</TT></STRONG>
+ : <A HREF="node7.html#7879"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_ssh</TT></STRONG>
+ : <A HREF="node7.html#7881"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_workspace</TT></STRONG>
+ : <A HREF="node7.html#7884"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>query_yesno</TT></STRONG>
+ : <A HREF="node7.html#7886"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>quote_next</TT></STRONG>
+ : <A HREF="node7.html#4358"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>read_config</TT></STRONG>
+ : <A HREF="node7.html#4510"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+<DD><STRONG><TT>read_savefile</TT></STRONG>
+ : <A HREF="node7.html#4209"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>refresh</TT></STRONG>
+ : <A HREF="node7.html#4512"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+<DD><STRONG><TT>refresh_stylelist</TT></STRONG>
+ : <A HREF="node7.html#4343"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>reg</TT></STRONG>
+ : <A HREF="node7.html#6803"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>region_activated_hook</TT></STRONG>
+ : <A HREF="node7.html#9411"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>region_activity_hook</TT></STRONG>
+ : <A HREF="node7.html#9412"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>region_do_warp_alt</TT></STRONG>
+ : <A HREF="node7.html#9413"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>region_inactivated_hook</TT></STRONG>
+ : <A HREF="node7.html#9414"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>region_list</TT></STRONG>
+ : <A HREF="node7.html#4281"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>request_selection</TT></STRONG>
+ : <A HREF="node7.html#4283"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>reset</TT></STRONG>
+ : <A HREF="node7.html#9178"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>resign</TT></STRONG>
+ : <A HREF="node7.html#4285"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>resize</TT></STRONG>
+ : <A HREF="node7.html#4445"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+ | <A HREF="node7.html#9005"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>restart</TT></STRONG>
+ : <A HREF="node7.html#4287"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>restart_other</TT></STRONG>
+ : <A HREF="node7.html#4289"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>role</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1427"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG>root window</STRONG>
+ : <A HREF="node3.html#336"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>rootwin_of</TT></STRONG>
+ : <A HREF="node7.html#4470"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqclose</TT></STRONG>
+ : <A HREF="node7.html#4472"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqclose_propagate</TT></STRONG>
+ : <A HREF="node7.html#4474"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqgeom</TT></STRONG>
+ : <A HREF="node7.html#4476"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ | <A HREF="node7.html#6795"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>rqorder</TT></STRONG>
+ : <A HREF="node7.html#4478"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG>screen</STRONG><DL>
+<DD><STRONG>physical</STRONG> : <A HREF="node3.html#338"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>X</STRONG> : <A HREF="node3.html#337"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>screen_managed_changed_hook</TT></STRONG>
+ : <A HREF="node7.html#9415"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>screen_of</TT></STRONG>
+ : <A HREF="node7.html#4480"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>scrolldown</TT></STRONG>
+ : <A HREF="node7.html#7965"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">ScrollLock</SPAN></STRONG>
+ : <A HREF="node4.html#868"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>scrollup</TT></STRONG>
+ : <A HREF="node7.html#7967"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>select_engine</TT></STRONG>
+ : <A HREF="node7.html#4514"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
+<DD><STRONG><TT>select_next</TT></STRONG>
+ : <A HREF="node7.html#8793"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>select_nth</TT></STRONG>
+ : <A HREF="node7.html#8795"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>select_prev</TT></STRONG>
+ : <A HREF="node7.html#8797"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG>
+ : <A HREF="node7.html#4291"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#6788"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ | <A HREF="node7.html#7849"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ | <A HREF="node7.html#8784"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ | <A HREF="node7.html#9007"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_activity</TT></STRONG>
+ : <A HREF="node7.html#4482"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_completions</TT></STRONG>
+ : <A HREF="node7.html#7893"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_context</TT></STRONG>
+ : <A HREF="node7.html#7952"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_floating</TT></STRONG>
+ : <A HREF="node7.html#6829"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>set_floating_at</TT></STRONG>
+ : <A HREF="node7.html#6827"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>set_floating_shown_on</TT></STRONG>
+ : <A HREF="node7.html#8998"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>set_fullscreen</TT></STRONG>
+ : <A HREF="node7.html#4360"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_get_winprop_fn</TT></STRONG>
+ : <A HREF="node7.html#4293"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_hidden</TT></STRONG>
+ : <A HREF="node7.html#4426"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_index</TT></STRONG>
+ : <A HREF="node7.html#4428"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_managed_offset</TT></STRONG>
+ : <A HREF="node7.html#4498"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DD><STRONG><TT>set_mark</TT></STRONG>
+ : <A HREF="node7.html#7954"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_mode</TT></STRONG>
+ : <A HREF="node7.html#4377"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_name</TT></STRONG>
+ : <A HREF="node7.html#4484"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_name_exact</TT></STRONG>
+ : <A HREF="node7.html#4486"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_numbers</TT></STRONG>
+ : <A HREF="node7.html#4379"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_paths</TT></STRONG>
+ : <A HREF="node7.html#4295"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_selection</TT></STRONG>
+ : <A HREF="node7.html#4297"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_shaded</TT></STRONG>
+ : <A HREF="node7.html#4381"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_shown</TT></STRONG>
+ : <A HREF="node7.html#9107"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DD><STRONG><TT>set_shown_on</TT></STRONG>
+ : <A HREF="node7.html#9109"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DD><STRONG><TT>set_stdisp</TT></STRONG>
+ : <A HREF="node7.html#4430"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_tagged</TT></STRONG>
+ : <A HREF="node7.html#4488"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_text</TT></STRONG>
+ : <A HREF="node7.html#4397"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+<DD><STRONG><TT>shell_safe</TT></STRONG>
+ : <A HREF="node7.html#4517"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Shift</SPAN></STRONG>
+ : <A HREF="node4.html#860"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>show_about_ion</TT></STRONG>
+ : <A HREF="node7.html#7888"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>show_tree</TT></STRONG>
+ : <A HREF="node7.html#7890"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>shutdown</TT></STRONG>
+ : <A HREF="node7.html#4299"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>size_hints</TT></STRONG>
+ : <A HREF="node7.html#4490"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>skip_word</TT></STRONG>
+ : <A HREF="node7.html#7956"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>snapshot</TT></STRONG>
+ : <A HREF="node7.html#4301"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>split</TT></STRONG>
+ : <A HREF="node7.html#6831"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_at</TT></STRONG>
+ : <A HREF="node7.html#6833"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_top</TT></STRONG>
+ : <A HREF="node7.html#6835"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_tree</TT></STRONG>
+ : <A HREF="node7.html#6837"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>string</TT></STRONG><DL>
+<DD><STRONG><TT>shell_safe</TT></STRONG> : <A HREF="node7.html#4516"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
+</DL>
+<DD><STRONG>style</STRONG>
+ : <A HREF="node5.html#1665"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>submap</TT></STRONG>
+ : <A HREF="node7.html#4345"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>submenu</TT></STRONG>
+ : <A HREF="node4.html#1172"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4347"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>substyle</TT></STRONG>
+ : <A HREF="node5.html#1677"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#9180"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_next</TT></STRONG>
+ : <A HREF="node7.html#4432"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_nth</TT></STRONG>
+ : <A HREF="node7.html#4434"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_prev</TT></STRONG>
+ : <A HREF="node7.html#4436"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switchto</TT></STRONG>
+ : <A HREF="node4.html#1421"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textit">system.mk</SPAN></STRONG>
+ : <A HREF="node4.html#587"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>table</TT></STRONG><DL>
+<DD><STRONG><TT>append</TT></STRONG> : <A HREF="node7.html#4519"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#4521"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>icat</TT></STRONG> : <A HREF="node7.html#4523"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>join</TT></STRONG> : <A HREF="node7.html#4525"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+<DD><STRONG><TT>map</TT></STRONG> : <A HREF="node7.html#4527"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+</DL>
+<DD><STRONG><TT>tagged_list</TT></STRONG>
+ : <A HREF="node7.html#4303"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>tags_first</TT></STRONG>
+ : <A HREF="node7.html#4305"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>target</TT></STRONG>
+ : <A HREF="node4.html#1422"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>tiling_placement_alt</TT></STRONG>
+ : <A HREF="node7.html#9409"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>tl</TT></STRONG>
+ : <A HREF="node7.html#6812"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>TR</TT></STRONG>
+ : <A HREF="node7.html#4189"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>transient</STRONG>
+ : <A HREF="node4.html#1387"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>transient_mode</TT></STRONG>
+ : <A HREF="node4.html#1423"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>transients_at_top</TT></STRONG>
+ : <A HREF="node4.html#1424"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>transparent</TT></STRONG>
+ : <A HREF="node4.html#1425"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>transpose</TT></STRONG>
+ : <A HREF="node7.html#6797"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>transpose_at</TT></STRONG>
+ : <A HREF="node7.html#6817"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>transpose_chars</TT></STRONG>
+ : <A HREF="node7.html#7958"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>transpose_words</TT></STRONG>
+ : <A HREF="node7.html#7960"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>typeahead_clear</TT></STRONG>
+ : <A HREF="node7.html#8799"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>unsplit_at</TT></STRONG>
+ : <A HREF="node7.html#6839"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>version</TT></STRONG>
+ : <A HREF="node7.html#4307"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>warn</TT></STRONG>
+ : <A HREF="node7.html#4309"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#7851"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>warn_traced</TT></STRONG>
+ : <A HREF="node7.html#4311"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>WClientWin</TT></STRONG>
+ : <A HREF="node3.html#421"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>get_ident</TT></STRONG> : <A HREF="node7.html#4349"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>is_fullscreen</TT></STRONG> : <A HREF="node7.html#4351"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>kill</TT></STRONG> : <A HREF="node7.html#4353"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>nudge</TT></STRONG> : <A HREF="node7.html#4355"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>quote_next</TT></STRONG> : <A HREF="node7.html#4357"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set_fullscreen</TT></STRONG> : <A HREF="node7.html#4359"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4361"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>WComplProxy</TT></STRONG><DL>
+<DD><STRONG><TT>set_completions</TT></STRONG> : <A HREF="node7.html#7892"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>WDock</TT></STRONG><DL>
+<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#9000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#9002"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#9004"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#9006"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>WEdln</TT></STRONG>
+ : <A HREF="node3.html#434"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>back</TT></STRONG> : <A HREF="node7.html#7895"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>backspace</TT></STRONG> : <A HREF="node7.html#7897"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bkill_word</TT></STRONG> : <A HREF="node7.html#7899"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bol</TT></STRONG> : <A HREF="node7.html#7901"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>bskip_word</TT></STRONG> : <A HREF="node7.html#7903"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>clear_mark</TT></STRONG> : <A HREF="node7.html#7905"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>complete</TT></STRONG> : <A HREF="node7.html#7907"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>contents</TT></STRONG> : <A HREF="node7.html#7909"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>context</TT></STRONG> : <A HREF="node7.html#7911"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#7913"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>cut</TT></STRONG> : <A HREF="node7.html#7915"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>delete</TT></STRONG> : <A HREF="node7.html#7917"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>eol</TT></STRONG> : <A HREF="node7.html#7919"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#7921"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>forward</TT></STRONG> : <A HREF="node7.html#7923"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>history_next</TT></STRONG> : <A HREF="node7.html#7925"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>history_prev</TT></STRONG> : <A HREF="node7.html#7927"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>insstr</TT></STRONG> : <A HREF="node7.html#7929"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>is_histcompl</TT></STRONG> : <A HREF="node7.html#7931"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_line</TT></STRONG> : <A HREF="node7.html#7933"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_to_bol</TT></STRONG> : <A HREF="node7.html#7935"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_to_eol</TT></STRONG> : <A HREF="node7.html#7937"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>kill_word</TT></STRONG> : <A HREF="node7.html#7939"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>mark</TT></STRONG> : <A HREF="node7.html#7941"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>next_completion</TT></STRONG> : <A HREF="node7.html#7943"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>paste</TT></STRONG> : <A HREF="node7.html#7945"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>point</TT></STRONG> : <A HREF="node7.html#7947"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>prev_completion</TT></STRONG> : <A HREF="node7.html#7949"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_context</TT></STRONG> : <A HREF="node7.html#7951"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_mark</TT></STRONG> : <A HREF="node7.html#7953"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>skip_word</TT></STRONG> : <A HREF="node7.html#7955"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>transpose_chars</TT></STRONG> : <A HREF="node7.html#7957"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>transpose_words</TT></STRONG> : <A HREF="node7.html#7959"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
+<DD><STRONG><TT>WFrame</TT></STRONG>
+ : <A HREF="node3.html#425"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>is_shaded</TT></STRONG> : <A HREF="node7.html#4364"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>maximize_horiz</TT></STRONG> : <A HREF="node7.html#4366"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>maximize_vert</TT></STRONG> : <A HREF="node7.html#4368"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>mode</TT></STRONG> : <A HREF="node7.html#4370"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>p_switch_tab</TT></STRONG> : <A HREF="node7.html#4372"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>p_tabdrag</TT></STRONG> : <A HREF="node7.html#4374"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_mode</TT></STRONG> : <A HREF="node7.html#4376"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_numbers</TT></STRONG> : <A HREF="node7.html#4378"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>set_shaded</TT></STRONG> : <A HREF="node7.html#4380"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
+<DD><STRONG><TT>WGroup</TT></STRONG>
+ : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4383"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4385"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>bottom</TT></STRONG> : <A HREF="node7.html#4387"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>managed_list</TT></STRONG> : <A HREF="node7.html#4389"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+</DL>
+<DD><STRONG>WGroupCW</STRONG>
+ : <A HREF="node3.html#428"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>WGroupWS</TT></STRONG>
+ : <A HREF="node3.html#427"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>attach_framed</TT></STRONG> : <A HREF="node7.html#4393"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+</DL>
+<DD><STRONG><TT>WInfoWin</TT></STRONG><DL>
+<DD><STRONG><TT>set_text</TT></STRONG> : <A HREF="node7.html#4396"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
+</DL>
+<DD><STRONG>Winprops</STRONG>
+ : <A HREF="node4.html#1266"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>WInput</TT></STRONG>
+ : <A HREF="node3.html#433"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#7962"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>scrolldown</TT></STRONG> : <A HREF="node7.html#7964"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>scrollup</TT></STRONG> : <A HREF="node7.html#7966"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+</DL>
+<DD><STRONG><TT>WMenu</TT></STRONG><DL>
+<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#8788"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#8790"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>select_next</TT></STRONG> : <A HREF="node7.html#8792"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>select_nth</TT></STRONG> : <A HREF="node7.html#8794"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>select_prev</TT></STRONG> : <A HREF="node7.html#8796"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>typeahead_clear</TT></STRONG> : <A HREF="node7.html#8798"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG>WMessage</STRONG>
+ : <A HREF="node3.html#435"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>WMoveresMode</TT></STRONG><DL>
+<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#4438"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#4440"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>move</TT></STRONG> : <A HREF="node7.html#4442"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#4444"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
+</DL>
+<DD><STRONG><TT>WMPlex</TT></STRONG><DL>
+<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4399"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4401"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>attach_tagged</TT></STRONG> : <A HREF="node7.html#4403"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>dec_index</TT></STRONG> : <A HREF="node7.html#4405"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>get_index</TT></STRONG> : <A HREF="node7.html#4407"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>get_stdisp</TT></STRONG> : <A HREF="node7.html#4409"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>inc_index</TT></STRONG> : <A HREF="node7.html#4411"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>is_hidden</TT></STRONG> : <A HREF="node7.html#4413"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>managed_list</TT></STRONG> : <A HREF="node7.html#4415"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_count</TT></STRONG> : <A HREF="node7.html#4417"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_current</TT></STRONG> : <A HREF="node7.html#4419"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_list</TT></STRONG> : <A HREF="node7.html#4421"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>mx_nth</TT></STRONG> : <A HREF="node7.html#4423"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_hidden</TT></STRONG> : <A HREF="node7.html#4425"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_index</TT></STRONG> : <A HREF="node7.html#4427"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>set_stdisp</TT></STRONG> : <A HREF="node7.html#4429"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_next</TT></STRONG> : <A HREF="node7.html#4431"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_nth</TT></STRONG> : <A HREF="node7.html#4433"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+<DD><STRONG><TT>switch_prev</TT></STRONG> : <A HREF="node7.html#4435"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+</DL>
+<DD><STRONG><TT>WRegion</TT></STRONG>
+ : <A HREF="node3.html#420"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>begin_kbresize</TT></STRONG> : <A HREF="node7.html#4447"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4449"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#4451"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>goto</TT></STRONG> : <A HREF="node7.html#4453"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_active</TT></STRONG> : <A HREF="node7.html#4455"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_activity</TT></STRONG> : <A HREF="node7.html#4457"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_mapped</TT></STRONG> : <A HREF="node7.html#4459"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_tagged</TT></STRONG> : <A HREF="node7.html#4461"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>manager</TT></STRONG> : <A HREF="node7.html#4463"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>name</TT></STRONG> : <A HREF="node7.html#4465"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#4467"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rootwin_of</TT></STRONG> : <A HREF="node7.html#4469"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqclose</TT></STRONG> : <A HREF="node7.html#4471"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqclose_propagate</TT></STRONG> : <A HREF="node7.html#4473"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#4475"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>rqorder</TT></STRONG> : <A HREF="node7.html#4477"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>screen_of</TT></STRONG> : <A HREF="node7.html#4479"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_activity</TT></STRONG> : <A HREF="node7.html#4481"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_name</TT></STRONG> : <A HREF="node7.html#4483"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_name_exact</TT></STRONG> : <A HREF="node7.html#4485"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>set_tagged</TT></STRONG> : <A HREF="node7.html#4487"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>size_hints</TT></STRONG> : <A HREF="node7.html#4489"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+</DL>
+<DD><STRONG><TT>write_savefile</TT></STRONG>
+ : <A HREF="node7.html#4215"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>WRootWin</TT></STRONG>
+ : <A HREF="node3.html#423"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>current_scr</TT></STRONG> : <A HREF="node7.html#4492"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
+</DL>
+<DD><STRONG><TT>WScreen</TT></STRONG>
+ : <A HREF="node3.html#424"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>id</TT></STRONG> : <A HREF="node7.html#4495"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+<DD><STRONG><TT>set_managed_offset</TT></STRONG> : <A HREF="node7.html#4497"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+</DL>
+<DD><STRONG><TT>WSplit</TT></STRONG>
+ : <A HREF="node3.html#431"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#6790"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#6792"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#6794"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>transpose</TT></STRONG> : <A HREF="node7.html#6796"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG><TT>WSplitInner</TT></STRONG><DL>
+<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#6799"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
+<DD><STRONG><TT>WSplitRegion</TT></STRONG><DL>
+<DD><STRONG><TT>reg</TT></STRONG> : <A HREF="node7.html#6802"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+</DL>
+<DD><STRONG><TT>WSplitSplit</TT></STRONG><DL>
+<DD><STRONG><TT>br</TT></STRONG> : <A HREF="node7.html#6805"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>dir</TT></STRONG> : <A HREF="node7.html#6807"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>flip</TT></STRONG> : <A HREF="node7.html#6809"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG><TT>tl</TT></STRONG> : <A HREF="node7.html#6811"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+</DL>
+<DD><STRONG><TT>WTiling</TT></STRONG>
+ : <A HREF="node3.html#430"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>farthest</TT></STRONG> : <A HREF="node7.html#6818"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>flip_at</TT></STRONG> : <A HREF="node7.html#6814"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>managed_list</TT></STRONG> : <A HREF="node7.html#6820"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>nextto</TT></STRONG> : <A HREF="node7.html#6822"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>node_of</TT></STRONG> : <A HREF="node7.html#6824"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>set_floating</TT></STRONG> : <A HREF="node7.html#6828"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>set_floating_at</TT></STRONG> : <A HREF="node7.html#6826"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split</TT></STRONG> : <A HREF="node7.html#6830"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_at</TT></STRONG> : <A HREF="node7.html#6832"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_top</TT></STRONG> : <A HREF="node7.html#6834"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>split_tree</TT></STRONG> : <A HREF="node7.html#6836"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>transpose_at</TT></STRONG> : <A HREF="node7.html#6816"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>unsplit_at</TT></STRONG> : <A HREF="node7.html#6838"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+</DL>
+<DD><STRONG><TT>WWindow</TT></STRONG>
+ : <A HREF="node3.html#422"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DL>
+<DD><STRONG><TT>p_move</TT></STRONG> : <A HREF="node7.html#4500"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG><TT>p_resize</TT></STRONG> : <A HREF="node7.html#4502"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4504"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+</DL>
+<DD><STRONG><TT>x_change_property</TT></STRONG>
+ : <A HREF="node7.html#4313"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_delete_property</TT></STRONG>
+ : <A HREF="node7.html#4315"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_atom_name</TT></STRONG>
+ : <A HREF="node7.html#4317"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_text_property</TT></STRONG>
+ : <A HREF="node7.html#4319"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_get_window_property</TT></STRONG>
+ : <A HREF="node7.html#4321"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_intern_atom</TT></STRONG>
+ : <A HREF="node7.html#4323"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>x_set_text_property</TT></STRONG>
+ : <A HREF="node7.html#4325"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>xid</TT></STRONG>
+ : <A HREF="node7.html#4362"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node7.html#4505"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG>Xinerama</STRONG>
+ : <A HREF="node3.html#339"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textit">xmodmap</SPAN></STRONG>
+ : <A HREF="node4.html#866"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG>xprop</STRONG>
+ : <A HREF="node4.html#1383"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+
+</DL>
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/node12.html b/ionconf/node12.html
new file mode 100644 (file)
index 0000000..90201d6
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="previous" HREF="node11.html">
+<LINK REL="up" HREF="ionconf.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png"> 
+<A NAME="tex2html443"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html439"
+  HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html445"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html447"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Up:</B> <A NAME="tex2html444"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html440"
+  HREF="node11.html">Index</A>
+ &nbsp; <B>  <A NAME="tex2html446"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html448"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION001200000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>Configuring and extending Ion3 with Lua</STRONG><P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+Nikos Drakos, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
+<P>
+The translation was initiated by tuomov on 2006-12-23
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/node2.html b/ionconf/node2.html
new file mode 100644 (file)
index 0000000..9d85352
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1. Introduction</TITLE>
+<META NAME="description" CONTENT="1. Introduction">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node3.html">
+<LINK REL="previous" HREF="node1.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node3.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html226"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html220"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html214"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html222"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html224"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html227"
+  HREF="node3.html">2. Preliminaries: Key concepts</A>
+<B> Up:</B> <A NAME="tex2html221"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html215"
+  HREF="node1.html">Contents</A>
+ &nbsp; <B>  <A NAME="tex2html223"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html225"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00200000000000000000">
+<SPAN CLASS="arabic">1</SPAN>. Introduction</A>
+</H1>
+
+<P>
+This document is an ''advanced user'' manual for Ion, the X11 window manager,
+and version 3 specifically. It is an attempt attempt at documenting what is 
+in Ion's configuration files, how to configure Ion by simple modifications 
+to these files and how to write more complex extensions in Lua, the 
+lightweight configuration and scripting language used by Ion. 
+
+<P>
+Readers unfamiliar with Lua is advised to first glance at the Lua manual at 
+
+<P>
+<DIV ALIGN="CENTER">
+<TT><A NAME="tex2html1"
+  HREF="http://www.lua.org/docs.html">http://www.lua.org/docs.html</A></TT>
+</DIV>
+
+<P>
+and perhaps some tutorial pages at the lua-users wiki:
+
+<P>
+<DIV ALIGN="CENTER">
+<TT><A NAME="tex2html2"
+  HREF="http://lua-users.org/wiki/LuaTutorial">http://lua-users.org/wiki/LuaTutorial</A></TT>
+</DIV>
+
+<P>
+Back in this document, first in chapter <A HREF="node3.html#chap:prelim">2</A> some key
+concepts and relations are explained. These include the module system
+and Ion's object and class hierarchies. While it might not at first 
+occur that knowing such things would be necessary to <SPAN  CLASS="textit">configure</SPAN> 
+a program, this  material is essential because of the object-oriented 
+nature of most of Ion's scripting interface.
+
+<P>
+The new user, fed up with the default key bindings and eager to just
+quickly configure Ion to his liking may question the reasons for 
+exposing the ''heavy'' internal OO structure in the scripting and
+configuration interface. I'm not the one to  blame him for that. 
+Sure it would be faster to configure Ion to everyone's liking
+if a simpler binding configuration interface was provided. Such an
+interface would, however, also be far more limited and make writing
+extensions more complicated and the advantages from using a real 
+scripting language would be partly lost. One more advantage from
+a rich scripting and configuration interface is that it allows 
+implementing scripts to read alternate configuration file formats,
+ones that could be, for example, modified by external configuration tools. 
+
+<P>
+In chapter <A HREF="node4.html#chap:config">3</A> the very basic Ion configuration know-how
+is provided. All the different configuration files and their locations
+are explained and instructions are given to allow the reader to
+configure bindings and so-called ''winprops''. Chapter <A HREF="node5.html#chap:gr">4</A>
+explains the notion of drawing engines and graphical styles and how to
+write new looks for Ion and more advanced aspects of Ion's scripting 
+interface are documented in chapter <A HREF="node6.html#chap:tricks">5</A> (a work in 
+progress).
+
+<P>
+Finally, most of the functions provided by Ion's scripting interface
+are listed and documented in the Function reference in chapter
+<A HREF="node7.html#sec:exports">6</A>. At the end of the document is an alphabetical
+listing of all these functions.
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html226"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html220"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html214"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html222"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html224"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html227"
+  HREF="node3.html">2. Preliminaries: Key concepts</A>
+<B> Up:</B> <A NAME="tex2html221"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html215"
+  HREF="node1.html">Contents</A>
+ &nbsp; <B>  <A NAME="tex2html223"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html225"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node3.html b/ionconf/node3.html
new file mode 100644 (file)
index 0000000..f3dbd29
--- /dev/null
@@ -0,0 +1,543 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2. Preliminaries: Key concepts and relations</TITLE>
+<META NAME="description" CONTENT="2. Preliminaries: Key concepts and relations">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node4.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node4.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html240"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html234"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html228"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html236"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html238"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html241"
+  HREF="node4.html">3. Basic configuration</A>
+<B> Up:</B> <A NAME="tex2html235"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html229"
+  HREF="node2.html">1. Introduction</A>
+ &nbsp; <B>  <A NAME="tex2html237"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html239"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html242"
+  HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
+<LI><A NAME="tex2html243"
+  HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html244"
+  HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html245"
+  HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html246"
+  HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html247"
+  HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<LI><A NAME="tex2html248"
+  HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00300000000000000000"></A>
+<A NAME="chap:prelim"></A>
+<BR>
+<SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations
+</H1>
+
+<P>
+The purpose of this chapter to explain some of key concepts and
+relations you need to understand before reading the following
+chapters. These include modules explained in section <A HREF="#sec:modules">2.1</A>
+and the Ion class and object hierarchies, section <A HREF="#sec:objects">2.2</A>.
+
+<P>
+
+<H2><A NAME="SECTION00310000000000000000"></A>
+<A NAME="sec:modules"></A>
+<BR>
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules
+</H2>
+
+<P>
+Ion has been designed so that the 'ion' executable only implements some
+basic services on top of which very different kinds of window managers
+could be build by loading the appropriate 'modules'. On modern system
+these modules are simply dynamically loaded <SPAN  CLASS="textit">.so</SPAN> libraries. On 
+more primitive systems, or if you want to squeeze total size of the 
+executable and libraries, the modules can optionally be statically 
+linked to the main binary, but must nevertheless be loaded with the
+<A HREF="#fn:dopath"><TT>dopath</TT></A> function. Modules may also include Lua code.
+
+<P>
+If no modules are loaded, all client windows appear in full screen mode.
+To get better window management support, one or more workspace modules
+should be loaded. Currently Ion provides the following modules:
+
+<P>
+<DL>
+<DT><STRONG><SPAN  CLASS="textit">mod_tiling</SPAN></STRONG></DT>
+<DD>Tilings for workspaces of the original tiled
+       Ion kind.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_query</SPAN></STRONG></DT>
+<DD>Queries (for starting programs and so on)
+      and message boxes.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_menu</SPAN></STRONG></DT>
+<DD>Support for menus, both pull-down and
+      keyboard-operated in-frame menus.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_statusbar</SPAN></STRONG></DT>
+<DD>Module that implements a statusbar that
+      can be adaptively embedded in each workspace's layout.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_dock</SPAN></STRONG></DT>
+<DD>Module for docking Window Maker dockapps.
+      The dock can both float and be embedded as the statusbar.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_sp</SPAN></STRONG></DT>
+<DD>This module implements a scratchpad frame that can
+      be toggled on/off everywhere. Think of the 'console' in some 
+      first-person shooters.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_mgmtmode</SPAN></STRONG></DT>
+<DD>Support module for implementing ''management
+      modes'' with a XOR-frame similar to move/resize mode around selected
+      region.
+    
+</DD>
+<DT><STRONG><SPAN  CLASS="textit">mod_sm</SPAN></STRONG></DT>
+<DD>Session management support module.
+      <SPAN  CLASS="textit">Loaded automatically when needed!</SPAN>
+</DD>
+</DL>
+
+<P>
+So-called drawing engines are also implemented as a modules,
+but they are not discussed here; see chapter <A HREF="node5.html#chap:gr">4</A>.
+
+<P>
+The stock configuration for the 'ion3' executable loads all of the modules
+mentioned above except <SPAN  CLASS="textit">mod_dock</SPAN> and filemod_mgmtmode.
+The stock configuration for the 'pwm3' executable (which differs from the 
+'ion3' executable in a few configuration details, such as Xinerama usage)
+loads another set of modules.
+
+<P>
+
+<P>
+
+<H2><A NAME="SECTION00320000000000000000"></A>
+<A NAME="sec:objects"></A>
+<BR>
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies
+</H2>
+
+<P>
+While Ion does not not have a truly object-oriented design
+<A NAME="tex2html3"
+  HREF="#foot306"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>,
+things that appear on the computer screen are, however, quite
+naturally expressed as such ''objects''. Therefore Ion implements
+a rather primitive OO system for these screen objects and some
+other things. 
+
+<P>
+It is essential for the module writer to learn this object
+system, but also people who write their own binding configuration files
+necessarily come into contact with the class and object hierarchies
+- you need to know which binding setup routines apply where, 
+and what functions can be used as handlers in which bindings.
+It is the purpose of this section to attempt to explain these 
+hierarchies. If you do not wish the read the full section, at least
+read the summary at the end of it, so that you understand the very
+basic relations.
+
+<P>
+For simplicity we consider only the essential-for-basic-configuration
+Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> classes. 
+See Appendix <A HREF="node9.html#app:fullhierarchy">B</A> for the full class hierachy visible
+to Lua side.
+
+<P>
+
+<H3><A NAME="SECTION00321000000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+</H3>
+
+<P>
+One of the most important principles of object-oriented design methodology
+is inheritance; roughly how classes (objects are instances of classes)
+extend on others' features. Inheritance gives rise to class hierarchy.
+In the case of single-inheritance this hierarchy can be expressed as a
+tree where the class at the root is inherited by all others below it
+and so on. Figure <A HREF="#fig:classhierarchy">2.1</A> lists out the Ion class 
+hierarchy and below we explain what features of Ion the classes 
+implement.
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="413"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.1:</STRONG>
+Partial Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> 
+    class hierarchy.</CAPTION>
+<TR><TD><PRE>
+    Obj
+     |--&gt;WRegion
+     |    |--&gt;WClientWin
+     |    |--&gt;WWindow
+     |    |    |--&gt;WRootWin
+     |    |    |--&gt;WMPlex
+     |    |    |    |--&gt;WScreen
+     |    |    |    |--&gt;WFrame
+     |    |    |--&gt;WInput (mod_query)
+     |    |         |--&gt;WEdln (mod_query)
+     |    |         |--&gt;WMessage (mod_query)
+     |    |--&gt;WGroup
+     |    |    |--&gt;WGroupWS
+     |    |    |--&gt;WGroupCW
+     |    |--&gt;WTiling (mod_tiling)
+     |--&gt;WSplit (mod_tiling)
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+The core classes:
+
+<P>
+<DL>
+<DT><STRONG>Obj</STRONG></DT>
+<DD><A NAME="419"></A>
+    Is the base of Ion's object system.
+
+<P>
+</DD>
+<DT><STRONG>WRegion</STRONG></DT>
+<DD><A NAME="420"></A>
+    is the base class for everything corresponding to something on the
+    screen. Each object of type WRegion has a size and  position
+    relative to the parent WRegion. While a big part of Ion 
+    operates on these instead of more specialised classes, WRegion
+    is a ''virtual''  base class in that there are no objects of ''pure''
+    type WRegion; all concrete regions are objects of some class 
+    that inherits WRegion.
+
+<P>
+</DD>
+<DT><STRONG>WClientWin</STRONG></DT>
+<DD><A NAME="421"></A> is a class for
+    client window objects, the objects that window managers are
+    supposed to manage.
+
+<P>
+</DD>
+<DT><STRONG>WWindow</STRONG></DT>
+<DD><A NAME="422"></A> is the base class for all
+    internal objects having an X window associated to them
+    (WClientWins also have X windows associated to them).
+
+<P>
+</DD>
+<DT><STRONG>WRootWin</STRONG></DT>
+<DD><A NAME="423"></A> is the class for
+    root windows<A NAME="336"></A> of X screens<A NAME="337"></A>.
+    Note that an ''X screen'' or root window is not necessarily a
+    single  physical screen<A NAME="338"></A> as a root window
+    may be split over multiple screens when multi-head extensions 
+    such as Xinerama<A NAME="339"></A> are used. (Actually there
+    can be only one WRootWin when Xinerama is used.)
+
+<P>
+</DD>
+<DT><STRONG>WMPlex</STRONG></DT>
+<DD>is a base class for all regions that''multiplex'' 
+    other regions. This means that of the regions managed by the multiplexer,
+    only one can be displayed at a time. Classes that inhereit WMPlex
+    include screens and frames.
+
+<P>
+</DD>
+<DT><STRONG>WScreen</STRONG></DT>
+<DD><A NAME="424"></A> is the class for objects
+    corresponding to physical screens. Screens may share a root
+    window when Xinerama multihead extensions are used as explained
+    above.
+
+<P>
+</DD>
+<DT><STRONG>WFrame</STRONG></DT>
+<DD><A NAME="425"></A> is the class for frames.
+    While most Ion's objects have no graphical presentation, frames basically
+    add to WMPlexes the decorations around client windows 
+    (borders, tabs).
+
+<P>
+</DD>
+<DT><STRONG>WGroup</STRONG></DT>
+<DD><A NAME="426"></A> is the base class for groups.
+    Particular types of groups are workspaces 
+    (WGroupWS<A NAME="427"></A>)
+    and groups of client windows
+    (WGroupCW<A NAME="428"></A>).
+</DD>
+</DL>
+
+<P>
+Classes implemented by the <SPAN  CLASS="textit">mod_tiling</SPAN> module:
+
+<P>
+<DL>
+<DT><STRONG>WTiling</STRONG></DT>
+<DD><A NAME="430"></A> is the class for tilings
+    of frames.
+  
+</DD>
+<DT><STRONG>WSplit</STRONG></DT>
+<DD><A NAME="431"></A> (or, more specifically, classes
+    that inherit it) encode the WTiling tree structure.
+</DD>
+</DL>
+
+<P>
+Classes implemented by the <SPAN  CLASS="textit">mod_query</SPAN> module:
+
+<P>
+<DL>
+<DT><STRONG>WInput</STRONG></DT>
+<DD><A NAME="433"></A> is a virtual base class for the
+    two classes below.
+  
+</DD>
+<DT><STRONG>WEdln</STRONG></DT>
+<DD><A NAME="434"></A> is the class for the ''queries'',
+    the text inputs that usually appear at bottoms of frames and sometimes
+    screens. Queries are the functional equivalent of ''mini buffers'' in
+    many text editors.
+  
+</DD>
+<DT><STRONG>WMessage</STRONG></DT>
+<DD><A NAME="435"></A> implements the boxes for 
+    warning and other messages that Ion may wish to display to the user. 
+    These also usually appear at bottoms of frames.
+</DD>
+</DL>
+
+<P>
+There are also some other ''proxy'' classes that do not refer
+to objects on the screen. The only important one of these for
+basic configuration is WMoveresMode that is used for
+binding callbacks in the move and resize mode.
+
+<P>
+
+<H3><A NAME="SECTION00322000000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+</H3>
+
+<P>
+
+<H4><A NAME="SECTION00322100000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+</H4>
+Each object of type WRegion has a parent and possibly a manager
+associated to it. The parent<A NAME="376"></A> for an object is always a 
+WWindow and for WRegion with an X window (WClientWin,
+WWindow) the parent WWindow is given by the same relation of
+the X windows. For other WRegions the relation is not as clear.
+There is generally very few restrictions other than the above on the
+parent--child relation but the most common is as described in
+Figure <A HREF="#fig:parentship">2.2</A>.
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="387"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.2:</STRONG>
+Most common parent-child relations</CAPTION>
+<TR><TD><PRE>
+    WRootWins
+     |--&gt;WScreens
+          |--&gt;WGroupWSs
+          |--&gt;WTilings
+          |--&gt;WClientWins in full screen mode
+          |--&gt;WFrames
+               |--&gt;WGroupCWs
+               |--&gt;WClientWins
+               |--&gt;WFrames for transients
+               |--&gt;a possible WEdln or WMessage
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+WRegions have very little control over their children as a parent.
+The manager<A NAME="391"></A> WRegion has much more control over its
+managed WRegions. Managers, for example, handle resize requests,
+focusing and displaying of the managed regions. Indeed the manager--managed
+relationship gives a better picture of the logical ordering of objects on
+the screen. Again, there are generally few limits, but the most common
+hierarchy is given in Figure <A HREF="#fig:managership">2.3</A>. Note that sometimes
+the parent and manager are the same object and not all objects may have
+a manager (e.g. the dock in the dock module at the time of writing this)
+but all have a parent-a screen if not anything else.
+
+<P>
+
+<H4><A NAME="SECTION00322200000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</H4>
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="399"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.3:</STRONG>
+Most common manager-managed relations</CAPTION>
+<TR><TD><PRE>
+    WRootWins
+     |--&gt;WScreens
+          |--&gt;WGroupCWs for full screen WClientWins
+          |    |--&gt;WClientWins
+          |    |--&gt;WFrames for transients (dialogs)
+          |         |--&gt; WClientWin
+          |--&gt;WGroupWSs for workspaces
+          |    |--&gt;WTiling
+          |    |    |--&gt;possibly a WEdln, WMessage or WMenu
+          |    |    |--&gt;WFrames
+          |    |         |--&gt;WGroupCWs (with contents as above)
+          |    |--&gt;WFrames for floating content
+          |--&gt;WFrames for sticky stuff, such as the scratchpad
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+Note that a workspace can manage another workspace. This can be
+achieved with the <A HREF="#fn:attach_new"><TT>attach_new</TT></A> function, and allows you to nest
+workspaces as deep as you want.
+
+<P>
+
+<H3><A NAME="SECTION00323000000000000000">
+<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</H3>
+
+<P>
+In the standard setup, keeping queries, messages and menus out of
+consideration:
+
+<P>
+
+<UL>
+<LI>The top-level objects that matter are screens and they correspond
+    to physical screens. The class for screens is WScreen.
+</LI>
+<LI>Screens contain (multiplex) groups (WGroup) and other 
+    objects, such as WFrames. Some of these are mutually exclusive
+    to be viewed at a time.
+</LI>
+<LI>Groups of the specific kind WGroupWS often contain a
+    WTiling tiling for tiling frames (WFrame), but 
+    groups may also directly contain floating frames.
+</LI>
+<LI>Frames are the objects with decorations such as tabs and borders.
+    Frames contain (multiplex) among others (groups of) client windows, 
+    to each of which corresponds a tab in the frame's decoration. Only 
+    one client window (or other object) can be shown at a time in each 
+    frame. The class for client windows is WClientWin.
+</LI>
+</UL>
+
+<P>
+<BR><HR><H4>Footnotes</H4>
+<DL>
+<DT><A NAME="foot306">... design</A><A
+ HREF="node3.html#tex2html3"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
+<DD>the author doesn't like such artificial designs
+
+</DD>
+</DL>
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html240"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html234"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html228"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html236"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html238"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html241"
+  HREF="node4.html">3. Basic configuration</A>
+<B> Up:</B> <A NAME="tex2html235"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html229"
+  HREF="node2.html">1. Introduction</A>
+ &nbsp; <B>  <A NAME="tex2html237"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html239"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node4.html b/ionconf/node4.html
new file mode 100644 (file)
index 0000000..60acef3
--- /dev/null
@@ -0,0 +1,1369 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3. Basic configuration</TITLE>
+<META NAME="description" CONTENT="3. Basic configuration">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node5.html">
+<LINK REL="previous" HREF="node3.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node5.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html261"
+  HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html255"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html249"
+  HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html257"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html259"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html262"
+  HREF="node5.html">4. Graphical styles</A>
+<B> Up:</B> <A NAME="tex2html256"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html250"
+  HREF="node3.html">2. Preliminaries: Key concepts</A>
+ &nbsp; <B>  <A NAME="tex2html258"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html260"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html263"
+  HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
+<LI><A NAME="tex2html264"
+  HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN  CLASS="textit">cfg_ion.lua</SPAN></A>
+<LI><A NAME="tex2html265"
+  HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
+<UL>
+<LI><A NAME="tex2html266"
+  HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
+<LI><A NAME="tex2html267"
+  HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
+<LI><A NAME="tex2html268"
+  HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
+<LI><A NAME="tex2html269"
+  HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
+<LI><A NAME="tex2html270"
+  HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
+<LI><A NAME="tex2html271"
+  HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
+<LI><A NAME="tex2html272"
+  HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html273"
+  HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
+<UL>
+<LI><A NAME="tex2html274"
+  HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
+<LI><A NAME="tex2html275"
+  HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
+<LI><A NAME="tex2html276"
+  HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
+<LI><A NAME="tex2html277"
+  HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html278"
+  HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
+<UL>
+<LI><A NAME="tex2html279"
+  HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Classes, roles and instances</A>
+<LI><A NAME="tex2html280"
+  HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Finding window identification</A>
+<LI><A NAME="tex2html281"
+  HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Some common examples</A>
+<UL>
+<LI><A NAME="tex2html282"
+  HREF="node4.html#SECTION00453100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+<LI><A NAME="tex2html283"
+  HREF="node4.html#SECTION00453200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+<LI><A NAME="tex2html284"
+  HREF="node4.html#SECTION00453300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+</UL></UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00400000000000000000"></A>
+<A NAME="chap:config"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>. Basic configuration
+</H1>
+
+<P>
+This chapter should help your configure Ion to your liking. As  the your
+probably already know, Ion uses Lua as a configuration and extension 
+language. If you're new to it, you might first want to read some Lua 
+documentation as already suggested and pointed to in the Introduction
+before continuing with this chapter.
+
+<P>
+Section <A HREF="#sec:conffiles">3.1</A>&nbsp;is an overview of the multiple configuration
+files Ion uses and as a perhaps more understandable introduction to the
+general layout of the configuration files, a walk-through of the main 
+configuration file <SPAN  CLASS="textit">ion.lua</SPAN> is provided in section 
+<A HREF="#sec:walkthrough">3.2</A>.
+How keys and mouse action are bound to functions is described in detail
+in <A HREF="#sec:bindings">3.3</A> and in section <A HREF="#sec:winprops">3.5</A> winprops are
+explained. For a reference on exported functions, see section
+<A HREF="node7.html#sec:exports">6</A>.
+
+<P>
+
+<H2><A NAME="SECTION00410000000000000000"></A>
+<A NAME="sec:conffiles"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files
+</H2>
+
+<P>
+Ion3, to which document applies, stores its stock configuration files in
+<SPAN  CLASS="textit">/usr/local/etc/ion3/</SPAN> unless you, the OS package maintainer or 
+whoever  installed the package on the system has modified the variables
+<TT>PREFIX</TT><A NAME="585"></A> or
+<TT>ETCDIR</TT><A NAME="586"></A> in
+<SPAN  CLASS="textit">system.mk</SPAN><A NAME="587"></A> before compiling Ion.
+In the first case you probably know where to find the files and in 
+the other case the system administrator or the OS package maintainer
+should  have provided documentation to point to the correct location. 
+If these instructions are no help in locating the correct directory, 
+the command <TT>locate cfg_ion.lua</TT> might help provided <TT>updatedb</TT> 
+has been run recently. 
+
+<P>
+User configuration files go in <SPAN  CLASS="textit">~/.ion3/</SPAN>. 
+Ion always searches the user configuration file directory before the stock
+configuration file directory for files. Therefore, if you want to change
+some setting, it is advised against that you modify the stock configuration
+files in-place as subsequent installs of Ion will restore the stock
+configuration files. Instead you should always make a copy of the stock
+file in <SPAN  CLASS="textit">~/.ion3/</SPAN> and modify this file. When searching
+for a file, if no extension or path component is given, compiled <SPAN  CLASS="textit">.lc</SPAN> 
+files are attempted before <SPAN  CLASS="textit">.lua</SPAN> files.
+
+<P>
+All the configuration files are named <SPAN  CLASS="textit">cfg_*.lua</SPAN> with the ''<SPAN  CLASS="textit">*</SPAN>''
+part varying. The configuration file for each module <SPAN  CLASS="textit">mod_modname</SPAN> is
+<SPAN  CLASS="textit">cfg_modname.lua</SPAN>, with <SPAN  CLASS="textit">modname</SPAN> varying by the module in
+question. The following table summarises these and other configuration
+files:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=1>File</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=1><SPAN  CLASS="textit">cfg_ion.lua</SPAN></TD>
+<TD ALIGN="LEFT">The main configuration file</TD>
+</TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=1><SPAN  CLASS="textit">cfg_ioncore.lua</SPAN></TD>
+<TD ALIGN="LEFT">Configuration file for Ion's core library.
+    Most of the bindings and menus are configured here. Bindings that are
+    specific to some module are configured in the module's configuration
+    file. For details, see section <A HREF="#sec:bindings">3.3</A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=1><SPAN  CLASS="textit">cfg_kludges.lua</SPAN></TD>
+<TD ALIGN="LEFT">Settings to get some applications behave more nicely have been 
+    collected here. See section <A HREF="#sec:winprops">3.5</A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP" WIDTH=1><SPAN  CLASS="textit">cfg_tiling.lua</SPAN> 
+    <SPAN  CLASS="textit">cfg_query.lua</SPAN> 
+    <SPAN  CLASS="textit">cfg_menu.lua</SPAN> 
+    <SPAN  CLASS="textit">cfg_dock.lua</SPAN> 
+    <SPAN  CLASS="textit">cfg_statusbar.lua</SPAN> 
+    ...</TD>
+<TD ALIGN="LEFT">Configuration files for different modules.</TD>
+</TR>
+</TABLE>
+
+<P>
+Additionally, there's the file <SPAN  CLASS="textit">look.lua</SPAN> that configures the 
+drawing engine, but it is covered in chapter <A HREF="node5.html#chap:gr">4</A>.
+
+<P>
+
+<H2><A NAME="SECTION00420000000000000000"></A>
+<A NAME="sec:walkthrough"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN  CLASS="textit">cfg_ion.lua</SPAN>
+</H2>
+
+<P>
+As already mentioned <SPAN  CLASS="textit">cfg_ion.lua</SPAN> is Ion's main configuration
+file. Some basic 'feel' settings are usually configured there and
+the necessary modules and other configuration files configuring some 
+more specific aspects of Ion are loaded there. In this section we
+take a walk through the stock <SPAN  CLASS="textit">cfg_ion.lua</SPAN>.
+Notice that most of the settings are commented-out (<TT>-</TT> is a 
+line comment in Lua) in the actual file, as they're the defaults
+nevertheless.
+
+<P>
+The first thing one in the file is to set
+<PRE>
+META="Mod1+"
+ALTMETA=""
+</PRE>
+These settings cause most of Ion's key bindings to use <SPAN  CLASS="textbf">Mod1</SPAN> as the
+modifier key. If <TT>ALTMETA</TT> is set, it is used as modifier for the keys
+that don't normally use a modifier. for details on modifiers and key 
+binding setup in general see section <A HREF="#sec:bindings">3.3</A>.
+
+<P>
+Next we do some basic feel configuration:
+
+<P>
+<PRE>
+ioncore.set{
+    dblclick_delay=250,
+    kbresize_delay=1500,
+}
+</PRE>
+
+<P>
+These two will set the delay between button presses in a double click, and
+the timeout to quit resize mode in milliseconds.
+
+<P>
+<PRE>
+ioncore.set{
+    opaque_resize=true,
+    warp=true
+}
+</PRE>
+
+<P>
+The first of these two settings enables opaque resize mode: in move/resize
+move frames and other objects mirror you actions immediately. If opaque
+resize is disabled, a XOR rubber band is shown during the mode instead.
+This will, unfortunately, cause Ion to also grab the X server and has some
+side effects.
+
+<P>
+Next we load the configuration for Ion's core, and some kludges:
+
+<P>
+<PRE>
+dopath("cfg_ioncore")
+dopath("cfg_kludges")
+</PRE>
+
+<P>
+Most bindings and menus are defined in <SPAN  CLASS="textit">cfg_ioncore.lua</SPAN>.
+Details on making such definitions follow in sections <A HREF="#sec:bindings">3.3</A> 
+and <A HREF="#sec:menus">3.4</A>, respectively. 
+some kludges or ''winprops'' to make some applications behave better
+under Ion are colledted in <SPAN  CLASS="textit">cfg_kludges.lua</SPAN>; see section
+<A HREF="#sec:winprops">3.5</A> for details. In addition to these, this file
+lists quite a few statements of the form
+<PRE>
+ioncore.defshortening("[^:]+: (.*)(&lt;[0-9]+&gt;)", "$1$2$|$1$&lt;...$2")
+</PRE>
+These are used to configure how Ion attempts to shorten window titles
+when they do not fit in a Tab. The first argument is a POSIX regular
+expression that is used to match against the title and the next is
+a rule to construct a new title of a match occurs. This particular
+rule is used to shorten e.g. 'Foo: barbaz&lt;3&gt;' to 'barba...&lt;3&gt;'; for
+details see the function reference entry for <A HREF="node7.html#fn:ioncore.defshortening"><TT>ioncore.defshortening</TT></A>.
+
+<P>
+To actually be able to do something besides display windows in full screen
+mode, we must next load some modules:
+
+<P>
+<PRE>
+dopath("cfg_modules")
+--dopath("mod_query")
+--dopath("mod_menu")
+--dopath("mod_tiling")
+--dopath("mod_statusbar")
+--dopath("mod_dock")
+--dopath("mod_sp")
+</PRE>
+
+<P>
+We actually load there another file listing the default selection of
+modules. If you only want to load additional modules, just uncomment
+the corresponding line. If you want to disable loading some modules,
+comment out the the line loading <SPAN  CLASS="textit">cfg_modules</SPAN>, and uncomment
+the lines for the modules you want, or add more.
+
+<P>
+
+<H2><A NAME="SECTION00430000000000000000"></A>
+<A NAME="sec:bindings"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents
+</H2>
+
+<P>
+In the stock configuration file setup, most key and mouse bindings are set
+from the file <SPAN  CLASS="textit">cfg_ioncore.lua</SPAN> while module-specific bindings
+are set from the modules' main configuration files (<SPAN  CLASS="textit">cfg_modname.lua</SPAN>).
+This, however, does not have to be so as long as the module has been
+loaded prior to defining any module-specific bindings.
+
+<P>
+Bindings are defined by calling the function 
+<A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> with the ''context'' of the
+bindings and the a table of new bindings to make. The context is simply
+string indicating one of the classes of regions (or modes such as
+WMoveresMode) introduced in section <A HREF="node3.html#sec:objects">2.2</A>, and fully
+listed in appendix <A HREF="node9.html#app:fullhierarchy">B</A>, although not all define
+a binding map. For example, the following skeleton would be used to 
+define new bindings for all frames:
+
+<P>
+<PRE>
+defbindings("WFrame", {
+    -- List of bindings to make goes here.
+})
+</PRE>
+
+<P>
+There has been some confusion among users about the need to define the
+''context'' for each binding, so let me try to explain this design
+decision here. The thing is that if there was a just a simple 'bind this 
+key to this action' method without knowledge of the context, some 
+limitations would have to be made on the available actions and writing 
+custom handlers would be more complicated. In addition one may want to 
+bind the same function to different key for different types of objects.
+Indeed, the workspace and frame tab switching functions are the same both
+classes being based on WMPlex, and in the stock configuration the 
+switch to <SPAN CLASS="MATH"></SPAN>:th workspaces is bound to <SPAN  CLASS="textbf">Mod1+n</SPAN> while the switch to 
+<SPAN CLASS="MATH"></SPAN>:th tab is bound to the sequence <SPAN  CLASS="textbf">Mod1+k n</SPAN>.
+
+<P>
+Currently known ''contexts'' include: 
+<TT>WScreen</TT>,
+<TT>WMPlex</TT>,
+<TT>WMPlex.toplevel</TT>,
+<TT>WFrame</TT>,
+<TT>WFrame.toplevel</TT>,
+<TT>WFrame.floating</TT>,
+<TT>WFrame.tiled</TT>,
+<TT>WFrame.transient</TT>,
+<TT>WMoveresMode</TT>,
+<TT>WGroup</TT>,
+<TT>WGroupCW</TT>,
+<TT>WGroupWS</TT>,
+<TT>WClientWin</TT>,
+<TT>WTiling</TT>, and
+<TT>WStatusBar</TT>.
+Most of these should be self-explanatory, corresponding to objects
+of class with the same name. The ones with <TT>.toplevel</TT> suffix
+refer to screens and ''toplevel''  frames, i.e. frames that are
+not used for transient windows. Likewise <TT>.transient</TT> refers
+to frames in transient mode, and <TT>.tiled</TT> and <TT>.floating</TT>
+to frames in, respectively, tiled and floating modes. 
+
+<P>
+The following subsections describe how to construct elements of the
+binding table. Note that <A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> adds
+the the newly defined bindings to the previous bindings of the context,
+overriding duplicates. To unbind an event, set the handler parameter
+to <TT>nil</TT> for each of the functions to be described in the following
+subsections.
+
+<P>
+Also note that when multiple objects want to handle a binding, the 
+innermost (when the root window is considered the outermost) active object
+in the parent-child hierarchy (see Figure <A HREF="node3.html#fig:parentship">2.2</A>) of objects 
+gets to handle the action.
+
+<P>
+
+<H3><A NAME="SECTION00431000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
+</H3>
+
+<P>
+Unlike in Ion2, in Ion3 binding handlers are not normally passed as
+''anonymous functions'', although this is still possible. The preferred
+method now is to pass the code of the handler as a string. Two special 
+variables are available in this code. These are
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Variable</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>_</TT> (underscore)</TD>
+<TD ALIGN="LEFT">Reference to the object on which the 
+      binding was triggered. The object is of the same class as the the
+      context of the <A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> call
+      defining the binding.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>_sub</TT></TD>
+<TD ALIGN="LEFT">Usually, the currently active <SPAN  CLASS="textit">managed object</SPAN> of the 
+      object referred to by <TT>_</TT>, but sometimes (e.g. mouse actions
+      on tabs of frames) something else relevant to the action triggering
+      the binding.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>_chld</TT></TD>
+<TD ALIGN="LEFT">Object corresponding to the currently active child window of the
+       object referred to by <TT>_</TT>.</TD>
+</TR>
+</TABLE>
+
+<P>
+For example, supposing '<TT>_</TT>' is a WFrame, the following
+handler should move the active window to the right, if possible:
+
+<P>
+<PRE>
+"_:inc_index(_sub)"
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00432000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
+</H3>
+
+<P>
+To suppress error messages, each binding handler may also be accompanied
+by a ''guard'' expression that blocks the handler from being called when
+the guard condition is not met. Currently the following guard expressions
+are supported (for both <TT>_sub</TT> and <TT>_chld</TT>):
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Guard</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>"_sub:non-nil"</TT></TD>
+<TD ALIGN="LEFT">The <TT>_sub</TT> parameter must be set.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>"_sub:SomeClass"</TT></TD>
+<TD ALIGN="LEFT">The <TT>_sub</TT> parameter must be member
+      of class SomeClass.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H3><A NAME="SECTION00433000000000000000"></A>
+<A NAME="sec:binddef"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings
+</H3>
+
+<P>
+The descriptions of the individual bindings in the binding table argument
+to <A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> should be constructed with the following
+functions.
+
+<P>
+Key presses:
+
+<UL>
+<LI><A HREF="#fn:kpress"><TT>kpress</TT></A><TT>(keyspec, handler [, guard])</TT>,
+</LI>
+<LI><A HREF="#fn:kpress_wait"><TT>kpress_wait</TT></A><TT>(keyspec, handler [, guard])</TT> and
+</LI>
+<LI><A HREF="#fn:submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
+</LI>
+</UL>
+Mouse actions:
+
+<UL>
+<LI><A HREF="#fn:mclick"><TT>mclick</TT></A><TT>(buttonspec, handler [, guard])</TT>,
+</LI>
+<LI><A HREF="#fn:mdblclick"><TT>mdblclick</TT></A><TT>(buttonspec, handler [, guard])</TT>, 
+</LI>
+<LI><A HREF="#fn:mpress"><TT>mpress</TT></A><TT>(buttonspec, handler [, guard])</TT> and
+</LI>
+<LI><A HREF="#fn:mdrag"><TT>mdrag</TT></A><TT>(buttonspec, handler [, guard])</TT>.
+</LI>
+</UL>
+
+<P>
+The actions that most of these functions correspond to should be clear
+and as explained in the reference, <A HREF="#fn:kpress_wait"><TT>kpress_wait</TT></A> is simply
+<A HREF="#fn:kpress"><TT>kpress</TT></A> with a flag set instructing Ioncore wait for all
+modifiers to be released before processing any further actions.
+This is to stop one from accidentally calling e.g.
+<A HREF="node7.html#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A> multiple times in a row. The <A HREF="#fn:submap"><TT>submap</TT></A>
+function is used to define submaps or ''prefix maps''. The second
+argument to this function is table listing the key press actions
+(<A HREF="#fn:kpress"><TT>kpress</TT></A>) in the submap
+
+<P>
+The parameters <TT>keyspec</TT> and <TT>buttonspec</TT> are explained below
+in detail. The parameter <TT>handler</TT> is the handler for the binding,
+and the optional parameter <TT>guard</TT> its guard. These should normally
+be strings as explained above. 
+
+<P>
+
+<H3><A NAME="SECTION00434000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
+</H3>
+
+<P>
+For example, to just bind the key <SPAN  CLASS="textbf">Mod1+1</SPAN> to switch to the first
+workspace and <SPAN  CLASS="textbf">Mod1+Right</SPAN> to the next workspace, you would make the
+following call
+<PRE>
+defbindings("WScreen", {
+    kpress("Mod1+Right", "_:switch_next()"),
+    kpress("Mod1+1", "_:switch_nth(1)"),
+})
+</PRE>
+
+<P>
+Note that <TT>_:switch_nth(1)</TT> is the same as calling
+<A HREF="node7.html#fn:WMPlex.switch_next"><TT>WMPlex.switch_next</TT></A><TT>(_, 1)</TT> as WScreen inherits
+WMPlex and this is where the function is actually defined.
+
+<P>
+Similarly to the above example, to bind the key sequence <SPAN  CLASS="textbf">Mod1+k n</SPAN> 
+switch to the next managed object within a frame, and <SPAN  CLASS="textbf">Mod1+k 1</SPAN> to the
+first, you would issue the following call:
+<PRE>
+defbindings("WFrame", {
+    submap("Mod1+K", {
+        kpress("Right", "_:switch_next()"),
+        kpress("1", "_:switch_nth(1)"),
+   }),
+})
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00435000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
+</H3>
+
+<P>
+As seen above, the functions that create key binding specifications require
+a <TT>keyspec</TT> argument. This argument should be a string containing the
+name of a key as listed in the X header file <SPAN  CLASS="textit">keysymdef.h</SPAN><A NAME="tex2html7"
+  HREF="#foot858"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
+<A NAME="859"></A>
+Most of the key names are quite intuitive while some are not. For example,
+the <SPAN  CLASS="textbf">Enter</SPAN> key on the main part of the keyboard has the less common
+name <SPAN  CLASS="textbf">Return</SPAN> while the one the numpad is called <SPAN  CLASS="textbf">KP_Enter</SPAN>.
+
+<P>
+The <TT>keyspec</TT> string may optionally have multiple ''modifier'' names
+followed by a plus sign (<TT>+</TT>) as a prefix. X defines the following
+modifiers:
+<BLOCKQUOTE>
+<SPAN  CLASS="textbf">Shift</SPAN>, <SPAN  CLASS="textbf">Control</SPAN>, <SPAN  CLASS="textbf">Mod1</SPAN> to <SPAN  CLASS="textbf">Mod5</SPAN>,
+<SPAN  CLASS="textbf">AnyModifier</SPAN> and <SPAN  CLASS="textbf">Lock</SPAN>.
+<A NAME="860"></A>
+<A NAME="861"></A>
+<A NAME="862"></A>
+<A NAME="863"></A>
+<A NAME="864"></A>
+
+</BLOCKQUOTE>
+
+<P>
+X allows binding all of these modifiers to almost any key and while this
+list of modifiers does not explicitly list keys such as 
+<SPAN  CLASS="textbf">Alt</SPAN><A NAME="865"></A> that are common on modern keyboards, such
+keys are bound to one of the <SPAN  CLASS="textbf">ModN</SPAN>. On systems running XFree86
+<SPAN  CLASS="textbf">Alt</SPAN> is usually <SPAN  CLASS="textbf">Mod1</SPAN>. On Suns <SPAN  CLASS="textbf">Mod1</SPAN> is the diamond key
+and <SPAN  CLASS="textbf">Alt</SPAN> something else. One of the ''flying window'' keys on so
+called Windows-keyboards is probably mapped to <SPAN  CLASS="textbf">Mod3</SPAN> if you have
+such a key. Use the program <SPAN  CLASS="textit">xmodmap</SPAN><A NAME="866"></A>
+to find out what exactly is bound where. 
+
+<P>
+Ion defaults to <SPAN  CLASS="textbf">AnyModifier</SPAN> in submaps. This can sometimes lead to
+unwanted effects when the same key is used with and without explicitly
+specified modifiers in nested regions. For this reason, Ion recognises
+<SPAN  CLASS="textbf">NoModifier</SPAN> as a special modifier that can be used to reset this
+default.
+
+<P>
+Ion ignores the <SPAN  CLASS="textbf">Lock</SPAN> modifier and any <SPAN  CLASS="textbf">ModN</SPAN> (<SPAN CLASS="MATH"></SPAN>)
+bound to <SPAN  CLASS="textbf">NumLock</SPAN><A NAME="867"></A> or
+<SPAN  CLASS="textbf">ScrollLock</SPAN><A NAME="868"></A>
+by default because such<A NAME="tex2html8"
+  HREF="#foot837"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A> locking keys may otherwise
+cause confusion.
+
+<P>
+
+<H3><A NAME="SECTION00436000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
+</H3>
+
+<P>
+Button specifications are similar to key definitions but now
+instead of specifying modifiers and a key, you specify modifiers
+and one of the button names <SPAN  CLASS="textbf">Button1</SPAN> to
+<SPAN  CLASS="textbf">Button5</SPAN><A NAME="869"></A>. Additionally the
+specification may end with an optional area name following an @-sign.
+Only frames currently support areas, and the supported values in this
+case are
+<TT>"border"</TT>, <TT>"tab"</TT>, <TT>"empty_tab"</TT>, <TT>"client"</TT> and
+<TT>nil</TT> (for the whole frame).
+
+<P>
+For example, the following code binds dragging a tab with the first 
+button pressed to initiate tab drag&amp;drop handling:
+
+<P>
+<PRE>
+defbindings("WFrame", {
+    mdrag("Button1@tab", "_:p_tabdrag()"),
+})
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00437000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
+</H3>
+
+<P>
+The default binding configuration contains references to the variables
+<TT>META</TT> and <TT>ALTMETA</TT> instead of directly using the default
+values of <TT>"Mod1+"</TT> and <TT>""</TT> (nothing). As explained in
+section <A HREF="#sec:walkthrough">3.2</A>, the definitions of these variables
+appear in <SPAN  CLASS="textit">cfg_ion.lua</SPAN>. This way you can easily change the the
+modifiers used by all bindings in the default configuration without 
+changing the whole binding configuration. Quite a few people prefer 
+to use the Windows keys as modifiers because many applications already
+use <SPAN  CLASS="textbf">Alt</SPAN>. Nevertheless, <SPAN  CLASS="textbf">Mod1</SPAN> is the default as a key bound 
+to it is available virtually everywhere.
+
+<P>
+
+<H2><A NAME="SECTION00440000000000000000"></A>
+<A NAME="sec:menus"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00441000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
+</H3>
+
+<P>
+<A NAME="1115"></A>
+<A NAME="1170"></A>
+<A NAME="1171"></A>
+<A NAME="1172"></A>
+In the stock configuration file setup, menus are defined in the file
+<SPAN  CLASS="textit">cfg_menus.lua</SPAN> as previously mentioned. The <SPAN  CLASS="textit">mod_menu</SPAN> module
+must be loaded for one to be able to define menus, and this is done with
+the function <A HREF="#fn:mod_menu.defmenu"><TT>defmenu</TT></A> provided by it.
+
+<P>
+Here's an example of the definition of a rather simple menu with a submenu:
+
+<P>
+<PRE>
+defmenu("exitmenu", {
+    menuentry("Restart", "ioncore.restart()"),
+    menuentry("Exit", "ioncore.shutdown()"),
+})
+
+defmenu("mainmenu", {
+    menuentry("Lock screen", "ioncore.exec('xlock')"),
+    menuentry("Help", "mod_query.query_man(_)"),
+    submenu("Exit", "exitmenu"),
+})
+</PRE>
+
+<P>
+The <A HREF="#fn:mod_menu.menuentry"><TT>menuentry</TT></A> function is used to create an entry in the 
+menu with a title and an entry handler to be called when the menu entry
+is activated. The parameters to the handler are similar to those of binding
+handlers, and usually the same as those of the binding that opened the menu.
+
+<P>
+The <A HREF="#fn:mod_menu.submenu"><TT>submenu</TT></A> function is used to insert a submenu at that 
+point in the menu. (One could as well just pass a table with the menu
+entries, but it is not encouraged.)
+
+<P>
+
+<H3><A NAME="SECTION00442000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
+</H3>
+
+<P>
+The menu module predefines the following special menus. These can be used
+just like the menus defined as above.
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Menu name</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>windowlist</TT></TD>
+<TD ALIGN="LEFT">List of all client windows. Activating an entry jumps to that window.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>workspacelist</TT></TD>
+<TD ALIGN="LEFT">List of all workspaces. Activating an entry jumps to that workspaces.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>stylemenu</TT></TD>
+<TD ALIGN="LEFT">List of available <SPAN  CLASS="textit">look_*.lua</SPAN> style files. Activating an entry
+    loads that style and ask to save the selection.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>ctxmenu</TT></TD>
+<TD ALIGN="LEFT">Context menu for given object.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H3><A NAME="SECTION00443000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
+</H3>
+
+<P>
+The ''ctxmenu'' is a special menu that is assembled from a defined context
+menu for the object for which the menu was opened for, but also includes
+the context menus for the manager objects as submenus.
+
+<P>
+Context menus for a given region class are defined with the
+<A HREF="#fn:mod_menu.defctxmenu"><TT>defctxmenu</TT></A> function. This is other ways similar to
+<A HREF="#fn:mod_menu.defmenu"><TT>defmenu</TT></A>, but the first argument instead being the name
+of the menu, the name of the region class to define context menu for.
+For example, here's part of the stock WFrame context menu 
+definition:
+
+<P>
+<PRE>
+defctxmenu("WFrame", {
+    menuentry("Close", "WRegion.rqclose_propagate(_, _sub)"),
+    menuentry("Kill",  "WClientWin.kill(_sub)", "_sub:WClientWin"),
+})
+</PRE>
+
+<P>
+Some of the same ''modes'' as were available for some bindings
+may also be used: <TT>WFrame.tiled</TT>, <TT>WFrame.floating</TT>,
+and <TT>WFrame.transient</TT>.
+
+<P>
+
+<H3><A NAME="SECTION00444000000000000000"></A>
+<A NAME="sec:menudisp"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus
+</H3>
+
+<P>
+The following functions may be used to display menus from binding
+handlers (and elsewhere):
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Function</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><A HREF="node7.html#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A></TD>
+<TD ALIGN="LEFT">Keyboard (or mouse) operated menus that open in the bottom-left corner
+      of a screen or frame.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><A HREF="#fn:mod_menu.bigmenu"><TT>mod_menu.bigmenu</TT></A></TD>
+<TD ALIGN="LEFT">Same as previous, but uses another graphical style.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><A HREF="node7.html#fn:mod_menu.pmenu"><TT>mod_menu.pmenu</TT></A></TD>
+<TD ALIGN="LEFT">Mouse-operated drop-down menus. This function can only be called from a
+      mouse press or drag handler.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><A HREF="node7.html#fn:mod_menu.grabmenu"><TT>mod_menu.grabmenu</TT></A></TD>
+<TD ALIGN="LEFT">A special version of <A HREF="node7.html#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A> that grabs the keyboard
+      and is scrolled with a given key until all modifiers have been released,
+      after which the selected entry is activated. This function is meant to 
+      be used for implementing, for example, Win***s-style <SPAN  CLASS="textbf">Alt-Tab</SPAN> 
+      handling.<A NAME="tex2html9"
+  HREF="#foot1173"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></TD>
+</TR>
+</TABLE>
+
+<P>
+The <A HREF="node7.html#fn:mod_menu.grabmenu"><TT>grabmenu</TT></A> function takes the extra key parameter, but
+aside from that each of these functions takes three arguments, which when
+called from a binding handler, should be the parameters to the handler, and
+the name of the menu. For example, the following snippet of of code binds
+the both ways to open a context menu for a frame:
+
+<P>
+<PRE>
+defbindings("WFrame", {
+    kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
+})
+</PRE>
+
+<P>
+
+<H2><A NAME="SECTION00450000000000000000"></A>
+<A NAME="sec:winprops"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops
+</H2>
+
+<P>
+The so-called ''winprops''<A NAME="1266"></A> can be used to change how
+specific windows are handled and to set up some kludges to deal with
+badly behaving applications. They are defined by calling the function
+<TT>defwinprop</TT> with a table containing the properties to set and the
+necessary information to identify a window. The currently supported
+winprops are listed below, and the subsequent subsections explain the
+usual method of identifying windows, and how to obtain this information.
+
+<P>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>acrobatic</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1410"></A>
+    Set this to <TT>true</TT> for Acrobat Reader. It has an annoying
+    habit of trying to manage its dialogs instead of setting them as
+    transients and letting the window manager do its job, causing
+    Ion and acrobat go a window-switching loop when a dialog is
+    opened.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>aspect</TT> (table)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1411"></A>
+    The table should contain the entries <TT>w</TT> and <TT>h</TT> that
+    override application-supplied aspect ratio hint.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>float</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1412"></A>
+    Set this to open the window in a floating frame, when
+    in a group.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>fullscreen</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1413"></A>
+    Should the window be initially in full screen mode?
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>ignore_cfgrq</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1414"></A>
+    Should configure requests on the window be ignored?
+    Only has effect on floating windows.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>ignore_net_active_window</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1415"></A>
+    Ignore extended WM hints <TT>_NET_ACTIVE_WINDOW</TT> request.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>ignore_resizeinc</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1416"></A>
+    Should application supplied size increments be ignored?
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>jumpto</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1417"></A>
+    Should a newly created client window always be made
+    active, even if the allocated frame isn't.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>max_size</TT> (table)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1418"></A>
+    The table should contain the entries <TT>w</TT> and <TT>h</TT> that
+    override application-supplied maximum size hint.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>min_size</TT> (table)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1419"></A>
+    Similar to <TT>max_size</TT> but for the minimum size hint.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>oneshot</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1420"></A>
+    Discard this winprop after first use.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>switchto</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1421"></A>
+    Should a newly mapped client window be switched to within
+    its frame.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>target</TT> (string)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1422"></A>
+    The name of an object (workspace, frame) that should manage 
+    windows of this type.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>transient_mode</TT> (string)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1423"></A>
+    "normal": No change in behaviour. "current": The window
+    should be thought of as a transient for the current active
+    client window (if any) even if it is not marked as a
+    transient by the application. "off": The window should be
+    handled as a normal window even if it is marked as a
+    transient by the application.
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>transients_at_top</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1424"></A>
+    When transients are managed by the client window itself (as it
+    is the case on tiled workspaces), should the transients be
+    placed at the top of the window instead of bottom?
+
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DT><STRONG>Winprop:</STRONG></DT>
+<DD><TT>transparent</TT> (boolean)
+      
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD><A NAME="1425"></A>
+    Should frames be made transparent when this window is selected? 
+<BR>  
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00451000000000000000"></A>
+<A NAME="sec:classesrolesinstances"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Classes, roles and instances
+</H3>
+
+<P>
+The identification information in the winprop specification is usually the
+<TT>class</TT><A NAME="1426"></A>,
+<TT>role</TT><A NAME="1427"></A>,
+<TT>instance</TT><A NAME="1428"></A> and
+<TT>name</TT>
+of the window. The <TT>name</TT> field is a Lua-style regular expression
+matched against the window's title and the rest are strings that must
+exactly match the corresponding window information. It is not necessary
+to specify all of these fields.
+
+<P>
+Ion looks for a matching winprop in the order listed by the following
+table. An 'E' indicates that the field must be set in the winprop
+and it must match the window's corresponding property exactly or, in
+case of <TT>name</TT>, the regular expression must match the window
+title. An asterisk '*' indicates that a winprop where the field is
+not specified (or is itself an asterisk in case of the first three
+fields) is tried.
+
+<P>
+<DIV ALIGN="CENTER">
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="LEFT"><TT>class</TT></TD>
+<TD ALIGN="LEFT"><TT>role</TT></TD>
+<TD ALIGN="LEFT"><TT>instance</TT></TD>
+<TD ALIGN="LEFT"><TT>name</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">E</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">*</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">E</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+</TR>
+<TR><TD ALIGN="LEFT">E</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">*</TD>
+<TD ALIGN="LEFT">E</TD>
+</TR>
+<TR><TD ALIGN="LEFT">&nbsp;</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+<TD ALIGN="LEFT">etc.</TD>
+</TR>
+</TABLE>
+</DIV>
+
+<P>
+If there are multiple winprops with other identification information 
+the same but different <TT>name</TT>, the longest match is chosen.
+
+<P>
+
+<H3><A NAME="SECTION00452000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Finding window identification</A>
+</H3>
+
+<P>
+The 'Window info' context menu entry (<SPAN  CLASS="textbf">Mod1+M</SPAN> or <SPAN  CLASS="textbf">Button3</SPAN> on a tab)
+can be used to list the identification information required to set winprops
+for a window and all the transient windows managed within it. 
+
+<P>
+<A NAME="1383"></A> 
+Another way to get the identification information is to use <TT>xprop</TT>.
+Simply run To get class and instance, simply run <TT>xprop WM_CLASS</TT>
+and click on the particular window of interest. The class is the latter of
+the strings while the instance is the former.  To get the role - few
+windows have this property - use the command <TT>xprop WM_ROLE</TT>. 
+This method, however, will not work on transients. 
+
+<P>
+<A NAME="1387"></A>
+So-called ''transient windows'' are usually short-lived dialogs (although
+some programs abuse this property) that have a parent window that they are
+''transient for''. On tiled workspaces Ion displays these windows 
+simulatenously with the parent window at the bottom of the same frame.
+Unfortunately <TT>xprop</TT> is stupid and can't cope with this situation,
+returning the parent window's properties when the transient is clicked on.
+For this reason you'll have to do a little extra work to get the properties
+for that window.<A NAME="tex2html11"
+  HREF="#foot1430"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A>
+<P>
+Finally, it should be mentioned that too many authors these days
+''forget'' to set this vital identification to anything meaningful:
+everything except name is the same for all of the programs's 
+windows, for example.
+
+<P>
+
+<H3><A NAME="SECTION00453000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Some common examples</A>
+</H3>
+
+<P>
+
+<H4><A NAME="SECTION00453100000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+</H4>
+
+<P>
+The following is absolutely necessary for Acrobat reader:
+
+<P>
+<PRE>
+defwinprop{
+    class = "AcroRead",
+    instance = "documentShell",
+    acrobatic = true,
+}
+</PRE>
+
+<P>
+
+<H4><A NAME="SECTION00453200000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+</H4>
+
+<P>
+Mozilla Firebird (0.7) incorrectly does not set the <TT>WM_TRANSIENT_FOR</TT> 
+property for the dialog that is used to ask the action to take for a file.
+It, however, sets the the property point to the main window for the save
+dialog. This can be annoying and confusing, as the first dialog is not 
+closed before the second is displayed.
+
+<P>
+We'd like the first dialog to be transient to the main window. The closest
+we can get to that is to consider it transient to the current window (if
+there's one). Unfortunately Firebird does not set any meaningful classes, 
+instances or roles for the windows, so we'll have to rely on an ugly title
+match.
+
+<P>
+<PRE>
+defwinprop{
+    class = "MozillaFirebird-bin",
+    name = "Opening .*",
+    transient_mode = "current",
+}
+</PRE>
+
+<P>
+
+<H4><A NAME="SECTION00453300000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+</H4>
+
+<P>
+The following winprop should place xterm started with command-line parameter
+<TT>-name sysmon</TT> and running a system monitoring program in a
+particular frame:
+<PRE>
+defwinprop{
+    class = "XTerm",
+    instance = "sysmon",
+    target = "sysmonframe",
+}
+</PRE>
+
+<P>
+For this example to work, we have to somehow create a frame named
+<TT>sysmonframe</TT>. One way to do this is to make the following
+call in the <SPAN  CLASS="textbf">Mod1+F3</SPAN> Lua code query:
+
+<P>
+<PRE>
+mod_query.query_renameframe(_)
+</PRE>
+
+<P>
+Recall that <TT>_</TT> points to the multiplexer (frame or screen) in which 
+the query was opened. Running this code should open a new query prefilled
+with the current name of the frame. In our example we would change the 
+name to <TT>sysmonframe</TT>, but we could just as well have used the 
+default name formed from the frame's class name and an instance number.
+
+<P>
+
+<P>
+<BR><HR><H4>Footnotes</H4>
+<DL>
+<DT><A NAME="foot858">...keysymdef.h</A><A
+ HREF="node4.html#tex2html7"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
+<DD>This file can usually be found in the directory
+<SPAN  CLASS="textit">/usr/X11R6/include/X11/</SPAN>.
+
+</DD>
+<DT><A NAME="foot837">... such</A><A
+ HREF="node4.html#tex2html8"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A></DT>
+<DD>Completely useless keys that should be
+gotten rid of in the author's opinion.
+
+</DD>
+<DT><A NAME="foot1173">... handling.</A><A
+ HREF="node4.html#tex2html9"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></DT>
+<DD>See the <SPAN  CLASS="textit">wcirculate.lua</SPAN> script in the Ion 
+        scripts repository <TT><A NAME="tex2html10"
+  HREF="http://iki.fi/tuomov/repos/ion-scripts-3/">http://iki.fi/tuomov/repos/ion-scripts-3/</A></TT>.
+
+</DD>
+<DT><A NAME="foot1430">... window.</A><A
+ HREF="node4.html#tex2html11"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A></DT>
+<DD>There's a patch to <TT>xprop</TT> to
+fix this, but nothing seems to be happening with respect to including it in 
+XFree86.
+
+</DD>
+</DL>
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html261"
+  HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html255"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html249"
+  HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html257"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html259"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html262"
+  HREF="node5.html">4. Graphical styles</A>
+<B> Up:</B> <A NAME="tex2html256"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html250"
+  HREF="node3.html">2. Preliminaries: Key concepts</A>
+ &nbsp; <B>  <A NAME="tex2html258"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html260"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node5.html b/ionconf/node5.html
new file mode 100644 (file)
index 0000000..b6951d4
--- /dev/null
@@ -0,0 +1,720 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4. Graphical styles</TITLE>
+<META NAME="description" CONTENT="4. Graphical styles">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node6.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node6.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html297"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html291"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html285"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html293"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html295"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html298"
+  HREF="node6.html">5. Scripting</A>
+<B> Up:</B> <A NAME="tex2html292"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html286"
+  HREF="node4.html">3. Basic configuration</A>
+ &nbsp; <B>  <A NAME="tex2html294"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html296"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html299"
+  HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
+<UL>
+<LI><A NAME="tex2html300"
+  HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
+<UL>
+<LI><A NAME="tex2html301"
+  HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
+<LI><A NAME="tex2html302"
+  HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
+<LI><A NAME="tex2html303"
+  HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html304"
+  HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
+<UL>
+<LI><A NAME="tex2html305"
+  HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
+<LI><A NAME="tex2html306"
+  HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
+<UL>
+<LI><A NAME="tex2html307"
+  HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
+<LI><A NAME="tex2html308"
+  HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
+<LI><A NAME="tex2html309"
+  HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
+<LI><A NAME="tex2html310"
+  HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+<LI><A NAME="tex2html311"
+  HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
+</UL>
+<LI><A NAME="tex2html312"
+  HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html313"
+  HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+<UL>
+<LI><A NAME="tex2html314"
+  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+<LI><A NAME="tex2html315"
+  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+</UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00500000000000000000"></A>
+<A NAME="chap:gr"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>. Graphical styles
+</H1>
+
+<P>
+This chapter first gives in section <A HREF="#sec:engines">4.1</A> a general outline 
+of how drawing engines are used, of style specifications and then
+in section <A HREF="#sec:defaultde">4.2</A> describes how to specify styles
+for the default drawing engine.
+
+<P>
+
+<H2><A NAME="SECTION00510000000000000000"></A>
+<A NAME="sec:engines"></A><A NAME="1665"></A><A NAME="1666"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles
+</H2>
+
+<P>
+Ion's drawing routines are abstracted into so-called drawing engine
+modules that can, again depending on the system, be dynamically
+loaded as needed. The drawing engine modules provide ''brushes''
+that objects can use to draw some high-level primitives such
+as borders and text boxes (in addition to simple text and rectangle
+drawing) on their windows and configure e.g. the shape and 
+background of the window. While the drawing engines therefore
+do not directly implement looks for each possible object (that
+would hardly be maintainable), different brush styles can be
+used to give a distinctive look to different objects and engines
+could interpret some styles as special cases. Style specifications 
+are strings of the form
+
+<P>
+<PRE>
+element1-element2-...-elementn
+</PRE>
+
+<P>
+An example of such a style specification is <TT>tab-frame</TT>;
+see the table in subsection <A HREF="#sec:styles">4.1.1</A> for more styles.
+
+<P>
+When an object asks for a brush of certain style, the selected
+drawing engine will attempt to find the closest match to this
+specification. The styles/brushes defined by the drawing engines 
+may have asterisks (<code>*</code>) as some of the elements indicating
+a match to anything. Exact matches are preferred to asterisk
+matches and longer matches to shorter. For example, let a brush
+for style <TT>foo-bar-baz</TT> be queried, then the following
+brushes are in order of preference:
+
+<P>
+<PRE>
+foo-bar-baz
+foo-*-baz
+foo-bar
+*
+foo-baz   -- Doesn't match, not selected!
+</PRE>
+
+<P>
+Some of the drawing primitives allow extra attributes to be
+specified, also in the form
+<PRE>
+attr1-attr2-...-attrn
+</PRE>
+These extra attributes are called <SPAN  CLASS="textit">substyles</SPAN><A NAME="1677"></A>
+and allow, for example, the state of the object to be indicated 
+by  different colour sets while keeping the interface at an 
+abstract level and the drawing engine completely ignorant 
+of the semantics - only the writer of the drawing engine
+configuration file has to know them. However the drawing 
+engine can again interpret known substyles as special cases
+and the default engine indeed does so with frame tab 
+tag and drag states.)
+
+<P>
+
+<H3><A NAME="SECTION00511000000000000000"></A>
+<A NAME="sec:styles"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles
+</H3>
+
+<P>
+
+<H4><A NAME="SECTION00511100000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
+</H4>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Style name</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame</TT></TD>
+<TD ALIGN="LEFT">Style for frames. 
+       Substyles: <TT>active</TT>, <TT>inactive</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame-tiled</TT></TD>
+<TD ALIGN="LEFT">A more specific style for tiled frames.
+        Substyles as for <TT>frame</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame-tiled-alt</TT></TD>
+<TD ALIGN="LEFT">An alternative style for tiled frames.
+        Often used to disable the tab-bar.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame-floating</TT></TD>
+<TD ALIGN="LEFT">A more specific style for floating
+        frames.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame-transient</TT></TD>
+<TD ALIGN="LEFT">A more specific style for frames
+        containing transient windows.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00511200000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
+</H4>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Style name</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab</TT></TD>
+<TD ALIGN="LEFT">Style for frames' tabs and menu entries. 
+       Substyles: combinations of the form <TT>a-s</TT> where
+       <TT>a</TT> is one of <TT>active</TT>/<TT>inactive</TT> and
+       <TT>s</TT> is one of <TT>selected</TT>/<TT>unselected</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-frame</TT></TD>
+<TD ALIGN="LEFT">A more specific style for frames' tabs.
+       Substyles: combinations of the form <TT>a-s-t-d-u</TT> where
+       <TT>a</TT> and <TT>s</TT> are as above and
+       <TT>t</TT> is one of <TT>tagged</TT>/<TT>not_tagged</TT>,
+       <TT>d</TT> is one of <TT>dragged</TT>/<TT>not_dragged</TT> and
+       <TT>u</TT> is one of <TT>activity</TT>/<TT>no_activity</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-frame-tiled</TT>,</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-frame-tiled-alt</TT>,</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-frame-floating</TT>,</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-frame-transient</TT></TD>
+<TD ALIGN="LEFT">More specific styles for frames in the
+        different modes.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-menuentry</TT></TD>
+<TD ALIGN="LEFT">A more specific style for entries in WMenus.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tab-menuentry-bigmenu</TT></TD>
+<TD ALIGN="LEFT">An alternate style for entries in WMenus.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00511300000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
+</H4>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Style name</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>input</TT></TD>
+<TD ALIGN="LEFT">A style for WInputs.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>input-edln</TT></TD>
+<TD ALIGN="LEFT">A more specific style for WEdlns. 
+       Substyles: <TT>selection</TT> for selected text and
+       <TT>cursor</TT> for the cursor indicating current editing point.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>input-message</TT></TD>
+<TD ALIGN="LEFT">A more specific style for WMessages.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>input-menu</TT></TD>
+<TD ALIGN="LEFT">A more specific style for WMenus.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>input-menu-bigmenu</TT></TD>
+<TD ALIGN="LEFT">An alternate style for WMenus.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>moveres_display</TT></TD>
+<TD ALIGN="LEFT">The box displaying position/size when
+       moving or resizing frames.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>dock</TT></TD>
+<TD ALIGN="LEFT">The dock.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H2><A NAME="SECTION00520000000000000000"></A>
+<A NAME="sec:defaultde"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine
+</H2>
+
+<P>
+Drawing engine style files are usually named
+<SPAN  CLASS="textit">look_foo.lua</SPAN> where <SPAN  CLASS="textit">foo</SPAN> is the name of the
+style. The file that Ion loads on startup or when
+<A HREF="node7.html#fn:gr.read_config"><TT>gr.read_config</TT></A> is called, however, is <SPAN  CLASS="textit">look.lua</SPAN>
+and should usually be symlinked to or a copy of of some
+<SPAN  CLASS="textit">look_foo.lua</SPAN>.
+
+<P>
+
+<H3><A NAME="SECTION00521000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
+</H3>
+
+<P>
+The first thing to do in a stylefile is to choose the drawing
+engine, possibly loading the module as well. This is done
+with the following chunk of code.
+
+<P>
+<PRE>
+if not gr.select_engine("de") then 
+    return 
+end
+</PRE>
+
+<P>
+The <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> function sees if the engine
+given as argument is registered (the default drawing engine is
+simply called ''de''). If the engine could not be found, it
+tries to load a module of the same name. If the engine still
+is not registered, <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> returns <TT>false</TT>
+and in this case we also exit the style setup script.
+If the engine was found, <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> sees that
+further requests for brushes are forwarded to that engine
+and returns <TT>true</TT>.
+
+<P>
+Before defining new styles it may be a good idea to clear old
+styles from memory so if the old configuration defines more
+specific styles than the new, the old styles don't override 
+those specified by the new configuration. That can be done by
+calling
+
+<P>
+<PRE>
+de.reset()
+</PRE>
+
+<P>
+After this the new styles can be defined with <A HREF="node7.html#fn:de.defstyle"><TT>de.defstyle</TT></A>
+as explained in the next subsection. Finally, after the styles have
+been defined we must ask objects on the screen to look up new brushes
+to reflect the changes in configuration. This is done with
+
+<P>
+<PRE>
+gr.refresh()
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00522000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
+</H3>
+
+<P>
+Styles for the default drawing engine are defined with the
+function <A HREF="node7.html#fn:de.defstyle"><TT>de.defstyle</TT></A>. It has two arguments the first being
+a style specification as explained in previous sections and the second
+a table whose fields describe the style:
+
+<P>
+<PRE>
+de.defstyle("some-style", {
+    attribute = value,
+    ...
+})
+</PRE>
+
+<P>
+The supported attributes are described in tables below. The different
+border elements and styles referred to there are explained in Figure
+<A HREF="#fig:borders">4.1</A>.
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="1777"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4.1:</STRONG>
+Sketch of different border styles and elements</CAPTION>
+<TR><TD><PRE>
+Elevated:        Inlaid:         Ridge:            Groove:        
+  hhhhhhhhhhhs     ............           hhhhhhhhhhhs      sssssssssssh
+  h..........s     .sssssssssh.           h..........s      s..........h
+  h.        .s     .s        h.           h.sssssssh.s      s.hhhhhhhs.h
+  h.        .s     .s        h.           h.s      h.s      s.h      s.h
+  h.        .s     .s        h.           h.shhhhhhh.s      s.hsssssss.h
+  h..........s     .shhhhhhhhh.           h..........s      s..........h
+  hsssssssssss     ............           hsssssssssss      shhhhhhhhhhh
+
+h = highlight, s = shadow, . = padding
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+
+<H4><A NAME="SECTION00522100000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
+</H4>
+
+<P>
+Each of these fields a string of the form that can be
+passed to <TT>XAllocNamedColor</TT>. Valid strings are e.g.
+hexadecimal RGB specifications of the form
+<TT>#RRGGBB</TT> and colour names as specified
+in <SPAN  CLASS="textit">/usr/X11R6/lib/X11/rgb.txt</SPAN> (exact path varying).
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>highlight_colour</TT></TD>
+<TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>shadow_colour</TT></TD>
+<TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>foreground_colour</TT></TD>
+<TD ALIGN="LEFT">Colour for the normal drawing operations, e.g. text.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>background_colour</TT></TD>
+<TD ALIGN="LEFT">Window background colour (unless transparency is enabled) and
+       background colour boxes.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>padding_colour</TT></TD>
+<TD ALIGN="LEFT">Colour for the ''padding'' part of a border border. Set to 
+       <TT>background_colour</TT> if unset.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00522200000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
+</H4>
+
+<P>
+All other fields below except <TT>border_style</TT> are non-negative integers
+indicating a number of pixels.
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>border_style</TT></TD>
+<TD ALIGN="LEFT">A string indicating the style of border; one of
+                    elevated/inlaid/ridge/groove as seen in the
+                    above sketch.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>highlight_pixels</TT></TD>
+<TD ALIGN="LEFT">Width of the highlight part of the border in pixels.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>shadow_pixels</TT></TD>
+<TD ALIGN="LEFT">Width of the shadow part of the border in pixels.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>padding_pixels</TT></TD>
+<TD ALIGN="LEFT">Width of the padding part of the border in pixels.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>spacing</TT></TD>
+<TD ALIGN="LEFT">Space to be left between all kinds of boxes.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00522300000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
+</H4>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>font</TT></TD>
+<TD ALIGN="LEFT">Font to be used in text-drawing operations; standard X font
+            name.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>text_align</TT></TD>
+<TD ALIGN="LEFT">How text is to be aligned in text boxes/tabs; one of
+                  the strings left/right/center.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00522400000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+</H4>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>transparent_background</TT></TD>
+<TD ALIGN="LEFT">Should windows' that use this style
+       background be transparent? true/false.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>based_on</TT></TD>
+<TD ALIGN="LEFT">The name of a previously defined style that this
+       style should be based on.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H4><A NAME="SECTION00522500000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
+</H4>
+
+<P>
+As discussed in previous sections, styles may have substyles to e.g.
+indicate different states of the object being drawn. The ''de'' engine
+limits what can be configured in substyles to the set of colours in the
+first table above, but also specifically interprets for the main style
+<TT>tab-frame</TT> the substyles <TT>*-*-tagged</TT> and <TT>*-*-*-dragged</TT>
+by, respectively, drawing a right angle shape at the top right corner 
+of a tab and by shading the tab with a stipple pattern. Also for
+menus the substyles <TT>*-*-submenu</TT> are handled as a special case.
+
+<P>
+Substyles are defined with the function <A HREF="node7.html#fn:de.substyle"><TT>de.substyle</TT></A> within the
+table defining the main style. The parameters to this function are 
+similar to those of <A HREF="node7.html#fn:de.defstyle"><TT>de.defstyle</TT></A>.
+
+<P>
+<PRE>
+de.defstyle("some-style", {
+   ...
+   de.substyle("some-substyle", {
+      ...
+   }),
+   ...
+})
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00523000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
+</H3>
+
+<P>
+The following shortened segment from <SPAN  CLASS="textit">look_cleanviolet.lua</SPAN>
+should help to clarify the matters discussed in the previous
+subsection.
+
+<P>
+<PRE>
+de.defstyle("*", {
+    -- Gray background
+    highlight_colour = "#eeeeee",
+    shadow_colour = "#eeeeee",
+    background_colour = "#aaaaaa",
+    foreground_colour = "#000000",
+    
+    shadow_pixels = 1,
+    highlight_pixels = 1,
+    padding_pixels = 1,
+    spacing = 0,
+    border_style = "elevated",
+    
+    font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
+    text_align = "center",
+})
+
+de.defstyle("tab-frame", {
+    based_on = "*",
+    
+    de.substyle("active-selected", {
+        -- Violet tab
+        highlight_colour = "#aaaacc",
+        shadow_colour = "#aaaacc",
+        background_colour = "#666699",
+        foreground_colour = "#eeeeee",
+    }),
+
+    --  More substyles would follow ...
+})
+</PRE>
+
+<P>
+
+<H2><A NAME="SECTION00530000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+</H2>
+
+<P>
+The following style fields are independent of the drawing engine used,
+but are related to objects' styles and therefore configured in the drawing
+engine configuration file.
+
+<P>
+
+<H3><A NAME="SECTION00531000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+</H3>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>bar</TT></TD>
+<TD ALIGN="LEFT">Controls the style of the tab-bar. Possible values
+        are the strings <TT>"none"</TT>, <TT>"inside"</TT>, <TT>"outside"</TT>
+        and <TT>"shaped"</TT>, with the last providing the PWM-style
+        tab-bars for floating frames.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>floatframe_tab_min_w</TT></TD>
+<TD ALIGN="LEFT">Minimum tab width in pixels for
+        the shaped style, given that this number times number of tabs
+        doesn't exceed frame width.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>floatframe_bar_max_w_q</TT></TD>
+<TD ALIGN="LEFT">Maximum tab-bar width quotient of
+       frame width for the shaped styles. A number in the 
+       interval <SPAN CLASS="MATH"></SPAN>.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<H3><A NAME="SECTION00532000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+</H3>
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>outline_style</TT></TD>
+<TD ALIGN="LEFT">How borders are drawn:
+                       <TT>"none"</TT> - no border,
+                       <TT>"all"</TT> - border around whole dock,
+                       <TT>"each"</TT> - border around each dockapp.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tile_size</TT></TD>
+<TD ALIGN="LEFT">A table with entries <TT>width</TT> and <TT>height</TT>,
+       indicating the width and height of tiles in pixels.</TD>
+</TR>
+</TABLE>
+
+<P>
+Hopefully that's enough to get you started in writing new style
+configuration files for Ion. When in doubt, study the existing
+style configuration files.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html297"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html291"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html285"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html293"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html295"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html298"
+  HREF="node6.html">5. Scripting</A>
+<B> Up:</B> <A NAME="tex2html292"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html286"
+  HREF="node4.html">3. Basic configuration</A>
+ &nbsp; <B>  <A NAME="tex2html294"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html296"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node6.html b/ionconf/node6.html
new file mode 100644 (file)
index 0000000..b1bbe8b
--- /dev/null
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>5. Scripting</TITLE>
+<META NAME="description" CONTENT="5. Scripting">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node7.html">
+<LINK REL="previous" HREF="node5.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node7.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html328"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html322"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html316"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html324"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html326"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html329"
+  HREF="node7.html">6. Function reference</A>
+<B> Up:</B> <A NAME="tex2html323"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html317"
+  HREF="node5.html">4. Graphical styles</A>
+ &nbsp; <B>  <A NAME="tex2html325"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html327"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html330"
+  HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
+<LI><A NAME="tex2html331"
+  HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
+<UL>
+<LI><A NAME="tex2html332"
+  HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
+<LI><A NAME="tex2html333"
+  HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html334"
+  HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
+<LI><A NAME="tex2html335"
+  HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00600000000000000000"></A>
+<A NAME="chap:tricks"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>. Scripting
+</H1>
+
+<P>
+This chapter documents some additional features of the Ion configuration
+and scripting interface that can be used for more advanced scripting than
+the basic configuration exlained in chapter <A HREF="node4.html#chap:config">3</A>.
+
+<P>
+
+<H2><A NAME="SECTION00610000000000000000"></A>
+<A NAME="sec:hooks"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks
+</H2>
+
+<P>
+Hooks are lists of functions to be called when a certain event occurs.
+There are two types of them; normal and ''alternative'' hooks. Normal
+hooks do not return anything, but alt-hooks should return a boolean
+indicating whether it handled its assigned task succesfully. In the case
+that <TT>true</TT> is returned, remaining handlers are not called.
+
+<P>
+Hook handlers are registered by first finding the hook
+with <A HREF="#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A> and then calling <A HREF="#fn:WHook.add"><TT>WHook.add</TT></A>
+on the (succesfull) result with the handler as parameter. Similarly
+handlers are unregistered with <A HREF="#fn:WHook.remove"><TT>WHook.remove</TT></A>. For example:
+
+<P>
+<PRE>
+ioncore.get_hook("ioncore_snapshot_hook"):add(
+    function() print("Snapshot hook called.") end
+)
+</PRE>
+
+<P>
+In this example the hook handler has no parameters, but many hook
+handlers do. The types of parameters for each hook are listed in
+the hook reference, section <A HREF="node7.html#sec:hookref">6.8</A>.
+
+<P>
+Note that many of the hooks are called in ''protected mode'' and can not 
+use any functions that modify Ion's internal state. TODO: More detailed 
+documentation when this is final.
+
+<P>
+
+<H2><A NAME="SECTION00620000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00621000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
+</H3>
+
+<P>
+All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+safely store such object references for future use. The C-side object
+may be destroyed while Lua still refers to the object. All exported
+functions gracefully fail in such a case, but if you need to explicitly
+test that the C-side object still exists, use <A HREF="#fn:obj_exists"><TT>obj_exists</TT></A>.
+
+<P>
+As an example, the following short piece of code implements 
+bookmarking:
+
+<P>
+<PRE>
+local bookmarks={}
+
+-- Set bookmark bm point to the region reg
+function set_bookmark(bm, reg)
+    bookmarks[bm]=reg
+end
+
+-- Go to bookmark bm
+function goto_bookmark(bm)
+    if bookmarks[bm] then
+        -- We could check that bookmarks[bm] still exists, if we
+        -- wanted to avoid an error message.
+        bookmarks[bm]:goto()
+    end
+end
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00622000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
+</H3>
+
+<P>
+If you want to a single non-WClientWin region with an exact known 
+name, use <A HREF="node7.html#fn:ioncore.lookup_region"><TT>ioncore.lookup_region</TT></A>. If you want a list of all regions,
+use <A HREF="node7.html#fn:ioncore.region_list"><TT>ioncore.region_list</TT></A>. Both functions accept an optional argument
+that can be used to specify that the returned region(s) must be of a more 
+specific type. Client windows live in a different namespace and for them
+you should use the equivalent functions <A HREF="node7.html#fn:ioncore.lookup_clientwin"><TT>ioncore.lookup_clientwin</TT></A>
+and <A HREF="node7.html#fn:ioncore.clientwin_list"><TT>ioncore.clientwin_list</TT></A>.
+
+<P>
+To get the name of an object, use <A HREF="node7.html#fn:WRegion.name"><TT>WRegion.name</TT></A>. Please be
+aware, that the names of client windows reflect their titles and
+are subject to changes. To change the name of a non-client window
+region, use <A HREF="node7.html#fn:WRegion.set_name"><TT>WRegion.set_name</TT></A>.
+
+<P>
+
+<H2><A NAME="SECTION00630000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
+</H2>
+
+<P>
+It is possible to write more complex winprop selection routines than
+those described in section <A HREF="node4.html#sec:winprops">3.5</A>. To match a particular
+winprop using whatever way you want to, just set the <TT>match</TT>
+field of the winprop to a function that receives the client window
+as its sole parameter, and that returns <TT>true</TT> if the winprop
+matches, and <TT>false</TT> otherwise.
+
+<P>
+The class, instance and role properties can be obtained with
+<A HREF="node7.html#fn:WClientWin.get_ident"><TT>WClientWin.get_ident</TT></A>, and the title with <A HREF="node7.html#fn:WRegion.name"><TT>WRegion.name</TT></A>.
+If you want to match against (almost) arbitrary window properties,
+have a look at the documentation for the following functions, and
+their standard Xlib counterparts: <A HREF="node7.html#fn:ioncore.x_intern_atom"><TT>ioncore.x_intern_atom</TT></A>
+(XInternAtom), <A HREF="node7.html#fn:ioncore.x_get_window_property"><TT>ioncore.x_get_window_property</TT></A> (XGetWindowProperty),
+and <A HREF="node7.html#fn:ioncore.x_get_text_property"><TT>ioncore.x_get_text_property</TT></A> (XGetTextProperty).
+
+<P>
+
+<P>
+
+<H2><A NAME="SECTION00640000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+</H2>
+
+<P>
+All statusbar meters that do not monitor the internal state of Ion should
+go in the separate <TT>ion-statusd</TT> program. 
+
+<P>
+Whenever the user requests a meter <TT>%foo</TT> or <TT>%foo_bar</TT> to be 
+inserted in a statusbar, <SPAN  CLASS="textit">mod_statusbar</SPAN> asks <TT>ion-statusd</TT> to
+load <A HREF="#fn:statusd_foo.lua"><TT>statusd_foo.lua</TT></A> on its search path (same as that for Ion-side 
+scripts). This script should then supply all meters with the initial part
+'<TT>foo</TT>'.
+
+<P>
+To provide this value, the script should simply call <TT>statusd.inform</TT>
+with the name of the meter and the value as a string.
+Additionally the script should provide a 'template' for the meter to
+facilitate expected width calculation by <SPAN  CLASS="textit">mod_statusbar</SPAN>, and
+may provide a 'hint' for colour-coding the value. The interpretation
+of hints depends on the graphical style in use, and currently the
+stock styles support the <TT>normal</TT>, <TT>important</TT> and 
+<TT>critical</TT> hints.
+
+<P>
+In our example of the 'foo monitor', at script init we might broadcast
+the template as follows:
+
+<P>
+<PRE>
+statusd.inform("foo_template", "000")
+</PRE>
+
+<P>
+To inform <SPAN  CLASS="textit">mod_statusbar</SPAN> of the actual value of the meter and
+indicate that the value is critical if above 100, we might write the
+following function:
+
+<P>
+<PRE>
+local function inform_foo(foo)
+    statusd.inform("foo", tostring(foo))
+    if foo&gt;100 then
+        statusd.inform("foo_hint", "critical")
+    else
+        statusd.inform("foo_hint", "normal")
+    end
+end
+</PRE>
+
+<P>
+To periodically update the value of the meter, we must use timers.
+First we must create one:
+
+<P>
+<PRE>
+local foo_timer=statusd.create_timer()
+</PRE>
+
+<P>
+Then we write a function to be called whenever the timer expires.
+This function must also restart the timer.
+
+<P>
+<PRE>
+local function update_foo()
+    local foo= ... measure foo somehow ...
+    inform_foo(foo)
+    foo_timer:set(settings.update_interval, update_foo)
+end
+</PRE>
+
+<P>
+Finally, at the end of our script we want to do the initial
+measurement, and set up timer for further measurements:
+
+<P>
+<PRE>
+update_foo()
+</PRE>
+
+<P>
+If our scripts supports configurable parameters, the following code
+(at the beginning of the script) will allow them to be configured in
+<SPAN  CLASS="textit">cfg_statusbar.lua</SPAN> and passed to the status daemon and our script:
+
+<P>
+<PRE>
+local defaults={
+    update_interval=10*1000, -- 10 seconds
+}
+                
+local settings=table.join(statusd.get_config("foo"), defaults)
+</PRE>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html328"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html322"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html316"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html324"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html326"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html329"
+  HREF="node7.html">6. Function reference</A>
+<B> Up:</B> <A NAME="tex2html323"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html317"
+  HREF="node5.html">4. Graphical styles</A>
+ &nbsp; <B>  <A NAME="tex2html325"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html327"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node7.html b/ionconf/node7.html
new file mode 100644 (file)
index 0000000..5a3e390
--- /dev/null
@@ -0,0 +1,6232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>6. Function reference</TITLE>
+<META NAME="description" CONTENT="6. Function reference">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node8.html">
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html348"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html342"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html336"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html344"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html346"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html349"
+  HREF="node8.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html343"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html337"
+  HREF="node6.html">5. Scripting</A>
+ &nbsp; <B>  <A NAME="tex2html345"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html347"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html350"
+  HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN  CLASS="textit">ioncore</SPAN></A>
+<UL>
+<LI><A NAME="tex2html351"
+  HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+<LI><A NAME="tex2html352"
+  HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+<LI><A NAME="tex2html353"
+  HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+<LI><A NAME="tex2html354"
+  HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+<LI><A NAME="tex2html355"
+  HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+<LI><A NAME="tex2html356"
+  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<LI><A NAME="tex2html357"
+  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<LI><A NAME="tex2html358"
+  HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<LI><A NAME="tex2html359"
+  HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<LI><A NAME="tex2html360"
+  HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html361"
+  HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html362"
+  HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html363"
+  HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<LI><A NAME="tex2html364"
+  HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<LI><A NAME="tex2html365"
+  HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<LI><A NAME="tex2html366"
+  HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html367"
+  HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN  CLASS="textit">mod_tiling</SPAN></A>
+<UL>
+<LI><A NAME="tex2html368"
+  HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+<LI><A NAME="tex2html369"
+  HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+<LI><A NAME="tex2html370"
+  HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+<LI><A NAME="tex2html371"
+  HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+<LI><A NAME="tex2html372"
+  HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html373"
+  HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN  CLASS="textit">mod_query</SPAN></A>
+<UL>
+<LI><A NAME="tex2html374"
+  HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+<LI><A NAME="tex2html375"
+  HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+<LI><A NAME="tex2html376"
+  HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html377"
+  HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN  CLASS="textit">mod_menu</SPAN></A>
+<UL>
+<LI><A NAME="tex2html378"
+  HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html379"
+  HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN  CLASS="textit">mod_dock</SPAN></A>
+<UL>
+<LI><A NAME="tex2html380"
+  HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html381"
+  HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN  CLASS="textit">mod_sp</SPAN></A>
+<LI><A NAME="tex2html382"
+  HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN  CLASS="textit">de</SPAN></A>
+<LI><A NAME="tex2html383"
+  HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00700000000000000000"></A>
+<A NAME="sec:exports"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>. Function reference
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00710000000000000000"></A>
+<A NAME="sec:ioncoreref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN  CLASS="textit">ioncore</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="4188"></A>
+<A NAME="4189"></A>
+<A NAME="fn:ioncore.TR"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.TR(s, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>gettext+string.format
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4190"></A>
+<A NAME="4191"></A>
+<A NAME="fn:ioncore.bdoc"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.bdoc(text)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Used to enter documentation among bindings so that other programs
+ can read it. Does nothing.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4192"></A>
+<A NAME="4193"></A>
+<A NAME="fn:ioncore.chdir_for"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.chdir_for(reg, dir)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change default working directory for new programs started in <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4194"></A>
+<A NAME="4195"></A>
+<A NAME="fn:ioncore.compile_cmd"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.compile_cmd(cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Compile string <TT>cmd</TT> into a bindable function. Within <TT>cmd</TT>, the
+ variable ''<TT>_</TT>'' (underscore) can be used to refer to the object 
+ that was selecting for the bound action and chosen to handle it.
+ The  variable ''<TT>_sub</TT>'' refers to a ''currently active'' sub-object 
+ of <TT>_</TT>, or a sub-object where the action loading to the binding 
+ being called actually occured.
+
+<P>
+The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently 
+ supported guards are <TT>_sub:non-nil</TT> and <TT>_sub:WFoobar</TT>, where 
+ WFoobar is a class.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4196"></A>
+<A NAME="4197"></A>
+<A NAME="fn:ioncore.create_ws"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.create_ws(scr, tmpl, no_default)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create new workspace on screen <TT>scr</TT>. The table <TT>tmpl</TT>
+ may be used to override parts of <TT>default_ws_params</TT>,
+ and <TT>no_default</TT> may be set to <TT>true</TT> to complete ignore it.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4198"></A>
+<A NAME="4199"></A>
+<A NAME="fn:ioncore.defbindings"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defbindings(context, bindings)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define bindings for context <TT>context</TT>. Here <TT>binding</TT> is
+ a table composed of entries created with <A HREF="#fn:ioncore.kpress"><TT>ioncore.kpress</TT></A>, 
+ etc.; see section <A HREF="node4.html#sec:bindings">3.3</A> for details.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4200"></A>
+<A NAME="4201"></A>
+<A NAME="fn:ioncore.defctxmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defctxmenu(ctx, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define context menu for context <TT>ctx</TT>, <TT>tab</TT> being a table 
+ of menu entries.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4202"></A>
+<A NAME="4203"></A>
+<A NAME="fn:ioncore.defmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defmenu(name, tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a new menu with <TT>name</TT> being the menu's name and <TT>tab</TT> 
+ being a table of menu entries. If <TT>tab.append</TT> is set, the entries 
+ are appended to previously-defined ones, if possible.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4204"></A>
+<A NAME="4205"></A>
+<A NAME="fn:ioncore.defwinprop"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defwinprop(list)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a winprop. For more information, see section <A HREF="node4.html#sec:winprops">3.5</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4206"></A>
+<A NAME="4207"></A>
+<A NAME="fn:ioncore.exec_on"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.exec_on(reg, cmd, merr_internal)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with the environment variable DISPLAY set to point to the
+ root window of the X screen <TT>reg</TT> is on. If <TT>cmd</TT> is prefixed
+ by a colon (<TT>:</TT>), the following command is executed in an xterm
+ (or other terminal emulator) with the help of the <TT>ion-runinxterm</TT> 
+ script. If the command is prefixed by two colons, <TT>ion-runinxterm</TT>
+ will ask you to press enter after the command is finished, even if it
+ returns succesfully.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4208"></A>
+<A NAME="4209"></A>
+<A NAME="fn:ioncore.read_savefile"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.read_savefile(string basename)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Read a savefile.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4210"></A>
+<A NAME="4211"></A>
+<A NAME="fn:ioncore.get_savefile"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.get_savefile(string basename)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a file name to save (session) data in. The string <TT>basename</TT> 
+ should contain no path or extension components.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4212"></A>
+<A NAME="4213"></A>
+<A NAME="fn:ioncore.lookup_script"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.lookup_script(string file, string sp)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Lookup script <TT>file</TT>. If <TT>try_in_dir</TT> is set, it is tried
+ before the standard search path.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4214"></A>
+<A NAME="4215"></A>
+<A NAME="fn:ioncore.write_savefile"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.write_savefile(string basename, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Write <TT>tab</TT> in file with basename <TT>basename</TT> in the
+ session directory.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4216"></A>
+<A NAME="4217"></A>
+<A NAME="fn:ioncore.find_manager"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.find_manager(obj, t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find an object with type name <TT>t</TT> managing <TT>obj</TT> or one of
+ its managers.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4218"></A>
+<A NAME="4219"></A>
+<A NAME="fn:ioncore.get_dir_for"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.get_dir_for(reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get default working directory for new programs started in <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4220"></A>
+<A NAME="4221"></A>
+<A NAME="fn:ioncore.getbindings"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getbindings(maybe_context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a table of all bindings.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4222"></A>
+<A NAME="4223"></A>
+<A NAME="fn:ioncore.getctxmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getctxmenu(name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a context menu defined with <A HREF="#fn:ioncore.defctxmenu"><TT>ioncore.defctxmenu</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4224"></A>
+<A NAME="4225"></A>
+<A NAME="fn:ioncore.getmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getmenu(name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a menu defined with <A HREF="#fn:ioncore.defmenu"><TT>ioncore.defmenu</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4226"></A>
+<A NAME="4227"></A>
+<A NAME="fn:ioncore.getwinprop"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getwinprop(cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find winprop table for <TT>cwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4228"></A>
+<A NAME="4229"></A>
+<A NAME="fn:ioncore.aboutmsg"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.aboutmsg()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns an about message (version, author, copyright notice).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4230"></A>
+<A NAME="4231"></A>
+<A NAME="fn:ioncore.activity_first"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.activity_first()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return first regio non activity list.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4232"></A>
+<A NAME="4233"></A>
+<A NAME="fn:ioncore.activity_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.activity_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return list of regions with activity/urgency bit set.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4234"></A>
+<A NAME="4235"></A>
+<A NAME="fn:ioncore.clear_tags"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.clear_tags()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Untag all regions.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4236"></A>
+<A NAME="4237"></A>
+<A NAME="fn:ioncore.clientwin_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.clientwin_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return a list of all client windows.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4238"></A>
+<A NAME="4239"></A>
+<A NAME="fn:ioncore.current"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.current()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the currently focused region, if any.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4240"></A>
+<A NAME="4241"></A>
+<A NAME="fn:ioncore.defshortening"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.defshortening(string rx, string rule, bool always)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Add a rule describing how too long titles should be shortened to fit in tabs.
+ The regular expression <TT>rx</TT> (POSIX, not Lua!) is used to match titles
+ and when <TT>rx</TT> matches, <TT>rule</TT> is attempted to use as a replacement
+ for title. If <TT>always</TT> is set, the rule is used even if no shortening 
+ is necessary.
+
+<P>
+Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
+ inserted in the resulting string and specials as follows:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Special</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$0</TD>
+<TD ALIGN="LEFT">Place the original string here.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$1 to $9</TD>
+<TD ALIGN="LEFT">Insert n:th capture here (as usual,captures are surrounded
+                 by parentheses in the regex).</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$|</TD>
+<TD ALIGN="LEFT">Alternative shortening separator. The shortening described
+                 before the first this kind of separator is tried first and
+                 if it fails to make the string short enough, the next is 
+                  tried, and so on.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$&lt;</TD>
+<TD ALIGN="LEFT">Remove characters on the left of this marker to shorten the
+                 string.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$&gt;</TD>
+<TD ALIGN="LEFT">Remove characters on the right of this marker to shorten the
+                 string. Only the first $&lt; or $&gt; within an alternative 
+                 shortening is used.</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4242"></A>
+<A NAME="4243"></A>
+<A NAME="fn:ioncore.exec"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.exec(string cmd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with the environment variable DISPLAY set to point to the
+ X display the WM is running on. No specific screen is set unlike with
+ <A HREF="#fn:WRootWin.exec_on"><TT>WRootWin.exec_on</TT></A>. The PID of the (shell executing the) new 
+ process is returned.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4244"></A>
+<A NAME="4245"></A>
+<A NAME="fn:ioncore.find_screen_id"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.find_screen_id(integer id)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find the screen with numerical id <TT>id</TT>. If Xinerama is
+ not present, <TT>id</TT> corresponds to X screen numbers. Otherwise
+ the ids are some arbitrary ordering of Xinerama rootwins.
+ If <TT>id</TT> is <SPAN CLASS="MATH"></SPAN>, the screen with the highest id is returned.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4246"></A>
+<A NAME="4247"></A>
+<A NAME="fn:ioncore.get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get ioncore basic settings. For details see <A HREF="#fn:ioncore.set"><TT>ioncore.set</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4248"></A>
+<A NAME="4249"></A>
+<A NAME="fn:ioncore.get_paths"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.get_paths(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get important directories (userdir, sessiondir, searchpath).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4250"></A>
+<A NAME="4251"></A>
+<A NAME="fn:ioncore.goto_activity"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.goto_activity()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to first region on activity list.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4252"></A>
+<A NAME="4253"></A>
+<A NAME="fn:ioncore.goto_first"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_first(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to first region within <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
+ the boolean <TT>nofront</TT> field, for not bringing the object to
+ front.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4254"></A>
+<A NAME="4255"></A>
+<A NAME="fn:ioncore.goto_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_next(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to region next from <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/next/prev/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
+ the boolean <TT>nofront</TT> field, for not bringing the object to
+ front.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4256"></A>
+<A NAME="4257"></A>
+<A NAME="fn:ioncore.goto_next_screen"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_next_screen()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the next screen and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4258"></A>
+<A NAME="4259"></A>
+<A NAME="fn:ioncore.goto_nth_screen"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_nth_screen(integer id)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the screen with id <TT>id</TT> and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4260"></A>
+<A NAME="4261"></A>
+<A NAME="fn:ioncore.goto_prev_screen"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_prev_screen()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the previous screen and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4262"></A>
+<A NAME="4263"></A>
+<A NAME="fn:ioncore.goto_previous"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_previous()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to and return to a previously active region (if any).
+
+<P>
+Note that this function is asynchronous; the region will not
+ actually have received the focus when this function returns.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4264"></A>
+<A NAME="4265"></A>
+<A NAME="fn:ioncore.is_i18n"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.is_i18n()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is Ion supporting locale-specifically multibyte-encoded strings?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4266"></A>
+<A NAME="4267"></A>
+<A NAME="fn:ioncore.load_module"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.load_module(string modname)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to load a C-side module.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4268"></A>
+<A NAME="4269"></A>
+<A NAME="fn:ioncore.lookup_clientwin"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WClientWin ioncore.lookup_clientwin(string name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to find a client window with name <TT>name</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4270"></A>
+<A NAME="4271"></A>
+<A NAME="fn:ioncore.lookup_region"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.lookup_region(string name, string typenam)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to find a non-client window region with name <TT>name</TT> and type
+ inheriting <TT>typenam</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4272"></A>
+<A NAME="4273"></A>
+<A NAME="fn:ioncore.navi_first"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.navi_first(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find first region within <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4274"></A>
+<A NAME="4275"></A>
+<A NAME="fn:ioncore.navi_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.navi_next(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find region next from <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/next/prev/any). The table param may
+ contain the boolean field <TT>nowrap</TT>, instructing not to wrap 
+ around, and the WRegions <TT>no_ascend</TT> and <TT>no_descend</TT>,
+ and functions <TT>ascend_filter</TT> and <TT>descend_filter</TT> from
+ <TT>WRegion</TT>s (<TT>to</TT>, <TT>from</TT>), used to decide when to descend
+ or ascend into another region. (TODO: more detailed explanation.)
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4276"></A>
+<A NAME="4277"></A>
+<A NAME="fn:ioncore.popen_bgread"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.popen_bgread(string cmd, function h, function errh)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with a read pipe connected to its stdout.
+ When data is received through the pipe, <TT>handler</TT> is called
+ with that data.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4278"></A>
+<A NAME="4279"></A>
+<A NAME="fn:ioncore.progname"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.progname()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the name of program using Ioncore.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4280"></A>
+<A NAME="4281"></A>
+<A NAME="fn:ioncore.region_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.region_list(string typenam)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find all non-client window regions inheriting <TT>typenam</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4282"></A>
+<A NAME="4283"></A>
+<A NAME="fn:ioncore.request_selection"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.request_selection(function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request (string) selection. The function <TT>fn</TT> will be called 
+ with the selection when and if it is received.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4284"></A>
+<A NAME="4285"></A>
+<A NAME="fn:ioncore.resign"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.resign()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Causes the window manager to simply exit without saving
+ state/session.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4286"></A>
+<A NAME="4287"></A>
+<A NAME="fn:ioncore.restart"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.restart()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Restart, saving session first.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4288"></A>
+<A NAME="4289"></A>
+<A NAME="fn:ioncore.restart_other"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.restart_other(string cmd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to restart another window manager <TT>cmd</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4290"></A>
+<A NAME="4291"></A>
+<A NAME="fn:ioncore.set"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set ioncore basic settings. The table <TT>tab</TT> may contain the
+ following fields.
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>opaque_resize</TT></TD>
+<TD ALIGN="LEFT">(boolean) Controls whether interactive move and
+                        resize operations simply draw a rubberband during
+                        the operation (false) or immediately affect the 
+                        object in question at every step (true).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>warp</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should focusing operations move the 
+                        pointer to the object to be focused?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should a managing WMPlex switch
+                        to a newly mapped client window?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>screen_notify</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should notification tooltips be displayed
+                        for hidden workspaces with activity?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame_default_index</TT></TD>
+<TD ALIGN="LEFT">(string) Specifies where to add new regions
+                        on the mutually exclusive list of a frame. One of
+                        ''last'', ''next'' (for after current), ''next-act''
+                        (for after current and anything with activity right
+                        after it).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>dblclick_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) Delay between clicks of a double click.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) Delay in milliseconds for ending keyboard
+                         resize mode after inactivity.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_t_max</TT></TD>
+<TD ALIGN="LEFT">(integer) Controls keyboard resize acceleration. 
+                         See description below for details.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_t_min</TT></TD>
+<TD ALIGN="LEFT">(integer) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_step</TT></TD>
+<TD ALIGN="LEFT">(floating point) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_maxacc</TT></TD>
+<TD ALIGN="LEFT">(floating point) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>framed_transients</TT></TD>
+<TD ALIGN="LEFT">(boolean) Put transients in nested frames.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>float_placement_method</TT></TD>
+<TD ALIGN="LEFT">(string) How to place floating frames.
+                          One of ''udlr'' (up-down, then left-right), 
+                          ''lrud'' (left-right, then up-down) or ''random''.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>default_ws_params</TT></TD>
+<TD ALIGN="LEFT">(table) Default workspace layout; the 
+                          attach/creation parameters for a WGroup.</TD>
+</TR>
+</TABLE>
+
+<P>
+When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT> 
+ milliseconds has passed from a previous call, acceleration factor is reset 
+ to 1.0. Otherwise, if at least <TT>kbresize_t_min</TT> milliseconds have 
+ passed from the from previous acceleration update or reset the squere root
+ of the acceleration factor is incremented by <TT>kbresize_step</TT>. The 
+ maximum acceleration factor (pixels/call modulo size hints) is given by 
+ <TT>kbresize_maxacc</TT>. The default values are (200, 50, 30, 100).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4292"></A>
+<A NAME="4293"></A>
+<A NAME="fn:ioncore.set_get_winprop_fn"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set_get_winprop_fn(function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set function used to look up winprops.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4294"></A>
+<A NAME="4295"></A>
+<A NAME="fn:ioncore.set_paths"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.set_paths(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set important directories (sessiondir, searchpath).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4296"></A>
+<A NAME="4297"></A>
+<A NAME="fn:ioncore.set_selection"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set_selection(string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set primary selection and cutbuffer0 to <TT>p</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4298"></A>
+<A NAME="4299"></A>
+<A NAME="fn:ioncore.shutdown"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.shutdown()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>End session saving it first.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4300"></A>
+<A NAME="4301"></A>
+<A NAME="fn:ioncore.snapshot"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.snapshot()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Save session.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4302"></A>
+<A NAME="4303"></A>
+<A NAME="fn:ioncore.tagged_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.tagged_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of tagged regions.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4304"></A>
+<A NAME="4305"></A>
+<A NAME="fn:ioncore.tags_first"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.tags_first()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns first tagged object.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4306"></A>
+<A NAME="4307"></A>
+<A NAME="fn:ioncore.version"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.version()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns Ioncore version string.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4308"></A>
+<A NAME="4309"></A>
+<A NAME="fn:ioncore.warn"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.warn(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Issue a warning. How the message is displayed depends on the current
+ warning handler.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4310"></A>
+<A NAME="4311"></A>
+<A NAME="fn:ioncore.warn_traced"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.warn_traced(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:ioncore.warn"><TT>ioncore.warn</TT></A>, but also print Lua stack trace.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4312"></A>
+<A NAME="4313"></A>
+<A NAME="fn:ioncore.x_change_property"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_change_property(integer win, integer atom, integer atom_type, integer format, string mode, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Modify a window property. The <TT>mode</TT> is one of
+ <TT>"replace"</TT>, <TT>"prepend"</TT> or <TT>"append"</TT>, and format
+ is either 8, 16 or 32. Also see <A HREF="#fn:ioncore.x_get_window_property"><TT>ioncore.x_get_window_property</TT></A>
+ and the <TT>XChangeProperty</TT>(3) manual page.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4314"></A>
+<A NAME="4315"></A>
+<A NAME="fn:ioncore.x_delete_property"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_delete_property(integer win, integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete a window property.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4316"></A>
+<A NAME="4317"></A>
+<A NAME="fn:ioncore.x_get_atom_name"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.x_get_atom_name(integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get the name of an atom. See <TT>XGetAtomName</TT>(3) manual page for 
+ details.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4318"></A>
+<A NAME="4319"></A>
+<A NAME="fn:ioncore.x_get_text_property"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.x_get_text_property(integer win, integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a text property for a window (<TT>STRING</TT>, <TT>COMPOUND_TEXT</TT>,
+ or <TT>UTF8_STRING</TT> property converted). The fields in the returned
+ table (starting from 1) are the null-separated parts of the property.
+ See the <TT>XGetTextProperty</TT>(3) manual page for more information.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4320"></A>
+<A NAME="4321"></A>
+<A NAME="fn:ioncore.x_get_window_property"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.x_get_window_property(integer win, integer atom, integer atom_type, integer n32expected, bool more)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a property <TT>atom</TT> of type <TT>atom_type</TT> for window <TT>win</TT>. 
+ The <TT>n32expected</TT> parameter indicates the expected number of 32bit
+ words, and <TT>more</TT> indicates whether all or just this amount of data
+ should be fetched. Each 8, 16 or 32bit element of the property, as
+ deciphered from <TT>atom_type</TT> is a field in the returned table.
+ See <TT>XGetWindowProperty</TT>(3) manual page for more information.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4322"></A>
+<A NAME="4323"></A>
+<A NAME="fn:ioncore.x_intern_atom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.x_intern_atom(string name, bool only_if_exists)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new atom. See <TT>XInternAtom</TT>(3) manual page for details.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4324"></A>
+<A NAME="4325"></A>
+<A NAME="fn:ioncore.x_set_text_property"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_set_text_property(integer win, integer atom, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set a text property for a window. The fields of <TT>tab</TT> starting from
+ 1 should be the different null-separated parts of the property.
+ See the <TT>XSetTextProperty</TT>(3) manual page for more information.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4326"></A>
+<A NAME="4327"></A>
+<A NAME="fn:ioncore.kpress"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.kpress(keyspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of pressing a key given 
+ by <TT>keyspec</TT> (with possible modifiers) to the function <TT>func</TT>.
+ For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4328"></A>
+<A NAME="4329"></A>
+<A NAME="fn:ioncore.kpress_wait"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.kpress_wait(keyspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This is similar to <A HREF="#fn:kpress"><TT>kpress</TT></A> but after calling <TT>cmd</TT>, 
+ Ioncore waits for all modifiers to be released before processing
+ any further actions.
+ For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4330"></A>
+<A NAME="4331"></A>
+<A NAME="fn:ioncore.match_winprop_name"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.match_winprop_name(prop, cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>The basic name-based winprop matching criteria.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4332"></A>
+<A NAME="4333"></A>
+<A NAME="fn:ioncore.mclick"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mclick(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of clicking a mouse 
+ button while possible modifier keys are pressed,
+ both given by <TT>buttonspec</TT>, to the function <TT>func</TT>.
+ For more information, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4334"></A>
+<A NAME="4335"></A>
+<A NAME="fn:ioncore.mdblclick"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mdblclick(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for double-click.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4336"></A>
+<A NAME="4337"></A>
+<A NAME="fn:ioncore.mdrag"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mdrag(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of moving the mouse
+ (or other pointing device) while the button given by <TT>buttonspec</TT>
+ is held pressed and the modifiers given by <TT>buttonspec</TT> were pressed
+ when the button was initially pressed.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4338"></A>
+<A NAME="4339"></A>
+<A NAME="fn:ioncore.menuentry"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.menuentry(name, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Use this function to define normal menu entries. The string <TT>name</TT> 
+ is the string shown in the visual representation of menu, and the
+ parameter <TT>cmd</TT> and <TT>guard</TT> are similar to those of
+ <A HREF="#fn:ioncore.defbindings"><TT>ioncore.defbindings</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4340"></A>
+<A NAME="4341"></A>
+<A NAME="fn:ioncore.mpress"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mpress(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for just pressing the mouse button.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4342"></A>
+<A NAME="4343"></A>
+<A NAME="fn:ioncore.refresh_stylelist"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.refresh_stylelist()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Refresh list of known style files.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4344"></A>
+<A NAME="4345"></A>
+<A NAME="fn:ioncore.submap"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submap(kcb_, list)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a function that creates a submap binding description table.
+ When the key press action <TT>keyspec</TT> occurs, Ioncore will wait for
+ a further key presse and act according to the submap.
+ For details, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4346"></A>
+<A NAME="4347"></A>
+<A NAME="fn:ioncore.submenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submenu(name, sub_or_name, options)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Use this function to define menu entries for submenus. The parameter
+ <A HREF="#fn:sub_or_name"><TT>sub_or_name</TT></A> is either a table of menu entries or the name
+ of an already defined menu. The initial menu entry to highlight can be
+ specified by <TT>options.initial</TT> as either an integer starting from 1, 
+ or a  function that returns such a number. Another option supported is
+ <TT>options.noautoexpand</TT> that will cause <A HREF="#fn:mod_query.query_menu"><TT>mod_query.query_menu</TT></A>
+ to not automatically expand this submenu.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00711000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4349"></A>
+<A NAME="4350"></A>
+<A NAME="fn:WClientWin.get_ident"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WClientWin.get_ident(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a table containing the properties <TT>WM_CLASS</TT> (table entries
+ <TT>instance</TT> and <TT>class</TT>) and  <TT>WM_WINDOW_ROLE</TT> (<TT>role</TT>)
+ properties for <TT>cwin</TT>. If a property is not set, the corresponding 
+ field(s) are unset in the  table.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4351"></A>
+<A NAME="4352"></A>
+<A NAME="fn:WClientWin.is_fullscreen"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WClientWin.is_fullscreen(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>cwin</TT> in full screen mode?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4353"></A>
+<A NAME="4354"></A>
+<A NAME="fn:WClientWin.kill"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.kill(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to kill (with XKillWindow) the client that owns the X
+ window correspoding to <TT>cwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4355"></A>
+<A NAME="4356"></A>
+<A NAME="fn:WClientWin.nudge"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.nudge(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempts to fix window size problems with non-ICCCM compliant
+ programs.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4357"></A>
+<A NAME="4358"></A>
+<A NAME="fn:WClientWin.quote_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.quote_next(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Send next key press directly to <TT>cwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4359"></A>
+<A NAME="4360"></A>
+<A NAME="fn:WClientWin.set_fullscreen"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WClientWin.set_fullscreen(WClientWin cwin, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set client window <TT>cwin</TT> full screen state according to the 
+ parameter <TT>how</TT> (set/unset/toggle). Resulting state is returned,
+ which may not be what was requested.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4361"></A>
+<A NAME="4362"></A>
+<A NAME="fn:WClientWin.xid"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>double WClientWin.xid(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the X window id for the client window.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00712000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4364"></A>
+<A NAME="4365"></A>
+<A NAME="fn:WFrame.is_shaded"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.is_shaded(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>frame</TT> shaded?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4366"></A>
+<A NAME="4367"></A>
+<A NAME="fn:WFrame.maximize_horiz"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.maximize_horiz(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to toggle horizontal maximisation of <TT>frame</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4368"></A>
+<A NAME="4369"></A>
+<A NAME="fn:WFrame.maximize_vert"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.maximize_vert(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to toggle vertical maximisation of <TT>frame</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4370"></A>
+<A NAME="4371"></A>
+<A NAME="fn:WFrame.mode"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WFrame.mode(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get frame mode.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4372"></A>
+<A NAME="4373"></A>
+<A NAME="fn:WFrame.p_switch_tab"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.p_switch_tab(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display the region corresponding to the tab that the user pressed on.
+ This function should only be used by binding it to a mouse action.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4374"></A>
+<A NAME="4375"></A>
+<A NAME="fn:WFrame.p_tabdrag"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.p_tabdrag(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start dragging the tab that the user pressed on with the pointing device.
+ This function should only be used by binding it to <SPAN  CLASS="textit">mpress</SPAN> or
+ <SPAN  CLASS="textit">mdrag</SPAN> action with area ''tab''.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4376"></A>
+<A NAME="4377"></A>
+<A NAME="fn:WFrame.set_mode"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set frame mode.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4378"></A>
+<A NAME="4379"></A>
+<A NAME="fn:WFrame.set_numbers"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_numbers(WFrame frame, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Control whether tabs show numbers (set/unset/toggle). 
+ Resulting state is returned, which may not be what was 
+ requested.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4380"></A>
+<A NAME="4381"></A>
+<A NAME="fn:WFrame.set_shaded"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_shaded(WFrame frame, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set shading state according to the parameter <TT>how</TT> 
+ (set/unset/toggle). Resulting state is returned, which may not be
+ what was requested.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00713000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4383"></A>
+<A NAME="4384"></A>
+<A NAME="fn:WGroup.attach"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.attach(WGroup ws, WRegion reg, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach and reparent existing region <TT>reg</TT> to <TT>ws</TT>.
+ The table <TT>param</TT> may contain the fields <TT>index</TT> and
+ <TT>switchto</TT> that are interpreted as for <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4385"></A>
+<A NAME="4386"></A>
+<A NAME="fn:WGroup.attach_new"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.attach_new(WGroup ws, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new region to be managed by <TT>ws</TT>. At least the following
+ fields in <TT>param</TT> are understood:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>type</TT></TD>
+<TD ALIGN="LEFT">Class name (a string) of the object to be created. Mandatory.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">Name of the object to be created (a string). Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">Should the region be switched to (boolean)? Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
+<TD ALIGN="LEFT">Stacking level; default is 1.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
+<TD ALIGN="LEFT">Make object modal; ignored if level is set.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
+<TD ALIGN="LEFT">Size policy.</TD>
+</TR>
+</TABLE>
+
+<P>
+In addition parameters to the region to be created are passed in this 
+ same table.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4387"></A>
+<A NAME="4388"></A>
+<A NAME="fn:WGroup.bottom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.bottom(WGroup ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the 'bottom' of <TT>ws</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4389"></A>
+<A NAME="4390"></A>
+<A NAME="fn:WGroup.managed_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WGroup.managed_list(WGroup ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions managed by the workspace (frames, mostly).
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00714000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+</H3>
+
+<P>
+
+<H3><A NAME="SECTION00715000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4393"></A>
+<A NAME="4394"></A>
+<A NAME="fn:WGroupWS.attach_framed"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WGroupWS.attach_framed(WGroupWS ws, WRegion reg, table t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach region <TT>reg</TT> on <TT>ws</TT>.
+ At least the following fields in <TT>t</TT> are supported:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">Should the region be switched to (boolean)? Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">Geometry; <TT>x</TT> and <TT>y</TT>, if set, indicates top-left of 
+   the frame to be created while <TT>width</TT> and <TT>height</TT>, if set, indicate
+   the size of the client window within that frame. Optional.</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00716000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4396"></A>
+<A NAME="4397"></A>
+<A NAME="fn:WInfoWin.set_text"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInfoWin.set_text(WInfoWin p, string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set contents of the info window.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00717000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4399"></A>
+<A NAME="4400"></A>
+<A NAME="fn:WMPlex.attach"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.attach(WMPlex mplex, WRegion reg, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach and reparent existing region <TT>reg</TT> to <TT>mplex</TT>.
+ The table <TT>param</TT> may contain the fields <TT>index</TT> and
+ <TT>switchto</TT> that are interpreted as for <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4401"></A>
+<A NAME="4402"></A>
+<A NAME="fn:WMPlex.attach_new"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.attach_new(WMPlex mplex, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new region to be managed by <TT>mplex</TT>. At least the following
+ fields in <TT>param</TT> are understood (all but <TT>type</TT> are optional).
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>type</TT></TD>
+<TD ALIGN="LEFT">(string) Class name (a string) of the object to be created.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">(string) Name of the object to be created (a string).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should the region be switched to (boolean)?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>unnumbered</TT></TD>
+<TD ALIGN="LEFT">(boolean) Do not put on the numbered mutually 
+                     exclusive list.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>index</TT></TD>
+<TD ALIGN="LEFT">(integer) Index on this list, same as for 
+                <A HREF="#fn:WMPlex.set_index"><TT>WMPlex.set_index</TT></A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
+<TD ALIGN="LEFT">(integer) Stacking level.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
+<TD ALIGN="LEFT">(boolean) Shortcut for modal stacking level.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hidden</TT></TD>
+<TD ALIGN="LEFT">(boolean) Attach hidden, if not prevented
+                  by e.g. the mutually exclusive list being empty.
+                  This option overrides <TT>switchto</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
+<TD ALIGN="LEFT">(integer) Size policy.
+                     (TODO: document them somewhere.)</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">(table) Geometry specification.</TD>
+</TR>
+</TABLE>
+
+<P>
+In addition parameters to the region to be created are passed in this 
+ same table.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4403"></A>
+<A NAME="4404"></A>
+<A NAME="fn:WMPlex.attach_tagged"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.attach_tagged(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach all tagged regions to <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4405"></A>
+<A NAME="4406"></A>
+<A NAME="fn:WMPlex.dec_index"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.dec_index(WMPlex mplex, WRegion r)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4407"></A>
+<A NAME="4408"></A>
+<A NAME="fn:WMPlex.get_index"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WMPlex.get_index(WMPlex mplex, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get index of <TT>reg</TT> within the multiplexer on list 1. The first region 
+ managed by <TT>mplex</TT> has index zero. If <TT>reg</TT> is not managed by 
+ <TT>mplex</TT>, -1 is returned.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4409"></A>
+<A NAME="4410"></A>
+<A NAME="fn:WMPlex.get_stdisp"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.get_stdisp(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get status display information. See <A HREF="#fn:WMPlex.get_stdisp"><TT>WMPlex.get_stdisp</TT></A> for
+ information on the fields.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4411"></A>
+<A NAME="4412"></A>
+<A NAME="fn:WMPlex.inc_index"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.inc_index(WMPlex mplex, WRegion r)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4413"></A>
+<A NAME="4414"></A>
+<A NAME="fn:WMPlex.is_hidden"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WMPlex.is_hidden(WMPlex mplex, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> on within <TT>mplex</TT> and hidden?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4415"></A>
+<A NAME="4416"></A>
+<A NAME="fn:WMPlex.managed_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.managed_list(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of all regions managed by <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4417"></A>
+<A NAME="4418"></A>
+<A NAME="fn:WMPlex.mx_count"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WMPlex.mx_count(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the number of objects on the mutually exclusive list of <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4419"></A>
+<A NAME="4420"></A>
+<A NAME="fn:WMPlex.mx_current"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.mx_current(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the managed object currently active within the mutually exclusive
+ list of <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4421"></A>
+<A NAME="4422"></A>
+<A NAME="fn:WMPlex.mx_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.mx_list(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions on the numbered/mutually exclusive list of 
+ <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4423"></A>
+<A NAME="4424"></A>
+<A NAME="fn:WMPlex.mx_nth"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.mx_nth(WMPlex mplex, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the <TT>n</TT>:th object managed by <TT>mplex</TT> on the
+ <TT>l</TT>:th layer.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4425"></A>
+<A NAME="4426"></A>
+<A NAME="fn:WMPlex.set_hidden"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WMPlex.set_hidden(WMPlex mplex, WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set the visibility of the region <TT>reg</TT> on <TT>mplex</TT>
+ as specified with the parameter <TT>how</TT> (set/unset/toggle).
+ The resulting state is returned.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4427"></A>
+<A NAME="4428"></A>
+<A NAME="fn:WMPlex.set_index"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.set_index(WMPlex mplex, WRegion reg, integer index)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set index of <TT>reg</TT> within the multiplexer to <TT>index</TT> within 
+ the mutually exclusive list. Special values for <TT>index</TT> are:
+ <TABLE CELLPADDING=3 WIDTH="100%">
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">After <A HREF="#fn:WMPlex.mx_current"><TT>WMPlex.mx_current</TT></A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">Last.</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4429"></A>
+<A NAME="4430"></A>
+<A NAME="fn:WMPlex.set_stdisp"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.set_stdisp(WMPlex mplex, table t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set/create status display for <TT>mplex</TT>. Table is a standard
+ description of the object to be created (as passed to e.g. 
+ <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>). In addition, the following fields are
+ recognised:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
+<TD ALIGN="LEFT">The corner of the screen to place the status display
+               in. One of <TT>tl</TT>, <TT>tr</TT>, <TT>bl</TT> or <TT>br</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>action</TT></TD>
+<TD ALIGN="LEFT">If this field is set to <TT>keep</TT>, <TT>corner</TT>
+                  and <TT>orientation</TT> are changed for the existing
+                  status display. If this field is set to <TT>remove</TT>,
+                  the existing status display is removed. If this
+                  field is not set or is set to <TT>replace</TT>, a 
+                  new status display is created and the old, if any,
+                  removed.</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4431"></A>
+<A NAME="4432"></A>
+<A NAME="fn:WMPlex.switch_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_next(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display next (wrt. currently selected) object managed 
+ by it.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4433"></A>
+<A NAME="4434"></A>
+<A NAME="fn:WMPlex.switch_nth"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_nth(WMPlex mplex, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display the <TT>n</TT>:th object managed by it.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4435"></A>
+<A NAME="4436"></A>
+<A NAME="fn:WMPlex.switch_prev"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_prev(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display previous (wrt. currently selected) object
+ managed by it.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00718000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4438"></A>
+<A NAME="4439"></A>
+<A NAME="fn:WMoveresMode.cancel"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.cancel(WMoveresMode mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return from move/resize cancelling changes if opaque
+ move/resize has not been enabled.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4440"></A>
+<A NAME="4441"></A>
+<A NAME="fn:WMoveresMode.finish"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.finish(WMoveresMode mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return from move/resize mode and apply changes unless opaque
+ move/resize is enabled.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4442"></A>
+<A NAME="4443"></A>
+<A NAME="fn:WMoveresMode.move"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.move(WMoveresMode mode, integer horizmul, integer vertmul)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move resize mode target one step:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="RIGHT"><TT>horizmul</TT>/<TT>vertmul</TT></TD>
+<TD ALIGN="LEFT">effect</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">-1</TD>
+<TD ALIGN="LEFT">Move left/up</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">0</TD>
+<TD ALIGN="LEFT">No effect</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">1</TD>
+<TD ALIGN="LEFT">Move right/down</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4444"></A>
+<A NAME="4445"></A>
+<A NAME="fn:WMoveresMode.resize"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.resize(WMoveresMode mode, integer left, integer right, integer top, integer bottom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Shrink or grow resize mode target one step in each direction.
+ Acceptable values for the parameters <TT>left</TT>, <TT>right</TT>, <TT>top</TT>
+ and <TT>bottom</TT> are as follows: -1: shrink along,
+ 0: do not change, 1: grow along corresponding border.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00719000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4447"></A>
+<A NAME="4448"></A>
+<A NAME="fn:WRegion.begin_kbresize"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMoveresMode WRegion.begin_kbresize(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Enter move/resize mode for <TT>reg</TT>. The bindings set with
+ <A HREF="#fn:ioncore.set_bindings"><TT>ioncore.set_bindings</TT></A> for WMoveresMode are used in 
+ this mode. Of the functions exported by the Ion C core, only
+ <A HREF="#fn:WMoveresMode.resize"><TT>WMoveresMode.resize</TT></A>, <A HREF="#fn:WMoveresMode.move"><TT>WMoveresMode.move</TT></A>, 
+ <A HREF="#fn:WMoveresMode.cancel"><TT>WMoveresMode.cancel</TT></A> and <A HREF="#fn:WMoveresMode.end"><TT>WMoveresMode.end</TT></A> are
+ allowed to be called while in this mode.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4449"></A>
+<A NAME="4450"></A>
+<A NAME="fn:WRegion.current"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.current(WRegion mgr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the object, if any, that is considered ''currently active''
+ within the objects managed by <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4451"></A>
+<A NAME="4452"></A>
+<A NAME="fn:WRegion.geom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.geom(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the geometry of <TT>reg</TT> within its parent; a table with fields
+ <TT>x</TT>, <TT>y</TT>, <TT>w</TT> and <TT>h</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4453"></A>
+<A NAME="4454"></A>
+<A NAME="fn:WRegion.goto"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.goto(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to display <TT>reg</TT>, save region activity status and then
+ warp to (or simply set focus to if warping is disabled) <TT>reg</TT>.
+
+<P>
+Note that this function is asynchronous; the region will not
+ actually have received the focus when this function returns.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4455"></A>
+<A NAME="4456"></A>
+<A NAME="fn:WRegion.is_active"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_active(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> active/does it or one of it's children of focus?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4457"></A>
+<A NAME="4458"></A>
+<A NAME="fn:WRegion.is_activity"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_activity(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is activity notification set on <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4459"></A>
+<A NAME="4460"></A>
+<A NAME="fn:WRegion.is_mapped"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_mapped(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> visible/is it and all it's ancestors mapped?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4461"></A>
+<A NAME="4462"></A>
+<A NAME="fn:WRegion.is_tagged"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_tagged(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> tagged?
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4463"></A>
+<A NAME="4464"></A>
+<A NAME="fn:WRegion.manager"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.manager(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the region that manages <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4465"></A>
+<A NAME="4466"></A>
+<A NAME="fn:WRegion.name"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WRegion.name(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the name for <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4467"></A>
+<A NAME="4468"></A>
+<A NAME="fn:WRegion.parent"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WWindow WRegion.parent(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the parent region of <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4469"></A>
+<A NAME="4470"></A>
+<A NAME="fn:WRegion.rootwin_of"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRootWin WRegion.rootwin_of(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the root window <TT>reg</TT> is on.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4471"></A>
+<A NAME="4472"></A>
+<A NAME="fn:WRegion.rqclose"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.rqclose(WRegion reg, bool relocate)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to close/destroy <TT>reg</TT>. Whether this operation works
+ depends on whether the particular type of region in question has
+ implemented the feature and, in case of client windows, whether
+ the client supports the <TT>WM_DELETE</TT> protocol (see also
+ <A HREF="#fn:WClientWin.kill"><TT>WClientWin.kill</TT></A>). If the operation is likely to succeed,
+ <TT>true</TT> is returned, otherwise <TT>false</TT>. In most cases the
+ region will not have been actually destroyed when this function returns.
+ If <TT>relocate</TT> is not set, and <TT>reg</TT> manages other regions, it
+ will not be closed. Otherwise the managed regions will be attempted
+ to be relocated.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4473"></A>
+<A NAME="4474"></A>
+<A NAME="fn:WRegion.rqclose_propagate"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.rqclose_propagate(WRegion reg, WRegion maybe_sub)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Recursively attempt to close a region or one of the regions managed by 
+ it. If <TT>sub</TT> is set, it will be used as the managed region, otherwise
+ <A HREF="#fn:WRegion.current"><TT>WRegion.current</TT></A><TT>(reg)</TT>. The object to be closed is
+ returned or NULL if nothing can be closed. Also see notes for
+ <A HREF="#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4475"></A>
+<A NAME="4476"></A>
+<A NAME="fn:WRegion.rqgeom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.rqgeom(WRegion reg, table g)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to resize and/or move <TT>reg</TT>. The table <TT>g</TT> is a usual
+ geometry specification (fields <TT>x</TT>, <TT>y</TT>, <TT>w</TT> and <TT>h</TT>),
+ but may contain missing fields, in which case, <TT>reg</TT>'s manager may
+ attempt to leave that attribute unchanged.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4477"></A>
+<A NAME="4478"></A>
+<A NAME="fn:WRegion.rqorder"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.rqorder(WRegion reg, string ord)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request ordering. Currently supported values for <TT>ord</TT>
+ are 'front' and 'back'.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4479"></A>
+<A NAME="4480"></A>
+<A NAME="fn:WRegion.screen_of"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen WRegion.screen_of(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the screen <TT>reg</TT> is on.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4481"></A>
+<A NAME="4482"></A>
+<A NAME="fn:WRegion.set_activity"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_activity(WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set activity flag of <TT>reg</TT>. The <TT>how</TT> parameter most be
+ one of (set/unset/toggle).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4483"></A>
+<A NAME="4484"></A>
+<A NAME="fn:WRegion.set_name"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_name(WRegion reg, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set the name of <TT>reg</TT> to <TT>p</TT>. If the name is already in use,
+ an instance number suffix <TT>&lt;n&gt;</TT> will be attempted. If <TT>p</TT> has
+ such a suffix, it will be modified, otherwise such a suffix will be
+ added. Setting <TT>p</TT> to nil will cause current name to be removed.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4485"></A>
+<A NAME="4486"></A>
+<A NAME="fn:WRegion.set_name_exact"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_name_exact(WRegion reg, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:WRegion.set_name"><TT>WRegion.set_name</TT></A> except if the name is already in use,
+ other instance numbers will not be attempted. The string <TT>p</TT> should
+ not contain a <TT>&lt;n&gt;</TT> suffix or this function will fail.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4487"></A>
+<A NAME="4488"></A>
+<A NAME="fn:WRegion.set_tagged"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_tagged(WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change tagging state of <TT>reg</TT> as defined by <TT>how</TT>
+ (set/unset/toggle). Resulting state is returned.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4489"></A>
+<A NAME="4490"></A>
+<A NAME="fn:WRegion.size_hints"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.size_hints(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns size hints for <TT>reg</TT>. The returned table always contains the
+ fields <TT>min_?</TT>, <TT>base_?</TT> and sometimes the fields <TT>max_?</TT>,
+ <TT>base_?</TT> and <TT>inc_?</TT>, where <TT>?</TT>=<TT>w</TT>, <TT>h</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007110000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4492"></A>
+<A NAME="4493"></A>
+<A NAME="fn:WRootWin.current_scr"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen WRootWin.current_scr(WRootWin rootwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns previously active screen on root window <TT>rootwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007111000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4495"></A>
+<A NAME="4496"></A>
+<A NAME="fn:WScreen.id"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WScreen.id(WScreen scr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the numerical id for screen <TT>scr</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4497"></A>
+<A NAME="4498"></A>
+<A NAME="fn:WScreen.set_managed_offset"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WScreen.set_managed_offset(WScreen scr, table offset)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set offset of objects managed by the screen from actual screen geometry.
+ The table <TT>offset</TT> should contain the entries <TT>x</TT>, <TT>y</TT>, 
+ <TT>w</TT> and <TT>h</TT> indicating offsets of that component of screen 
+ geometry.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007112000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4500"></A>
+<A NAME="4501"></A>
+<A NAME="fn:WWindow.p_move"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WWindow.p_move(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start moving <TT>wwin</TT> with the mouse or other pointing device.
+ This function should only be used by binding it to <SPAN  CLASS="textit">mpress</SPAN> or
+ <SPAN  CLASS="textit">mdrag</SPAN> action.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4502"></A>
+<A NAME="4503"></A>
+<A NAME="fn:WWindow.p_resize"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WWindow.p_resize(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start resizing <TT>wwin</TT> with the mouse or other pointing device.
+ This function should only be used by binding it to <SPAN  CLASS="textit">mpress</SPAN> or
+ <SPAN  CLASS="textit">mdrag</SPAN> action.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4504"></A>
+<A NAME="4505"></A>
+<A NAME="fn:WWindow.xid"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>double WWindow.xid(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the X window id for <TT>wwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007113000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4507"></A>
+<A NAME="fn:export"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>export(lib, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Export a list of functions from <TT>lib</TT> into global namespace.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007114000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4509"></A>
+<A NAME="4510"></A>
+<A NAME="fn:gr.read_config"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void gr.read_config()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Read drawing engine configuration file <SPAN  CLASS="textit">draw.lua</SPAN>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4511"></A>
+<A NAME="4512"></A>
+<A NAME="fn:gr.refresh"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void gr.refresh()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Refresh objects' brushes to update them to use newly loaded style.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4513"></A>
+<A NAME="4514"></A>
+<A NAME="fn:gr.select_engine"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool gr.select_engine(string engine)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Future requests for ''brushes'' are to be forwarded to the drawing engine
+ <TT>engine</TT>. If no engine of such name is known, a module with that name
+ is attempted to be loaded. This function is only intended to be called from
+ colour scheme etc. configuration files and can not be used to change the
+ look of existing objects; for that use <A HREF="#fn:gr.read_config"><TT>gr.read_config</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007115000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4516"></A>
+<A NAME="4517"></A>
+<A NAME="fn:string.shell_safe"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string.shell_safe(str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Make <TT>str</TT> shell-safe.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007116000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="4519"></A>
+<A NAME="4520"></A>
+<A NAME="fn:table.append"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.append(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Add entries that do not exist in <TT>t1</TT> from <TT>t2</TT> to <TT>t1</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4521"></A>
+<A NAME="4522"></A>
+<A NAME="fn:table.copy"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.copy(t, deep)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Make copy of <TT>table</TT>. If <TT>deep</TT> is unset, shallow one-level
+ copy is made, otherwise a deep copy is made.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4523"></A>
+<A NAME="4524"></A>
+<A NAME="fn:table.icat"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.icat(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Insert all positive integer entries from t2 into t1.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4525"></A>
+<A NAME="4526"></A>
+<A NAME="fn:table.join"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.join(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a table containing all entries from <TT>t1</TT> and those from
+ <TT>t2</TT> that are missing from <TT>t1</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="4527"></A>
+<A NAME="4528"></A>
+<A NAME="fn:table.map"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.map(f, t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Map all entries of <TT>t</TT> by <TT>f</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00720000000000000000"></A>
+<A NAME="sec:tilingref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN  CLASS="textit">mod_tiling</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="6781"></A>
+<A NAME="6782"></A>
+<A NAME="fn:mod_tiling.detach"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_tiling.detach(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Detach <TT>reg</TT>, i.e. make it managed by its nearest ancestor
+ WGroup, framed if <TT>reg</TT> is not itself WFrame.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6783"></A>
+<A NAME="6784"></A>
+<A NAME="fn:mod_tiling.get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_tiling.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get parameters. For details see <A HREF="#fn:mod_tiling.set"><TT>mod_tiling.set</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6785"></A>
+<A NAME="6786"></A>
+<A NAME="fn:mod_tiling.mkbottom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_tiling.mkbottom(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new WTiling 'bottom' for the group of <TT>reg</TT>,
+ consisting of <TT>reg</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6787"></A>
+<A NAME="6788"></A>
+<A NAME="fn:mod_tiling.set"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_tiling.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set parameters. Currently only <TT>raise_delay</TT> (in milliseconds)
+ is supported.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00721000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="6790"></A>
+<A NAME="6791"></A>
+<A NAME="fn:WSplit.geom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WSplit.geom(WSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the area of workspace used by the regions under <TT>split</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6792"></A>
+<A NAME="6793"></A>
+<A NAME="fn:WSplit.parent"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitInner WSplit.parent(WSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return parent split for <TT>split</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6794"></A>
+<A NAME="6795"></A>
+<A NAME="fn:WSplit.rqgeom"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WSplit.rqgeom(WSplit node, table g)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to resize and/or move the split tree starting at <TT>node</TT>.
+ Behaviour and the <TT>g</TT> parameter are as for <A HREF="#fn:WRegion.rqgeom"><TT>WRegion.rqgeom</TT></A> 
+ operating on <TT>node</TT> (if it were a WRegion).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6796"></A>
+<A NAME="6797"></A>
+<A NAME="fn:WSplit.transpose"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WSplit.transpose(WSplit node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose contents of <TT>node</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00722000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="6799"></A>
+<A NAME="6800"></A>
+<A NAME="fn:WSplitInner.current"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitInner.current(WSplitInner node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the most previously active child node of <TT>split</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00723000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="6802"></A>
+<A NAME="6803"></A>
+<A NAME="fn:WSplitRegion.reg"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WSplitRegion.reg(WSplitRegion node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the region contained in <TT>node</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00724000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="6805"></A>
+<A NAME="6806"></A>
+<A NAME="fn:WSplitSplit.br"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitSplit.br(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the bottom or right child node of <TT>split</TT> depending
+ on the direction of the split.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6807"></A>
+<A NAME="6808"></A>
+<A NAME="fn:WSplitSplit.dir"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WSplitSplit.dir(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the direction of <TT>split</TT>; either ''vertical'' or
+ ''horizontal''.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6809"></A>
+<A NAME="6810"></A>
+<A NAME="fn:WSplitSplit.flip"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WSplitSplit.flip(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Flip contents of <TT>node</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6811"></A>
+<A NAME="6812"></A>
+<A NAME="fn:WSplitSplit.tl"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitSplit.tl(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the top or left child node of <TT>split</TT> depending
+ on the direction of the split.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00725000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="6814"></A>
+<A NAME="6815"></A>
+<A NAME="fn:WTiling.flip_at"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.flip_at(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Flip <TT>ws</TT> at <TT>reg</TT> or root if nil.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6816"></A>
+<A NAME="6817"></A>
+<A NAME="fn:WTiling.transpose_at"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.transpose_at(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose <TT>ws</TT> at <TT>reg</TT> or root if nil.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6818"></A>
+<A NAME="6819"></A>
+<A NAME="fn:WTiling.farthest"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WTiling.farthest(WTiling ws, string dirstr, bool any)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the most previously active region on <TT>ws</TT> with no
+ other regions next to it in  direction <TT>dirstr</TT> 
+ (left/right/up/down). If <TT>any</TT> is not set, the status 
+ display is not considered.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6820"></A>
+<A NAME="6821"></A>
+<A NAME="fn:WTiling.managed_list"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WTiling.managed_list(WTiling ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions managed by the workspace (frames, mostly).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6822"></A>
+<A NAME="6823"></A>
+<A NAME="fn:WTiling.nextto"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WTiling.nextto(WTiling ws, WRegion reg, string dirstr, bool any)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the most previously active region next to <TT>reg</TT> in
+ direction <TT>dirstr</TT> (left/right/up/down). The region <TT>reg</TT>
+ must be managed by <TT>ws</TT>. If <TT>any</TT> is not set, the status display
+ is not considered.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6824"></A>
+<A NAME="6825"></A>
+<A NAME="fn:WTiling.node_of"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitRegion WTiling.node_of(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>For region <TT>reg</TT> managed by <TT>ws</TT> return the WSplit
+ a leaf of which <TT>reg</TT> is.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6826"></A>
+<A NAME="6827"></A>
+<A NAME="fn:WTiling.set_floating_at"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.set_floating_at(WTiling ws, WRegion reg, string how, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating of the sides of a split containin <TT>reg</TT> as indicated 
+ by the parameters <TT>how</TT> (set/unset/toggle) and <TT>dirstr</TT>
+ (left/right/up/down/any). The new status is returned (and <TT>false</TT>
+ also on error).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6828"></A>
+<A NAME="6829"></A>
+<A NAME="fn:WTiling.set_floating"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitSplit WTiling.set_floating(WTiling ws, WSplitSplit split, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating of a split's sides at <TT>split</TT> as indicated by the 
+ parameter <TT>how</TT> (set/unset/toggle). A split of the appropriate is 
+ returned, if there was a change.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6830"></A>
+<A NAME="6831"></A>
+<A NAME="fn:WTiling.split"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split(WTiling ws, WSplit node, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new frame on <TT>ws</TT> above/below/left of/right of
+ <TT>node</TT> as indicated by <TT>dirstr</TT>. If <TT>dirstr</TT> is 
+ prefixed with ''floating:'' a floating split is created.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6832"></A>
+<A NAME="6833"></A>
+<A NAME="fn:WTiling.split_at"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split_at(WTiling ws, WFrame frame, string dirstr, bool attach_current)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Split <TT>frame</TT> creating a new frame to direction <TT>dirstr</TT>
+ (one of ''left'', ''right'', ''top'' or ''bottom'') of <TT>frame</TT>.
+ If <TT>attach_current</TT> is set, the region currently displayed in
+ <TT>frame</TT>, if any, is moved to thenew frame.
+ If <TT>dirstr</TT> is prefixed with ''floating:'' a floating split is
+ created.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6834"></A>
+<A NAME="6835"></A>
+<A NAME="fn:WTiling.split_top"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split_top(WTiling ws, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Same as <A HREF="#fn:WTiling.split"><TT>WTiling.split</TT></A> at the root of the split tree.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6836"></A>
+<A NAME="6837"></A>
+<A NAME="fn:WTiling.split_tree"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WTiling.split_tree(WTiling ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the root of the split tree.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="6838"></A>
+<A NAME="6839"></A>
+<A NAME="fn:WTiling.unsplit_at"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.unsplit_at(WTiling ws, WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Try to relocate regions managed by <TT>frame</TT> to another frame
+ and, if possible, destroy the frame.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00730000000000000000"></A>
+<A NAME="sec:queryref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN  CLASS="textit">mod_query</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="7832"></A>
+<A NAME="7833"></A>
+<A NAME="fn:mod_query.defcmd"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.defcmd(cmd, fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a command override for the <A HREF="#fn:mod_query.query_exec"><TT>query_exec</TT></A> query.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7834"></A>
+<A NAME="7835"></A>
+<A NAME="fn:mod_query.get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_query.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get module configuration. For more information see
+ <A HREF="#fn:mod_query.set"><TT>mod_query.set</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7836"></A>
+<A NAME="7837"></A>
+<A NAME="fn:mod_query.history_clear"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_query.history_clear()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear line editor history.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7838"></A>
+<A NAME="7839"></A>
+<A NAME="fn:mod_query.history_get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string mod_query.history_get(integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get entry at index <TT>n</TT> in line editor history, 0 being the latest.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7840"></A>
+<A NAME="7841"></A>
+<A NAME="fn:mod_query.history_push"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_query.history_push(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Push an entry into line editor history.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7842"></A>
+<A NAME="7843"></A>
+<A NAME="fn:mod_query.history_search"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer mod_query.history_search(string s, integer from, bool bwd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Try to find matching history entry. Returns -1 if none was
+ found. The parameter <TT>from</TT> specifies where to start 
+ searching from, and <TT>bwd</TT> causes backward search from
+ that point.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7844"></A>
+<A NAME="7845"></A>
+<A NAME="fn:mod_query.history_table"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_query.history_table()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return table of history entries.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7846"></A>
+<A NAME="7847"></A>
+<A NAME="fn:mod_query.message"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMessage mod_query.message(WMPlex mplex, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display a message in the <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7848"></A>
+<A NAME="7849"></A>
+<A NAME="fn:mod_query.set"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_query.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set module configuration. The following are supported:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>autoshowcompl</TT></TD>
+<TD ALIGN="LEFT">(boolean) Is auto-show-completions enabled?
+      (default: true).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>autoshowcompl_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) auto-show-completions delay
+      in milliseconds (default: 250).</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7850"></A>
+<A NAME="7851"></A>
+<A NAME="fn:mod_query.warn"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMessage mod_query.warn(WMPlex mplex, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display an error message box in the multiplexer <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7852"></A>
+<A NAME="7853"></A>
+<A NAME="fn:mod_query.popen_completions"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.popen_completions(cp, cmd, fn, reshnd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function can be used to read completions from an external source.
+ The parameter <TT>cp</TT> is the completion proxy to be used,
+ and the string <TT>cmd</TT> the shell command to be executed. To its stdout, 
+ the command should on the first line write the <TT>common_beg</TT> 
+ parameter of <A HREF="#fn:WComplProxy.set_completions"><TT>WComplProxy.set_completions</TT></A> (which <TT>fn</TT> maybe used
+ to override) and a single actual completion on each of the successive lines.
+ The function <TT>reshnd</TT> may be used to override a result table
+ building routine.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7854"></A>
+<A NAME="7855"></A>
+<A NAME="fn:mod_query.query"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query(mplex, prompt, initvalue, handler, completor,
+                         context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Low-level query routine. <TT>mplex</TT> is the WMPlex to display
+ the query in, <TT>prompt</TT> the prompt string, and <TT>initvalue</TT>
+ the initial contents of the query box. <TT>handler</TT> is a function
+ that receives (<TT>mplex</TT>, result string) as parameter when the
+ query has been succesfully completed, <TT>completor</TT> the completor
+ routine which receives a (<TT>cp</TT>, <TT>str</TT>, <TT>point</TT>) as parameters.
+ The parameter <TT>str</TT> is the string to be completed and <TT>point</TT>
+ cursor's location within it. Completions should be eventually,
+ possibly asynchronously, set with <A HREF="#fn:WComplProxy.set_completions"><TT>WComplProxy.set_completions</TT></A> 
+ on <TT>cp</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7856"></A>
+<A NAME="7857"></A>
+<A NAME="fn:mod_query.query_attachclient"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_attachclient(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a client window and switches
+ focus to the one entered. It uses the completion function
+ <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7858"></A>
+<A NAME="7859"></A>
+<A NAME="fn:mod_query.query_editfile"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_editfile(mplex, script, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Asks for a file to be edited. This script uses 
+ <TT>run-mailcap -mode=edit</TT> by default, but you may provide an
+ alternative script to use. The default prompt is "Edit file:" (translated).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7860"></A>
+<A NAME="7861"></A>
+<A NAME="fn:mod_query.query_exec"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_exec(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a command to execute with <SPAN  CLASS="textit">/bin/sh</SPAN>.
+ If the command is prefixed with a colon (':'), the command will
+ be run in an XTerm (or other terminal emulator) using the script
+ <SPAN  CLASS="textit">ion-runinxterm</SPAN>. Two colons ('::') will ask you to press 
+ enter after the command has finished.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7862"></A>
+<A NAME="7863"></A>
+<A NAME="fn:mod_query.query_gotoclient"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_gotoclient(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a client window and attaches
+ it to the frame the query was opened in. It uses the completion
+ function <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7864"></A>
+<A NAME="7865"></A>
+<A NAME="fn:mod_query.query_lua"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_lua(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for Lua code to execute. It sets the variable '<TT>_</TT>'
+ in the local environment of the string to point to the mplex where the
+ query was created. It also sets the table <TT>arg</TT> in the local
+ environment to <TT>{_, _:current()}</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7866"></A>
+<A NAME="7867"></A>
+<A NAME="fn:mod_query.query_man"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_man(mplex, prog)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for a manual page to display. By default it runs the
+ <TT>man</TT> command in an <TT>xterm</TT> using <TT>ion-runinxterm</TT>,
+ but it is possible to pass another program as the <TT>prog</TT> argument.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7868"></A>
+<A NAME="7869"></A>
+<A NAME="fn:mod_query.query_menu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_menu(mplex, themenu, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query can be used to create a query of a defined menu.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7870"></A>
+<A NAME="7871"></A>
+<A NAME="fn:mod_query.query_renameframe"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_renameframe(frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a name new for the frame where the query
+ was created.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7872"></A>
+<A NAME="7873"></A>
+<A NAME="fn:mod_query.query_renameworkspace"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_renameworkspace(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a name new for the workspace on which the
+ query resides.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7874"></A>
+<A NAME="7875"></A>
+<A NAME="fn:mod_query.query_restart"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_restart(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks whether the user wants restart Ioncore.
+ If the answer is 'y', 'Y' or 'yes', so will happen.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7876"></A>
+<A NAME="7877"></A>
+<A NAME="fn:mod_query.query_runfile"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_runfile(mplex, script, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Asks for a file to be viewed. This script uses 
+ <TT>run-mailcap -action=view</TT> by default, but you may provide an
+ alternative script to use. The default prompt is "View file:" (translated).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7878"></A>
+<A NAME="7879"></A>
+<A NAME="fn:mod_query.query_shutdown"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_shutdown(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks whether the user wants to exit Ion (no session manager)
+ or close the session (running under a session manager that supports such
+ requests). If the answer is 'y', 'Y' or 'yes', so will happen.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7880"></A>
+<A NAME="7881"></A>
+<A NAME="fn:mod_query.query_ssh"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_ssh(mplex, ssh)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for a host to connect to with SSH. 
+ Hosts to tab-complete are read from <SPAN  CLASS="textit">~/.ssh/known_hosts</SPAN>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7883"></A>
+<A NAME="7884"></A>
+<A NAME="fn:mod_query.query_workspace"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_workspace(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a workspace. If a workspace
+ (an object inheriting WGroupWS) with such a name exists,
+ it will be switched to. Otherwise a new workspace with the
+ entered name will be created and the user will be queried for
+ the type of the workspace.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7885"></A>
+<A NAME="7886"></A>
+<A NAME="fn:mod_query.query_yesno"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_yesno(mplex, prompt, handler)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function query will display a query with prompt <TT>prompt</TT> in
+ <TT>mplex</TT> and if the user answers affirmately, call <TT>handler</TT>
+ with <TT>mplex</TT> as parameter.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7887"></A>
+<A NAME="7888"></A>
+<A NAME="fn:mod_query.show_about_ion"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.show_about_ion(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display an "About Ion" message in <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7889"></A>
+<A NAME="7890"></A>
+<A NAME="fn:mod_query.show_tree"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.show_tree(mplex, reg, max_depth)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Show information about a region tree
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00731000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="7892"></A>
+<A NAME="7893"></A>
+<A NAME="fn:WComplProxy.set_completions"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WComplProxy.set_completions(WComplProxy proxy, table compls)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set completion list of the WEdln that <TT>proxy</TT> refers to to
+ <TT>compls</TT>, if it is still waiting for this completion run. The 
+ numerical indexes of <TT>compls</TT> list the found completions. If the
+ entry <TT>common_beg</TT> (<TT>common_end</TT>) exists, it gives an extra 
+ common prefix (suffix) of all found completions.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00732000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="7895"></A>
+<A NAME="7896"></A>
+<A NAME="fn:WEdln.back"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.back(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move backward one character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7897"></A>
+<A NAME="7898"></A>
+<A NAME="fn:WEdln.backspace"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.backspace(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete previous character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7899"></A>
+<A NAME="7900"></A>
+<A NAME="fn:WEdln.bkill_word"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bkill_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Starting from the previous characters, delete possible whitespace and
+ preceding alphanumeric characters until previous non-alphanumeric character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7901"></A>
+<A NAME="7902"></A>
+<A NAME="fn:WEdln.bol"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to the beginning of line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7903"></A>
+<A NAME="7904"></A>
+<A NAME="fn:WEdln.bskip_word"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bskip_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to to beginning of current sequence of alphanumeric characters
+ followed by whitespace.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7905"></A>
+<A NAME="7906"></A>
+<A NAME="fn:WEdln.clear_mark"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.clear_mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear <SPAN  CLASS="textit">mark</SPAN>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7907"></A>
+<A NAME="7908"></A>
+<A NAME="fn:WEdln.complete"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.complete(WEdln wedln, string cycle, string mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Call completion handler with the text between the beginning of line and
+ current cursor position, or select next/previous completion from list if in
+ auto-show-completions mode and <TT>cycle</TT> is set to ``next'' or ``prev'',
+ respectively. The <TT>mode</TT> may be ``history'' or ``normal''. If it is 
+ not set, the previous mode is used. Normally next entry is not cycled to
+ despite the setting of <TT>cycle</TT> if mode switch occurs. To override
+ this, use ``next-always'' and ``prev-always'' for <TT>cycle</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7909"></A>
+<A NAME="7910"></A>
+<A NAME="fn:WEdln.contents"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WEdln.contents(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get line editor contents.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7911"></A>
+<A NAME="7912"></A>
+<A NAME="fn:WEdln.context"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WEdln.context(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get history context for <TT>wedln</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7913"></A>
+<A NAME="7914"></A>
+<A NAME="fn:WEdln.copy"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.copy(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Copy text between <SPAN  CLASS="textit">mark</SPAN> and current cursor position to clipboard.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7915"></A>
+<A NAME="7916"></A>
+<A NAME="fn:WEdln.cut"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.cut(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Copy text between <SPAN  CLASS="textit">mark</SPAN> and current cursor position to clipboard
+ and then delete that sequence.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7917"></A>
+<A NAME="7918"></A>
+<A NAME="fn:WEdln.delete"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.delete(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete current character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7919"></A>
+<A NAME="7920"></A>
+<A NAME="fn:WEdln.eol"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.eol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to the end of line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7921"></A>
+<A NAME="7922"></A>
+<A NAME="fn:WEdln.finish"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.finish(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close <TT>wedln</TT> and call any handlers.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7923"></A>
+<A NAME="7924"></A>
+<A NAME="fn:WEdln.forward"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.forward(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move forward one character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7925"></A>
+<A NAME="7926"></A>
+<A NAME="fn:WEdln.history_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.history_next(WEdln wedln, bool match)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Replace line editor contents with next entry in history if one exists.
+ If <TT>match</TT> is <TT>true</TT>, the initial part of the history entry
+ must match the current line from beginning to point.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7927"></A>
+<A NAME="7928"></A>
+<A NAME="fn:WEdln.history_prev"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.history_prev(WEdln wedln, bool match)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Replace line editor contents with previous in history if one exists.
+ If <TT>match</TT> is <TT>true</TT>, the initial part of the history entry
+ must match the current line from beginning to point.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7929"></A>
+<A NAME="7930"></A>
+<A NAME="fn:WEdln.insstr"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.insstr(WEdln wedln, string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Input <TT>str</TT> in wedln at current editing point.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7931"></A>
+<A NAME="7932"></A>
+<A NAME="fn:WEdln.is_histcompl"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.is_histcompl(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get history completion mode.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7933"></A>
+<A NAME="7934"></A>
+<A NAME="fn:WEdln.kill_line"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_line(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete the whole line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7935"></A>
+<A NAME="7936"></A>
+<A NAME="fn:WEdln.kill_to_bol"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_to_bol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete all characters from previous to beginning of line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7937"></A>
+<A NAME="7938"></A>
+<A NAME="fn:WEdln.kill_to_eol"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_to_eol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete all characters from current to end of line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7939"></A>
+<A NAME="7940"></A>
+<A NAME="fn:WEdln.kill_word"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Starting from the current point, delete possible whitespace and
+ following alphanumeric characters until next non-alphanumeric character.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7941"></A>
+<A NAME="7942"></A>
+<A NAME="fn:WEdln.mark"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WEdln.mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get current mark (start of selection) for <TT>wedln</TT>.
+ Return value of -1 indicates that there is no mark, and
+ 0 is the beginning of the line.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7943"></A>
+<A NAME="7944"></A>
+<A NAME="fn:WEdln.next_completion"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.next_completion(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select next completion.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7945"></A>
+<A NAME="7946"></A>
+<A NAME="fn:WEdln.paste"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.paste(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request selection from application holding such.
+
+<P>
+Note that this function is asynchronous; the selection will not
+ actually be inserted before Ion receives it. This will be no
+ earlier than Ion return to its main loop.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7947"></A>
+<A NAME="7948"></A>
+<A NAME="fn:WEdln.point"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WEdln.point(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get current editing point. 
+ Beginning of the edited line is point 0.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7949"></A>
+<A NAME="7950"></A>
+<A NAME="fn:WEdln.prev_completion"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.prev_completion(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select previous completion.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7951"></A>
+<A NAME="7952"></A>
+<A NAME="fn:WEdln.set_context"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.set_context(WEdln wedln, string context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set history context for <TT>wedln</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7953"></A>
+<A NAME="7954"></A>
+<A NAME="fn:WEdln.set_mark"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.set_mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set <SPAN  CLASS="textit">mark</SPAN> to current cursor position.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7955"></A>
+<A NAME="7956"></A>
+<A NAME="fn:WEdln.skip_word"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.skip_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to to end of current sequence of whitespace followed by alphanumeric
+ characters..
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7957"></A>
+<A NAME="7958"></A>
+<A NAME="fn:WEdln.transpose_chars"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.transpose_chars(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose characters.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7959"></A>
+<A NAME="7960"></A>
+<A NAME="fn:WEdln.transpose_words"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.transpose_words(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose words.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00733000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="7962"></A>
+<A NAME="7963"></A>
+<A NAME="fn:WInput.cancel"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.cancel(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close input not calling any possible finish handlers.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7964"></A>
+<A NAME="7965"></A>
+<A NAME="fn:WInput.scrolldown"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.scrolldown(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Scroll input <TT>input</TT> text contents down.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="7966"></A>
+<A NAME="7967"></A>
+<A NAME="fn:WInput.scrollup"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.scrollup(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Scroll input <TT>input</TT> text contents up.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00740000000000000000"></A>
+<A NAME="sec:menuref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN  CLASS="textit">mod_menu</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="8777"></A>
+<A NAME="8778"></A>
+<A NAME="fn:mod_menu.grabmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.grabmenu(mplex, sub, menu_or_name, param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function is similar to <A HREF="#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A>, but input
+ is grabbed and the key used to active the menu can be used to
+ cycle through menu entries.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8779"></A>
+<A NAME="8780"></A>
+<A NAME="fn:mod_menu.menu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.menu(mplex, sub, menu_or_name, param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display a menu in the lower-left corner of <TT>mplex</TT>.
+ The variable <TT>menu_or_name</TT> is either the name of a menu
+ defined with <A HREF="#fn:mod_menu.defmenu"><TT>mod_menu.defmenu</TT></A> or directly a table similar
+ to ones passesd to this function. When this function is
+ called from a binding handler, <TT>sub</TT> should be set to
+ the second argument of to the binding handler (<TT>_sub</TT>)
+ so that the menu handler will get the same parameters as the
+ binding handler. Extra options can be passed in the table
+ <TT>param</TT>. The initial entry can be specified as the field
+ <TT>initial</TT> as an integer starting from 1. Menus can be made
+ to use a bigger style by setting the field <TT>big</TT> to <TT>true</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8781"></A>
+<A NAME="8782"></A>
+<A NAME="fn:mod_menu.get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_menu.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get module basic settings. For details, see <A HREF="#fn:mod_menu.set"><TT>mod_menu.set</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8783"></A>
+<A NAME="8784"></A>
+<A NAME="fn:mod_menu.set"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_menu.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set module basic settings. The parameter table may contain the
+ following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>scroll_amount</TT></TD>
+<TD ALIGN="LEFT">Number of pixels to scroll at a time 
+                        pointer-controlled menus when one extends
+                        beyond a border of the screen and the pointer
+                        touches that border.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>scroll_delay</TT></TD>
+<TD ALIGN="LEFT">Time between such scrolling events in 
+                        milliseconds.</TD>
+</TR>
+</TABLE>
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8785"></A>
+<A NAME="8786"></A>
+<A NAME="fn:mod_menu.pmenu"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.pmenu(win, sub, menu_or_name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function displays a drop-down menu and should only
+ be called from a mouse press handler. The parameters are
+ similar to those of <A HREF="#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00741000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="8788"></A>
+<A NAME="8789"></A>
+<A NAME="fn:WMenu.cancel"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.cancel(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close <TT>menu</TT> not calling any possible finish handlers.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8790"></A>
+<A NAME="8791"></A>
+<A NAME="fn:WMenu.finish"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.finish(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>If selected entry is a submenu, display that.
+ Otherwise destroy the menu and call handler for selected entry.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8792"></A>
+<A NAME="8793"></A>
+<A NAME="fn:WMenu.select_next"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_next(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select next entry in menu.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8794"></A>
+<A NAME="8795"></A>
+<A NAME="fn:WMenu.select_nth"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_nth(WMenu menu, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select <TT>n</TT>:th entry in menu.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8796"></A>
+<A NAME="8797"></A>
+<A NAME="fn:WMenu.select_prev"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_prev(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select previous entry in menu.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="8798"></A>
+<A NAME="8799"></A>
+<A NAME="fn:WMenu.typeahead_clear"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.typeahead_clear(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear typeahead buffer.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00750000000000000000"></A>
+<A NAME="sec:dockref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN  CLASS="textit">mod_dock</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="8997"></A>
+<A NAME="8998"></A>
+<A NAME="fn:mod_dock.set_floating_shown_on"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_dock.set_floating_shown_on(WMPlex mplex, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating docks on <TT>mplex</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00751000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</H3>
+
+<P>
+
+  <DL>
+<DD><A NAME="9000"></A>
+<A NAME="9001"></A>
+<A NAME="fn:WDock.attach"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WDock.attach(WDock dock, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach <TT>reg</TT> to <TT>dock</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9002"></A>
+<A NAME="9003"></A>
+<A NAME="fn:WDock.get"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WDock.get(WDock dock)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get <TT>dock</TT>'s configuration table. See <A HREF="#fn:WDock.set"><TT>WDock.set</TT></A> for a
+ description of the table.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9004"></A>
+<A NAME="9005"></A>
+<A NAME="fn:WDock.resize"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WDock.resize(WDock dock)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Resizes and refreshes <TT>dock</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9006"></A>
+<A NAME="9007"></A>
+<A NAME="fn:WDock.set"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WDock.set(WDock dock, table conftab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Configure <TT>dock</TT>. <TT>conftab</TT> is a table of key/value pairs:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Key</TD>
+<TD ALIGN="LEFT">Values</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT">Name of dock</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
+<TD ALIGN="LEFT">string in <!-- MATH
+ $\{t,m,b\}\times\{t,c,b\}$
+ -->
+<SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">Dock position. 
+       Can only be used in floating mode.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>grow</TT></TD>
+<TD ALIGN="LEFT">up/down/left/right</TD>
+<TD ALIGN="LEFT">Growth direction where new dockapps are added. Also
+       sets orientation for dock when working as WMPlex status
+       display (see <A HREF="#fn:WMPlex.set_stdisp"><TT>WMPlex.set_stdisp</TT></A>).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>is_auto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Should <TT>dock</TT> automatically manage new dockapps?</TD>
+</TR>
+</TABLE>
+
+<P>
+Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00760000000000000000"></A>
+<A NAME="sec:spref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN  CLASS="textit">mod_sp</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="9106"></A>
+<A NAME="9107"></A>
+<A NAME="fn:mod_sp.set_shown"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_sp.set_shown(WFrame sp, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle displayed status of <TT>sp</TT>.
+ The parameter <TT>how</TT> is one of (set/unset/toggle).
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9108"></A>
+<A NAME="9109"></A>
+<A NAME="fn:mod_sp.set_shown_on"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_sp.set_shown_on(WMPlex mplex, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change displayed status of some scratchpad on <TT>mplex</TT> if one is 
+ found. The parameter <TT>how</TT> is one of (set/unset/toggle).
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00770000000000000000"></A>
+<A NAME="sec:deref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN  CLASS="textit">de</SPAN>
+</H2>
+
+  <DL>
+<DD><A NAME="9173"></A>
+<A NAME="9174"></A>
+<A NAME="fn:de.defstyle"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool de.defstyle(string name, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a style.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9175"></A>
+<A NAME="9176"></A>
+<A NAME="fn:de.defstyle_rootwin"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool de.defstyle_rootwin(WRootWin rootwin, string name, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a style for the root window <TT>rootwin</TT>.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9177"></A>
+<A NAME="9178"></A>
+<A NAME="fn:de.reset"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void de.reset()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear all styles from drawing engine memory.
+  
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9179"></A>
+<A NAME="9180"></A>
+<A NAME="fn:de.substyle"></A>  
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table de.substyle(string pattern, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a substyle.
+  
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00780000000000000000"></A>
+<A NAME="sec:hookref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks
+</H2>
+
+<P>
+
+  <DL>
+<DD><A NAME="9401"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_do_manage_alt"></A><TT>clientwin_do_manage_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>(WClientWin, table)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we want to manage a new client window.
+      The table argument contains the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Do we want to switch to the client window.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>jumpto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Do we want to jump to the client window.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>userpos</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Geometry set by user.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>dockapp</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Client window is a dockapp.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>maprq</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Map request (and not initialisation scan).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>gravity</TT></TD>
+<TD ALIGN="LEFT">number</TD>
+<TD ALIGN="LEFT">Window gravity.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">table</TD>
+<TD ALIGN="LEFT">Requested geometry; <TT>x</TT>, <TT>y</TT>, <TT>w</TT>, <TT>h</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tfor</TT></TD>
+<TD ALIGN="LEFT">WClientWin</TD>
+<TD ALIGN="LEFT">Transient for window.</TD>
+</TR>
+</TABLE>
+
+<P>
+This hook is not called in protected mode and can be used for
+      arbitrary placement policies (deciding in which workspace a new
+      WClientWin should go). In this case, you can call
+<PRE>
+reg:attach(cwin)
+</PRE>
+      where <TT>reg</TT> is the region where the window should go, and
+      <TT>cwin</TT> is the first argument of the function added to the
+      hook.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9402"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_mapped_hook"></A><TT>clientwin_mapped_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WClientWin</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we have started to manage a client window.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9403"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_unmapped_hook"></A><TT>clientwin_unmapped_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>number</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we no longer manage a client window. The parameter
+      is the X ID of the window; see <A HREF="#fn:WClientWin.xid"><TT>WClientWin.xid</TT></A>.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9404"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="frame_managed_changed_hook"></A><TT>frame_managed_changed_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when there are changes in the objects managed by a frame
+      or their order. The table parameter has the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">The frame in question</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>mode</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT"><TT>"switchonly"</TT>, <TT>"reorder"</TT>,
+                                <TT>"add"</TT> or <TT>"remove"</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sw</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Switch occured</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sub</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The managed region (primarily) affected</TD>
+</TR>
+</TABLE>
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9405"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_sigchld_hook"></A><TT>ioncore_sigchld_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>integer</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when a child process has exited. The parameter
+      is the PID of the process.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9406"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_deinit_hook"></A><TT>ioncore_deinit_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when Ion is deinitialising and about to quit.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9407"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_post_layout_setup_hook"></A><TT>ioncore_post_layout_setup_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when Ion has done all initialisation and is almost ready to
+      enter the mainloop, except no windows are yet being managed.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9408"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_snapshot_hook"></A><TT>ioncore_snapshot_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called to signal scripts and modules to save their state (if any).
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9409"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="tiling_placement_alt"></A><TT>tiling_placement_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when a client window is about to be managed by a WTiling
+      to allow for alternative placement policies. The table has the
+      following fields:
+      <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tiling</TT></TD>
+<TD ALIGN="LEFT">WTiling</TD>
+<TD ALIGN="LEFT">The tiling</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The region (always a WClientWin at 
+              the moment) to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>mp</TT></TD>
+<TD ALIGN="LEFT">table</TD>
+<TD ALIGN="LEFT">This table contains the same fields as
+            the parameter of <A HREF="#fn:clientwin_do_manage_alt"><TT>clientwin_do_manage_alt</TT></A></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_frame</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">A succesfull handler should 
+            return the target frame here.</TD>
+</TR>
+</TABLE>
+      This hook is just for placing within a given workspace after the
+      workspace has been decided by the default workspace selection
+      policy. It is called in protected mode. For arbitrary placement
+      policies, <A HREF="#fn:clientwin_do_manage_alt"><TT>clientwin_do_manage_alt</TT></A> should be used; it
+      isn't called in protected mode,
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9410"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="panews_make_placement_alt"></A><TT>panews_make_placement_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called to make a placement on panews. The parameter table has
+      the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>ws</TT></TD>
+<TD ALIGN="LEFT">WPaneWS</TD>
+<TD ALIGN="LEFT">The workspace</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">A frame initially allocated for the
+              region to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The region to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>specifier</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">For drag&amp;drop on handling empty areas</TD>
+</TR>
+</TABLE>
+
+<P>
+The handler should set some of these fields on success:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_node</TT></TD>
+<TD ALIGN="LEFT">WSplit</TD>
+<TD ALIGN="LEFT">Target split</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_config</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">New configuration for it, unless
+              WSplitRegion</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_w</TT></TD>
+<TD ALIGN="LEFT">integer</TD>
+<TD ALIGN="LEFT">New width for target split (optional)</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_h</TT></TD>
+<TD ALIGN="LEFT">integer</TD>
+<TD ALIGN="LEFT">New height for target split (optional)</TD>
+</TR>
+</TABLE>
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9411"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_activated_hook"></A><TT>region_activated_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Signalled when a region or one of its children has received the focus.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9412"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_activity_hook"></A><TT>region_activity_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This hook is triggered when the activity flag of the parameter 
+      region has been changed.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9413"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_do_warp_alt"></A><TT>region_do_warp_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This alt-hook exist to allow for alternative pointer warping
+      implementations.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9414"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_inactivated_hook"></A><TT>region_inactivated_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Signalled when the focus has moved from the parameter region or
+      one of its children to a non-child region of the parameter region.
+      
+</DD>
+</DL>
+
+<P>
+
+  <DL>
+<DD><A NAME="9415"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="screen_managed_changed_hook"></A><TT>screen_managed_changed_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when there are changes in the objects managed by a screen
+      or their order. The table parameter is similar to that of
+      <A HREF="#fn:frame_managed_changed_hook"><TT>frame_managed_changed_hook</TT></A>.
+      
+</DD>
+</DL>
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html348"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html342"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html336"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html344"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html346"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html349"
+  HREF="node8.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html343"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html337"
+  HREF="node6.html">5. Scripting</A>
+ &nbsp; <B>  <A NAME="tex2html345"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html347"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node8.html b/ionconf/node8.html
new file mode 100644 (file)
index 0000000..7b79bc0
--- /dev/null
@@ -0,0 +1,597 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>A. The GNU General Public License</TITLE>
+<META NAME="description" CONTENT="A. The GNU General Public License">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node9.html">
+<LINK REL="previous" HREF="node7.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node9.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html396"
+  HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html390"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html384"
+  HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html392"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html394"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html397"
+  HREF="node9.html">B. Full class hierarchy</A>
+<B> Up:</B> <A NAME="tex2html391"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html385"
+  HREF="node7.html">6. Function reference</A>
+ &nbsp; <B>  <A NAME="tex2html393"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html395"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html398"
+  HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00800000000000000000">
+A. The GNU General Public License</A>
+</H1>
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+<P>
+<DIV ALIGN="CENTER">Version 2, June 1991
+</DIV>
+<P>
+<DIV ALIGN="CENTER">Copyright &#169; 1989, 1991 Free Software Foundation, Inc.
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+<P><P>
+<BR>
+<DIV ALIGN="CENTER"></DIV>
+<P>
+<DIV ALIGN="CENTER">59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+<P><P>
+<BR>
+<DIV ALIGN="CENTER"></DIV>
+<P>
+<DIV ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+
+</DIV>
+
+<P>
+<DIV ALIGN="CENTER">
+<B><BIG CLASS="LARGE">Preamble</BIG></B>
+
+</DIV>
+
+<P>
+The licenses for most software are designed to take away your freedom to
+share and change it.  By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.  This General Public
+License applies to most of the Free Software Foundation's software and to
+any other program whose authors commit to using it.  (Some other Free
+Software Foundation software is covered by the GNU Library General Public
+License instead.)  You can apply it to your programs, too.
+
+<P>
+When we speak of free software, we are referring to freedom, not price.
+Our General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service
+if you wish), that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free programs;
+and that you know you can do these things.
+
+<P>
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights.  These
+restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+<P>
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have.  You
+must make sure that they, too, receive or can get the source code.  And
+you must show them these terms so they know their rights.
+
+<P>
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+<P>
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If
+the software is modified by someone else and passed on, we want its
+recipients to know that what they have is not the original, so that any
+problems introduced by others will not reflect on the original authors'
+reputations.
+
+<P>
+Finally, any free program is threatened constantly by software patents.
+We wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program
+proprietary.  To prevent this, we have made it clear that any patent must
+be licensed for everyone's free use or not licensed at all.
+
+<P>
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS </SMALL>F<SMALL>OR </SMALL>C<SMALL>OPYING, </SMALL>D<SMALL>ISTRIBUTION AND
+  </SMALL>M<SMALL>ODIFICATION</SMALL></BIG>
+
+</DIV>
+
+<P>
+
+<OL>
+<LI><P>
+This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the
+terms of this General Public License.  The ``Program'', below, refers to
+any such program or work, and a ``work based on the Program'' means either
+the Program or any derivative work under copyright law: that is to say, a
+work containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language.  (Hereinafter,
+translation is included without limitation in the term ``modification''.)
+Each licensee is addressed as ``you''.
+
+<P>
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+</LI>
+<LI>You may copy and distribute verbatim copies of the Program's source
+  code as you receive it, in any medium, provided that you conspicuously
+  and appropriately publish on each copy an appropriate copyright notice
+  and disclaimer of warranty; keep intact all the notices that refer to
+  this License and to the absence of any warranty; and give any other
+  recipients of the Program a copy of this License along with the Program.
+
+<P>
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+<P>
+</LI>
+<LI><P>
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+<P>
+
+<OL>
+<LI><P>
+You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+<P>
+</LI>
+<LI><P>
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+<P>
+</LI>
+<LI>If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License.  (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+
+<P>
+</LI>
+</OL>
+
+<P>
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+<P>
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+<P>
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+</LI>
+<LI>You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+<P>
+
+<OL>
+<LI><P>
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+</LI>
+<LI><P>
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+<P>
+</LI>
+<LI><P>
+Accompany it with the information you received as to the offer
+to distribute corresponding source code.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+
+<P>
+</LI>
+</OL>
+
+<P>
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+<P>
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+<P>
+</LI>
+<LI>You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+</LI>
+<LI>You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+</LI>
+<LI>Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+</LI>
+<LI>If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+<P>
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+<P>
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+<P>
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+</LI>
+<LI>If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+</LI>
+<LI>The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+<P>
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+</LI>
+<LI>If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">
+N<SMALL>O </SMALL>W<SMALL>ARRANTY
+</SMALL></BIG>
+
+</DIV>
+
+<P>
+</LI>
+<LI>B<SMALL>ECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  </SMALL>E<SMALL>XCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  </SMALL>T<SMALL>HE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  </SMALL>S<SMALL>HOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.</SMALL>
+
+<P>
+</LI>
+<LI>I<SMALL>N NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.</SMALL>
+
+<P>
+</LI>
+</OL>
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">E<SMALL>ND OF </SMALL>T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS</SMALL></BIG>
+
+</DIV>
+
+<P>
+
+<P>
+
+<H2><A NAME="SECTION00810000000000000000">
+Appendix: How to Apply These Terms to Your New Programs</A>
+</H2>
+
+<P>
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+<P>
+To do so, attach the following notices to the program.  It is safest to
+  attach them to the start of each source file to most effectively convey
+  the exclusion of warranty; and each file should have at least the
+  ``copyright'' line and a pointer to where the full notice is found.
+
+<P>
+<BLOCKQUOTE>
+one line to give the program's name and a brief idea of what it does. 
+<BR>
+Copyright (C) yyyy  name of author 
+<BR></BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+</BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+</BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+</BLOCKQUOTE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+<P>
+<BLOCKQUOTE>
+Gnomovision version 69, Copyright (C) yyyy  name of author 
+<BR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 
+<BR>
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+
+</BLOCKQUOTE>
+
+<P>
+The hypothetical commands <TT>show w</TT> and <TT>show c</TT> should show the
+appropriate parts of the General Public License.  Of course, the commands
+you use may be called something other than <TT>show w</TT> and <TT>show c</TT>;
+they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary.  Here is a sample; alter the names:
+
+<P>
+<BLOCKQUOTE>
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program 
+<BR>`Gnomovision' (which makes passes at compilers) written by James Hacker. 
+<BR></BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>signature of Ty Coon, 1 April 1989 
+<BR>
+Ty Coon, President of Vice
+
+</BLOCKQUOTE>
+
+<P>
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications
+with the library.  If this is what you want to do, use the GNU Library
+General Public License instead of this License.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html396"
+  HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html390"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html384"
+  HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html392"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html394"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html397"
+  HREF="node9.html">B. Full class hierarchy</A>
+<B> Up:</B> <A NAME="tex2html391"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html385"
+  HREF="node7.html">6. Function reference</A>
+ &nbsp; <B>  <A NAME="tex2html393"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html395"
+  HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionconf/node9.html b/ionconf/node9.html
new file mode 100644 (file)
index 0000000..69a5aff
--- /dev/null
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>B. Full class hierarchy visible to Lua-side</TITLE>
+<META NAME="description" CONTENT="B. Full class hierarchy visible to Lua-side">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node10.html">
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node10.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html411"
+  HREF="node10.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html405"
+  HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html399"
+  HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html407"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html409"
+  HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html412"
+  HREF="node10.html">List of functions</A>
+<B> Up:</B> <A NAME="tex2html406"
+  HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html400"
+  HREF="node8.html">A. The GNU General</A>
+ &nbsp; <B>  <A NAME="tex2html408"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html410"
+  HREF="node11.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00900000000000000000"></A>
+<A NAME="app:fullhierarchy"></A>
+<BR>
+B. Full class hierarchy visible to Lua-side
+</H1>
+
+<P>
+<PRE>
+    Obj
+     |--&gt;WHook
+     |--&gt;WTimer
+     |--&gt;WMoveresMode
+     |--&gt;WMgmtMode (mod_mgmtmode)
+     |--&gt;WRegion
+     |    |--&gt;WClientWin
+     |    |--&gt;WWindow
+     |    |    |--&gt;WRootWin
+     |    |    |--&gt;WMPlex
+     |    |    |    |--&gt;WScreen
+     |    |    |    |--&gt;WFrame
+     |    |    |--&gt;WInfoWin
+     |    |    |    |--&gt;WStatusBar (mod_statusbar)
+     |    |    |--&gt;WMenu (mod_menu)
+     |    |    |--&gt;WInput (mod_query)
+     |    |         |--&gt;WEdln (mod_query)
+     |    |         |--&gt;WMessage (mod_query)
+     |    |--&gt;WGroup
+     |    |    |--&gt;WGroupWS
+     |    |    |--&gt;WGroupCW
+     |    |--&gt;WTiling (mod_tiling)
+     |--&gt;WSplit (mod_tiling)
+          |--&gt;WSplitInner (mod_tiling)
+          |    |--&gt;WSplitSplit (mod_tiling)
+          |         |--&gt;WSplitFloat (mod_tiling)
+          |--&gt;WSplitRegion (mod_tiling)
+               |--&gt;WSplitST (mod_tiling)
+</PRE>
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionconf/prev.png b/ionconf/prev.png
new file mode 100644 (file)
index 0000000..e60b8b4
Binary files /dev/null and b/ionconf/prev.png differ
diff --git a/ionconf/prev_g.png b/ionconf/prev_g.png
new file mode 100644 (file)
index 0000000..476d956
Binary files /dev/null and b/ionconf/prev_g.png differ
diff --git a/ionconf/up.png b/ionconf/up.png
new file mode 100644 (file)
index 0000000..3937e16
Binary files /dev/null and b/ionconf/up.png differ
diff --git a/ionnotes.dvi.gz b/ionnotes.dvi.gz
new file mode 100644 (file)
index 0000000..2922df5
Binary files /dev/null and b/ionnotes.dvi.gz differ
diff --git a/ionnotes.out b/ionnotes.out
new file mode 100644 (file)
index 0000000..f29e5e3
--- /dev/null
@@ -0,0 +1,22 @@
+\BOOKMARK [1][-]{section.1}{ Class and object hierarchies}{}
+\BOOKMARK [2][-]{subsection.1.1}{ Class hierarchy}{section.1}
+\BOOKMARK [2][-]{subsection.1.2}{ Object hierarchies: WRegion parents and managers}{section.1}
+\BOOKMARK [3][-]{subsubsection.1.2.1}{ Parent--child relations}{subsection.1.2}
+\BOOKMARK [3][-]{subsubsection.1.2.2}{ Manager--managed relations}{subsection.1.2}
+\BOOKMARK [2][-]{subsection.1.3}{ Summary}{section.1}
+\BOOKMARK [1][-]{section.2}{ Object system implementation}{}
+\BOOKMARK [1][-]{section.3}{ The Lua interface}{}
+\BOOKMARK [2][-]{subsection.3.1}{ Supported types}{section.3}
+\BOOKMARK [2][-]{subsection.3.2}{ Exporting functions}{section.3}
+\BOOKMARK [2][-]{subsection.3.3}{ Calling Lua functions and code}{section.3}
+\BOOKMARK [2][-]{subsection.3.4}{ Miscellaneous notes}{section.3}
+\BOOKMARK [1][-]{section.4}{ Miscellaneous design notes}{}
+\BOOKMARK [2][-]{subsection.4.1}{ Destroying WObj:s}{section.4}
+\BOOKMARK [2][-]{lstlisting.-36}{ The types !char*! and !const char*! as function parameters and return values}{section.4}
+\BOOKMARK [1][-]{section.5}{ C coding style}{}
+\BOOKMARK [2][-]{subsection.5.1}{ Whitespace}{section.5}
+\BOOKMARK [2][-]{subsection.5.2}{ Braces}{section.5}
+\BOOKMARK [2][-]{subsection.5.3}{ Names}{section.5}
+\BOOKMARK [2][-]{subsection.5.4}{ Miscellaneous}{section.5}
+\BOOKMARK [1][-]{section.A}{ The GNU General Public License}{}
+\BOOKMARK [1][-]{section*.4}{Index}{}
diff --git a/ionnotes.ps.gz b/ionnotes.ps.gz
new file mode 100644 (file)
index 0000000..d432ffb
Binary files /dev/null and b/ionnotes.ps.gz differ
diff --git a/ionnotes.tex b/ionnotes.tex
new file mode 100644 (file)
index 0000000..d8c10f3
--- /dev/null
@@ -0,0 +1,60 @@
+\documentclass[english,a4paper,11pt,oldtoc,mctitle]{artikel3}
+\input{macros}
+
+% For including some files from reports
+\newcommand{\xchapter}[1]{\section{#1}}
+\newcommand{\xsection}[1]{\subsection{#1}}
+\newcommand{\xsectionstar}[1]{\subsection*{#1}}
+\newcommand{\xsubsection}[1]{\subsubsection{#1}}
+
+
+\title{Ion: Notes for the module and patch writer}
+\author{Tuomo Valkonen \\ tuomov at iki.fi}
+%%DATE
+
+\makeindex
+
+
+\begin{document}
+
+\maketitle
+
+Ion: Notes for the module and patch writer\\
+Copyright \copyright\  2003--2004 Tuomo Valkonen.
+
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+section entitled ''GNU General Public License'' for more details.
+
+\bigskip
+
+\begin{abstract}
+    This document is an unorganized collection of notes for
+    those who want to write modules or patches to Ion.
+\end{abstract}
+
+\tableofcontents
+
+\input{objects}
+
+\input{objectsimpl}
+
+\input{luaif}
+
+\input{designnotes}
+
+\input{cstyle}
+
+\appendix
+
+\input{gpl}
+
+\printindex
+
+\end{document}
diff --git a/ionnotes/WARNINGS b/ionnotes/WARNINGS
new file mode 100644 (file)
index 0000000..726c0ef
--- /dev/null
@@ -0,0 +1,8 @@
+No implementation found for style `hyperref'
+No implementation found for style `ae'
+No implementation found for style `url'
+No implementation found for style `tocbibind'
+No implementation found for style `geometry'
+No implementation found for style `calc'
+
+Substitution of arg to newlabelxx delayed.
diff --git a/ionnotes/contents.png b/ionnotes/contents.png
new file mode 100644 (file)
index 0000000..0c752c6
Binary files /dev/null and b/ionnotes/contents.png differ
diff --git a/ionnotes/crossref.png b/ionnotes/crossref.png
new file mode 100644 (file)
index 0000000..7dd2ddd
Binary files /dev/null and b/ionnotes/crossref.png differ
diff --git a/ionnotes/index.html b/ionnotes/index.html
new file mode 100644 (file)
index 0000000..27c31f2
--- /dev/null
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Ion: Notes for the module and patch writer</TITLE>
+<META NAME="description" CONTENT="Ion: Notes for the module and patch writer">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html11"
+  HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html5"
+  HREF="http://iki.fi/tuomov/ion/">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png"> 
+<A NAME="tex2html7"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html9"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html12"
+  HREF="node1.html">Contents</A>
+<B> Up:</B> <A NAME="tex2html6"
+  HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
+ &nbsp; <B>  <A NAME="tex2html8"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html10"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+<H1 ALIGN="CENTER">Ion: Notes for the module and patch writer</H1>
+<DIV CLASS="author_info">
+
+<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
+<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
+</DIV>
+
+<P>
+Ion: Notes for the module and patch writer
+<BR>
+Copyright &#169;  2003-2004 Tuomo Valkonen.
+
+<P>
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+<P>
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+section entitled ''GNU General Public License'' for more details.
+
+<P>
+
+<P><P>
+<BR>
+
+<P>
+
+<H3>Abstract:</H3>
+<DIV CLASS="ABSTRACT">
+    This document is an unorganized collection of notes for
+    those who want to write modules or patches to Ion.
+</DIV>
+<P>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html13"
+  HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html14"
+  HREF="node2.html"><SPAN CLASS="arabic">1</SPAN> Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html15"
+  HREF="node2.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html16"
+  HREF="node2.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html17"
+  HREF="node2.html#SECTION00022100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html18"
+  HREF="node2.html#SECTION00022200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<LI><A NAME="tex2html19"
+  HREF="node2.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html20"
+  HREF="node3.html"><SPAN CLASS="arabic">2</SPAN> Object system implementation</A>
+<LI><A NAME="tex2html21"
+  HREF="node4.html"><SPAN CLASS="arabic">3</SPAN> The Lua interface</A>
+<UL>
+<LI><A NAME="tex2html22"
+  HREF="node4.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Supported types</A>
+<LI><A NAME="tex2html23"
+  HREF="node4.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Exporting functions</A>
+<LI><A NAME="tex2html24"
+  HREF="node4.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Calling Lua functions and code</A>
+<LI><A NAME="tex2html25"
+  HREF="node4.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous notes</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html26"
+  HREF="node5.html"><SPAN CLASS="arabic">4</SPAN> Miscellaneous design notes</A>
+<UL>
+<LI><A NAME="tex2html27"
+  HREF="node5.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Destroying WObj:s</A>
+<LI><A NAME="tex2html28"
+  HREF="node5.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> The types <TT>char*</TT> and <TT>const char*</TT> as function
+  parameters and return values</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html29"
+  HREF="node6.html"><SPAN CLASS="arabic">5</SPAN> C coding style</A>
+<UL>
+<LI><A NAME="tex2html30"
+  HREF="node6.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Whitespace</A>
+<LI><A NAME="tex2html31"
+  HREF="node6.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Braces</A>
+<LI><A NAME="tex2html32"
+  HREF="node6.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Names</A>
+<LI><A NAME="tex2html33"
+  HREF="node6.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html34"
+  HREF="node7.html">A. The GNU General Public License</A>
+<UL>
+<LI><A NAME="tex2html35"
+  HREF="node7.html#SECTION00071000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html36"
+  HREF="node8.html">Index</A>
+<LI><A NAME="tex2html37"
+  HREF="node9.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionnotes/index.png b/ionnotes/index.png
new file mode 100644 (file)
index 0000000..698f09c
Binary files /dev/null and b/ionnotes/index.png differ
diff --git a/ionnotes/internals.pl b/ionnotes/internals.pl
new file mode 100644 (file)
index 0000000..89e33bb
--- /dev/null
@@ -0,0 +1,34 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate internals original text with physical files.
+
+
+$key = q/sec:objects/;
+$ref_files{$key} = "$dir".q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$ref_files{$key} = "$dir".q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:supptypes/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:calling/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$ref_files{$key} = "$dir".q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exporting/;
+$ref_files{$key} = "$dir".q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$ref_files{$key} = "$dir".q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+1;
+
diff --git a/ionnotes/ionnotes.css b/ionnotes/ionnotes.css
new file mode 100644 (file)
index 0000000..d22be91
--- /dev/null
@@ -0,0 +1,37 @@
+/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */
+.MATH    { font-family: "Century Schoolbook", serif; }
+.MATH I  { font-family: "Century Schoolbook", serif; font-style: italic }
+.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold }
+
+/* implement both fixed-size and relative sizes */
+SMALL.XTINY            { font-size : xx-small }
+SMALL.TINY             { font-size : x-small  }
+SMALL.SCRIPTSIZE       { font-size : smaller  }
+SMALL.FOOTNOTESIZE     { font-size : small    }
+SMALL.SMALL            {  }
+BIG.LARGE              {  }
+BIG.XLARGE             { font-size : large    }
+BIG.XXLARGE            { font-size : x-large  }
+BIG.HUGE               { font-size : larger   }
+BIG.XHUGE              { font-size : xx-large }
+
+/* heading styles */
+H1             {  }
+H2             {  }
+H3             {  }
+H4             {  }
+H5             {  }
+
+/* mathematics styles */
+DIV.displaymath                { }     /* math displays */
+TD.eqno                        { }     /* equation-number cells */
+
+
+/* document-specific styles come next */
+DIV.navigation         {   }
+DIV.center             {   }
+SPAN.sc                {   }
+DIV.quote              {   }
+PRE.preform            {   }
+SPAN.textit            { font-style: italic  }
+SPAN.arabic            {   }
diff --git a/ionnotes/ionnotes.html b/ionnotes/ionnotes.html
new file mode 100644 (file)
index 0000000..27c31f2
--- /dev/null
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Ion: Notes for the module and patch writer</TITLE>
+<META NAME="description" CONTENT="Ion: Notes for the module and patch writer">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html11"
+  HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html5"
+  HREF="http://iki.fi/tuomov/ion/">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png"> 
+<A NAME="tex2html7"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html9"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html12"
+  HREF="node1.html">Contents</A>
+<B> Up:</B> <A NAME="tex2html6"
+  HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
+ &nbsp; <B>  <A NAME="tex2html8"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html10"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<P>
+<H1 ALIGN="CENTER">Ion: Notes for the module and patch writer</H1>
+<DIV CLASS="author_info">
+
+<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
+<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
+</DIV>
+
+<P>
+Ion: Notes for the module and patch writer
+<BR>
+Copyright &#169;  2003-2004 Tuomo Valkonen.
+
+<P>
+This document is free; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+<P>
+This document is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+section entitled ''GNU General Public License'' for more details.
+
+<P>
+
+<P><P>
+<BR>
+
+<P>
+
+<H3>Abstract:</H3>
+<DIV CLASS="ABSTRACT">
+    This document is an unorganized collection of notes for
+    those who want to write modules or patches to Ion.
+</DIV>
+<P>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html13"
+  HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html14"
+  HREF="node2.html"><SPAN CLASS="arabic">1</SPAN> Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html15"
+  HREF="node2.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html16"
+  HREF="node2.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html17"
+  HREF="node2.html#SECTION00022100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html18"
+  HREF="node2.html#SECTION00022200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<LI><A NAME="tex2html19"
+  HREF="node2.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html20"
+  HREF="node3.html"><SPAN CLASS="arabic">2</SPAN> Object system implementation</A>
+<LI><A NAME="tex2html21"
+  HREF="node4.html"><SPAN CLASS="arabic">3</SPAN> The Lua interface</A>
+<UL>
+<LI><A NAME="tex2html22"
+  HREF="node4.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Supported types</A>
+<LI><A NAME="tex2html23"
+  HREF="node4.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Exporting functions</A>
+<LI><A NAME="tex2html24"
+  HREF="node4.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Calling Lua functions and code</A>
+<LI><A NAME="tex2html25"
+  HREF="node4.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous notes</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html26"
+  HREF="node5.html"><SPAN CLASS="arabic">4</SPAN> Miscellaneous design notes</A>
+<UL>
+<LI><A NAME="tex2html27"
+  HREF="node5.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Destroying WObj:s</A>
+<LI><A NAME="tex2html28"
+  HREF="node5.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> The types <TT>char*</TT> and <TT>const char*</TT> as function
+  parameters and return values</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html29"
+  HREF="node6.html"><SPAN CLASS="arabic">5</SPAN> C coding style</A>
+<UL>
+<LI><A NAME="tex2html30"
+  HREF="node6.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Whitespace</A>
+<LI><A NAME="tex2html31"
+  HREF="node6.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Braces</A>
+<LI><A NAME="tex2html32"
+  HREF="node6.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Names</A>
+<LI><A NAME="tex2html33"
+  HREF="node6.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html34"
+  HREF="node7.html">A. The GNU General Public License</A>
+<UL>
+<LI><A NAME="tex2html35"
+  HREF="node7.html#SECTION00071000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html36"
+  HREF="node8.html">Index</A>
+<LI><A NAME="tex2html37"
+  HREF="node9.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionnotes/labels.pl b/ionnotes/labels.pl
new file mode 100644 (file)
index 0000000..2c1867a
--- /dev/null
@@ -0,0 +1,69 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate labels original text with physical files.
+
+
+$key = q/sec:objects/;
+$external_labels{$key} = "$URL/" . q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$external_labels{$key} = "$URL/" . q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:supptypes/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:calling/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$external_labels{$key} = "$URL/" . q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exporting/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$external_labels{$key} = "$URL/" . q|node2.html|; 
+$noresave{$key} = "$nosave";
+
+1;
+
+
+# LaTeX2HTML 2002-2-1 (1.71)
+# labels from external_latex_labels array.
+
+
+$key = q/sec:objects/;
+$external_latex_labels{$key} = q|1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:parentship/;
+$external_latex_labels{$key} = q|2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:supptypes/;
+$external_latex_labels{$key} = q|3.1|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:calling/;
+$external_latex_labels{$key} = q|3.3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:managership/;
+$external_latex_labels{$key} = q|3|; 
+$noresave{$key} = "$nosave";
+
+$key = q/sec:exporting/;
+$external_latex_labels{$key} = q|3.2|; 
+$noresave{$key} = "$nosave";
+
+$key = q/fig:classhierarchy/;
+$external_latex_labels{$key} = q|1|; 
+$noresave{$key} = "$nosave";
+
+1;
+
diff --git a/ionnotes/next.png b/ionnotes/next.png
new file mode 100644 (file)
index 0000000..1628652
Binary files /dev/null and b/ionnotes/next.png differ
diff --git a/ionnotes/next_g.png b/ionnotes/next_g.png
new file mode 100644 (file)
index 0000000..9d3f591
Binary files /dev/null and b/ionnotes/next_g.png differ
diff --git a/ionnotes/node1.html b/ionnotes/node1.html
new file mode 100644 (file)
index 0000000..b174939
--- /dev/null
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Contents</TITLE>
+<META NAME="description" CONTENT="Contents">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node2.html">
+<LINK REL="previous" HREF="ionnotes.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node2.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html48"
+  HREF="node2.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html44"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html38"
+  HREF="ionnotes.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>  
+<A NAME="tex2html46"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html49"
+  HREF="node2.html">1 Class and object</A>
+<B> Up:</B> <A NAME="tex2html45"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html39"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+ &nbsp; <B>  <A NAME="tex2html47"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL CLASS="TofC">
+<LI><A NAME="tex2html50"
+  HREF="node2.html">1 Class and object hierarchies</A>
+<UL>
+<LI><A NAME="tex2html51"
+  HREF="node2.html#SECTION00021000000000000000">1.1 Class hierarchy</A>
+<LI><A NAME="tex2html52"
+  HREF="node2.html#SECTION00022000000000000000">1.2 Object hierarchies: WRegion parents and managers</A>
+<LI><A NAME="tex2html53"
+  HREF="node2.html#SECTION00023000000000000000">1.3 Summary</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html54"
+  HREF="node3.html">2 Object system implementation</A>
+<LI><A NAME="tex2html55"
+  HREF="node4.html">3 The Lua interface</A>
+<UL>
+<LI><A NAME="tex2html56"
+  HREF="node4.html#SECTION00041000000000000000">3.1 Supported types</A>
+<LI><A NAME="tex2html57"
+  HREF="node4.html#SECTION00042000000000000000">3.2 Exporting functions</A>
+<LI><A NAME="tex2html58"
+  HREF="node4.html#SECTION00043000000000000000">3.3 Calling Lua functions and code</A>
+<LI><A NAME="tex2html59"
+  HREF="node4.html#SECTION00044000000000000000">3.4 Miscellaneous notes</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html60"
+  HREF="node5.html">4 Miscellaneous design notes</A>
+<UL>
+<LI><A NAME="tex2html61"
+  HREF="node5.html#SECTION00051000000000000000">4.1 Destroying WObj:s</A>
+<LI><A NAME="tex2html62"
+  HREF="node5.html#SECTION00052000000000000000">4.2 The types char* and const char* as function parameters and return values</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html63"
+  HREF="node6.html">5 C coding style</A>
+<UL>
+<LI><A NAME="tex2html64"
+  HREF="node6.html#SECTION00061000000000000000">5.1 Whitespace</A>
+<LI><A NAME="tex2html65"
+  HREF="node6.html#SECTION00062000000000000000">5.2 Braces</A>
+<LI><A NAME="tex2html66"
+  HREF="node6.html#SECTION00063000000000000000">5.3 Names</A>
+<LI><A NAME="tex2html67"
+  HREF="node6.html#SECTION00064000000000000000">5.4 Miscellaneous</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html68"
+  HREF="node7.html">A. The GNU General Public License</A>
+<LI><A NAME="tex2html69"
+  HREF="node8.html">Index</A>
+</UL>
+<!--End of Table of Contents-->
+<P>
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node2.html b/ionnotes/node2.html
new file mode 100644 (file)
index 0000000..e25fd2d
--- /dev/null
@@ -0,0 +1,444 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>1 Class and object hierarchies</TITLE>
+<META NAME="description" CONTENT="1 Class and object hierarchies">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node3.html">
+<LINK REL="previous" HREF="node1.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node3.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html82"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html76"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html70"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html78"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html80"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html83"
+  HREF="node3.html">2 Object system implementation</A>
+<B> Up:</B> <A NAME="tex2html77"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html71"
+  HREF="node1.html">Contents</A>
+ &nbsp; <B>  <A NAME="tex2html79"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html81"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html84"
+  HREF="node2.html#SECTION00021000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+<LI><A NAME="tex2html85"
+  HREF="node2.html#SECTION00022000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+<UL>
+<LI><A NAME="tex2html86"
+  HREF="node2.html#SECTION00022100000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+<LI><A NAME="tex2html87"
+  HREF="node2.html#SECTION00022200000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html88"
+  HREF="node2.html#SECTION00023000000000000000"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00020000000000000000"></A>
+<A NAME="sec:objects"></A>
+<BR>
+<SPAN CLASS="arabic">1</SPAN> Class and object hierarchies
+</H1>
+
+<P>
+While Ion does not not have a truly object-oriented design
+<A NAME="tex2html1"
+  HREF="#foot212"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A>,
+things that appear on the computer screen are, however, quite
+naturally expressed as such ''objects''. Therefore Ion implements
+a rather primitive OO system for these screen objects and some
+other things. 
+
+<P>
+It is essential for the module writer to learn this object
+system, but also people who write their own binding configuration files
+necessarily come into contact with the class and object hierarchies
+- you need to know which binding setup routines apply where, 
+and what functions can be used as handlers in which bindings.
+It is the purpose of this section to attempt to explain these 
+hierarchies. If you do not wish the read the full section, at least
+read the summary at the end of it, so that you understand the very
+basic relations.
+
+<P>
+For simplicity we consider only the essential-for-basic-configuration
+Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> classes. 
+See Appendix <A HREF="#app:fullhierarchy"><IMG  ALIGN="BOTTOM" BORDER="1" ALT="[*]" SRC="crossref.png"></A> for the full class hierachy visible
+to Lua side.
+
+<P>
+
+<H2><A NAME="SECTION00021000000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
+</H2>
+
+<P>
+One of the most important principles of object-oriented design methodology
+is inheritance; roughly how classes (objects are instances of classes)
+extend on others' features. Inheritance gives rise to class hierarchy.
+In the case of single-inheritance this hierarchy can be expressed as a
+tree where the class at the root is inherited by all others below it
+and so on. Figure <A HREF="#fig:classhierarchy">1</A> lists out the Ion class 
+hierarchy and below we explain what features of Ion the classes 
+implement.
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="319"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 1:</STRONG>
+Partial Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> 
+    class hierarchy.</CAPTION>
+<TR><TD><PRE>
+    Obj
+     |--&gt;WRegion
+     |    |--&gt;WClientWin
+     |    |--&gt;WWindow
+     |    |    |--&gt;WRootWin
+     |    |    |--&gt;WMPlex
+     |    |    |    |--&gt;WScreen
+     |    |    |    |--&gt;WFrame
+     |    |    |--&gt;WInput (mod_query)
+     |    |         |--&gt;WEdln (mod_query)
+     |    |         |--&gt;WMessage (mod_query)
+     |    |--&gt;WGroup
+     |    |    |--&gt;WGroupWS
+     |    |    |--&gt;WGroupCW
+     |    |--&gt;WTiling (mod_tiling)
+     |--&gt;WSplit (mod_tiling)
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+The core classes:
+
+<P>
+<DL>
+<DT><STRONG>Obj</STRONG></DT>
+<DD><A NAME="325"></A>
+    Is the base of Ion's object system.
+
+<P>
+</DD>
+<DT><STRONG>WRegion</STRONG></DT>
+<DD><A NAME="326"></A>
+    is the base class for everything corresponding to something on the
+    screen. Each object of type WRegion has a size and  position
+    relative to the parent WRegion. While a big part of Ion 
+    operates on these instead of more specialised classes, WRegion
+    is a ''virtual''  base class in that there are no objects of ''pure''
+    type WRegion; all concrete regions are objects of some class 
+    that inherits WRegion.
+
+<P>
+</DD>
+<DT><STRONG>WClientWin</STRONG></DT>
+<DD><A NAME="327"></A> is a class for
+    client window objects, the objects that window managers are
+    supposed to manage.
+
+<P>
+</DD>
+<DT><STRONG>WWindow</STRONG></DT>
+<DD><A NAME="328"></A> is the base class for all
+    internal objects having an X window associated to them
+    (WClientWins also have X windows associated to them).
+
+<P>
+</DD>
+<DT><STRONG>WRootWin</STRONG></DT>
+<DD><A NAME="329"></A> is the class for
+    root windows<A NAME="242"></A> of X screens<A NAME="243"></A>.
+    Note that an ''X screen'' or root window is not necessarily a
+    single  physical screen<A NAME="244"></A> as a root window
+    may be split over multiple screens when multi-head extensions 
+    such as Xinerama<A NAME="245"></A> are used. (Actually there
+    can be only one WRootWin when Xinerama is used.)
+
+<P>
+</DD>
+<DT><STRONG>WMPlex</STRONG></DT>
+<DD>is a base class for all regions that''multiplex'' 
+    other regions. This means that of the regions managed by the multiplexer,
+    only one can be displayed at a time. Classes that inhereit WMPlex
+    include screens and frames.
+
+<P>
+</DD>
+<DT><STRONG>WScreen</STRONG></DT>
+<DD><A NAME="330"></A> is the class for objects
+    corresponding to physical screens. Screens may share a root
+    window when Xinerama multihead extensions are used as explained
+    above.
+
+<P>
+</DD>
+<DT><STRONG>WFrame</STRONG></DT>
+<DD><A NAME="331"></A> is the class for frames.
+    While most Ion's objects have no graphical presentation, frames basically
+    add to WMPlexes the decorations around client windows 
+    (borders, tabs).
+
+<P>
+</DD>
+<DT><STRONG>WGroup</STRONG></DT>
+<DD><A NAME="332"></A> is the base class for groups.
+    Particular types of groups are workspaces 
+    (WGroupWS<A NAME="333"></A>)
+    and groups of client windows
+    (WGroupCW<A NAME="334"></A>).
+</DD>
+</DL>
+
+<P>
+Classes implemented by the <SPAN  CLASS="textit">mod_tiling</SPAN> module:
+
+<P>
+<DL>
+<DT><STRONG>WTiling</STRONG></DT>
+<DD><A NAME="336"></A> is the class for tilings
+    of frames.
+  
+</DD>
+<DT><STRONG>WSplit</STRONG></DT>
+<DD><A NAME="337"></A> (or, more specifically, classes
+    that inherit it) encode the WTiling tree structure.
+</DD>
+</DL>
+
+<P>
+Classes implemented by the <SPAN  CLASS="textit">mod_query</SPAN> module:
+
+<P>
+<DL>
+<DT><STRONG>WInput</STRONG></DT>
+<DD><A NAME="339"></A> is a virtual base class for the
+    two classes below.
+  
+</DD>
+<DT><STRONG>WEdln</STRONG></DT>
+<DD><A NAME="340"></A> is the class for the ''queries'',
+    the text inputs that usually appear at bottoms of frames and sometimes
+    screens. Queries are the functional equivalent of ''mini buffers'' in
+    many text editors.
+  
+</DD>
+<DT><STRONG>WMessage</STRONG></DT>
+<DD><A NAME="341"></A> implements the boxes for 
+    warning and other messages that Ion may wish to display to the user. 
+    These also usually appear at bottoms of frames.
+</DD>
+</DL>
+
+<P>
+There are also some other ''proxy'' classes that do not refer
+to objects on the screen. The only important one of these for
+basic configuration is WMoveresMode that is used for
+binding callbacks in the move and resize mode.
+
+<P>
+
+<H2><A NAME="SECTION00022000000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION00022100000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
+</H3>
+Each object of type WRegion has a parent and possibly a manager
+associated to it. The parent<A NAME="282"></A> for an object is always a 
+WWindow and for WRegion with an X window (WClientWin,
+WWindow) the parent WWindow is given by the same relation of
+the X windows. For other WRegions the relation is not as clear.
+There is generally very few restrictions other than the above on the
+parent--child relation but the most common is as described in
+Figure <A HREF="#fig:parentship">2</A>.
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="293"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
+Most common parent-child relations</CAPTION>
+<TR><TD><PRE>
+    WRootWins
+     |--&gt;WScreens
+          |--&gt;WGroupWSs
+          |--&gt;WTilings
+          |--&gt;WClientWins in full screen mode
+          |--&gt;WFrames
+               |--&gt;WGroupCWs
+               |--&gt;WClientWins
+               |--&gt;WFrames for transients
+               |--&gt;a possible WEdln or WMessage
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+WRegions have very little control over their children as a parent.
+The manager<A NAME="297"></A> WRegion has much more control over its
+managed WRegions. Managers, for example, handle resize requests,
+focusing and displaying of the managed regions. Indeed the manager--managed
+relationship gives a better picture of the logical ordering of objects on
+the screen. Again, there are generally few limits, but the most common
+hierarchy is given in Figure <A HREF="#fig:managership">3</A>. Note that sometimes
+the parent and manager are the same object and not all objects may have
+a manager (e.g. the dock in the dock module at the time of writing this)
+but all have a parent-a screen if not anything else.
+
+<P>
+
+<H3><A NAME="SECTION00022200000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
+</H3>
+
+<P>
+
+<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="305"></A>
+<TABLE>
+<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
+Most common manager-managed relations</CAPTION>
+<TR><TD><PRE>
+    WRootWins
+     |--&gt;WScreens
+          |--&gt;WGroupCWs for full screen WClientWins
+          |    |--&gt;WClientWins
+          |    |--&gt;WFrames for transients (dialogs)
+          |         |--&gt; WClientWin
+          |--&gt;WGroupWSs for workspaces
+          |    |--&gt;WTiling
+          |    |    |--&gt;possibly a WEdln, WMessage or WMenu
+          |    |    |--&gt;WFrames
+          |    |         |--&gt;WGroupCWs (with contents as above)
+          |    |--&gt;WFrames for floating content
+          |--&gt;WFrames for sticky stuff, such as the scratchpad
+</PRE></TD></TR>
+</TABLE>
+</DIV>
+
+<P>
+Note that a workspace can manage another workspace. This can be
+achieved with the <A HREF="#fn:attach_new"><TT>attach_new</TT></A> function, and allows you to nest
+workspaces as deep as you want.
+
+<P>
+
+<H2><A NAME="SECTION00023000000000000000">
+<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
+</H2>
+
+<P>
+In the standard setup, keeping queries, messages and menus out of
+consideration:
+
+<P>
+
+<UL>
+<LI>The top-level objects that matter are screens and they correspond
+    to physical screens. The class for screens is WScreen.
+</LI>
+<LI>Screens contain (multiplex) groups (WGroup) and other 
+    objects, such as WFrames. Some of these are mutually exclusive
+    to be viewed at a time.
+</LI>
+<LI>Groups of the specific kind WGroupWS often contain a
+    WTiling tiling for tiling frames (WFrame), but 
+    groups may also directly contain floating frames.
+</LI>
+<LI>Frames are the objects with decorations such as tabs and borders.
+    Frames contain (multiplex) among others (groups of) client windows, 
+    to each of which corresponds a tab in the frame's decoration. Only 
+    one client window (or other object) can be shown at a time in each 
+    frame. The class for client windows is WClientWin.
+</LI>
+</UL>
+
+<P>
+<BR><HR><H4>Footnotes</H4>
+<DL>
+<DT><A NAME="foot212">... design</A><A
+ HREF="node2.html#tex2html1"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
+<DD>the author doesn't like such artificial designs
+
+</DD>
+</DL>
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html82"
+  HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html76"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html70"
+  HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html78"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html80"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html83"
+  HREF="node3.html">2 Object system implementation</A>
+<B> Up:</B> <A NAME="tex2html77"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html71"
+  HREF="node1.html">Contents</A>
+ &nbsp; <B>  <A NAME="tex2html79"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html81"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node3.html b/ionnotes/node3.html
new file mode 100644 (file)
index 0000000..4f17c4e
--- /dev/null
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>2 Object system implementation</TITLE>
+<META NAME="description" CONTENT="2 Object system implementation">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node4.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node4.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html101"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html95"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html89"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html97"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html99"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html102"
+  HREF="node4.html">3 The Lua interface</A>
+<B> Up:</B> <A NAME="tex2html96"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html90"
+  HREF="node2.html">1 Class and object</A>
+ &nbsp; <B>  <A NAME="tex2html98"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html100"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00030000000000000000">
+<SPAN CLASS="arabic">2</SPAN> Object system implementation</A>
+</H1>
+
+<P>
+First, to get things clear, what are considered objects here are C
+structures containing a properly initialized <A NAME="428"></A>
+structure defined in <SPAN  CLASS="textit">ioncore/obj.h</SPAN> as the first element (or the
+first element of the structure which is the first element and so on which
+gives rise to inheritance). The WObj structure contains a pointer
+to a WObjDescr<A NAME="430"></A> class type info structure and
+a list of so called ''watches''. The WObjDescr structure simply
+lists the class name, a table of dynamic functions and a pointer to
+deinitialisation function (or ''destructor'').
+
+<P>
+Ion does not do any reference counting, garbage collecting or other
+fancy things related to automatic safe freeing of objects with its
+simplistic object system. Instead special watches (the WWatch
+<A NAME="431"></A> structure) may be used to create safe references to
+objects that might be destroyed during the time the specific pointer is
+needed. When an object is destroyed, its list of watches is processed,
+setting the pointers in the watches to NULL and the watch handlers for
+each watch are called. 
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html101"
+  HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html95"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html89"
+  HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html97"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html99"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html102"
+  HREF="node4.html">3 The Lua interface</A>
+<B> Up:</B> <A NAME="tex2html96"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html90"
+  HREF="node2.html">1 Class and object</A>
+ &nbsp; <B>  <A NAME="tex2html98"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html100"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node4.html b/ionnotes/node4.html
new file mode 100644 (file)
index 0000000..037e8bc
--- /dev/null
@@ -0,0 +1,310 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>3 The Lua interface</TITLE>
+<META NAME="description" CONTENT="3 The Lua interface">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node5.html">
+<LINK REL="previous" HREF="node3.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node5.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html115"
+  HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html109"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html103"
+  HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html111"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html113"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html116"
+  HREF="node5.html">4 Miscellaneous design notes</A>
+<B> Up:</B> <A NAME="tex2html110"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html104"
+  HREF="node3.html">2 Object system implementation</A>
+ &nbsp; <B>  <A NAME="tex2html112"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html114"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html117"
+  HREF="node4.html#SECTION00041000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Supported types</A>
+<LI><A NAME="tex2html118"
+  HREF="node4.html#SECTION00042000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Exporting functions</A>
+<LI><A NAME="tex2html119"
+  HREF="node4.html#SECTION00043000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Calling Lua functions and code</A>
+<LI><A NAME="tex2html120"
+  HREF="node4.html#SECTION00044000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous notes</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00040000000000000000">
+<SPAN CLASS="arabic">3</SPAN> The Lua interface</A>
+</H1>
+
+<P>
+This section finally describes the implementation details and how modules
+should us the Lua interface. First, in section <A HREF="#sec:supptypes">3.1</A>
+we look at types supported by the interface, how objects are passed to Lua
+code and how Lua tables should be accessed from Ion and modules. In section
+<A HREF="#sec:exporting">3.2</A> the methods for exporting functions and how they
+are called from Lua are explained and in section <A HREF="#sec:calling">3.3</A> the
+method for calling Lua functions is explained.
+
+<P>
+
+<H2><A NAME="SECTION00041000000000000000"></A>
+<A NAME="sec:supptypes"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Supported types
+</H2>
+
+<P>
+The following types are supported in passing parameters between the
+C side of Ion and Lua:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="RIGHT">Identifier
+ character</TD>
+<TD ALIGN="LEFT">C type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">i</TD>
+<TD ALIGN="LEFT">int</TD>
+<TD ALIGN="LEFT">Integer</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">s</TD>
+<TD ALIGN="LEFT">char*</TD>
+<TD ALIGN="LEFT">String</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">S</TD>
+<TD ALIGN="LEFT">const char*</TD>
+<TD ALIGN="LEFT">Constant string</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">d</TD>
+<TD ALIGN="LEFT">double</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">b</TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">t</TD>
+<TD ALIGN="LEFT">ExtlTab<A NAME="521"></A></TD>
+<TD ALIGN="LEFT">Reference to Lua table</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">f</TD>
+<TD ALIGN="LEFT">ExltFn<A NAME="522"></A></TD>
+<TD ALIGN="LEFT">Reference to Lua function.</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">o</TD>
+<TD ALIGN="LEFT">Any WObj*</TD>
+<TD ALIGN="LEFT">&nbsp;</TD>
+</TR>
+</TABLE>
+
+<P>
+The difference between identifiers 's' and 'S' is that constant
+strings as return values are not free'd by the level 1 call handler
+(see below) after passing to Lua (<TT>lua_pushstring</TT> always makes a
+copy) unlike normal strings. String parameters are always assumed to be
+the property of the caller and thus implicitly const.
+
+<P>
+Likewise, if a reference to 't' or 'f' is wished to be stored
+beyond the lifetime of a function receiving such as an argument, a new
+reference should be created with <TT>extl_ref_table</TT>/<TT>fn</TT>.
+References can be free'd with
+<TT>extl_unref_table</TT>/<TT>fn</TT>. References gotten as return values with
+the <TT>extl_table_get</TT> (how these work should be self-explanatory!)
+functions are property of the caller and should be unreferenced with the
+above-mentioned functions when no longer needed.
+The functions <TT>extl_fn</TT>/<TT>table_none()</TT>
+return the equivalent of NULL.
+
+<P>
+WObjs are passed to Lua code with WWatch userdatas pointing to
+them so the objects can be safely deleted although Lua code might still be
+referencing them. (This is why SWIG or tolua would not have helped in
+creating the interface: extra wrappers for each function would still
+have been needed to nicely integrate into Ion's object system. Even in
+the case that Ion was written in C++ this would be so unless extra bloat
+adding pointer-like objects were used everywhere instead of pointers.)
+It may be sometimes necessary check in Lua code that a value known to
+be an Ion WObj is of certain type. This can be accomplished with
+<TT>obj_is(obj, "typename")</TT>. <TT>obj_typename(obj)</TT> returns type
+name for a WObj.
+
+<P>
+
+<H2><A NAME="SECTION00042000000000000000"></A>
+<A NAME="sec:exporting"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Exporting functions
+</H2>
+
+<P>
+Exported functions (those available to the extension language) are
+defined by placing <TT>EXTL_EXPORT</TT> before the function implementation
+in the C source. The script mkexports.pl is then used to automatically
+generate <SPAN  CLASS="textit">exports.c</SPAN> from the source files if
+<TT>MAKE_EXPORTS=modulename</TT>
+is specified in the Makefile. All pointers with type beginning with a 'W'
+are assumed to be pointers to something inheriting WObj. In
+addition to a table of exported functions and second level call handlers
+for these, <SPAN  CLASS="textit">exports.c</SPAN> will contain two functions
+<TT>module_register_exports()</TT> and
+<TT>module_unregister_exports()</TT> that should then be called in module
+initialisation and deinitialisation code.
+
+<P>
+You've seen the terms level 1 and 2 call handler mentioned above. 
+<A NAME="491"></A>
+The Lua support code uses two so called call handlers to convert and check
+the types of parameters passed from Lua to C and back to Lua. The first
+one of these call handlers is the same for all exported functions and
+indeed lua sees all exported as the same C function (the L1 call handler)
+but with different upvalues passing a structure describing the actual
+function and the second level call handler. The L1 call handler checks
+that the parameters received from Lua match a template given as a string
+of the identifier characters defined above. If everything checks out ok,
+the parameters are then put in an array of C unions that can contain
+anyof these known types and the L2 call handler is called.
+
+<P>
+The L2 call handler (which is automatically generated by the mkexports.pl
+script) for each exported function checks that the passed WObjs
+are of the more refined type required by the function and then calls the
+actual function. While the WObj checking could be done in the L1 handler
+too, the L2 call handlers are needed because we may not know how the target
+platform passes each parameter type to the called function. Thefore we
+must let the C compiler generate the code to convert from a simple and
+known enough parameter passing method (the unions) to the actual
+parameter passing method. When the called function returns everything
+is done in reverse order for return values (only one return value is
+supported by the generated L2 call handlers).
+
+<P>
+
+<H2><A NAME="SECTION00043000000000000000"></A>
+<A NAME="sec:calling"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Calling Lua functions and code
+</H2>
+
+<P>
+The functions
+<TT>extl_call</TT><A NAME="515"></A>,
+<TT>extl_call_named</TT><A NAME="516"></A>,
+<TT>extl_dofile</TT><A NAME="517"></A> and
+<TT>extl_dostring</TT><A NAME="518"></A>
+call a referenced function (ExtlFn), named function, execute a
+string and a file, respectively. The rest of the parameters for all these
+functions are similar. The 'spec' argument is a string of identifier
+characters (see above) describing the parameters to be passed. These
+parameters follow after 'rspec'. For dofile and dostring these parameters
+are passed in the global table arg (same as used for program command
+lien parameters) and for functions as you might expect. The parameter
+'rspec' is a similar description of return values. Pointers to variables
+that should be set to the return values follow after the input values.
+The return value of all these functions tells if the call and parameter
+passing succeeded or not.
+
+<P>
+Sometimes it is necessary to block calls to all but a limited set of
+Ion functions. This can be accomplished with
+<TT>extl_set_safelist</TT><A NAME="519"></A>.
+The parameter to this function is a NULL-terminated array of strings
+and the return value is a similar old safelist.
+The call <TT>extl_set_safelist(NULL)</TT> removes any safelist and allows
+calls to all exported functions.
+
+<P>
+
+<H2><A NAME="SECTION00044000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous notes</A>
+</H2>
+
+<P>
+Configuration files should be read as before with the function
+<TT>read_config_for</TT><A NAME="520"></A>
+except that the list of known options is no longer present.
+
+<P>
+Winprops are now stored in Lua tables and can contain arbitrary
+properties. The 'proptab' entry in each WClientWin is a reference
+to a winprop table or <TT>extl_table_none()</TT> if such does not exist
+and properties may be read with the <TT>extl_table_gets</TT> functions.
+(It is perfectly legal to pass <TT>extl_table_none()</TT> references to
+<TT>extl_table_get*</TT>.)
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html115"
+  HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html109"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html103"
+  HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html111"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html113"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html116"
+  HREF="node5.html">4 Miscellaneous design notes</A>
+<B> Up:</B> <A NAME="tex2html110"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html104"
+  HREF="node3.html">2 Object system implementation</A>
+ &nbsp; <B>  <A NAME="tex2html112"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html114"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node5.html b/ionnotes/node5.html
new file mode 100644 (file)
index 0000000..51c46f8
--- /dev/null
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>4 Miscellaneous design notes</TITLE>
+<META NAME="description" CONTENT="4 Miscellaneous design notes">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node6.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node6.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html133"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html127"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html121"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html129"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html131"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html134"
+  HREF="node6.html">5 C coding style</A>
+<B> Up:</B> <A NAME="tex2html128"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html122"
+  HREF="node4.html">3 The Lua interface</A>
+ &nbsp; <B>  <A NAME="tex2html130"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html132"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html135"
+  HREF="node5.html#SECTION00051000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Destroying WObj:s</A>
+<LI><A NAME="tex2html136"
+  HREF="node5.html#SECTION00052000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> The types <TT>char*</TT> and <TT>const char*</TT> as function
+  parameters and return values</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00050000000000000000">
+<SPAN CLASS="arabic">4</SPAN> Miscellaneous design notes</A>
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00051000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Destroying WObj:s</A>
+</H2>
+
+<P>
+To keep Ion's code as simple as possible yet safe, there are restrictions
+when the WObj
+<TT>destroy_obj</TT><A NAME="619"></A>
+function that calls watches, the deinit routine and frees memory may
+be called directly. In all other cases the 
+<TT>defer_destroy</TT><A NAME="620"></A>
+function should be used to defer the call of <TT>destroy_obj</TT> until
+Ioncore returns to its main event loop. 
+
+<P>
+Calling the <TT>destroy_obj</TT> function directly is allowed in the
+following cases:
+
+<UL>
+<LI>In the deinit handler for another object. Usually managed objects
+      are destroyed this way.
+</LI>
+<LI>The object was created during the current call to the function
+      that wants to get rid of the object. This is the case, for example,
+      when the function created a frame to manage some other object but for
+      some reason failed to reparent the object to this frame.
+</LI>
+<LI>In a deferred action handler set with
+      <TT>defer_action</TT><A NAME="621"></A>.
+      Like deferred destroys, other deferred actions are called when
+      Ioncore has returned to the main loop.
+</LI>
+<LI>You are absolute sure that C code outside your code has no
+      references to the object.
+</LI>
+</UL>
+
+<P>
+If there are no serious side effects from deferring destroying the
+object or you're unsure whether it is safe to destroy the object
+immediately, use <TT>defer_destroy</TT>.
+
+<P>
+
+<H2><A NAME="SECTION00052000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> The types <TT>char*</TT> and <TT>const char*</TT> as function
+  parameters and return values</A>
+</H2>
+
+<P>
+The following rules should apply to using strings as return values and
+parameters to functions. 
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Return value</TD>
+<TD ALIGN="LEFT">Parameter</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>const char*</TT></TD>
+<TD ALIGN="LEFT">The string is owned by the called function
+       and the caller is only quaranteed short-term read access to the
+       string.</TD>
+<TD ALIGN="LEFT">The called function may only read the string during its execution.
+       For further reference a copy must be made.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>char*</TT></TD>
+<TD ALIGN="LEFT">The string is the caller's responsibility and it
+       <SPAN  CLASS="textit">must</SPAN> free it when no longer needed.</TD>
+<TD ALIGN="LEFT">The called function may modify the string but the ''owner'' of
+       the string is case-dependant.</TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html133"
+  HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html127"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html121"
+  HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html129"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html131"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html134"
+  HREF="node6.html">5 C coding style</A>
+<B> Up:</B> <A NAME="tex2html128"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html122"
+  HREF="node4.html">3 The Lua interface</A>
+ &nbsp; <B>  <A NAME="tex2html130"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html132"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node6.html b/ionnotes/node6.html
new file mode 100644 (file)
index 0000000..8c20249
--- /dev/null
@@ -0,0 +1,285 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>5 C coding style</TITLE>
+<META NAME="description" CONTENT="5 C coding style">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node7.html">
+<LINK REL="previous" HREF="node5.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node7.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html149"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html143"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html137"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html145"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html147"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html150"
+  HREF="node7.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html144"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html138"
+  HREF="node5.html">4 Miscellaneous design notes</A>
+ &nbsp; <B>  <A NAME="tex2html146"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html148"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html151"
+  HREF="node6.html#SECTION00061000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Whitespace</A>
+<LI><A NAME="tex2html152"
+  HREF="node6.html#SECTION00062000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Braces</A>
+<LI><A NAME="tex2html153"
+  HREF="node6.html#SECTION00063000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Names</A>
+<LI><A NAME="tex2html154"
+  HREF="node6.html#SECTION00064000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00060000000000000000">
+<SPAN CLASS="arabic">5</SPAN> C coding style</A>
+</H1>
+
+<P>
+If you want to submit patches to Ion, you MUST follow my coding 
+style, even if you think it is the root of all evil. We don't want
+the code to be an incomprehensible mess of styles and I have better
+things to do than fix other people's style to match mine. The style
+should be obvious by studying the source, but here's a list of some
+things to take note of.
+
+<P>
+
+<H2><A NAME="SECTION00061000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Whitespace</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>Indentations of 4 with <SPAN  CLASS="textit">tab size=4</SPAN>. 
+
+<P>
+</LI>
+<LI>No extra spaces between operators, delimiters etc. except
+    
+<UL>
+<LI>around logical and, or (<TT>&amp;&amp;</TT>, <TT>||</TT>)
+</LI>
+<LI>around the conditional <TT>a ? b : c</TT>
+</LI>
+<LI>after commas and semicolons
+    
+</LI>
+</UL>  
+    In my opinion this helps pointing out arithmetic or other
+    expressions within logical expressions or parameter lists.
+
+<P>
+</LI>
+<LI>All kinds of labels are out-tended to the level of the higher
+    level block. For example:
+
+<P>
+<PRE>    
+void foo()
+{
+again:
+    switch(asdf){
+    case 1:
+        ...
+        break;
+    default:
+        ...
+        break;
+    }
+}
+</PRE>
+</LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00062000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Braces</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>Opening brace is at the end of the line, except in function
+    bodies, where it is at the beginning of the line following
+    the definition.
+
+<P>
+</LI>
+<LI>Never put the body of a control statement on the same line
+    with the statement (e.g. <code>if(foo){ bar() }</code>).
+
+<P>
+For example, the block
+<PRE>    
+void foo(int a, int b)
+{
+    if(a==b &amp;&amp; c+d==e){
+        ...
+    }
+}
+</PRE>
+
+<P>
+has correct style while the block
+
+<P>
+<PRE>   
+void foo(int a,int b) {
+    if (a == b &amp;&amp; c + d == e) {
+        ...
+    }
+}
+</PRE>
+
+<P>
+does not.
+
+<P>
+</LI>
+<LI>The <TT>else</TT> keyword follows immediately after the closing brace of
+    previous <TT>if</TT>, if any. (This might change so I don't care if you put
+    it on the next line.)
+
+<P>
+</LI>
+<LI>I have used the convention that control statement bodies containing
+    a single statement do not need braces around the block if, in case of
+    the <TT>if</TT> all the blocks in  <TT>if ...  else if ... else</TT>
+    contain just one statement. If you want to, just use braces in every 
+    case.
+</LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00063000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Names</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>Function and variable names only have lower case letters. Type
+    names are in mixed case while constants and macros (<TT>#define</TT>s)
+    are in upper case letters.
+</LI>
+</UL>
+
+<P>
+
+<H2><A NAME="SECTION00064000000000000000">
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
+</H2>
+
+<P>
+
+<UL>
+<LI>In the definition of a pointer variable, the asterisk is attached
+    to the variable name: <TT>char *s;</TT>. (One could claim this an 
+    exception to the second rule.)
+
+<P>
+</LI>
+<LI>You might optionally want to use Jed's foldings to group blocks
+    of related code in a file to keep it organized:
+
+<P>
+<PRE>    
+/*{{{ Many related functions */
+       
+void code()
+{
+    ...        
+}
+
+...
+
+/*}}}*/
+</PRE>
+</LI>
+</UL>
+
+<P>
+I think that's mostly it. Study the source when in doubt.
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html149"
+  HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html143"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html137"
+  HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html145"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html147"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html150"
+  HREF="node7.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html144"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html138"
+  HREF="node5.html">4 Miscellaneous design notes</A>
+ &nbsp; <B>  <A NAME="tex2html146"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html148"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node7.html b/ionnotes/node7.html
new file mode 100644 (file)
index 0000000..7e36403
--- /dev/null
@@ -0,0 +1,597 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>A. The GNU General Public License</TITLE>
+<META NAME="description" CONTENT="A. The GNU General Public License">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node8.html">
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html167"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html161"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html155"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html163"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html165"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html168"
+  HREF="node8.html">Index</A>
+<B> Up:</B> <A NAME="tex2html162"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html156"
+  HREF="node6.html">5 C coding style</A>
+ &nbsp; <B>  <A NAME="tex2html164"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html166"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html169"
+  HREF="node7.html#SECTION00071000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00070000000000000000">
+A. The GNU General Public License</A>
+</H1>
+
+<P>
+<DIV ALIGN="CENTER">
+</DIV>
+<P>
+<DIV ALIGN="CENTER">Version 2, June 1991
+</DIV>
+<P>
+<DIV ALIGN="CENTER">Copyright &#169; 1989, 1991 Free Software Foundation, Inc.
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+<P><P>
+<BR>
+<DIV ALIGN="CENTER"></DIV>
+<P>
+<DIV ALIGN="CENTER">59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+</DIV>
+<P>
+<DIV ALIGN="CENTER"></DIV>
+<P><P>
+<BR>
+<DIV ALIGN="CENTER"></DIV>
+<P>
+<DIV ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+
+</DIV>
+
+<P>
+<DIV ALIGN="CENTER">
+<B><BIG CLASS="LARGE">Preamble</BIG></B>
+
+</DIV>
+
+<P>
+The licenses for most software are designed to take away your freedom to
+share and change it.  By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.  This General Public
+License applies to most of the Free Software Foundation's software and to
+any other program whose authors commit to using it.  (Some other Free
+Software Foundation software is covered by the GNU Library General Public
+License instead.)  You can apply it to your programs, too.
+
+<P>
+When we speak of free software, we are referring to freedom, not price.
+Our General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service
+if you wish), that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free programs;
+and that you know you can do these things.
+
+<P>
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights.  These
+restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+<P>
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have.  You
+must make sure that they, too, receive or can get the source code.  And
+you must show them these terms so they know their rights.
+
+<P>
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+<P>
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If
+the software is modified by someone else and passed on, we want its
+recipients to know that what they have is not the original, so that any
+problems introduced by others will not reflect on the original authors'
+reputations.
+
+<P>
+Finally, any free program is threatened constantly by software patents.
+We wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program
+proprietary.  To prevent this, we have made it clear that any patent must
+be licensed for everyone's free use or not licensed at all.
+
+<P>
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS </SMALL>F<SMALL>OR </SMALL>C<SMALL>OPYING, </SMALL>D<SMALL>ISTRIBUTION AND
+  </SMALL>M<SMALL>ODIFICATION</SMALL></BIG>
+
+</DIV>
+
+<P>
+
+<OL>
+<LI><P>
+This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the
+terms of this General Public License.  The ``Program'', below, refers to
+any such program or work, and a ``work based on the Program'' means either
+the Program or any derivative work under copyright law: that is to say, a
+work containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language.  (Hereinafter,
+translation is included without limitation in the term ``modification''.)
+Each licensee is addressed as ``you''.
+
+<P>
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+</LI>
+<LI>You may copy and distribute verbatim copies of the Program's source
+  code as you receive it, in any medium, provided that you conspicuously
+  and appropriately publish on each copy an appropriate copyright notice
+  and disclaimer of warranty; keep intact all the notices that refer to
+  this License and to the absence of any warranty; and give any other
+  recipients of the Program a copy of this License along with the Program.
+
+<P>
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+<P>
+</LI>
+<LI><P>
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+<P>
+
+<OL>
+<LI><P>
+You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+<P>
+</LI>
+<LI><P>
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+<P>
+</LI>
+<LI>If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License.  (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+
+<P>
+</LI>
+</OL>
+
+<P>
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+<P>
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+<P>
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+</LI>
+<LI>You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+<P>
+
+<OL>
+<LI><P>
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+</LI>
+<LI><P>
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+<P>
+</LI>
+<LI><P>
+Accompany it with the information you received as to the offer
+to distribute corresponding source code.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+
+<P>
+</LI>
+</OL>
+
+<P>
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+<P>
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+<P>
+</LI>
+<LI>You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+</LI>
+<LI>You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+</LI>
+<LI>Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+</LI>
+<LI>If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+<P>
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+<P>
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+<P>
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+</LI>
+<LI>If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+</LI>
+<LI>The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+<P>
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+</LI>
+<LI>If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">
+N<SMALL>O </SMALL>W<SMALL>ARRANTY
+</SMALL></BIG>
+
+</DIV>
+
+<P>
+</LI>
+<LI>B<SMALL>ECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  </SMALL>E<SMALL>XCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  </SMALL>T<SMALL>HE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  </SMALL>S<SMALL>HOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.</SMALL>
+
+<P>
+</LI>
+<LI>I<SMALL>N NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.</SMALL>
+
+<P>
+</LI>
+</OL>
+
+<P>
+<DIV ALIGN="CENTER">
+<BIG CLASS="XLARGE">E<SMALL>ND OF </SMALL>T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS</SMALL></BIG>
+
+</DIV>
+
+<P>
+
+<P>
+
+<H2><A NAME="SECTION00071000000000000000">
+Appendix: How to Apply These Terms to Your New Programs</A>
+</H2>
+
+<P>
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+<P>
+To do so, attach the following notices to the program.  It is safest to
+  attach them to the start of each source file to most effectively convey
+  the exclusion of warranty; and each file should have at least the
+  ``copyright'' line and a pointer to where the full notice is found.
+
+<P>
+<BLOCKQUOTE>
+one line to give the program's name and a brief idea of what it does. 
+<BR>
+Copyright (C) yyyy  name of author 
+<BR></BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+</BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+</BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+</BLOCKQUOTE>
+
+<P>
+Also add information on how to contact you by electronic and paper mail.
+
+<P>
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+<P>
+<BLOCKQUOTE>
+Gnomovision version 69, Copyright (C) yyyy  name of author 
+<BR>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 
+<BR>
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+
+</BLOCKQUOTE>
+
+<P>
+The hypothetical commands <TT>show w</TT> and <TT>show c</TT> should show the
+appropriate parts of the General Public License.  Of course, the commands
+you use may be called something other than <TT>show w</TT> and <TT>show c</TT>;
+they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+<P>
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary.  Here is a sample; alter the names:
+
+<P>
+<BLOCKQUOTE>
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program 
+<BR>`Gnomovision' (which makes passes at compilers) written by James Hacker. 
+<BR></BLOCKQUOTE>
+<P>
+<BLOCKQUOTE>signature of Ty Coon, 1 April 1989 
+<BR>
+Ty Coon, President of Vice
+
+</BLOCKQUOTE>
+
+<P>
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications
+with the library.  If this is what you want to do, use the GNU Library
+General Public License instead of this License.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html167"
+  HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html161"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html155"
+  HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html163"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html165"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Next:</B> <A NAME="tex2html168"
+  HREF="node8.html">Index</A>
+<B> Up:</B> <A NAME="tex2html162"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html156"
+  HREF="node6.html">5 C coding style</A>
+ &nbsp; <B>  <A NAME="tex2html164"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html166"
+  HREF="node8.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node8.html b/ionnotes/node8.html
new file mode 100644 (file)
index 0000000..0ec574a
--- /dev/null
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Index</TITLE>
+<META NAME="description" CONTENT="Index">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="next" HREF="node9.html">
+<LINK REL="previous" HREF="node7.html">
+<LINK REL="up" HREF="ionnotes.html">
+<LINK REL="next" HREF="node9.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html180"
+  HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
+<A NAME="tex2html176"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html170"
+  HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html178"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>  
+<BR>
+<B> Next:</B> <A NAME="tex2html181"
+  HREF="node9.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html177"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html171"
+  HREF="node7.html">A. The GNU General</A>
+ &nbsp; <B>  <A NAME="tex2html179"
+  HREF="node1.html">Contents</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION00080000000000000000">
+Index</A>
+</H2><HR><DL>
+<DD><STRONG>call handler</STRONG>
+ : <A HREF="node4.html#491"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG><TT>defer_action</TT></STRONG>
+ : <A HREF="node5.html#621"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>defer_destroy</TT></STRONG>
+ : <A HREF="node5.html#620"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>destroy_obj</TT></STRONG>
+ : <A HREF="node5.html#619"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>extl_call</TT></STRONG>
+ : <A HREF="node4.html#515"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>extl_call_named</TT></STRONG>
+ : <A HREF="node4.html#516"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>extl_dofile</TT></STRONG>
+ : <A HREF="node4.html#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>extl_dostring</TT></STRONG>
+ : <A HREF="node4.html#518"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG><TT>extl_set_safelist</TT></STRONG>
+ : <A HREF="node4.html#519"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+<DD><STRONG>ExtlFn</STRONG>
+ : <A HREF="node4.html#522"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>ExtlTab</STRONG>
+ : <A HREF="node4.html#521"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>manager</STRONG>
+ : <A HREF="node2.html#297"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>Obj</STRONG>
+ : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>parent</STRONG>
+ : <A HREF="node2.html#282"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>read_config_for</TT></STRONG>
+ : <A HREF="node4.html#520"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+<DD><STRONG>root window</STRONG>
+ : <A HREF="node2.html#242"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>screen</STRONG><DL>
+<DD><STRONG>physical</STRONG> : <A HREF="node2.html#244"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>X</STRONG> : <A HREF="node2.html#243"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+</DL>
+<DD><STRONG>WClientWin</STRONG>
+ : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WEdln</STRONG>
+ : <A HREF="node2.html#340"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WFrame</STRONG>
+ : <A HREF="node2.html#331"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroup</STRONG>
+ : <A HREF="node2.html#332"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroupCW</STRONG>
+ : <A HREF="node2.html#334"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroupWS</STRONG>
+ : <A HREF="node2.html#333"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WInput</STRONG>
+ : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WMessage</STRONG>
+ : <A HREF="node2.html#341"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WObj</STRONG>
+ : <A HREF="node3.html#428"><SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>WObjDescr</STRONG>
+ : <A HREF="node3.html#430"><SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>WRegion</STRONG>
+ : <A HREF="node2.html#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WRootWin</STRONG>
+ : <A HREF="node2.html#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WScreen</STRONG>
+ : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WSplit</STRONG>
+ : <A HREF="node2.html#337"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WTiling</STRONG>
+ : <A HREF="node2.html#336"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WWatch</STRONG>
+ : <A HREF="node3.html#431"><SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>WWindow</STRONG>
+ : <A HREF="node2.html#328"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>Xinerama</STRONG>
+ : <A HREF="node2.html#245"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+
+</DL>
+
+<P>
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionnotes/node9.html b/ionnotes/node9.html
new file mode 100644 (file)
index 0000000..a4ce07f
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="ionnotes">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionnotes.css">
+
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="ionnotes.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png"> 
+<A NAME="tex2html186"
+  HREF="ionnotes.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
+<A NAME="tex2html182"
+  HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
+<A NAME="tex2html188"
+  HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
+<A NAME="tex2html190"
+  HREF="node8.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
+<BR>
+<B> Up:</B> <A NAME="tex2html187"
+  HREF="ionnotes.html">Ion: Notes for the</A>
+<B> Previous:</B> <A NAME="tex2html183"
+  HREF="node8.html">Index</A>
+ &nbsp; <B>  <A NAME="tex2html189"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <B>  <A NAME="tex2html191"
+  HREF="node8.html">Index</A></B> 
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00090000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>Ion: Notes for the module and patch writer</STRONG><P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
+<P>
+Copyright &#169; 1993, 1994, 1995, 1996,
+Nikos Drakos, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes</TT>
+<P>
+The translation was initiated by tuomov on 2006-12-23
+<BR><HR>
+
+</BODY>
+</HTML>
diff --git a/ionnotes/prev.png b/ionnotes/prev.png
new file mode 100644 (file)
index 0000000..e60b8b4
Binary files /dev/null and b/ionnotes/prev.png differ
diff --git a/ionnotes/prev_g.png b/ionnotes/prev_g.png
new file mode 100644 (file)
index 0000000..476d956
Binary files /dev/null and b/ionnotes/prev_g.png differ
diff --git a/ionnotes/up.png b/ionnotes/up.png
new file mode 100644 (file)
index 0000000..3937e16
Binary files /dev/null and b/ionnotes/up.png differ
diff --git a/luaif.tex b/luaif.tex
new file mode 100644 (file)
index 0000000..76789a7
--- /dev/null
+++ b/luaif.tex
@@ -0,0 +1,148 @@
+
+\section{The Lua interface}
+
+This section finally describes the implementation details and how modules
+should us the Lua interface. First, in section \ref{sec:supptypes}
+we look at types supported by the interface, how objects are passed to Lua
+code and how Lua tables should be accessed from Ion and modules. In section
+\ref{sec:exporting} the methods for exporting functions and how they
+are called from Lua are explained and in section \ref{sec:calling} the
+method for calling Lua functions is explained.
+
+\subsection{Supported types}
+\label{sec:supptypes}
+
+The following types are supported in passing parameters between the
+C side of Ion and Lua:
+
+\begin{tabular}{rll}
+\hline
+ Identifier
+ character &   C type &        Description\\
+\hline
+       \spec{i} & \type{int} & Integer\\
+       \spec{s} & \type{char*} &       String\\
+       \spec{S} & \type{const char*} & Constant string\\
+       \spec{d} & \type{double} &\\
+       \spec{b} & \type{bool} &\\
+       \spec{t} & \type{ExtlTab}\indextype{ExtlTab} &
+                       Reference to Lua table\\
+       \spec{f} & \type{ExltFn}\indextype{ExtlFn} &
+                       Reference to Lua function.\\
+       \spec{o} & Any \type{WObj*} &\\
+\end{tabular}
+
+The difference between identifiers '\spec{s}' and '\spec{S}' is that constant
+strings as return values are not free'd by the level 1 call handler
+(see below) after passing to Lua (\code{lua_pushstring} always makes a
+copy) unlike normal strings. String parameters are always assumed to be
+the property of the caller and thus implicitly const.
+
+Likewise, if a reference to '\spec{t}' or '\spec{f}' is wished to be stored
+beyond the lifetime of a function receiving such as an argument, a new
+reference should be created with \code{extl_ref_table}/\code{fn}.
+References can be free'd with
+\code{extl_unref_table}/\code{fn}. References gotten as return values with
+the \code{extl_table_get} (how these work should be self-explanatory!)
+functions are property of the caller and should be unreferenced with the
+above-mentioned functions when no longer needed.
+The functions \code{extl_fn}/\code{table_none()}
+return the equivalent of NULL.
+
+\type{WObj}s are passed to Lua code with WWatch userdatas pointing to
+them so the objects can be safely deleted although Lua code might still be
+referencing them. (This is why SWIG or tolua would not have helped in
+creating the interface: extra wrappers for each function would still
+have been needed to nicely integrate into Ion's object system. Even in
+the case that Ion was written in C++ this would be so unless extra bloat
+adding pointer-like objects were used everywhere instead of pointers.)
+It may be sometimes necessary check in Lua code that a value known to
+be an Ion \type{WObj} is of certain type. This can be accomplished with
+\code{obj_is(obj, "typename")}. \code{obj_typename(obj)} returns type
+name for a \type{WObj}.
+
+
+\subsection{Exporting functions}
+\label{sec:exporting}
+
+Exported functions (those available to the extension language) are
+defined by placing \code{EXTL_EXPORT} before the function implementation
+in the C source. The script mkexports.pl is then used to automatically
+generate \file{exports.c} from the source files if
+\code{MAKE_EXPORTS=modulename}
+is specified in the Makefile. All pointers with type beginning with a 'W'
+are assumed to be pointers to something inheriting \type{WObj}. In
+addition to a table of exported functions and second level call handlers
+for these, \file{exports.c} will contain two functions
+\code{module_register_exports()} and
+\code{module_unregister_exports()} that should then be called in module
+initialisation and deinitialisation code.
+
+You've seen the terms level 1 and 2 call handler mentioned above. 
+\index{call handler}
+The Lua support code uses two so called call handlers to convert and check
+the types of parameters passed from Lua to C and back to Lua. The first
+one of these call handlers is the same for all exported functions and
+indeed lua sees all exported as the same C function (the L1 call handler)
+but with different upvalues passing a structure describing the actual
+function and the second level call handler. The L1 call handler checks
+that the parameters received from Lua match a template given as a string
+of the identifier characters defined above. If everything checks out ok,
+the parameters are then put in an array of C unions that can contain
+anyof these known types and the L2 call handler is called.
+
+The L2 call handler (which is automatically generated by the mkexports.pl
+script) for each exported function checks that the passed \type{WObj}s
+are of the more refined type required by the function and then calls the
+actual function. While the WObj checking could be done in the L1 handler
+too, the L2 call handlers are needed because we may not know how the target
+platform passes each parameter type to the called function. Thefore we
+must let the C compiler generate the code to convert from a simple and
+known enough parameter passing method (the unions) to the actual
+parameter passing method. When the called function returns everything
+is done in reverse order for return values (only one return value is
+supported by the generated L2 call handlers).
+
+
+\subsection{Calling Lua functions and code}
+\label{sec:calling}
+
+The functions
+\code{extl_call}\index{extl-call@\code{extl_call}},
+\code{extl_call_named}\index{extl-call-named@\code{extl_call_named}},
+\code{extl_dofile}\index{extl-dofile@\code{extl_dofile}} and
+\code{extl_dostring}\index{extl-dostring@\code{extl_dostring}}
+call a referenced function (\type{ExtlFn}), named function, execute a
+string and a file, respectively. The rest of the parameters for all these
+functions are similar. The 'spec' argument is a string of identifier
+characters (see above) describing the parameters to be passed. These
+parameters follow after 'rspec'. For dofile and dostring these parameters
+are passed in the global table arg (same as used for program command
+lien parameters) and for functions as you might expect. The parameter
+'rspec' is a similar description of return values. Pointers to variables
+that should be set to the return values follow after the input values.
+The return value of all these functions tells if the call and parameter
+passing succeeded or not.
+
+Sometimes it is necessary to block calls to all but a limited set of
+Ion functions. This can be accomplished with
+\code{extl_set_safelist}\index{extl-set-safelist@\code{extl_set_safelist}}.
+The parameter to this function is a NULL-terminated array of strings
+and the return value is a similar old safelist.
+The call \code{extl_set_safelist(NULL)} removes any safelist and allows
+calls to all exported functions.
+
+
+\subsection{Miscellaneous notes}
+
+Configuration files should be read as before with the function
+\code{read_config_for}\index{read-config-for@\code{read_config_for}}
+except that the list of known options is no longer present.
+
+Winprops are now stored in Lua tables and can contain arbitrary
+properties. The 'proptab' entry in each \type{WClientWin} is a reference
+to a winprop table or \code{extl_table_none()} if such does not exist
+and properties may be read with the \code{extl_table_gets} functions.
+(It is perfectly legal to pass \code{extl_table_none()} references to
+\code{extl_table_get*}.)
+
diff --git a/macros.tex b/macros.tex
new file mode 100644 (file)
index 0000000..0e172d3
--- /dev/null
@@ -0,0 +1,151 @@
+\usepackage{babel}
+\usepackage[latin1]{inputenc}
+\usepackage[dvipdfm]{hyperref}
+\usepackage{ae}
+\usepackage{url}
+\usepackage{html}
+%\usepackage{graphicx}
+%\usepackage{color}
+\usepackage{makeidx}
+\usepackage{tabularx}
+\usepackage{textcomp}
+\usepackage[nottoc]{tocbibind}
+\usepackage{enumerate} % GNU FDL needs this
+\usepackage[a4paper]{geometry}
+\usepackage{calc}
+
+% URL settings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\urlstyle{rm}
+\newcommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}}
+
+% listings package
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%begin{latexonly}
+\usepackage{listings}
+
+\lstset{
+  extendedchars=true,
+  breaklines=true,
+  basicstyle=\tt,
+  alsoletter={",},
+  alsoother={\_},
+}
+%end{latexonly}
+
+% Some markup
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\note}[1]{\color{red}**#1**}
+\newcommand{\file}[1]{\emph{#1}}
+\newcommand{\type}[1]{#1}
+\newcommand{\spec}[1]{#1}
+\newcommand{\indextype}[1]{\index{#1@\type{#1}}}
+
+%begin{latexonly}
+\newcommand{\key}[1]{\mbox{\textbf{#1}}}
+\newcommand{\code}[1]{\lstinline!#1!}
+\newcommand{\var}[1]{\lstinline!#1!}
+\newcommand{\command}[1]{\lstinline!#1!}
+
+\newcommand{\hyperlabel}[1]{\hypertarget{#1}{}\label{#1}}
+\newcommand{\fnrefx}[2]{\hyperlink{fn:#1.#2}{\code{#2}}}
+\newcommand{\fnref}[1]{\hyperlink{fn:#1}{\code{#1}}}
+\newcommand{\myhref}[2]{\hyperlink{#1}{#2}}
+
+%end{latexonly}
+\begin{htmlonly}
+    
+\newcommand{\key}[1]{\textbf{#1}}
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\var}[1]{\texttt{#1}}
+\newcommand{\command}[1]{\texttt{#1}}
+
+\newcommand{\hyperlabel}[1]{\label{#1}}
+\newcommand{\fnref}[1]{\htmlref{\texttt{#1}}{fn:#1}}
+\newcommand{\fnrefx}[2]{\htmlref{\texttt{#2}}{fn:#1.#2}}
+\newcommand{\myhref}[2]{\htmlref{#2}{#1}}
+
+\end{htmlonly}
+
+\newcommand{\tabhead}[1]{\hline #1 \\ \hline}
+
+% function tables
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%begin{latexonly}
+
+\newcommand{\funclistlabel}[1]{#1\hfill}
+\newenvironment{function}{
+  \pagebreak[3]
+  \begin{list}{}{
+        \settowidth{\labelwidth}{Description:}
+        \setlength{\leftmargin}{\labelwidth}
+        \addtolength{\leftmargin}{0.5em}
+        \setlength{\labelsep}{0.5em}
+        \setlength{\itemsep}{0pt}
+        \setlength\parsep{0pt}
+        \setlength\topsep{0pt}
+        %\setlength{\itemsep}{-\parskip}
+        %\addtolength{\itemsep}{\lineskip}
+        \let\makelabel\funclistlabel
+  }
+}{
+  \end{list}
+}
+
+%end{latexonly}
+\begin{htmlonly}
+
+\newenvironment{function}{
+  \begin{description}
+}{
+  \end{description}
+}
+
+\end{htmlonly}
+
+
+\newcommand{\synopsis}[1]{
+  \item[Synopsis:] \code{#1}
+}
+\newcommand{\funcname}[1]{
+  \item[Function:] \code{#1}
+}
+\newcommand{\hookname}[1]{
+  \item[Hook name:] \hyperlabel{#1}\code{#1}
+}
+\newcommand{\hookparams}[1]{
+  \item[Parameters:] \code{#1}
+}
+\newenvironment{funcdesc}{
+  \item[Description:]
+}{}
+
+
+% While rapport3/artikel3 are otherwise nice classes, 
+% itemize looks awful.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%begin{latexonly}
+\makeatletter
+\renewenvironment{itemize}{%
+  \ifnum \@itemdepth >3
+    \@toodeep
+  \else
+    \advance\@itemdepth \@ne
+    \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+    \list{\csname\@itemitem\endcsname}%
+         {%
+            \if@revlabel
+              \def\makelabel##1{\hskip .5\unitindent{\hfil ##1}}\else
+                                                   %^^^^^^^^^ Changed
+              \def\makelabel##1{\hfil ##1}
+                              %^^^^^^^^^ Changed
+            \fi
+          }%
+  \fi}
+ {\global\@ignoretrue \endlist}
+\makeatletter
+%end{latexonly}
diff --git a/objects.tex b/objects.tex
new file mode 100644 (file)
index 0000000..e751eab
--- /dev/null
@@ -0,0 +1,246 @@
+
+\section{Class and object hierarchies}
+\label{sec:objects}
+
+While Ion does not not have a truly object-oriented design
+\footnote{the author doesn't like such artificial designs},
+things that appear on the computer screen are, however, quite
+naturally expressed as such ''objects''. Therefore Ion implements
+a rather primitive OO system for these screen objects and some
+other things. 
+
+It is essential for the module writer to learn this object
+system, but also people who write their own binding configuration files
+necessarily come into contact with the class and object hierarchies
+-- you need to know which binding setup routines apply where, 
+and what functions can be used as handlers in which bindings.
+It is the purpose of this section to attempt to explain these 
+hierarchies. If you do not wish the read the full section, at least
+read the summary at the end of it, so that you understand the very
+basic relations.
+
+For simplicity we consider only the essential-for-basic-configuration
+Ioncore, \file{mod\_tiling} and \file{mod\_query} classes. 
+See Appendix \ref{app:fullhierarchy} for the full class hierachy visible
+to Lua side.
+
+\subsection{Class hierarchy}
+
+One of the most important principles of object-oriented design methodology
+is inheritance; roughly how classes (objects are instances of classes)
+extend on others' features. Inheritance gives rise to class hierarchy.
+In the case of single-inheritance this hierarchy can be expressed as a
+tree where the class at the root is inherited by all others below it
+and so on. Figure \ref{fig:classhierarchy} lists out the Ion class 
+hierarchy and below we explain what features of Ion the classes 
+implement.
+
+\begin{figure}
+\begin{htmlonly}
+\docode % latex2html kludge
+\end{htmlonly}
+\begin{verbatim}
+    Obj
+     |-->WRegion
+     |    |-->WClientWin
+     |    |-->WWindow
+     |    |    |-->WRootWin
+     |    |    |-->WMPlex
+     |    |    |    |-->WScreen
+     |    |    |    |-->WFrame
+     |    |    |-->WInput (mod_query)
+     |    |         |-->WEdln (mod_query)
+     |    |         |-->WMessage (mod_query)
+     |    |-->WGroup
+     |    |    |-->WGroupWS
+     |    |    |-->WGroupCW
+     |    |-->WTiling (mod_tiling)
+     |-->WSplit (mod_tiling)
+\end{verbatim}
+\caption{Partial Ioncore, \file{mod\_tiling} and \file{mod\_query} 
+    class hierarchy.}
+\label{fig:classhierarchy}
+\end{figure}
+
+The core classes:
+
+\begin{description}
+  \item[\type{Obj}]\indextype{Obj}
+    Is the base of Ion's object system.
+
+  \item[\type{WRegion}]\indextype{WRegion}
+    is the base class for everything corresponding to something on the
+    screen. Each object of type \type{WRegion} has a size and  position
+    relative to the parent \type{WRegion}. While a big part of Ion 
+    operates on these instead of more specialised classes, \type{WRegion}
+    is a ''virtual''  base class in that there are no objects of ''pure''
+    type \type{WRegion}; all concrete regions are objects of some class 
+    that inherits \type{WRegion}.
+
+  \item[\type{WClientWin}]\indextype{WClientWin} is a class for
+    client window objects, the objects that window managers are
+    supposed to manage.
+
+  \item[\type{WWindow}]\indextype{WWindow} is the base class for all
+    internal objects having an X window associated to them
+    (\type{WClientWins} also have X windows associated to them).
+    
+  \item[\type{WRootWin}]\indextype{WRootWin} is the class for
+    root windows\index{root window} of X screens\index{screen!X}.
+    Note that an ''X screen'' or root window is not necessarily a
+    single  physical screen\index{screen!physical} as a root window
+    may be split over multiple screens when multi-head extensions 
+    such as Xinerama\index{Xinerama} are used. (Actually there
+    can be only one \type{WRootWin} when Xinerama is used.)
+       
+  \item[\type{WMPlex}] is a base class for all regions that''multiplex'' 
+    other regions. This means that of the regions managed by the multiplexer,
+    only one can be displayed at a time. Classes that inhereit \type{WMPlex}
+    include screens and frames.
+    
+  \item[\type{WScreen}]\indextype{WScreen} is the class for objects
+    corresponding to physical screens. Screens may share a root
+    window when Xinerama multihead extensions are used as explained
+    above.
+
+  \item[\type{WFrame}]\indextype{WFrame} is the class for frames.
+    While most Ion's objects have no graphical presentation, frames basically
+    add to \type{WMPlex}es the decorations around client windows 
+    (borders, tabs).
+    
+  \item[\type{WGroup}]\indextype{WGroup} is the base class for groups.
+    Particular types of groups are workspaces 
+    (\type{WGroupWS}\indextype{WGroupWS})
+    and groups of client windows
+    (\type{WGroupCW}\indextype{WGroupCW}).
+\end{description}
+
+
+Classes implemented by the \file{mod\_tiling} module:
+
+\begin{description}
+  \item[\type{WTiling}]\indextype{WTiling} is the class for tilings
+    of frames.
+  \item[\type{WSplit}]\indextype{WSplit} (or, more specifically, classes
+    that inherit it) encode the \type{WTiling} tree structure.
+\end{description}
+
+
+Classes implemented by the \file{mod\_query} module:
+
+\begin{description}
+  \item[\type{WInput}]\indextype{WInput} is a virtual base class for the
+    two classes below.
+  \item[\type{WEdln}]\indextype{WEdln} is the class for the ''queries'',
+    the text inputs that usually appear at bottoms of frames and sometimes
+    screens. Queries are the functional equivalent of ''mini buffers'' in
+    many text editors.
+  \item[\type{WMessage}]\indextype{WMessage} implements the boxes for 
+    warning and other messages that Ion may wish to display to the user. 
+    These also usually appear at bottoms of frames.
+\end{description}
+
+There are also some other ''proxy'' classes that do not refer
+to objects on the screen. The only important one of these for
+basic configuration is \type{WMoveresMode} that is used for
+binding callbacks in the move and resize mode.
+
+
+\subsection{Object hierarchies: \type{WRegion} parents and managers}
+
+\subsubsection{Parent--child relations}
+Each object of type \type{WRegion} has a parent and possibly a manager
+associated to it. The parent\index{parent} for an object is always a 
+\type{WWindow} and for \type{WRegion} with an X window (\type{WClientWin},
+\type{WWindow}) the parent \type{WWindow} is given by the same relation of
+the X windows. For other \type{WRegion}s the relation is not as clear.
+There is generally very few restrictions other than the above on the
+parent---child relation but the most common is as described in
+Figure \ref{fig:parentship}.
+
+\begin{figure}
+\begin{htmlonly}
+\docode % latex2html kludge
+\end{htmlonly}
+\begin{verbatim}
+    WRootWins
+     |-->WScreens
+          |-->WGroupWSs
+          |-->WTilings
+          |-->WClientWins in full screen mode
+          |-->WFrames
+               |-->WGroupCWs
+               |-->WClientWins
+               |-->WFrames for transients
+               |-->a possible WEdln or WMessage
+\end{verbatim}
+\caption{Most common parent--child relations}
+\label{fig:parentship}
+\end{figure}
+
+\type{WRegion}s have very little control over their children as a parent.
+The manager\index{manager} \type{WRegion} has much more control over its
+managed \type{WRegion}s. Managers, for example, handle resize requests,
+focusing and displaying of the managed regions. Indeed the manager---managed
+relationship gives a better picture of the logical ordering of objects on
+the screen. Again, there are generally few limits, but the most common
+hierarchy is given in Figure \ref{fig:managership}. Note that sometimes
+the parent and manager are the same object and not all objects may have
+a manager (e.g. the dock in the dock module at the time of writing this)
+but all have a parent--a screen if not anything else.
+
+\subsubsection{Manager--managed relations}
+
+\begin{figure}
+\begin{htmlonly}
+\docode % latex2html kludge
+\end{htmlonly}
+\begin{verbatim}
+    WRootWins
+     |-->WScreens
+          |-->WGroupCWs for full screen WClientWins
+          |    |-->WClientWins
+          |    |-->WFrames for transients (dialogs)
+          |         |--> WClientWin
+          |-->WGroupWSs for workspaces
+          |    |-->WTiling
+          |    |    |-->possibly a WEdln, WMessage or WMenu
+          |    |    |-->WFrames
+          |    |         |-->WGroupCWs (with contents as above)
+          |    |-->WFrames for floating content
+          |-->WFrames for sticky stuff, such as the scratchpad
+\end{verbatim}
+\caption{Most common manager--managed relations}
+\label{fig:managership}
+\end{figure}
+
+Note that a workspace can manage another workspace. This can be
+achieved with the \fnref{attach_new} function, and allows you to nest
+workspaces as deep as you want.
+
+%Note how the \type{WClientWin}s managed by \type{WFloatFrame}s don't have
+%transients managed by them. This is because WFloatWSs choose to handle
+%transients differently (transients are put in separate frames like normal
+%windows).
+
+\subsection{Summary}
+
+In the standard setup, keeping queries, messages and menus out of
+consideration:
+
+\begin{itemize}
+  \item The top-level objects that matter are screens and they correspond
+    to physical screens. The class for screens is \type{WScreen}.
+  \item Screens contain (multiplex) groups (\type{WGroup}) and other 
+    objects, such as \type{WFrames}. Some of these are mutually exclusive
+    to be viewed at a time.
+  \item Groups of the specific kind \type{WGroupWS} often contain a
+    \type{WTiling} tiling for tiling frames (\type{WFrame}), but 
+    groups may also directly contain floating frames.
+  \item Frames are the objects with decorations such as tabs and borders.
+    Frames contain (multiplex) among others (groups of) client windows, 
+    to each of which corresponds a tab in the frame's decoration. Only 
+    one client window (or other object) can be shown at a time in each 
+    frame. The class for client windows is \type{WClientWin}.
+\end{itemize}
+
diff --git a/objectsimpl.tex b/objectsimpl.tex
new file mode 100644 (file)
index 0000000..ccc440d
--- /dev/null
@@ -0,0 +1,20 @@
+\section{Object system implementation}
+
+First, to get things clear, what are considered objects here are C
+structures containing a properly initialized \type\indextype{WObj}
+structure defined in \file{ioncore/obj.h} as the first element (or the
+first element of the structure which is the first element and so on which
+gives rise to inheritance). The \type{WObj} structure contains a pointer
+to a \type{WObjDescr}\indextype{WObjDescr} class type info structure and
+a list of so called ''watches''. The \type{WObjDescr} structure simply
+lists the class name, a table of dynamic functions and a pointer to
+deinitialisation function (or ''destructor'').
+
+Ion does not do any reference counting, garbage collecting or other
+fancy things related to automatic safe freeing of objects with its
+simplistic object system. Instead special watches (the \type{WWatch}
+\indextype{WWatch} structure) may be used to create safe references to
+objects that might be destroyed during the time the specific pointer is
+needed. When an object is destroyed, its list of watches is processed,
+setting the pointers in the watches to NULL and the watch handlers for
+each watch are called. 
diff --git a/predist.sh b/predist.sh
new file mode 100644 (file)
index 0000000..31e7405
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+##
+## Versioning
+##
+
+pwd=`pwd`
+dir=`basename "$pwd"`
+
+release=`echo "$dir"|sed 's/^.\+-\([^-]\+-[0-9]\+\)$/\1/p; d'`
+
+if test "$release" == ""; then
+    echo "Invalid package name $dir."
+    exit 1
+fi
+
+##
+## Ion path
+##
+
+if test "$ION_PATH" = ""; then
+    ION_PATH="../ion-${release}"
+fi
+
+##
+## Build
+##
+
+set -e
+
+d=`echo $release|sed 's/[^-]\+-\(....\)\(..\)\(..\)/\1-\2-\3/'`
+
+perl -p -i -e "s/%%DATE/\\\\date{$d}/" ionconf.tex
+sed "s:^TOPDIR=.*:TOPDIR=${ION_PATH}:" Makefile > Makefile.tmp
+make -f Makefile.tmp all
+make -f Makefile.tmp all-ps
+make -f Makefile.tmp clean
+rm Makefile.tmp
+gzip *.dvi *.ps
diff --git a/prelim.tex b/prelim.tex
new file mode 100644 (file)
index 0000000..c5db5f8
--- /dev/null
@@ -0,0 +1,58 @@
+
+\chapter{Preliminaries: Key concepts and relations}
+\label{chap:prelim}
+
+The purpose of this chapter to explain some of key concepts and
+relations you need to understand before reading the following
+chapters. These include modules explained in section \ref{sec:modules}
+and the Ion class and object hierarchies, section \ref{sec:objects}.
+
+
+\section{Modules}
+\label{sec:modules}
+
+Ion has been designed so that the 'ion' executable only implements some
+basic services on top of which very different kinds of window managers
+could be build by loading the appropriate 'modules'. On modern system
+these modules are simply dynamically loaded \file{.so} libraries. On 
+more primitive systems, or if you want to squeeze total size of the 
+executable and libraries, the modules can optionally be statically 
+linked to the main binary, but must nevertheless be loaded with the
+\fnref{dopath} function. Modules may also include Lua code.
+
+If no modules are loaded, all client windows appear in full screen mode.
+To get better window management support, one or more workspace modules
+should be loaded. Currently Ion provides the following modules:
+
+\begin{description}
+    \item[\file{mod\_tiling}] Tilings for workspaces of the original tiled
+       Ion kind.
+    \item[\file{mod\_query}] Queries (for starting programs and so on)
+      and message boxes.
+    \item[\file{mod\_menu}] Support for menus, both pull-down and
+      keyboard-operated in-frame menus.
+    \item[\file{mod\_statusbar}] Module that implements a statusbar that
+      can be adaptively embedded in each workspace's layout.
+    \item[\file{mod\_dock}] Module for docking Window Maker dockapps.
+      The dock can both float and be embedded as the statusbar.
+    \item[\file{mod\_sp}] This module implements a scratchpad frame that can
+      be toggled on/off everywhere. Think of the 'console' in some 
+      first-person shooters.
+    \item[\file{mod\_mgmtmode}] Support module for implementing ''management
+      modes'' with a XOR-frame similar to move/resize mode around selected
+      region.
+    \item[\file{mod\_sm}] Session management support module.
+      \emph{Loaded automatically when needed!}
+\end{description}
+
+So-called drawing engines are also implemented as a modules,
+but they are not discussed here; see chapter \ref{chap:gr}.
+
+The stock configuration for the 'ion3' executable loads all of the modules
+mentioned above except \file{mod\_dock} and file{mod\_mgmtmode}.
+The stock configuration for the 'pwm3' executable (which differs from the 
+'ion3' executable in a few configuration details, such as Xinerama usage)
+loads another set of modules.
+
+
+\input{objects}
diff --git a/rapport3.perl b/rapport3.perl
new file mode 100644 (file)
index 0000000..77b2cbd
--- /dev/null
@@ -0,0 +1,38 @@
+# rapport3.perl by Tuomo Valkonen, <tuomov at iki.fi>, 2003-05-10
+#
+# Implementation of the documentclass for latex2html. Just make some
+# sectioning commands saner and load report.
+#
+
+package main;
+
+#
+# Sections should start at H2 instead of the insane default H1.
+#
+
+%standard_section_headings =
+  ('part' , 'H1' , 'chapter' , 'H1', 'section', 'H2', 'subsection', 'H3'
+      , 'subsubsection', 'H4', 'paragraph', 'H4', 'subparagraph', 'H5');
+
+&generate_sectioning_subs;
+
+%section_headings =
+  ('partstar' , 'H1' , 'chapterstar' , 'H1', 'sectionstar', 'H2'
+      , 'subsectionstar', 'H3', 'subsubsectionstar', 'H4', 'paragraphstar'
+      , 'H4', 'subparagraphstar', 'H5', %section_headings);
+
+#
+# These should be chapters in a report
+#
+
+%section_headings =
+  ('tableofcontents', 'H1', 'listoffigures', 'H1', 'listoftables', 'H1'
+      , 'bibliography', 'H1', 'textohtmlindex', 'H1'
+      , %standard_section_headings
+      , %section_headings);
+
+
+&do_require_package("report");
+
+1;
+
diff --git a/statusd.tex b/statusd.tex
new file mode 100644 (file)
index 0000000..e1fe6b2
--- /dev/null
@@ -0,0 +1,81 @@
+
+\section{Writing \command{ion-statusd} monitors}
+
+All statusbar meters that do not monitor the internal state of Ion should
+go in the separate \command{ion-statusd} program. 
+
+Whenever the user requests a meter \code{\%foo} or \code{\%foo_bar} to be 
+inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} to
+load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side 
+scripts). This script should then supply all meters with the initial part
+'\code{foo}'.
+
+To provide this value, the script should simply call \code{statusd.inform}
+with the name of the meter and the value as a string.
+Additionally the script should provide a 'template' for the meter to
+facilitate expected width calculation by \file{mod\_statusbar}, and
+may provide a 'hint' for colour-coding the value. The interpretation
+of hints depends on the graphical style in use, and currently the
+stock styles support the \code{normal}, \code{important} and 
+\code{critical} hints.
+
+
+In our example of the 'foo monitor', at script init we might broadcast
+the template as follows:
+
+\begin{verbatim}
+statusd.inform("foo_template", "000")
+\end{verbatim}
+
+To inform \file{mod\_statusbar} of the actual value of the meter and
+indicate that the value is critical if above 100, we might write the
+following function:
+
+\begin{verbatim}
+local function inform_foo(foo)
+    statusd.inform("foo", tostring(foo))
+    if foo>100 then
+        statusd.inform("foo_hint", "critical")
+    else
+        statusd.inform("foo_hint", "normal")
+    end
+end    
+\end{verbatim}
+    
+To periodically update the value of the meter, we must use timers.
+First we must create one:
+
+\begin{verbatim}
+local foo_timer=statusd.create_timer()
+\end{verbatim}
+
+Then we write a function to be called whenever the timer expires.
+This function must also restart the timer.
+
+\begin{verbatim}
+local function update_foo()
+    local foo= ... measure foo somehow ...
+    inform_foo(foo)
+    foo_timer:set(settings.update_interval, update_foo)
+end
+\end{verbatim}
+
+Finally, at the end of our script we want to do the initial
+measurement, and set up timer for further measurements:
+
+\begin{verbatim}
+update_foo()
+\end{verbatim}
+
+
+If our scripts supports configurable parameters, the following code
+(at the beginning of the script) will allow them to be configured in
+\file{cfg\_statusbar.lua} and passed to the status daemon and our script:
+
+\begin{verbatim}
+local defaults={
+    update_interval=10*1000, -- 10 seconds
+}
+                
+local settings=table.join(statusd.get_config("foo"), defaults)
+\end{verbatim}
diff --git a/tricks.tex b/tricks.tex
new file mode 100644 (file)
index 0000000..69fe945
--- /dev/null
@@ -0,0 +1,104 @@
+
+\chapter{Scripting}
+\label{chap:tricks}
+
+This chapter documents some additional features of the Ion configuration
+and scripting interface that can be used for more advanced scripting than
+the basic configuration exlained in chapter \ref{chap:config}.
+
+\section{Hooks}
+\label{sec:hooks}
+
+Hooks are lists of functions to be called when a certain event occurs.
+There are two types of them; normal and ''alternative'' hooks. Normal
+hooks do not return anything, but alt-hooks should return a boolean
+indicating whether it handled its assigned task succesfully. In the case
+that \var{true} is returned, remaining handlers are not called.
+
+Hook handlers are registered by first finding the hook
+with \fnref{ioncore.get_hook} and then calling \fnref{WHook.add}
+on the (succesfull) result with the handler as parameter. Similarly
+handlers are unregistered with \fnref{WHook.remove}. For example:
+
+\begin{verbatim}
+ioncore.get_hook("ioncore_snapshot_hook"):add(
+    function() print("Snapshot hook called.") end
+)
+\end{verbatim}
+
+In this example the hook handler has no parameters, but many hook
+handlers do. The types of parameters for each hook are listed in
+the hook reference, section \ref{sec:hookref}.
+
+
+Note that many of the hooks are called in ''protected mode'' and can not 
+use any functions that modify Ion's internal state. TODO: More detailed 
+documentation when this is final.
+
+\section{Referring to regions}
+
+\subsection{Direct object references}
+
+All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+safely store such object references for future use. The C-side object
+may be destroyed while Lua still refers to the object. All exported
+functions gracefully fail in such a case, but if you need to explicitly
+test that the C-side object still exists, use \fnref{obj_exists}.
+
+As an example, the following short piece of code implements 
+bookmarking:
+
+\begin{verbatim}
+local bookmarks={}
+
+-- Set bookmark bm point to the region reg
+function set_bookmark(bm, reg)
+    bookmarks[bm]=reg
+end
+
+-- Go to bookmark bm
+function goto_bookmark(bm)
+    if bookmarks[bm] then
+        -- We could check that bookmarks[bm] still exists, if we
+        -- wanted to avoid an error message.
+        bookmarks[bm]:goto()
+    end
+end
+\end{verbatim}
+
+\subsection{Name-based lookups}
+
+If you want to a single non-\type{WClientWin} region with an exact known 
+name, use \fnref{ioncore.lookup_region}. If you want a list of all regions,
+use \fnref{ioncore.region_list}. Both functions accept an optional argument
+that can be used to specify that the returned region(s) must be of a more 
+specific type. Client windows live in a different namespace and for them
+you should use the equivalent functions \fnref{ioncore.lookup_clientwin}
+and \fnref{ioncore.clientwin_list}.
+
+To get the name of an object, use \fnref{WRegion.name}. Please be
+aware, that the names of client windows reflect their titles and
+are subject to changes. To change the name of a non-client window
+region, use \fnref{WRegion.set_name}.
+
+
+\section{Alternative winprop selection criteria}
+
+It is possible to write more complex winprop selection routines than
+those described in section \ref{sec:winprops}. To match a particular
+winprop using whatever way you want to, just set the \var{match}
+field of the winprop to a function that receives the client window
+as its sole parameter, and that returns \code{true} if the winprop
+matches, and \code{false} otherwise.
+
+The class, instance and role properties can be obtained with
+\fnref{WClientWin.get_ident}, and the title with \fnref{WRegion.name}.
+If you want to match against (almost) arbitrary window properties,
+have a look at the documentation for the following functions, and
+their standard Xlib counterparts: \fnref{ioncore.x_intern_atom}
+(XInternAtom), \fnref{ioncore.x_get_window_property} (XGetWindowProperty),
+and \fnref{ioncore.x_get_text_property} (XGetTextProperty).
+
+
+\input{statusd}
+