+2007-11-09 14:47 UTC Tuomo Valkonen <tuomov@iki.fi>
+ tagged ion-3rc-20071109
+
+2007-11-09 14:47 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Release notes
+
+2007-11-09 14:44 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added "forget" parameter to ioncore.detach and improved doc.
+
+2007-11-08 18:17 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed redundant is_fullscreen.
+
+2007-11-06 07:48 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Some cleanup to better separate ion-statusd from mod_statusbar
+ and allow for better statusd as an add-on.
+
+2007-11-05 17:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Improved stdisp placement in non-tiled groups.
+
+2007-11-05 17:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Stretch size policies support gravity (for alignment after size hints).
+
+2007-11-05 17:07 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Improved split resize behaviour
+
+2007-11-04 17:58 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Initial focus fixes for modal stacking levels.
+
+2007-11-04 12:14 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * attach_framed wasn't supporting typical group attach parameters.
+
+2007-11-03 23:40 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * I knew it! Recent focus code changes broke something.
+ (Modal stacking levels within groups.)
+
+2007-11-03 23:21 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, copy-paste.
+
+2007-11-01 17:11 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Changed disposeroot policy for WGroupCW.
+ Last managed region disposed always disposes the group (if possible).
+
+2007-11-01 17:09 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, some of the rescue code hacks broke other things..
+ (Shouldn't try to rescue whole WGroupCWs without further info.)
+
+2007-10-27 12:44 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Further rescue code hacks.
+
+2007-11-01 14:21 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * query_exec completor uses mplex working directory.
+
+2007-11-01 14:10 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added 'wd' parameter to popen_bgread.
+ (As the last one. It's a bit ugly that the order of parameters isn't similar
+ to exec_on, but I'm not going to start breaking the Lua-side API at RC stage.)
+
+2007-10-27 12:38 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Suppressed dead object warnings from tab number script.
+
+2007-10-26 14:10 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Changes in WMPlex placeholder ordering.
+ - Attaching now moves the attach-pholder after the new mx-region.
+ - Rescue pholder is placed at the end of the list.
+
+2007-10-26 14:06 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Support for rescue code pholder attach flags and masks.
+
+2007-10-19 16:24 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed doc. comment
+
+2007-10-15 15:48 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Cleaned up non-existent function from headers.
+
+2007-10-15 15:47 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Do not optimise away region_managed_prepare_focus call.
+ Tiling internal focus tracking can become confused if this is done.
+
+2007-10-15 05:57 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed redundant restack in tiling code
+
2007-09-27 16:22 UTC Tuomo Valkonen <tuomov@iki.fi>
tagged ion-3rc-20070927
+ion-3rc-20071109
+----------------
+
+It seems people are a bit slow, or only scaring them with a final
+release makes them report issues. So, still no stable release but
+a candidate, with many minor fixes and improvements wrt. important
+omissions. The most important changes are better behaviour of the
+unsplit operation, better handling of main window being closed
+before a transient, and use of the workspace's working directory
+for run query file name completion.
+
+
ion-3rc-20070927
----------------
+++ /dev/null
-2007-09-27 16:23 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3rc-20070927
-
-2007-09-11 07:40 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Notes on config file modification
-
-2007-09-02 13:41 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3rc-20070902
-
-2007-07-14 21:59 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Removed obsolete TODO note
-
-2007-07-14 20:34 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Documented orientation winprop
-
-2007-07-08 09:38 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3rc-20070708
-
-2007-06-08 16:58 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3rc-20070608
-
-2007-05-06 14:40 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3rc-20070506
-
-2007-05-06 14:25 UTC Tuomo Valkonen <tuomov@iki.fi>
- * mod_mgmtmode removal
-
-2007-05-06 13:09 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Removed obsolete example
-
-2007-05-04 21:46 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Fixes and updates to binding docs
-
-2007-05-04 16:13 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Documen the submap leave/enter stuff
-
-2007-04-26 22:44 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Improved string marking
-
-2007-04-26 22:28 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Drawing stuff doc improvements
-
-2007-04-22 18:14 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Document is_dockapp
-
-2007-04-22 12:29 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Winprop doc. improvements/fixes
-
-2007-04-22 00:16 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Minor fixes and improvements
-
-2007-04-20 16:36 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Document is_transient
-
-2007-04-15 12:33 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Updates to implementation notes
-
-2007-04-08 12:38 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Removed quotation abuse
-
-2007-04-08 12:37 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Size policy documentation
-
-2007-04-08 11:53 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Quote changes
-
-2007-04-08 11:49 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Fixed typos etc.
-
-2007-04-08 11:34 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Intro improvements
-
-2007-04-06 11:27 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Systray stuff improvs
-
-2007-04-06 11:23 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Year changed..
-
-2007-04-06 11:17 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Function reference building improvements
-
-2007-04-05 16:32 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Bah, stupid latex2html
-
-2007-04-05 16:27 UTC Tuomo Valkonen <tuomov@iki.fi>
- * mod_statusbar documentation
-
-2007-04-05 15:21 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Oops, mod_statusbar.lua was missing from sources
-
-2007-03-20 11:27 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Fixes
-
-2007-03-18 20:09 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3ds-20070318
-
-2007-03-17 19:08 UTC Tuomo Valkonen <tuomov@iki.fi>
- * cfg_ion.lua walkthrough updates
-
-2007-03-17 11:13 UTC Tuomo Valkonen <tuomov@iki.fi>
- * border_sides doc
-
-2007-02-25 19:48 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Note on "userpos" winprop.
-
-2007-02-20 02:47 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Winprop doc updates
-
-2007-02-20 02:27 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Removed outdated winprop
-
-2007-02-19 16:09 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Updated manager-managed figure
-
-2007-02-03 17:32 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Oops, still missing some statusbar stuff
-
-2007-02-03 17:30 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Minor fixes
-
-2007-02-03 15:04 UTC Tuomo Valkonen <tuomov@iki.fi>
- tagged ion-doc-3ds-20070203
-
-2007-02-03 15:00 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Style configuration documentation updates
-
-2007-02-02 21:38 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Statusbar stuff was missing
-
-2007-01-30 18:29 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Documented new_group
-
-2007-01-26 18:16 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Hook reference updates
-
-2007-01-18 07:54 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Updates
-
-2007-01-17 19:28 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Updated class hierarchies
-
-2007-01-13 18:43 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Update
-
-2007-01-13 16:12 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Updated hook documentation
-
-2007-01-03 19:12 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Document focuslist and focuslist_ menus
-
-2007-01-03 15:31 UTC Tuomo Valkonen <tuomov@iki.fi>
- * Added missing clientwin_property_change_hook documentation
-
-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
-
+++ /dev/null
- 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.
+++ /dev/null
-# 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.exports mod_tiling.exports \
- mod_query.exports de.exports mod_menu.exports \
- mod_dock.exports mod_sp.exports mod_statusbar.exports
-
-# 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
-######################################
-
-include $(TOPDIR)/libmainloop/rx.mk
-
-$(TOPDIR)/%/exports.tex:
- $(MAKE) -C $$(dirname $@) _exports_doc
-
-%.exports: $(TOPDIR)/%/exports.tex
- cp $< $@
-
-# Function list
-######################################
-
-fnlist.tex: $(FNTEXES)
- grep hyperlabel $+ | \
- sed 's/.*fn:\([^}]*\).*/\\fnlisti{\1}/;'|sort -d -f \
- > $@
+++ /dev/null
-
-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'.
+++ /dev/null
-# 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;
-
+++ /dev/null
-\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:
-\codestr{WScreen},
-\codestr{WMPlex},
-\codestr{WMPlex.toplevel},
-\codestr{WFrame},
-\codestr{WFrame.toplevel},
-\codestr{WFrame.floating},
-\codestr{WFrame.tiled},
-\codestr{WFrame.transient},
-\codestr{WMoveresMode},
-\codestr{WGroup},
-\codestr{WGroupCW},
-\codestr{WGroupWS},
-\codestr{WClientWin},
-\codestr{WTiling}, and
-\codestr{WStatusBar}.
-Most of these should be self-explanatory, corresponding to objects
-of class with the same name. The ones with \codestr{.toplevel} suffix
-refer to screens and ``toplevel'' frames, i.e. frames that are
-not used for transient windows. Likewise \codestr{.transient} refers
-to frames in transient mode, and \codestr{.tiled} and \codestr{.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 following
-special variables are available in this code.
-
-\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{_}. This should seldom be needed.
-\end{tabularx}
-
-For example, supposing \code{_} (underscore) 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}
- \codestr{\_sub:non-nil} & The \code{_sub} parameter must be set. \\
- \codestr{\_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 \fnrefx{ioncore}{kpress}, and
- \fnrefx{ioncore}{kpress_wait}\code{(keyspec, handler [, guard])}.
- \item \fnrefx{ioncore}{submap}\code{(keyspec, \{ ... more key bindings ... \})}.
- \item \fnrefx{ioncore}{submap_enter}, and
- \fnrefx{ioncore}{submap_wait}\code{(handler [, guard])}.
-\end{itemize}
-Mouse actions:
-\begin{itemize}
- \item \fnrefx{ioncore}{mclick},
- \fnrefx{ioncore}{mdblclick},
- \fnrefx{ioncore}{mpress}, and
- \fnrefx{ioncore}{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, \fnrefx{ioncore}{kpress_wait} is simply
-\fnrefx{ioncore}{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
-\fnrefx{ioncore}{submap} function is used to define submaps or
-``prefix maps''. The second argument to this function is table listing
-the key press actions (\fnrefx{ioncore}{kpress}) in the submap.
-The \fnrefx{ioncore}{submap_enter} handler is called when the submap
-is entered, in which this handler is defined. Likewise, the
-\fnrefx{ioncore}{submap_wait} handler is called when all modifiers
-have been released while waiting for further key presses 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:
-
-\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}}
-
-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
-\codestr{border}, \codestr{tab}, \codestr{empty\_tab}, \codestr{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 \codestr{Mod1+} and \codestr{} (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.
-
+++ /dev/null
-\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}
- \codestr{windowlist} &
- List of all client windows. Activating an entry jumps to that window. \\
- \codestr{workspacelist} &
- List of all workspaces. Activating an entry jumps to that workspaces. \\
- \codestr{focuslist} &
- List of client windows with recent activity in them, followed by
- previously focused client windows. \\
- \codestr{focuslist\_} &
- List of previously focused client windows. \\
- \codestr{stylemenu} &
- List of available \file{look\_*.lua} style files. Activating an entry
- loads that style and ask to save the selection. \\
- \codestr{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: \codestr{WFrame.tiled}, \codestr{WFrame.floating},
-and \codestr{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. \\
-\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}
+++ /dev/null
-\section{The statusbar}
-\label{sec:statusbar}
-
-The \file{mod\_statusbar} module provides a statusbar that adapts to
-layouts of tilings, using only the minimal space needed. Ion only
-supports one adaptive ``status display'' object per screen, so this
-statusbar is mutually exclusive with the embedded mode of \file{mod\_dock}
-docks.
-
-The statusbar is configured in \file{cfg\_statusbar.lua}. Typically,
-the configuration consists of two steps: creating a statusbar with
-\fnref{mod\_statusbar.create}, and then launching the separate
-\command{ion-statusd} status daemon process with
-\fnref{mod_statusbar.launch_statusd}. This latter phase is done
-automatically, if it was not done by the configuration file, but
-the configuration file may pass extra parameters to \command{ion-statusd}
-monitors. (See Section \ref{sec:statusd} for more information on
-writing \command{ion-statusd} monitors.)
-
-A typical \file{cfg\_statusbar.lua} configuration might look as follows:
-
-
-\begin{verbatim}
--- Create a statusbar
-mod_statusbar.create{
- screen = 0, -- First screen,
- pos = 'bl', -- bottom left corner
- systray = true, -- Swallow systray windows
-
- -- The template
- template = "[ %date || load:% %>load || mail:% %>mail_new/%>mail_total ]"
- .. " %filler%systray",
-}
-
--- Launch ion-statusd.
-mod_statusbar.launch_statusd{
- -- Date meter
- date={
- -- ISO-8601 date format with additional abbreviated day name
- date_format='%a %Y-%m-%d %H:%M',
- },
-}
-\end{verbatim}
-
-
-\subsection{The template}
-
-The template specifies what is shown on the statusbar; for information
-on the other options to \fnref{mod_statusbar.create}, see the reference.
-Strings of the form \codestr{\%spec} tokens specially interpreter by
-the statusbar; the rest appears verbatim. The \code{spec} typically
-consists of the name of the value/meter to display (beginning with a latin
-alphabet), but may be preceded by an alignment specifier and a number
-specifying the minimum width. The alignment specifiers are: \codestr{>}
-for right, \codestr{<} for left, and \codestr{|} for centring. Additionally,
-space following \codestr{\%} (that is, the string \codestr{\% }), adds
-``stretchable space'' at that point. The special string \codestr{\%filler}
-may be used to flush the rest of the template to the right end of
-the statusbar.
-
-The stretchable space works as follows: \file{mod\_statusbar} remembers
-the widest string (in terms of graphical presentation) that it has
-seen for each meter, unless the width has been otherwise constrained.
-If there is stretchable space in the template, it tries to make the
-meter always take this much space, by stretching any space found in
-the direction indicated by the alignment specifier: the opposite
-direction for left or right alignment, and both for centring.
-
-\subsection{The systray}
-
-The special \codestr{\%systray} and \codestr{\%systray\_*}
-(\codestr{*} varying) monitors indicate where to place system tray
-windows. There may be multiple of these. KDE-protocol system tray
-icons are placed in \codestr{\%systray} automatically, unless disabled
-with the \var{systray} option. Otherwise the \var{statusbar} winprop may
-be used to place any window in any particular \codestr{\%systray\_*}.
-
-\subsection{Monitors}
-
-The part before the first
-underscore of each monitor name, describes the script/plugin/module
-that provides the meter, and any configuration should be passed
-in the a corresponding sub-table \fnref{mod_statusbar.launch_statusd}.
-Ion comes with date, load and mail (for plain old mbox)
-\command{ion-statusd} monitor scripts. More may be obtained from
-the scripts repository \cite{scripts}. These included scripts
-provide the following monitors and their options
-
-\subsubsection{Date}
-
-Options: \var{date_format}: The date format in as seen above,
-in the usual \code{strftime} format. \code{formats}: table of
-formats for additional date monitors, the key being the name
-of the monitor (without the \codestr{date\_} prefix).
-
-Monitors: \codestr{date} and other user-specified ones with the
-\codestr{date\_} prefix.
-
-
-\subsubsection{Load}
-
-Options: \var{update_interval}: Update interval in milliseconds
-(default 10s). \var{important_threshold}: Threshold above which
-the load is marked as important (default 1.5), so that the
-drawing engine may be suitably hinted. \var{critical_threshold}:
-Threshold above which the load is marked as critical (default 4.0).
-
-
-Monitors: \codestr{load} (for all three values),
-\codestr{load\_1min}, \codestr{load\_5min} and \codestr{load\_15min}.
-
-
-\subsubsection{Mail}
-
-Options: \var{update_interval}: Update interval in milliseconds
-(default 1min). \var{mbox}: mbox-format mailbox location
-(default \verb!$MAIL!).
-\var{files}: list of additional mailboxes, the key giving the
-name of the monitor.
-
-Monitors: \codestr{mail\_new}, \codestr{mail\_unread},
-\codestr{mail\_total}, and corresponding
-\codestr{mail\_*\_new}, \codestr{mail\_*\_unread}, and \codestr{mail\_*\_total}
-for the additional mailboxes (\codestr{*} varying).
+++ /dev/null
-\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}{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}{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}{new_group}{string}
- \index{new-group@\var{new_group}}
- If the region specified by \code{target} winprop does not exist
- (or that winprop is not set), create a new workspace using the
- previously stored layout (see \fnref{ioncore.deflayout}) named by
- this property. After creating the workspace, \code{target} is
- attempted to be found again. (If that still fails, the newly
- created workspace is still asked to manage the client window.)
-\end{winprop}
-
-
-\begin{winprop}{oneshot}{boolean}
- \index{oneshot@\var{oneshot}}
- Discard this winprop after first use.
-\end{winprop}
-
-
-\begin{winprop}{orientation}{string}
- \index{orientation@\var{orientation}}
- The orientation of the window: one of \codestr{vertical} or
- \codestr{horizontal}. This is only useful when using the
- window as a status display.
-\end{winprop}
-
-
-\begin{winprop}{statusbar}{string}
- \index{statusbar@\var{statusbar}}
- Put the window in the statusbar, in the named tray component,
- (The default tray component is called simply \codestr{systray},
- and others you give names to in your custom template, always
- prefixed by \codestr{systray\_}.
-\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. See also \code{new_group}.
-\end{winprop}
-
-
-\begin{winprop}{transient_mode}{string}
- \index{transient-mode@\var{transient_mode}}
- \codestr{normal}: No change in behaviour. \codestr{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. \codestr{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}{transparent}{boolean}
- \index{transparent@\var{transparent}}
- Should frames be made transparent when this window is selected? \\
-\end{winprop}
-
-
-\subsection{Sizehint winprops}
-
-Additionally, the winprops
-\code{max_size}\index{max-size@\var{max_size}},
-\code{min_size}\index{min-size@\var{min_size}},
-\code{aspect}\index{aspect@\var{aspect}},
-\code{resizeinc}\index{aspect@\var{resizeinc}},
-and
-\code{ignore_max_size}\index{ignore-max-size@\var{ignore_max_size}},
-\code{ignore_min_size}\index{ignore-min-size@\var{ignore_min_size}},
-\code{ignore_aspect}\index{ignore-aspect@\var{ignore_aspect}},
-\code{ignore_resizeinc}\index{ignore-aspect@\var{ignore_resizeinc}},
-may be used to override application-supplied size hints. The four
-first ones are tables with the fields \var{w} and \var{h}, indicating
-the width and height size hints in pixels, and the latter ignore
-winprop is a boolean.
-
-Finally, the boolean
-\code{userpos}\index{userpos@\var{userpos}} option may be used to
-override the \code{USPosition} flag of the size hints. Normally,
-when this flag is set, Ion tries to respect the supplied window
-position more than when it is not set. Obviously, this makes sense
-only for floating windows.
-
-
-\subsection{Classes, roles and instances}
-\label{sec:classesrolesinstances}
-
-The identification information supported are
-\var{class}\index{class@\var{class}!winprop},
-\var{role}\index{role@\var{role}!winprop},
-\var{instance}\index{instance@\var{instance}!winprop},
-\var{name}\index{name@\var{name}!winprop},
-\var{is_transient}\index{is-transient@\var{is_transient}!winprop}, and
-\var{is_dockapp}\index{is-dockapp@\var{is_dockapp}!winprop}.
-It is not necessary to specify all of these fields.
-The first three are strings, and must exactly match the
-corresponding information obtained from the window's properties.
-The \var{name} field is a Lua-style regular expression matched against
-the window's title. The \var{is_transient} field is a boolean that can
-be used to include or exclude transients only, while the \var{is_dockapp}
-field is set by Ion for the dock windows of Window Maker dockapp protocol
-dockapps. Usually this is the only information available for these
-\emph{icon} windows.
-
-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} & other}
- 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 matching winprops with the same
-\var{class}, \var{role} and \var{instance}, but other information
-different, the most recently defined one is used.
-
-
-\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
-simultaneously 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 program's
-windows, for example. Some other programs only set this information
-after the window has been mapped, i.e. the window manager has been
-told to start managing it, which is obviously too late.
-Gtk applications in particular are often guilty on both counts.
-
-
-\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{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
-\codestr{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 \codestr{sysmonframe}, but we could just as well have used the
-default name formed from the frame's class name and an instance number.
+++ /dev/null
-
-\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{cfg\_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. Finally, the statusbar is explained in \ref{sec:statusbar}.
-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. For sake of maintainability
-of your customised configuration, it is recommended against copying all of
-the files there. Only copy those files you actually need to modify. Most
-simple customisations, such as changes in a few bindings, are best done
-entirely within \file{cfg\_ion.lua}.
-
-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. Configuration files can also be compiled into \file{.lc} files,
-and these are attempted by the configuration file search routines before
-\file{.lua} files.
-
-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\_layouts.lua} &
- Some workspace layouts are defined here. \\
- %
- \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 (\verb!--! is a
-line comment in Lua) in the actual file, as they're the defaults
-nevertheless.
-
-The first thing done 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. Note that these two are Lua
-variables used in the configuration files only, and not Ion settings.
-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.
-
-There are some other options as well; see the documentation
-for \fnref{ioncore.set} for details.
-
-As a next step, in the actual \file{cfg\_ion.lua} file, we load
-\file{cfg\_defaults.lua}. However, it is merely a convenience file for
-doing exactly what we will going through below, and what is commented
-out in the actual file. If you do not want to load what
-\file{cfg\_defaults.lua} loads, just comment out the corresponding
-line, and uncomment the lines for the files that you want:
-
-\begin{verbatim}
---dopath("cfg_defaults")
-dopath("cfg_ioncore")
-dopath("cfg_kludges")
-dopath("cfg_layouts")
-\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 collected 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}.
-Finally, \file{cfg\_layouts.lua} defines some workspace layouts, available
-through the \key{F9} workspace creation query.
-
-To actually be able to do something besides display windows in full screen
-mode, we must next load some modules:
-
-\begin{verbatim}
-dopath("mod_query")
-dopath("mod_menu")
-dopath("mod_tiling")
-dopath("mod_statusbar")
---dopath("mod_dock")
-dopath("mod_sp")
-\end{verbatim}
-
-
-\input{conf-bindings.tex}
-
-\input{conf-menus.tex}
-
-\input{conf-winprops.tex}
-
-\input{conf-statusbar.tex}
-
-
+++ /dev/null
-
-\chapter{Introduction}
-
-This document is an ``advanced user'' manual for the X11 window manager
-Ion, version 3. It is an attempt at documenting things that go into 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 might first want to first glance at some
-Lua documentation at
-
-\begin{center}
- \url{http://www.lua.org/docs.html}, or \\
- \url{http://lua-users.org/wiki/LuaTutorial},
-\end{center}
-
-although this should not be strictly necessary for basic modifications
-of configuration files for anyone with at least some familiarity with
-programming languages.
-
-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 (or ``region'') and class hierarchies. While it may
-not be necessary to study the latter for basic copy-paste modifications
-of configuration files -- for that you should not really need this
-manual either -- it is, however, essential to for more extensive
-customisation, due to the semi-object-oriented nature of most of
-Ion's scripting interface. Knowing the different object types also
-helps dealing with the different binding ``contexts'' (see
-Section \ref{sec:bindings}) that to some extent mirror these classes.
-
-The new user, fed up with the default key bindings and eager to
-just quickly configure Ion to his liking, may therefore just want
-to skip to Chapter \ref{chap:config}, and attempt to work from therefore.
-That chapter provides the very basic Ion configuration know-how
-is provided: all the different configuration files and their locations
-are explained, instructions are given to allow the reader to
-configure bindings and so-called ``winprops'', and the statusbar
-templates are also explained.
-
-Next, Chapter \ref{chap:gr} explains the notion of drawing engines
-and graphical styles and how to write new looks for Ion. More advanced
-aspects of Ion's scripting interface are documented in Chapter
-\ref{chap:tricks}.
-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 an alphabetical
-listing of all these functions may be found.
-
+++ /dev/null
-\section{C coding style}
-
-If you want to submit patches to Ion, you \textbf{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 spaces.
-
- \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.
+++ /dev/null
-
-\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. Some additional settings and
-user attributes are explained in Sections \ref{sec:grmisc}.
-
-
-\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 \codestr{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 (\codestr{*}) 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 \codestr{foo-bar-baz} be queried, then the following
-brushes are in order of preference:
-
-\begin{verbatim}
-foo-bar-baz
-foo-*-baz
-foo-bar
-*
-\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}
-\codestr{frame} & Style for frames.
- Substyle attributes: \codestr{active}/\codestr{inactive}
- (mutually exclusive) and
- \codestr{quasiactive}/\codestr{not\_quasiactive}.
- A frame is ``quasiactive'' when an active region
- has a back-link to it, such as a detached window. \\
-\codestr{frame-tiled} & A more specific style for tiled frames.
- Substyle attributes as for \codestr{frame}. \\
-\codestr{frame-tiled-alt} & An alternative style for tiled frames.
- Often used to disable the tab-bar. \\
-\codestr{frame-floating} & A more specific style for floating
- frames. \\
-\codestr{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}
-\codestr{tab} & Style for frames' tabs and menu entries.
- Substyle attributes:
- \codestr{active}/\codestr{inactive} and
- \codestr{selected}/\codestr{unselected} \\
-\codestr{tab-frame} & A more specific style for frames' tabs.
- Additional substyle attributes include:
- \codestr{tagged}/\codestr{not\_tagged},
- \codestr{dragged}/\codestr{not\_dragged},
- \codestr{activity}/\codestr{no\_activity},
- \codestr{quasiactive}/\codestr{not\_quasiactive}. \\
-\codestr{tab-frame-tiled}, & \\
-\codestr{tab-frame-tiled-alt}, & \\
-\codestr{tab-frame-floating}, & \\
-\codestr{tab-frame-transient} & More specific styles for frames in the
- different modes. \\
-\codestr{tab-menuentry} & A more specific style for entries in \type{WMenu}s.
- Additional substyle attributes include \codestr{submenu} and
- occasionally also \codestr{activity} is used.\\
-\codestr{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}
-\codestr{input} & A style for \type{WInput}s. \\
-\codestr{input-edln} & A more specific style for \type{WEdln}s.
- Substyle attributes: \codestr{selection} for selected text and
- \codestr{cursor} for the cursor indicating current editing point. \\
-\codestr{input-message} & A more specific style for \type{WMessage}s. \\
-\codestr{input-menu} & A more specific style for \type{WMenu}s. \\
-\codestr{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\
-\codestr{moveres\_display} & The box displaying position/size when
- moving or resizing frames. \\
-\codestr{stdisp} & Any status display. \\
-\codestr{stdisp-dock} & The dock. \\
-\codestr{stdisp-statusbar} & The statusbar. Substyles include:
- the name of any monitor/meter (such as \codestr{date}), and
- the supplied hint. Typical hints are: \codestr{normal},
- \codestr{important}, and \codestr{critical}. \\
-\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 style file 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 \codestr{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 \codestr{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 ``shadow'' 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
- \codestr{elevated}/\codestr{inlaid}/\codestr{ridge}/\codestr{groove}
- as seen in the above sketch. \\
-\var{border_sides} & A string indicating which sides of the border
- to draw: \codestr{all}/\codestr{tb}/\codestr{lr} for all,
- top and bottom, and left and right. To control between
- left/right and top/bottom, use the pixel options below. \\
-\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 \codestr{left}/\codestr{right}/\codestr{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
-\codestr{tab-frame} the substyles \codestr{*-*-tagged} and \codestr{*-*-*-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 \codestr{*-*-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}
-\label{sec:grmisc}
-
-
-\subsection{Frame user attributes}
-
-The function \fnref{WFrame.set_grattr} may be used to give frames
-(and their tabs) arbitrary extra attributes to be passed to the
-drawing engine. Hence, by configuring such substyles in the style
-configuration files, and turning on the attribute when needed,
-scripts may display visual cues related to the frame. There is
-also one extra attribute specially interpreted by the default
-drawing engine: the \codestr{numbered} attribute, which causes
-numbers to be displayed on the tabs.
-
-
-\subsection{Extra fields for style \codestr{frame}}
-
-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.
-
-\begin{tabularx}{\linewidth}{lX}
-\tabhead{Field & Description}
-\code{bar} & Controls the style of the tab-bar. Possible values
- are the strings \codestr{none}, \codestr{inside}, \codestr{outside}
- and \codestr{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 \codestr{dock}}
-
-\begin{tabularx}{\linewidth}{lX}
-\tabhead{Field & Description}
-\code{outline_style} & How borders are drawn:
- \codestr{none} -- no border,
- \codestr{all} -- border around whole dock,
- \codestr{each} -- border around each dockapp. \\
-\code{tile_size} & A table with entries \codestr{width} and \codestr{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.
+++ /dev/null
-\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{mainloop_defer_destroy}%
-\index{mainloop-defer-destroy@\code{mainloop_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{mainloop_defer_action}%
- \index{mainloop-defer-action@\code{mainloop_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{mainloop_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}
-
-
+++ /dev/null
-
-Context:
-
-[TAG ion-doc-3rc-20070927
-Tuomo Valkonen <tuomov@iki.fi>**20070927162337]
+++ /dev/null
-\chapter{Function reference}
-\label{sec:exports}
-
-\section{Functions defined in \file{ioncore}}
-\label{sec:ioncoreref}
-\input{ioncore.exports}
-
-\section{Functions defined in \file{mod\_tiling}}
-\label{sec:tilingref}
-\input{mod_tiling.exports}
-
-%\section{Functions defined in \file{mod\_panews}}
-%\label{sec:panewsref}
-%\input{mod_panews.exports}
-
-\section{Functions defined in \file{mod\_query}}
-\label{sec:queryref}
-\input{mod_query.exports}
-
-\section{Functions defined in \file{mod\_menu}}
-\label{sec:menuref}
-\input{mod_menu.exports}
-
-\section{Functions defined in \file{mod\_dock}}
-\label{sec:dockref}
-\input{mod_dock.exports}
-
-\section{Functions defined in \file{mod\_sp}}
-\label{sec:spref}
-\input{mod_sp.exports}
-
-\section{Functions defined in \file{mod\_statusbar}}
-\label{sec:statusbarref}
-\input{mod_statusbar.exports}
-
-\section{Functions defined in \file{de}}
-\label{sec:deref}
-\input{de.exports}
-
-\section{Hooks}
-\label{sec:hookref}
-\input{hookref}
-
-\section{Miscellaneous}
-\label{sec:miscref}
-\input{miscref}
+++ /dev/null
-\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
- |-->WRegion
- | |-->WClientWin
- | |-->WWindow
- | | |-->WMPlex
- | | | |-->WFrame
- | | | |-->WScreen
- | | | |->WRootWin
- | | |-->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}
+++ /dev/null
-\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.
+++ /dev/null
-
-\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 dock-app. \\
- \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-property-change-hook@\code{clientwin_property_change_hook}}
- \hookname{clientwin_property_change_hook}
- \hookparams{(WClientWin, integer)}
- \begin{funcdesc}
- Called when the property identified by the parameter atom id
- (integer) has changed on 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 & \codestr{switchonly}, \codestr{reorder},
- \codestr{add} or \codestr{remove} \\
- \var{sw} & bool & Switch occurred \\
- \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 main-loop, 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{ioncore-submap-ungrab-hook@\code{ioncore_submap_ungrab_hook}}
- \hookname{ioncore_submap_ungrab_hook}
- \hookparams{()}
- \begin{funcdesc}
- This hook is used to signal whenever Ion leaves the submap grab mode.
- \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 successful 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{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{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}
-
-
-\begin{function}
- \index{region-notify-hook@\code{region_notify_hook}}
- \hookname{region_notify_hook}
- \hookparams{(WRegion, string)}
- \begin{funcdesc}
- Signalled when something (minor) has changed in relation to
- the first parameter region. The string argument gives the
- change:
-
- \begin{tabularx}{\linewidth}{lX}
- \tabhead{String & Description}
- \code{deinit} & The region is about to be deinitialised. \\
- \code{activated} & The region has received focus. \\
- \code{inactivated} & The region has lost focus. \\
- \code{activity} & There's been activity in the region itself. \\
- \code{sub_activity} & There's been activity in some sub-region. \\
- \code{name} & The name of the region has changed. \\
- \code{unset_manager} & The region no longer has a manager. \\
- \code{set_manager} & The region now has a manager. \\
- \code{tag} & Tagging state has changed. \\
- \code{pseudoactivated} & The region has become pseudo-active
- (see below). \\
- \code{pseudoinactivated} & The region is no longer pseudo-active. \\
- \end{tabularx}
-
- A region is pseudo-active, when a) it is itself not active (does
- not not have the focus, and may not even have a window that could
- have it), but b) some region managed by it is active.
- \end{funcdesc}
-\end{function}
-
-
+++ /dev/null
-\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}{ Sizehint winprops}{section.3.5}
-\BOOKMARK [2][-]{subsection.3.5.2}{ Classes, roles and instances}{section.3.5}
-\BOOKMARK [2][-]{subsection.3.5.3}{ Finding window identification}{section.3.5}
-\BOOKMARK [2][-]{subsection.3.5.4}{ Some common examples}{section.3.5}
-\BOOKMARK [1][-]{section.3.6}{ The statusbar}{chapter.3}
-\BOOKMARK [2][-]{subsection.3.6.1}{ The template}{section.3.6}
-\BOOKMARK [2][-]{subsection.3.6.2}{ The systray}{section.3.6}
-\BOOKMARK [2][-]{subsection.3.6.3}{ Monitors}{section.3.6}
-\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][-]{subsection.4.3.1}{ Frame user attributes}{section.4.3}
-\BOOKMARK [2][-]{subsection.4.3.2}{ Extra fields for style `frame'}{section.4.3}
-\BOOKMARK [2][-]{subsection.4.3.3}{ 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.-267}{ 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}{ WHook functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.7}{ WInfoWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.8}{ WMPlex functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.9}{ WMoveresMode functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.10}{ WRegion functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.11}{ WRootWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.12}{ WScreen functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.13}{ WTimer functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.14}{ WWindow functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.15}{ global functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.16}{ gr functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.17}{ string functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.18}{ 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 mod\137statusbar}{chapter.6}
-\BOOKMARK [2][-]{subsection.6.7.1}{ WStatusBar functions}{section.6.7}
-\BOOKMARK [1][-]{section.6.8}{ Functions defined in de}{chapter.6}
-\BOOKMARK [1][-]{section.6.9}{ Hooks}{chapter.6}
-\BOOKMARK [1][-]{section.6.10}{ Miscellaneous}{chapter.6}
-\BOOKMARK [2][-]{subsection.6.10.1}{ Size policies}{section.6.10}
-\BOOKMARK [0][-]{appendix.A}{ The GNU General Public License}{}
-\BOOKMARK [0][-]{appendix.B}{ Full class hierarchy visible to Lua-side}{}
-\BOOKMARK [0][-]{section*.19}{Index}{}
-\BOOKMARK [0][-]{section*.21}{Bibliography}{}
+++ /dev/null
-\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{2007-09-27}
-
-\makeindex
-
-
-\begin{document}
-
-\maketitle
-
-Configuring and extending Ion3 with Lua\\
-Copyright \copyright\ 2003--2007 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
-
-\begin{thebibliography}{9}
- \bibitem{scripts} The Ion 3 scripts repository,
- \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.
-\end{thebibliography}
-
-\end{document}
+++ /dev/null
-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.
+++ /dev/null
-\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
+++ /dev/null
-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8) 27 SEP 2007 19:26
-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_inline1059:7.0626pt::0.0pt::7.1201pt.
-[1
-
-
-
-]
-l2hSize :tex2html_wrap_inline1063:7.48248pt::0.0pt::48.86426pt.
-[2
-
-
-]
-l2hSize :tex2html_wrap_inline2263:8.7125pt::8.7125pt::23.6642pt.
-[3
-
-
-]
-l2hSize :tex2html_wrap_inline5540:7.5626pt::7.5626pt::14.53923pt.
-[4
-
-
-]
-l2hSize :tex2html_wrap_inline5542:7.5626pt::7.5626pt::14.53923pt.
-[5
-
-
-]
-l2hSize :tex2html_wrap_inline7792:8.7125pt::8.7125pt::86.9574pt.
-[6
-
-
-] (./images.aux) )
-Here is how much of TeX's memory you used:
- 4467 strings out of 94501
- 63452 string characters out of 1175795
- 123529 words of memory out of 1000000
- 7611 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).
+++ /dev/null
-# LaTeX2HTML 2002-2-1 (1.71)
-# Associate images original text with physical files.
-
-
-$key = q/-1;MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="|."$dir".q|img4.png"
- ALT="$-1$">|;
-
-$key = q/(0,1];MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="42" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
- SRC="|."$dir".q|img3.png"
- ALT="$(0, 1]$">|;
-
-$key = q/N=1{ldots}5;MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="82" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
- SRC="|."$dir".q|img2.png"
- ALT="$N=1{\ldots} 5$">|;
-
-$key = q/-2;MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="|."$dir".q|img5.png"
- ALT="$-2$">|;
-
-$key = q/n;MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
- SRC="|."$dir".q|img1.png"
- ALT="$n$">|;
-
-$key = q/{t,m,b}times{t,c,b};MSF=1.6;LFS=11;AAT/;
-$cached_env_img{$key} = q|<IMG
- WIDTH="142" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
- SRC="|."$dir".q|img6.png"
- ALT="$\{t,m,b\}\times\{t,c,b\}$">|;
-
-1;
-
+++ /dev/null
-\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{tt}
-
-%
-\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{\codestr}[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{2007-09-27}
-
-
-\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_inline1059}%
-$n$%
-\lthtmlinlinemathZ
-\lthtmlcheckvsize\clearpage}
-
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline1063}%
-$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{subsection}
-\stepcounter{subsubsection}
-\stepcounter{subsubsection}
-\stepcounter{section}
-\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}
-\stepcounter{subsection}
-{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline2263}%
-$(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}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-\stepcounter{subsection}
-{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline5540}%
-$-1$%
-\lthtmlinlinemathZ
-\lthtmlcheckvsize\clearpage}
-
-{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline5542}%
-$-2$%
-\lthtmlinlinemathZ
-\lthtmlcheckvsize\clearpage}
-
-\stepcounter{subsection}
-\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_inline7792}%
-$\{t,m,b\}\times\{t,c,b\}$%
-\lthtmlinlinemathZ
-\lthtmlcheckvsize\clearpage}
-
-\stepcounter{section}
-\stepcounter{section}
-\stepcounter{subsection}
-\stepcounter{section}
-\stepcounter{section}
-\stepcounter{section}
-\stepcounter{subsection}
-\appendix
-\stepcounter{chapter}
-\addtocounter{enumi}{-1}
-\stepcounter{chapter}
-
-%
-\providecommand{\fnlisti}[1]{\htmlref{\texttt{#1}}{fn:#1}\\}%
-
-
-\end{document}
+++ /dev/null
-<!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="tex2html18"
- HREF="node1.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html12"
- 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="tex2html14"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html16"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html19"
- HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html13"
- HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- <B> <A NAME="tex2html15"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html17"
- 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>2007-09-27</STRONG></P>
-</DIV>
-
-<P>
-Configuring and extending Ion3 with Lua
-<BR>
-Copyright © 2003-2007 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="tex2html20"
- HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html21"
- HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html22"
- HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
-<UL>
-<LI><A NAME="tex2html23"
- HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html24"
- HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
-<UL>
-<LI><A NAME="tex2html25"
- 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="tex2html26"
- 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="tex2html27"
- 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="tex2html28"
- 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="tex2html29"
- 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="tex2html30"
- HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
-<UL>
-<LI><A NAME="tex2html31"
- HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html32"
- 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="tex2html33"
- HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
-<UL>
-<LI><A NAME="tex2html34"
- 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="tex2html35"
- HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html36"
- 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="tex2html37"
- HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html38"
- 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="tex2html39"
- 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="tex2html40"
- 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="tex2html41"
- HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
-<UL>
-<LI><A NAME="tex2html42"
- 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="tex2html43"
- 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="tex2html44"
- 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="tex2html45"
- 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="tex2html46"
- HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
-<UL>
-<LI><A NAME="tex2html47"
- HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html48"
- HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html49"
- HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html50"
- HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
-<UL>
-<LI><A NAME="tex2html51"
- HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
-<LI><A NAME="tex2html52"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
-</UL>
-</UL>
-<LI><A NAME="tex2html53"
- HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
-<UL>
-<LI><A NAME="tex2html54"
- HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
-<LI><A NAME="tex2html55"
- HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
-<LI><A NAME="tex2html56"
- HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
-<UL>
-<LI><A NAME="tex2html57"
- HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
-<LI><A NAME="tex2html58"
- HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
-<LI><A NAME="tex2html59"
- HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
-</UL>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html60"
- HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
-<UL>
-<LI><A NAME="tex2html61"
- 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="tex2html62"
- 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="tex2html63"
- 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="tex2html64"
- 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="tex2html65"
- 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="tex2html66"
- 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="tex2html67"
- 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="tex2html68"
- 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="tex2html69"
- 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="tex2html70"
- 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="tex2html71"
- 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="tex2html72"
- 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="tex2html73"
- 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="tex2html74"
- 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="tex2html75"
- HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
-<UL>
-<LI><A NAME="tex2html76"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
-<LI><A NAME="tex2html77"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
-<LI><A NAME="tex2html78"
- HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html79"
- HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
-<UL>
-<LI><A NAME="tex2html80"
- HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html81"
- HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
-<UL>
-<LI><A NAME="tex2html82"
- 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="tex2html83"
- 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="tex2html84"
- HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html85"
- 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="tex2html86"
- HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
-<UL>
-<LI><A NAME="tex2html87"
- 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="tex2html88"
- 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="tex2html89"
- 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="tex2html90"
- 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="tex2html91"
- 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="tex2html92"
- 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="tex2html93"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
-<LI><A NAME="tex2html94"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
-<LI><A NAME="tex2html95"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
-<LI><A NAME="tex2html96"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
-<LI><A NAME="tex2html97"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
-<LI><A NAME="tex2html98"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
-<LI><A NAME="tex2html99"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
-<LI><A NAME="tex2html100"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
-<LI><A NAME="tex2html101"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
-<LI><A NAME="tex2html102"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
-<LI><A NAME="tex2html103"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
-<LI><A NAME="tex2html104"
- HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
-<LI><A NAME="tex2html105"
- HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
-</UL>
-<LI><A NAME="tex2html106"
- 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="tex2html107"
- 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="tex2html108"
- 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="tex2html109"
- 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="tex2html110"
- 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="tex2html111"
- 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="tex2html112"
- 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="tex2html113"
- 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="tex2html114"
- 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="tex2html115"
- 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="tex2html116"
- 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="tex2html117"
- 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="tex2html118"
- 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="tex2html119"
- 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="tex2html120"
- 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="tex2html121"
- HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
-<UL>
-<LI><A NAME="tex2html122"
- HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
-</UL>
-<LI><A NAME="tex2html123"
- HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html124"
- HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
-<LI><A NAME="tex2html125"
- HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
-<UL>
-<LI><A NAME="tex2html126"
- HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html127"
- HREF="node8.html">A. The GNU General Public License</A>
-<UL>
-<LI><A NAME="tex2html128"
- HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
-</UL>
-<BR>
-<LI><A NAME="tex2html129"
- HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html130"
- HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html131"
- HREF="node11.html">Index</A>
-<LI><A NAME="tex2html132"
- HREF="node12.html">Bibliography</A>
-<LI><A NAME="tex2html133"
- HREF="node13.html">About this document ...</A>
-</UL>
-<!--End of Table of Child-Links-->
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-# 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:WHook.add/;
-$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:ioncore.get_hook/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tabnum.clear/;
-$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:WClientWin.quote_next/;
-$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: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/sec:sizepolicies/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTimer.set/;
-$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:ioncore.submap_enter/;
-$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:WTiling.farthest/;
-$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:ioncore.goto_prev_screen/;
-$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/sec:ioncoreref/;
-$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/fn:mod_statusbar.statusbars/;
-$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:mod_statusbar.launch_statusd/;
-$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:WTimer.reset/;
-$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/sec:statusbar/;
-$ref_files{$key} = "$dir".q|node4.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:ioncore.create_timer/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTiling.managed_i/;
-$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:ioncore.defctxmenu/;
-$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:WSplitSplit.tl/;
-$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:WMPlex.switch_nth/;
-$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: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:WFrame.set_grattr/;
-$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/fn:ioncore.tabnum.show/;
-$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/fn:mod_statusbar.inform/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_i/;
-$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/sec:statusbarref/;
-$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/cite_scripts/;
-$ref_files{$key} = "$dir".q|node12.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.clientwin_i/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_clear/;
-$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:ioncore.unsqueeze/;
-$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:WRegion.groupleader_of/;
-$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:mod_query.get/;
-$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: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:ioncore.getctxmenu/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplit.parent/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMoveresMode.rqgeom/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.get_template_table/;
-$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:ioncore.region_i/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.is_fullscreen/;
-$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:ioncore.get_dir_for/;
-$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:WEdln.point/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.defer/;
-$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:WGroup.managed_i/;
-$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:WMPlex.managed_i/;
-$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:WHook.listed/;
-$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: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:mod_tiling.untile/;
-$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:WSplitSplit.br/;
-$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:string.shell_safe/;
-$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/region_notify_hook/;
-$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/fn:ioncore.focushistory_i/;
-$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:ioncore.deflayout/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_attach/;
-$ref_files{$key} = "$dir".q|node7.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:WMoveresMode.geom/;
-$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:WEdln.paste/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.detach/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:miscref/;
-$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/clientwin_property_change_hook/;
-$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:WStatusBar.update/;
-$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.match_winprop_dflt/;
-$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/fn:ioncore.tagged_first/;
-$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:mod_statusbar.update/;
-$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:mod_statusbar.create/;
-$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:WTiling.split_top/;
-$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: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.popen_bgread/;
-$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:WStatusBar.set_systray/;
-$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:WSplit.transpose/;
-$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:ioncore.submap_wait/;
-$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:WSplitSplit.dir/;
-$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:WMPlex.set_stdisp/;
-$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:WStatusBar.is_systray/;
-$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:WRegion.parent/;
-$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:WEdln.back/;
-$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: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/fn:WTiling.transpose_at/;
-$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:WMPlex.mx_i/;
-$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/ioncore_sigchld_hook/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.set_template_table/;
-$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:WHook.remove/;
-$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.aboutmsg/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:grmisc/;
-$ref_files{$key} = "$dir".q|node5.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/chap:prelim/;
-$ref_files{$key} = "$dir".q|node3.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.getlayout/;
-$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:WStatusBar.set_template/;
-$ref_files{$key} = "$dir".q|node7.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/sec:statusd/;
-$ref_files{$key} = "$dir".q|node6.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/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.activity_i/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.set_fullscreen/;
-$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:WTimer.is_set/;
-$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:WRegion.get_configuration/;
-$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:WGroup.set_bottom/;
-$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/ioncore_submap_ungrab_hook/;
-$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.complete/;
-$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;
-
+++ /dev/null
-/* 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.flushleft { }
-DIV.center { }
-SPAN.sc { }
-DIV.quote { }
-PRE.preform { }
-SPAN.textit { font-style: italic }
-SPAN.arabic { }
-SPAN.textbf { font-weight: bold }
+++ /dev/null
-<!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="tex2html18"
- HREF="node1.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html12"
- 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="tex2html14"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html16"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html19"
- HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html13"
- HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- <B> <A NAME="tex2html15"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html17"
- 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>2007-09-27</STRONG></P>
-</DIV>
-
-<P>
-Configuring and extending Ion3 with Lua
-<BR>
-Copyright © 2003-2007 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="tex2html20"
- HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html21"
- HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html22"
- HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
-<UL>
-<LI><A NAME="tex2html23"
- HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html24"
- HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
-<UL>
-<LI><A NAME="tex2html25"
- 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="tex2html26"
- 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="tex2html27"
- 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="tex2html28"
- 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="tex2html29"
- 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="tex2html30"
- HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
-<UL>
-<LI><A NAME="tex2html31"
- HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html32"
- 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="tex2html33"
- HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
-<UL>
-<LI><A NAME="tex2html34"
- 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="tex2html35"
- HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html36"
- 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="tex2html37"
- HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html38"
- 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="tex2html39"
- 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="tex2html40"
- 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="tex2html41"
- HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
-<UL>
-<LI><A NAME="tex2html42"
- 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="tex2html43"
- 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="tex2html44"
- 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="tex2html45"
- 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="tex2html46"
- HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
-<UL>
-<LI><A NAME="tex2html47"
- HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html48"
- HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html49"
- HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html50"
- HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
-<UL>
-<LI><A NAME="tex2html51"
- HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
-<LI><A NAME="tex2html52"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
-</UL>
-</UL>
-<LI><A NAME="tex2html53"
- HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
-<UL>
-<LI><A NAME="tex2html54"
- HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
-<LI><A NAME="tex2html55"
- HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
-<LI><A NAME="tex2html56"
- HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
-<UL>
-<LI><A NAME="tex2html57"
- HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
-<LI><A NAME="tex2html58"
- HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
-<LI><A NAME="tex2html59"
- HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
-</UL>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html60"
- HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
-<UL>
-<LI><A NAME="tex2html61"
- 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="tex2html62"
- 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="tex2html63"
- 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="tex2html64"
- 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="tex2html65"
- 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="tex2html66"
- 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="tex2html67"
- 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="tex2html68"
- 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="tex2html69"
- 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="tex2html70"
- 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="tex2html71"
- 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="tex2html72"
- 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="tex2html73"
- 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="tex2html74"
- 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="tex2html75"
- HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
-<UL>
-<LI><A NAME="tex2html76"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
-<LI><A NAME="tex2html77"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
-<LI><A NAME="tex2html78"
- HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html79"
- HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
-<UL>
-<LI><A NAME="tex2html80"
- HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html81"
- HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
-<UL>
-<LI><A NAME="tex2html82"
- 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="tex2html83"
- 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="tex2html84"
- HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html85"
- 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="tex2html86"
- HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
-<UL>
-<LI><A NAME="tex2html87"
- 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="tex2html88"
- 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="tex2html89"
- 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="tex2html90"
- 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="tex2html91"
- 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="tex2html92"
- 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="tex2html93"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
-<LI><A NAME="tex2html94"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
-<LI><A NAME="tex2html95"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
-<LI><A NAME="tex2html96"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
-<LI><A NAME="tex2html97"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
-<LI><A NAME="tex2html98"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
-<LI><A NAME="tex2html99"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
-<LI><A NAME="tex2html100"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
-<LI><A NAME="tex2html101"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
-<LI><A NAME="tex2html102"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
-<LI><A NAME="tex2html103"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
-<LI><A NAME="tex2html104"
- HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
-<LI><A NAME="tex2html105"
- HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
-</UL>
-<LI><A NAME="tex2html106"
- 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="tex2html107"
- 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="tex2html108"
- 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="tex2html109"
- 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="tex2html110"
- 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="tex2html111"
- 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="tex2html112"
- 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="tex2html113"
- 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="tex2html114"
- 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="tex2html115"
- 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="tex2html116"
- 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="tex2html117"
- 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="tex2html118"
- 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="tex2html119"
- 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="tex2html120"
- 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="tex2html121"
- HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
-<UL>
-<LI><A NAME="tex2html122"
- HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
-</UL>
-<LI><A NAME="tex2html123"
- HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html124"
- HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
-<LI><A NAME="tex2html125"
- HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
-<UL>
-<LI><A NAME="tex2html126"
- HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html127"
- HREF="node8.html">A. The GNU General Public License</A>
-<UL>
-<LI><A NAME="tex2html128"
- HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
-</UL>
-<BR>
-<LI><A NAME="tex2html129"
- HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html130"
- HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html131"
- HREF="node11.html">Index</A>
-<LI><A NAME="tex2html132"
- HREF="node12.html">Bibliography</A>
-<LI><A NAME="tex2html133"
- HREF="node13.html">About this document ...</A>
-</UL>
-<!--End of Table of Child-Links-->
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-# 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:WHook.add/;
-$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:ioncore.get_hook/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tabnum.clear/;
-$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:WClientWin.quote_next/;
-$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: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/sec:sizepolicies/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTimer.set/;
-$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:ioncore.submap_enter/;
-$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:WTiling.farthest/;
-$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:ioncore.goto_prev_screen/;
-$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/sec:ioncoreref/;
-$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/fn:mod_statusbar.statusbars/;
-$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:mod_statusbar.launch_statusd/;
-$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:WTimer.reset/;
-$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/sec:statusbar/;
-$external_labels{$key} = "$URL/" . q|node4.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:ioncore.create_timer/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTiling.managed_i/;
-$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:ioncore.defctxmenu/;
-$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:WSplitSplit.tl/;
-$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:WMPlex.switch_nth/;
-$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: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:WFrame.set_grattr/;
-$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/fn:ioncore.tabnum.show/;
-$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/fn:mod_statusbar.inform/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_i/;
-$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/sec:statusbarref/;
-$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/cite_scripts/;
-$external_labels{$key} = "$URL/" . q|node12.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.clientwin_i/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_clear/;
-$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:ioncore.unsqueeze/;
-$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:WRegion.groupleader_of/;
-$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:mod_query.get/;
-$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: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:ioncore.getctxmenu/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplit.parent/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMoveresMode.rqgeom/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.get_template_table/;
-$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:ioncore.region_i/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.is_fullscreen/;
-$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:ioncore.get_dir_for/;
-$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:WEdln.point/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.defer/;
-$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:WGroup.managed_i/;
-$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:WMPlex.managed_i/;
-$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:WHook.listed/;
-$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: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:mod_tiling.untile/;
-$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:WSplitSplit.br/;
-$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:string.shell_safe/;
-$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/region_notify_hook/;
-$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/fn:ioncore.focushistory_i/;
-$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:ioncore.deflayout/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_attach/;
-$external_labels{$key} = "$URL/" . q|node7.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:WMoveresMode.geom/;
-$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:WEdln.paste/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.detach/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:miscref/;
-$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/clientwin_property_change_hook/;
-$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:WStatusBar.update/;
-$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.match_winprop_dflt/;
-$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/fn:ioncore.tagged_first/;
-$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:mod_statusbar.update/;
-$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:mod_statusbar.create/;
-$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:WTiling.split_top/;
-$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: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.popen_bgread/;
-$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:WStatusBar.set_systray/;
-$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:WSplit.transpose/;
-$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:ioncore.submap_wait/;
-$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:WSplitSplit.dir/;
-$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:WMPlex.set_stdisp/;
-$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:WStatusBar.is_systray/;
-$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:WRegion.parent/;
-$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:WEdln.back/;
-$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: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/fn:WTiling.transpose_at/;
-$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:WMPlex.mx_i/;
-$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/ioncore_sigchld_hook/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.set_template_table/;
-$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:WHook.remove/;
-$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.aboutmsg/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:grmisc/;
-$external_labels{$key} = "$URL/" . q|node5.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/chap:prelim/;
-$external_labels{$key} = "$URL/" . q|node3.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.getlayout/;
-$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:WStatusBar.set_template/;
-$external_labels{$key} = "$URL/" . q|node7.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/sec:statusd/;
-$external_labels{$key} = "$URL/" . q|node6.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/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.activity_i/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.set_fullscreen/;
-$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:WTimer.is_set/;
-$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:WRegion.get_configuration/;
-$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:WGroup.set_bottom/;
-$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/ioncore_submap_ungrab_hook/;
-$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.complete/;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:gr.select_engine/;
-$external_latex_labels{$key} = q|6.1.16|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WHook.add/;
-$external_latex_labels{$key} = q|6.1.6|;
-$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:ioncore.get_hook/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tabnum.clear/;
-$external_latex_labels{$key} = q|6.1|;
-$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:WClientWin.quote_next/;
-$external_latex_labels{$key} = q|6.1.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.insstr/;
-$external_latex_labels{$key} = q|6.3.2|;
-$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/sec:sizepolicies/;
-$external_latex_labels{$key} = q|6.10.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTimer.set/;
-$external_latex_labels{$key} = q|6.1.13|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.goto_activity/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.submap_enter/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.create_ws/;
-$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: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.8|;
-$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.8|;
-$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.9|;
-$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:ioncore.goto_prev_screen/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.is_mapped/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:ioncoreref/;
-$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/fn:mod_statusbar.statusbars/;
-$external_latex_labels{$key} = q|6.7|;
-$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.14|;
-$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:mod_statusbar.launch_statusd/;
-$external_latex_labels{$key} = q|6.7|;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.defmenu/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTimer.reset/;
-$external_latex_labels{$key} = q|6.1.13|;
-$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.8|;
-$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.12|;
-$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.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:statusbar/;
-$external_latex_labels{$key} = q|3.6|;
-$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:ioncore.create_timer/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTiling.managed_i/;
-$external_latex_labels{$key} = q|6.2.5|;
-$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:ioncore.defctxmenu/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_tiling.mkbottom/;
-$external_latex_labels{$key} = q|6.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplitSplit.tl/;
-$external_latex_labels{$key} = q|6.2.4|;
-$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:WMPlex.switch_nth/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.set_name_exact/;
-$external_latex_labels{$key} = q|6.1.10|;
-$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:WFrame.set_grattr/;
-$external_latex_labels{$key} = q|6.1.2|;
-$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.7|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.snapshot/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tabnum.show/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/region_do_warp_alt/;
-$external_latex_labels{$key} = q|6.9|;
-$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.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.write_savefile/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_statusbar.inform/;
-$external_latex_labels{$key} = q|6.7|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_i/;
-$external_latex_labels{$key} = q|6.1|;
-$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.14|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:statusbarref/;
-$external_latex_labels{$key} = q|6.7|;
-$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.16|;
-$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:ioncore.clientwin_i/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_clear/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.screen_of/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.switch_next/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.bottom/;
-$external_latex_labels{$key} = q|6.1.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.unsqueeze/;
-$external_latex_labels{$key} = q|6.1|;
-$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.11|;
-$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.10|;
-$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.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/chap:tricks/;
-$external_latex_labels{$key} = q|5|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.groupleader_of/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.get_savefile/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.lookup_clientwin/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_query.get/;
-$external_latex_labels{$key} = q|6.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_query.history_push/;
-$external_latex_labels{$key} = q|6.3|;
-$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:ioncore.getctxmenu/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplit.parent/;
-$external_latex_labels{$key} = q|6.2.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMoveresMode.rqgeom/;
-$external_latex_labels{$key} = q|6.1.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.get_template_table/;
-$external_latex_labels{$key} = q|6.7.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WFrame.maximize_horiz/;
-$external_latex_labels{$key} = q|6.1.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.region_i/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.is_fullscreen/;
-$external_latex_labels{$key} = q|6.1.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WWindow.p_move/;
-$external_latex_labels{$key} = q|6.1.14|;
-$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.12|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.get_dir_for/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_query.set/;
-$external_latex_labels{$key} = q|6.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.point/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.defer/;
-$external_latex_labels{$key} = q|6.1|;
-$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:WGroup.managed_i/;
-$external_latex_labels{$key} = q|6.1.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.18|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplit.rqgeom/;
-$external_latex_labels{$key} = q|6.2.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.managed_i/;
-$external_latex_labels{$key} = q|6.1.8|;
-$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.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.mx_count/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.attach/;
-$external_latex_labels{$key} = q|6.1.8|;
-$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.9|;
-$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:WHook.listed/;
-$external_latex_labels{$key} = q|6.1.6|;
-$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.8|;
-$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.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.set_activity/;
-$external_latex_labels{$key} = q|6.1.10|;
-$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:WMPlex.mx_current/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_query.message/;
-$external_latex_labels{$key} = q|6.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_tiling.untile/;
-$external_latex_labels{$key} = q|6.2|;
-$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.8|;
-$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:WSplitSplit.br/;
-$external_latex_labels{$key} = q|6.2.4|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_query.query_restart/;
-$external_latex_labels{$key} = q|6.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:string.shell_safe/;
-$external_latex_labels{$key} = q|6.1.17|;
-$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.8|;
-$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.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.rqclose_propagate/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/region_notify_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.clear_mark/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.focushistory_i/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/tiling_placement_alt/;
-$external_latex_labels{$key} = q|6.9|;
-$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.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:classesrolesinstances/;
-$external_latex_labels{$key} = q|3.5.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.deflayout/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.tagged_attach/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.is_tagged/;
-$external_latex_labels{$key} = q|6.1.10|;
-$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.8|;
-$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:WMoveresMode.geom/;
-$external_latex_labels{$key} = q|6.1.9|;
-$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.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.paste/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.detach/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:miscref/;
-$external_latex_labels{$key} = q|6.10|;
-$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.10|;
-$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/clientwin_property_change_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:table.append/;
-$external_latex_labels{$key} = q|6.1.18|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.mclick/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.update/;
-$external_latex_labels{$key} = q|6.7.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.set_index/;
-$external_latex_labels{$key} = q|6.1.8|;
-$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.9|;
-$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.9|;
-$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.match_winprop_dflt/;
-$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/fn:ioncore.tagged_first/;
-$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:mod_statusbar.update/;
-$external_latex_labels{$key} = q|6.7|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMoveresMode.cancel/;
-$external_latex_labels{$key} = q|6.1.9|;
-$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.10|;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:mod_statusbar.create/;
-$external_latex_labels{$key} = q|6.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/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.popen_bgread/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.defwinprop/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.set_systray/;
-$external_latex_labels{$key} = q|6.7.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.mdrag/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplit.transpose/;
-$external_latex_labels{$key} = q|6.2.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WClientWin.kill/;
-$external_latex_labels{$key} = q|6.1.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.submap_wait/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/ioncore_snapshot_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WSplitSplit.dir/;
-$external_latex_labels{$key} = q|6.2.4|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:table.map/;
-$external_latex_labels{$key} = q|6.1.18|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.set_stdisp/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WFrame.set_shaded/;
-$external_latex_labels{$key} = q|6.1.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.is_systray/;
-$external_latex_labels{$key} = q|6.7.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.manager/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.x_change_property/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.parent/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WInput.cancel/;
-$external_latex_labels{$key} = q|6.3.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.back/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMenu.finish/;
-$external_latex_labels{$key} = q|6.4.1|;
-$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.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.kpress_wait/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WTiling.transpose_at/;
-$external_latex_labels{$key} = q|6.2.5|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.rootwin_of/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WMPlex.mx_i/;
-$external_latex_labels{$key} = q|6.1.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/clientwin_do_manage_alt/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/ioncore_sigchld_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.set_template_table/;
-$external_latex_labels{$key} = q|6.7.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.8|;
-$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.16|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.rqorder/;
-$external_latex_labels{$key} = q|6.1.10|;
-$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.10|;
-$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:WHook.remove/;
-$external_latex_labels{$key} = q|6.1.6|;
-$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.10|;
-$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.aboutmsg/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:grmisc/;
-$external_latex_labels{$key} = q|4.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/chap:prelim/;
-$external_latex_labels{$key} = q|2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.getlayout/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fig:parentship/;
-$external_latex_labels{$key} = q|2.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WStatusBar.set_template/;
-$external_latex_labels{$key} = q|6.7.1|;
-$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.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/sec:statusd/;
-$external_latex_labels{$key} = q|5.4|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.rqgeom/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WInput.scrolldown/;
-$external_latex_labels{$key} = q|6.3.3|;
-$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.activity_i/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.set_fullscreen/;
-$external_latex_labels{$key} = q|6.1.3|;
-$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:WTimer.is_set/;
-$external_latex_labels{$key} = q|6.1.13|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.set_name/;
-$external_latex_labels{$key} = q|6.1.10|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:table.join/;
-$external_latex_labels{$key} = q|6.1.18|;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WRegion.get_configuration/;
-$external_latex_labels{$key} = q|6.1.10|;
-$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:WGroup.set_bottom/;
-$external_latex_labels{$key} = q|6.1.3|;
-$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.15|;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/ioncore_post_layout_setup_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:table.icat/;
-$external_latex_labels{$key} = q|6.1.18|;
-$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.8|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.skip_word/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
-$key = q/ioncore_submap_ungrab_hook/;
-$external_latex_labels{$key} = q|6.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WGroup.attach_new/;
-$external_latex_labels{$key} = q|6.1.3|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:WEdln.complete/;
-$external_latex_labels{$key} = q|6.3.2|;
-$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;
-
+++ /dev/null
-<!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="tex2html144"
- HREF="node2.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html140"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html134"
- HREF="ionconf.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html142"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html145"
- HREF="node2.html">1. Introduction</A>
-<B> Up:</B> <A NAME="tex2html141"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html135"
- HREF="ionconf.html">Configuring and extending Ion3</A>
- <B> <A NAME="tex2html143"
- 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="tex2html146"
- HREF="node2.html">1. Introduction</A>
-<LI><A NAME="tex2html147"
- HREF="node3.html">2. Preliminaries: Key concepts and relations</A>
-<UL>
-<LI><A NAME="tex2html148"
- HREF="node3.html#SECTION00310000000000000000">2.1 Modules</A>
-<LI><A NAME="tex2html149"
- HREF="node3.html#SECTION00320000000000000000">2.2 Class and object hierarchies</A>
-<UL>
-<LI><A NAME="tex2html150"
- HREF="node3.html#SECTION00321000000000000000">2.2.1 Class hierarchy</A>
-<LI><A NAME="tex2html151"
- HREF="node3.html#SECTION00322000000000000000">2.2.2 Object hierarchies: WRegion parents and managers</A>
-<LI><A NAME="tex2html152"
- HREF="node3.html#SECTION00323000000000000000">2.2.3 Summary</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html153"
- HREF="node4.html">3. Basic configuration</A>
-<UL>
-<LI><A NAME="tex2html154"
- HREF="node4.html#SECTION00410000000000000000">3.1 The configuration files</A>
-<LI><A NAME="tex2html155"
- HREF="node4.html#SECTION00420000000000000000">3.2 A walk through cfg_ion.lua</A>
-<LI><A NAME="tex2html156"
- HREF="node4.html#SECTION00430000000000000000">3.3 Keys and rodents</A>
-<UL>
-<LI><A NAME="tex2html157"
- HREF="node4.html#SECTION00431000000000000000">3.3.1 Binding handlers and special variables</A>
-<LI><A NAME="tex2html158"
- HREF="node4.html#SECTION00432000000000000000">3.3.2 Guards</A>
-<LI><A NAME="tex2html159"
- HREF="node4.html#SECTION00433000000000000000">3.3.3 Defining the bindings</A>
-<LI><A NAME="tex2html160"
- HREF="node4.html#SECTION00434000000000000000">3.3.4 Examples</A>
-<LI><A NAME="tex2html161"
- HREF="node4.html#SECTION00435000000000000000">3.3.5 Key specifications</A>
-<LI><A NAME="tex2html162"
- HREF="node4.html#SECTION00436000000000000000">3.3.6 Button specifications</A>
-<LI><A NAME="tex2html163"
- HREF="node4.html#SECTION00437000000000000000">3.3.7 A further note on the default binding configuration</A>
-</UL>
-<LI><A NAME="tex2html164"
- HREF="node4.html#SECTION00440000000000000000">3.4 Menus</A>
-<UL>
-<LI><A NAME="tex2html165"
- HREF="node4.html#SECTION00441000000000000000">3.4.1 Defining menus</A>
-<LI><A NAME="tex2html166"
- HREF="node4.html#SECTION00442000000000000000">3.4.2 Special menus</A>
-<LI><A NAME="tex2html167"
- HREF="node4.html#SECTION00443000000000000000">3.4.3 Defining context menus</A>
-<LI><A NAME="tex2html168"
- HREF="node4.html#SECTION00444000000000000000">3.4.4 Displaying menus</A>
-</UL>
-<LI><A NAME="tex2html169"
- HREF="node4.html#SECTION00450000000000000000">3.5 Winprops</A>
-<UL>
-<LI><A NAME="tex2html170"
- HREF="node4.html#SECTION00451000000000000000">3.5.1 Sizehint winprops</A>
-<LI><A NAME="tex2html171"
- HREF="node4.html#SECTION00452000000000000000">3.5.2 Classes, roles and instances</A>
-<LI><A NAME="tex2html172"
- HREF="node4.html#SECTION00453000000000000000">3.5.3 Finding window identification</A>
-<LI><A NAME="tex2html173"
- HREF="node4.html#SECTION00454000000000000000">3.5.4 Some common examples</A>
-</UL>
-<LI><A NAME="tex2html174"
- HREF="node4.html#SECTION00460000000000000000">3.6 The statusbar</A>
-<UL>
-<LI><A NAME="tex2html175"
- HREF="node4.html#SECTION00461000000000000000">3.6.1 The template</A>
-<LI><A NAME="tex2html176"
- HREF="node4.html#SECTION00462000000000000000">3.6.2 The systray</A>
-<LI><A NAME="tex2html177"
- HREF="node4.html#SECTION00463000000000000000">3.6.3 Monitors</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html178"
- HREF="node5.html">4. Graphical styles</A>
-<UL>
-<LI><A NAME="tex2html179"
- HREF="node5.html#SECTION00510000000000000000">4.1 Drawing engines, style specifications and sub-styles</A>
-<UL>
-<LI><A NAME="tex2html180"
- HREF="node5.html#SECTION00511000000000000000">4.1.1 Known styles and substyles</A>
-</UL>
-<LI><A NAME="tex2html181"
- HREF="node5.html#SECTION00520000000000000000">4.2 Defining styles for the default drawing engine</A>
-<UL>
-<LI><A NAME="tex2html182"
- HREF="node5.html#SECTION00521000000000000000">4.2.1 The structure of the configuration files</A>
-<LI><A NAME="tex2html183"
- HREF="node5.html#SECTION00522000000000000000">4.2.2 Defining the styles</A>
-<LI><A NAME="tex2html184"
- HREF="node5.html#SECTION00523000000000000000">4.2.3 An example</A>
-</UL>
-<LI><A NAME="tex2html185"
- HREF="node5.html#SECTION00530000000000000000">4.3 Miscellaneous settings</A>
-<UL>
-<LI><A NAME="tex2html186"
- HREF="node5.html#SECTION00531000000000000000">4.3.1 Frame user attributes</A>
-<LI><A NAME="tex2html187"
- HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style `frame'</A>
-<LI><A NAME="tex2html188"
- HREF="node5.html#SECTION00533000000000000000">4.3.3 Extra fields for style `dock'</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html189"
- HREF="node6.html">5. Scripting</A>
-<UL>
-<LI><A NAME="tex2html190"
- HREF="node6.html#SECTION00610000000000000000">5.1 Hooks</A>
-<LI><A NAME="tex2html191"
- HREF="node6.html#SECTION00620000000000000000">5.2 Referring to regions</A>
-<UL>
-<LI><A NAME="tex2html192"
- HREF="node6.html#SECTION00621000000000000000">5.2.1 Direct object references</A>
-<LI><A NAME="tex2html193"
- HREF="node6.html#SECTION00622000000000000000">5.2.2 Name-based lookups</A>
-</UL>
-<LI><A NAME="tex2html194"
- HREF="node6.html#SECTION00630000000000000000">5.3 Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html195"
- HREF="node6.html#SECTION00640000000000000000">5.4 Writing ion-statusd monitors</A>
-</UL>
-<BR>
-<LI><A NAME="tex2html196"
- HREF="node7.html">6. Function reference</A>
-<UL>
-<LI><A NAME="tex2html197"
- HREF="node7.html#SECTION00710000000000000000">6.1 Functions defined in ioncore</A>
-<UL>
-<LI><A NAME="tex2html198"
- HREF="node7.html#SECTION00711000000000000000">6.1.1 WClientWin functions</A>
-<LI><A NAME="tex2html199"
- HREF="node7.html#SECTION00712000000000000000">6.1.2 WFrame functions</A>
-<LI><A NAME="tex2html200"
- HREF="node7.html#SECTION00713000000000000000">6.1.3 WGroup functions</A>
-<LI><A NAME="tex2html201"
- HREF="node7.html#SECTION00714000000000000000">6.1.4 WGroupCW functions</A>
-<LI><A NAME="tex2html202"
- HREF="node7.html#SECTION00715000000000000000">6.1.5 WGroupWS functions</A>
-<LI><A NAME="tex2html203"
- HREF="node7.html#SECTION00716000000000000000">6.1.6 WHook functions</A>
-<LI><A NAME="tex2html204"
- HREF="node7.html#SECTION00717000000000000000">6.1.7 WInfoWin functions</A>
-<LI><A NAME="tex2html205"
- HREF="node7.html#SECTION00718000000000000000">6.1.8 WMPlex functions</A>
-<LI><A NAME="tex2html206"
- HREF="node7.html#SECTION00719000000000000000">6.1.9 WMoveresMode functions</A>
-<LI><A NAME="tex2html207"
- HREF="node7.html#SECTION007110000000000000000">6.1.10 WRegion functions</A>
-<LI><A NAME="tex2html208"
- HREF="node7.html#SECTION007111000000000000000">6.1.11 WRootWin functions</A>
-<LI><A NAME="tex2html209"
- HREF="node7.html#SECTION007112000000000000000">6.1.12 WScreen functions</A>
-<LI><A NAME="tex2html210"
- HREF="node7.html#SECTION007113000000000000000">6.1.13 WTimer functions</A>
-<LI><A NAME="tex2html211"
- HREF="node7.html#SECTION007114000000000000000">6.1.14 WWindow functions</A>
-<LI><A NAME="tex2html212"
- HREF="node7.html#SECTION007115000000000000000">6.1.15 global functions</A>
-<LI><A NAME="tex2html213"
- HREF="node7.html#SECTION007116000000000000000">6.1.16 gr functions</A>
-<LI><A NAME="tex2html214"
- HREF="node7.html#SECTION007117000000000000000">6.1.17 string functions</A>
-<LI><A NAME="tex2html215"
- HREF="node7.html#SECTION007118000000000000000">6.1.18 table functions</A>
-</UL>
-<LI><A NAME="tex2html216"
- HREF="node7.html#SECTION00720000000000000000">6.2 Functions defined in mod_tiling</A>
-<UL>
-<LI><A NAME="tex2html217"
- HREF="node7.html#SECTION00721000000000000000">6.2.1 WSplit functions</A>
-<LI><A NAME="tex2html218"
- HREF="node7.html#SECTION00722000000000000000">6.2.2 WSplitInner functions</A>
-<LI><A NAME="tex2html219"
- HREF="node7.html#SECTION00723000000000000000">6.2.3 WSplitRegion functions</A>
-<LI><A NAME="tex2html220"
- HREF="node7.html#SECTION00724000000000000000">6.2.4 WSplitSplit functions</A>
-<LI><A NAME="tex2html221"
- HREF="node7.html#SECTION00725000000000000000">6.2.5 WTiling functions</A>
-</UL>
-<LI><A NAME="tex2html222"
- HREF="node7.html#SECTION00730000000000000000">6.3 Functions defined in mod_query</A>
-<UL>
-<LI><A NAME="tex2html223"
- HREF="node7.html#SECTION00731000000000000000">6.3.1 WComplProxy functions</A>
-<LI><A NAME="tex2html224"
- HREF="node7.html#SECTION00732000000000000000">6.3.2 WEdln functions</A>
-<LI><A NAME="tex2html225"
- HREF="node7.html#SECTION00733000000000000000">6.3.3 WInput functions</A>
-</UL>
-<LI><A NAME="tex2html226"
- HREF="node7.html#SECTION00740000000000000000">6.4 Functions defined in mod_menu</A>
-<UL>
-<LI><A NAME="tex2html227"
- HREF="node7.html#SECTION00741000000000000000">6.4.1 WMenu functions</A>
-</UL>
-<LI><A NAME="tex2html228"
- HREF="node7.html#SECTION00750000000000000000">6.5 Functions defined in mod_dock</A>
-<UL>
-<LI><A NAME="tex2html229"
- HREF="node7.html#SECTION00751000000000000000">6.5.1 WDock functions</A>
-</UL>
-<LI><A NAME="tex2html230"
- HREF="node7.html#SECTION00760000000000000000">6.6 Functions defined in mod_sp</A>
-<LI><A NAME="tex2html231"
- HREF="node7.html#SECTION00770000000000000000">6.7 Functions defined in mod_statusbar</A>
-<UL>
-<LI><A NAME="tex2html232"
- HREF="node7.html#SECTION00771000000000000000">6.7.1 WStatusBar functions</A>
-</UL>
-<LI><A NAME="tex2html233"
- HREF="node7.html#SECTION00780000000000000000">6.8 Functions defined in de</A>
-<LI><A NAME="tex2html234"
- HREF="node7.html#SECTION00790000000000000000">6.9 Hooks</A>
-<LI><A NAME="tex2html235"
- HREF="node7.html#SECTION007100000000000000000">6.10 Miscellaneous</A>
-<UL>
-<LI><A NAME="tex2html236"
- HREF="node7.html#SECTION007101000000000000000">6.10.1 Size policies</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html237"
- HREF="node8.html">A. The GNU General Public License</A>
-<LI><A NAME="tex2html238"
- HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html239"
- HREF="node11.html">Index</A>
-<LI><A NAME="tex2html240"
- HREF="node12.html">Bibliography</A>
-</UL>
-<!--End of Table of Contents-->
-<P>
-
-<P>
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html466"
- HREF="node11.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html460"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html454"
- HREF="node9.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html462"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html464"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html467"
- HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html461"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html455"
- HREF="node9.html">B. Full class hierarchy</A>
- <B> <A NAME="tex2html463"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html465"
- 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_i"><TT>ioncore.activity_i</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.clientwin_i"><TT>ioncore.clientwin_i</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_timer"><TT>ioncore.create_timer</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.defer"><TT>ioncore.defer</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.deflayout"><TT>ioncore.deflayout</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.detach"><TT>ioncore.detach</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.focushistory_i"><TT>ioncore.focushistory_i</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.get_hook"><TT>ioncore.get_hook</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.getlayout"><TT>ioncore.getlayout</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_dflt"><TT>ioncore.match_winprop_dflt</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_i"><TT>ioncore.region_i</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_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.submap_enter"><TT>ioncore.submap_enter</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.submap_wait"><TT>ioncore.submap_wait</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.submenu"><TT>ioncore.submenu</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tabnum.clear"><TT>ioncore.tabnum.clear</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tabnum.show"><TT>ioncore.tabnum.show</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tagged_attach"><TT>ioncore.tagged_attach</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tagged_clear"><TT>ioncore.tagged_clear</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tagged_first"><TT>ioncore.tagged_first</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.tagged_i"><TT>ioncore.tagged_i</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.TR"><TT>ioncore.TR</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.unsqueeze"><TT>ioncore.unsqueeze</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_statusbar.create"><TT>mod_statusbar.create</TT></A>
-<BR><A HREF="node7.html#fn:mod_statusbar.inform"><TT>mod_statusbar.inform</TT></A>
-<BR><A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>
-<BR><A HREF="node7.html#fn:mod_statusbar.statusbars"><TT>mod_statusbar.statusbars</TT></A>
-<BR><A HREF="node7.html#fn:mod_statusbar.update"><TT>mod_statusbar.update</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:mod_tiling.untile"><TT>mod_tiling.untile</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.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.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_grattr"><TT>WFrame.set_grattr</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_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.is_fullscreen"><TT>WGroup.is_fullscreen</TT></A>
-<BR><A HREF="node7.html#fn:WGroup.managed_i"><TT>WGroup.managed_i</TT></A>
-<BR><A HREF="node7.html#fn:WGroup.set_bottom"><TT>WGroup.set_bottom</TT></A>
-<BR><A HREF="node7.html#fn:WGroup.set_fullscreen"><TT>WGroup.set_fullscreen</TT></A>
-<BR><A HREF="node7.html#fn:WGroupWS.attach_framed"><TT>WGroupWS.attach_framed</TT></A>
-<BR><A HREF="node7.html#fn:WHook.add"><TT>WHook.add</TT></A>
-<BR><A HREF="node7.html#fn:WHook.listed"><TT>WHook.listed</TT></A>
-<BR><A HREF="node7.html#fn:WHook.remove"><TT>WHook.remove</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.geom"><TT>WMoveresMode.geom</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:WMoveresMode.rqgeom"><TT>WMoveresMode.rqgeom</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.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_i"><TT>WMPlex.managed_i</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_i"><TT>WMPlex.mx_i</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.get_configuration"><TT>WRegion.get_configuration</TT></A>
-<BR><A HREF="node7.html#fn:WRegion.goto"><TT>WRegion.goto</TT></A>
-<BR><A HREF="node7.html#fn:WRegion.groupleader_of"><TT>WRegion.groupleader_of</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:WStatusBar.get_template_table"><TT>WStatusBar.get_template_table</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.is_systray"><TT>WStatusBar.is_systray</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.set_systray"><TT>WStatusBar.set_systray</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.set_template"><TT>WStatusBar.set_template</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.set_template_table"><TT>WStatusBar.set_template_table</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.update"><TT>WStatusBar.update</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_i"><TT>WTiling.managed_i</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:WTimer.is_set"><TT>WTimer.is_set</TT></A>
-<BR><A HREF="node7.html#fn:WTimer.reset"><TT>WTimer.reset</TT></A>
-<BR><A HREF="node7.html#fn:WTimer.set"><TT>WTimer.set</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="tex2html466"
- HREF="node11.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html460"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html454"
- HREF="node9.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html462"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html464"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html467"
- HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html461"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html455"
- HREF="node9.html">B. Full class hierarchy</A>
- <B> <A NAME="tex2html463"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html465"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html478"
- HREF="node12.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html474"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html468"
- HREF="node10.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html476"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html479"
- HREF="node12.html">Bibliography</A>
-<B> Up:</B> <A NAME="tex2html475"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html469"
- HREF="node10.html">List of functions</A>
- <B> <A NAME="tex2html477"
- 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>acrobatic</TT></STRONG>
- : <A HREF="node4.html#1462"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Alt</SPAN></STRONG>
- : <A HREF="node4.html#887"><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#885"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>resizeinc</TT></STRONG>
- : <A HREF="node4.html#1478"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1479"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Button-n</SPAN></STRONG>
- : <A HREF="node4.html#891"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>class</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1485"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>clientwin_do_manage_alt</TT></STRONG>
- : <A HREF="node7.html#8270"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>clientwin_mapped_hook</TT></STRONG>
- : <A HREF="node7.html#8271"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>clientwin_property_change_hook</TT></STRONG>
- : <A HREF="node7.html#8272"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>clientwin_unmapped_hook</TT></STRONG>
- : <A HREF="node7.html#8273"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Control</SPAN></STRONG>
- : <A HREF="node4.html#883"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>defmenu</TT></STRONG>
- : <A HREF="node4.html#1202"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>drawing engine</STRONG>
- : <A HREF="node5.html#1910"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>ETCDIR</TT></STRONG>
- : <A HREF="node4.html#584"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>float</TT></STRONG>
- : <A HREF="node4.html#1463"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>frame_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#8274"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>fullscreen</TT></STRONG>
- : <A HREF="node4.html#1464"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>ignore_resizeinc</TT></STRONG>
- : <A HREF="node4.html#1482"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1483"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>ignore_cfgrq</TT></STRONG>
- : <A HREF="node4.html#1465"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>ignore_max_size</TT></STRONG>
- : <A HREF="node4.html#1480"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>ignore_min_size</TT></STRONG>
- : <A HREF="node4.html#1481"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>ignore_net_active_window</TT></STRONG>
- : <A HREF="node4.html#1466"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>instance</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1487"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>ioncore_deinit_hook</TT></STRONG>
- : <A HREF="node7.html#8276"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>ioncore_post_layout_setup_hook</TT></STRONG>
- : <A HREF="node7.html#8277"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>ioncore_sigchld_hook</TT></STRONG>
- : <A HREF="node7.html#8275"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>ioncore_snapshot_hook</TT></STRONG>
- : <A HREF="node7.html#8278"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>ioncore_submap_ungrab_hook</TT></STRONG>
- : <A HREF="node7.html#8279"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_dockapp</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1490"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>is_transient</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1489"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>jumpto</TT></STRONG>
- : <A HREF="node4.html#1467"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textit">keysymdef.h</SPAN></STRONG>
- : <A HREF="node4.html#881"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Lock</SPAN></STRONG>
- : <A HREF="node4.html#886"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>manager</STRONG>
- : <A HREF="node3.html#382"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>max_size</TT></STRONG>
- : <A HREF="node4.html#1476"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>menuentry</TT></STRONG>
- : <A HREF="node4.html#1203"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>menus</STRONG>
- : <A HREF="node4.html#1148"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>min_size</TT></STRONG>
- : <A HREF="node4.html#1477"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">ModN</SPAN></STRONG>
- : <A HREF="node4.html#884"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>name</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1488"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>new_group</TT></STRONG>
- : <A HREF="node4.html#1468"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">NumLock</SPAN></STRONG>
- : <A HREF="node4.html#889"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>Obj</STRONG>
- : <A HREF="node3.html#410"><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#1469"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>orientation</TT></STRONG>
- : <A HREF="node4.html#1470"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>parent</STRONG>
- : <A HREF="node3.html#367"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>PREFIX</TT></STRONG>
- : <A HREF="node4.html#583"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>region_do_warp_alt</TT></STRONG>
- : <A HREF="node7.html#8281"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>region_notify_hook</TT></STRONG>
- : <A HREF="node7.html#8283"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>role</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1486"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG>root window</STRONG>
- : <A HREF="node3.html#331"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>screen</STRONG><DL>
-<DD><STRONG>physical</STRONG> : <A HREF="node3.html#334"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node3.html#332"><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#8282"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">ScrollLock</SPAN></STRONG>
- : <A HREF="node4.html#890"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Shift</SPAN></STRONG>
- : <A HREF="node4.html#882"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>statusbar</TT></STRONG>
- : <A HREF="node4.html#1471"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>style</STRONG>
- : <A HREF="node5.html#1909"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submenu</TT></STRONG>
- : <A HREF="node4.html#1204"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>substyle</STRONG>
- : <A HREF="node5.html#1922"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>switchto</TT></STRONG>
- : <A HREF="node4.html#1472"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><SPAN CLASS="textit">system.mk</SPAN></STRONG>
- : <A HREF="node4.html#585"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>target</TT></STRONG>
- : <A HREF="node4.html#1473"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>tiling_placement_alt</TT></STRONG>
- : <A HREF="node7.html#8280"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG>transient</STRONG>
- : <A HREF="node4.html#1443"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>transient_mode</TT></STRONG>
- : <A HREF="node4.html#1474"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transparent</TT></STRONG>
- : <A HREF="node4.html#1475"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>userpos</TT></STRONG>
- : <A HREF="node4.html#1484"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WClientWin</STRONG>
- : <A HREF="node3.html#412"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WEdln</STRONG>
- : <A HREF="node3.html#425"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WFrame</STRONG>
- : <A HREF="node3.html#416"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroup</STRONG>
- : <A HREF="node3.html#417"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupCW</STRONG>
- : <A HREF="node3.html#419"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupWS</STRONG>
- : <A HREF="node3.html#418"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>Winprops</STRONG>
- : <A HREF="node4.html#1295"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>WInput</STRONG>
- : <A HREF="node3.html#424"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WMessage</STRONG>
- : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WRegion</STRONG>
- : <A HREF="node3.html#411"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WRootWin</STRONG>
- : <A HREF="node3.html#415"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WScreen</STRONG>
- : <A HREF="node3.html#414"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WSplit</STRONG>
- : <A HREF="node3.html#422"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WTiling</STRONG>
- : <A HREF="node3.html#421"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WWindow</STRONG>
- : <A HREF="node3.html#413"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>Xinerama</STRONG>
- : <A HREF="node3.html#335"><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#888"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG>xprop</STRONG>
- : <A HREF="node4.html#1439"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-
-</DL>
-
-<P>
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>Bibliography</TITLE>
-<META NAME="description" CONTENT="Bibliography">
-<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="node13.html">
-<LINK REL="previous" HREF="node11.html">
-<LINK REL="up" HREF="ionconf.html">
-<LINK REL="next" HREF="node13.html">
-</HEAD>
-
-<BODY >
-
-<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html492"
- HREF="node13.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html486"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html480"
- HREF="node11.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html488"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html490"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html493"
- HREF="node13.html">About this document ...</A>
-<B> Up:</B> <A NAME="tex2html487"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html481"
- HREF="node11.html">Index</A>
- <B> <A NAME="tex2html489"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html491"
- HREF="node11.html">Index</A></B>
-<BR><BR></DIV>
-<!--End of Navigation Panel-->
-
-<H2><A NAME="SECTION001200000000000000000">
-Bibliography</A>
-</H2><DL COMPACT><DD><P></P><DT><A NAME="scripts">1</A>
-<DD> The Ion 3 scripts repository,
- <TT><A NAME="tex2html11"
- HREF="http://iki.fi/tuomov/repos/ion-scripts-3/">http://iki.fi/tuomov/repos/ion-scripts-3/</A></TT>.
-</DL>
-
-<P>
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="node12.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="tex2html498"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html494"
- HREF="node12.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html500"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html502"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Up:</B> <A NAME="tex2html499"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html495"
- HREF="node12.html">Bibliography</A>
- <B> <A NAME="tex2html501"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html503"
- HREF="node11.html">Index</A></B>
-<BR>
-<BR></DIV>
-<!--End of Navigation Panel-->
-
-<H1><A NAME="SECTION001300000000000000000">
-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 © 1993, 1994, 1995, 1996,
-Nikos Drakos,
-Computer Based Learning Unit, University of Leeds.
-<BR>
-Copyright © 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 2007-09-27
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html253"
- HREF="node3.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html247"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html241"
- HREF="node1.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html249"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html251"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html254"
- HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html248"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html242"
- HREF="node1.html">Contents</A>
- <B> <A NAME="tex2html250"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html252"
- 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 the X11 window manager
-Ion, version 3. It is an attempt at documenting things that go into 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 might first want to first glance at some
-Lua documentation at
-
-<P>
-<DIV ALIGN="CENTER">
-<TT><A NAME="tex2html1"
- HREF="http://www.lua.org/docs.html">http://www.lua.org/docs.html</A></TT>, or
-<BR> <TT><A NAME="tex2html2"
- HREF="http://lua-users.org/wiki/LuaTutorial">http://lua-users.org/wiki/LuaTutorial</A></TT>,
-
-</DIV>
-
-<P>
-although this should not be strictly necessary for basic modifications
-of configuration files for anyone with at least some familiarity with
-programming languages.
-
-<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 (or ``region'') and class hierarchies. While it may
-not be necessary to study the latter for basic copy-paste modifications
-of configuration files - for that you should not really need this
-manual either - it is, however, essential to for more extensive
-customisation, due to the semi-object-oriented nature of most of
-Ion's scripting interface. Knowing the different object types also
-helps dealing with the different binding ``contexts'' (see
-Section <A HREF="node4.html#sec:bindings">3.3</A>) that to some extent mirror these classes.
-
-<P>
-The new user, fed up with the default key bindings and eager to
-just quickly configure Ion to his liking, may therefore just want
-to skip to Chapter <A HREF="node4.html#chap:config">3</A>, and attempt to work from therefore.
-That chapter provides the very basic Ion configuration know-how
-is provided: all the different configuration files and their locations
-are explained, instructions are given to allow the reader to
-configure bindings and so-called ``winprops'', and the statusbar
-templates are also explained.
-
-<P>
-Next, 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. More advanced
-aspects of Ion's scripting interface are documented in Chapter
-<A HREF="node6.html#chap:tricks">5</A>.
-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 an alphabetical
-listing of all these functions may be found.
-
-<P>
-
-<DIV CLASS="navigation"><HR>
-<!--Navigation Panel-->
-<A NAME="tex2html253"
- HREF="node3.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html247"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html241"
- HREF="node1.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html249"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html251"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html254"
- HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html248"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html242"
- HREF="node1.html">Contents</A>
- <B> <A NAME="tex2html250"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html252"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html267"
- HREF="node4.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html261"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html255"
- HREF="node2.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html263"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html265"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html268"
- HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html262"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
- HREF="node2.html">1. Introduction</A>
- <B> <A NAME="tex2html264"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html266"
- 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="tex2html269"
- HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html270"
- HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
-<UL>
-<LI><A NAME="tex2html271"
- 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="tex2html272"
- 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="tex2html273"
- 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="tex2html274"
- 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="tex2html275"
- 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 dock-apps.
- 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_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 <SPAN CLASS="textit">ion3</SPAN> executable loads all of the
-modules mentioned above except <SPAN CLASS="textit">mod_dock</SPAN>.
-The stock configuration for the <SPAN CLASS="textit">pwm3</SPAN> executable (which differs
-from the <SPAN CLASS="textit">ion3</SPAN> executable in a few configuration details)
-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="#foot297"><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 hierarchy 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="404"></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
- |-->WRegion
- | |-->WClientWin
- | |-->WWindow
- | | |-->WMPlex
- | | | |-->WFrame
- | | | |-->WScreen
- | | | |-->WRootWin
- | | |-->WInput (mod_query)
- | | |-->WEdln (mod_query)
- | | |-->WMessage (mod_query)
- | |-->WGroup
- | | |-->WGroupWS
- | | |-->WGroupCW
- | |-->WTiling (mod_tiling)
- |-->WSplit (mod_tiling)
-</PRE></TD></TR>
-</TABLE>
-</DIV>
-
-<P>
-The core classes:
-
-<P>
-<DL>
-<DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="410"></A>
- Is the base of Ion's object system.
-
-<P>
-</DD>
-<DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="411"></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="412"></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="413"></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>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.
-
-<P>
-</DD>
-<DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="414"></A> is an instance of WMPlex
- for screens.
-
-<P>
-</DD>
-<DT><STRONG>WRootWin</STRONG></DT>
-<DD><A NAME="415"></A> is the class for
- root windows<A NAME="331"></A> of X screens<A NAME="332"></A>.
- It is an instance of WScreen.
- Note that an ``X screen'' or root window is not necessarily a
- single physical screen<A NAME="334"></A> as a root window
- may be split over multiple screens when ugly hacks such as
- Xinerama<A NAME="335"></A> are used. (Actually there can be only
- one root window when Xinerama is used.)
-
-<P>
-</DD>
-<DT><STRONG>WFrame</STRONG></DT>
-<DD><A NAME="416"></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="417"></A> is the base class for groups.
- Particular types of groups are workspaces
- (WGroupWS<A NAME="418"></A>)
- and groups of client windows
- (WGroupCW<A NAME="419"></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="421"></A> is the class for tilings
- of frames.
-
-</DD>
-<DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="422"></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="424"></A> is a virtual base class for the
- two classes below.
-
-</DD>
-<DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="425"></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="426"></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="367"></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="378"></A>
-<TABLE>
-<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.2:</STRONG>
-Most common parent-child relations</CAPTION>
-<TR><TD><PRE>
- WRootWins
- |-->WScreens
- |-->WGroupWSs
- |-->WTilings
- |-->WClientWins in full screen mode
- |-->WFrames
- |-->WGroupCWs
- |-->WClientWins
- |-->WFrames for transients
- |-->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="382"></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="390"></A>
-<TABLE>
-<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.3:</STRONG>
-Most common manager-managed relations</CAPTION>
-<TR><TD><PRE>
- WRootWins
- |-->WScreens
- |-->WGroupCWs for full screen WClientWins
- | |-->WClientWins
- | |-->WFrames for transients (dialogs)
- | |--> WClientWin
- |-->WGroupWSs for workspaces
- | |-->WTiling
- | | |-->WFrames
- | | | |-->WGroupCWs (with contents as above)
- | | |-->possibly a WStatusBar or WDock
- | |-->WFrames for floating content
- | |-->possibly a WEdln, WMessage or WMenu
- | |-->possibly a WStatusBar or WDock (if no tiling)
- |-->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="foot297">... 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="tex2html267"
- HREF="node4.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html261"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html255"
- HREF="node2.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html263"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html265"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html268"
- HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html262"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
- HREF="node2.html">1. Introduction</A>
- <B> <A NAME="tex2html264"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html266"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html288"
- HREF="node5.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html282"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html276"
- HREF="node3.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html284"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html286"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html289"
- HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html283"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html277"
- HREF="node3.html">2. Preliminaries: Key concepts</A>
- <B> <A NAME="tex2html285"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html287"
- 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="tex2html290"
- HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html291"
- 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="tex2html292"
- HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
-<UL>
-<LI><A NAME="tex2html293"
- 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="tex2html294"
- HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html295"
- 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="tex2html296"
- HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html297"
- 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="tex2html298"
- 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="tex2html299"
- 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="tex2html300"
- HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
-<UL>
-<LI><A NAME="tex2html301"
- 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="tex2html302"
- 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="tex2html303"
- 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="tex2html304"
- 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="tex2html305"
- HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
-<UL>
-<LI><A NAME="tex2html306"
- HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html307"
- HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html308"
- HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html309"
- HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
-<UL>
-<LI><A NAME="tex2html310"
- HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
-<LI><A NAME="tex2html311"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
-</UL>
-</UL>
-<BR>
-<LI><A NAME="tex2html312"
- HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
-<UL>
-<LI><A NAME="tex2html313"
- HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
-<LI><A NAME="tex2html314"
- HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
-<LI><A NAME="tex2html315"
- HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
-<UL>
-<LI><A NAME="tex2html316"
- HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
-<LI><A NAME="tex2html317"
- HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
-<LI><A NAME="tex2html318"
- HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</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> 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">cfg_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. Finally, the statusbar is explained in <A HREF="#sec:statusbar">3.6</A>.
-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="583"></A> or
-<TT>ETCDIR</TT><A NAME="584"></A> in
-<SPAN CLASS="textit">system.mk</SPAN><A NAME="585"></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. For sake of maintainability
-of your customised configuration, it is recommended against copying all of
-the files there. Only copy those files you actually need to modify. Most
-simple customisations, such as changes in a few bindings, are best done
-entirely within <SPAN CLASS="textit">cfg_ion.lua</SPAN>.
-
-<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. Configuration files can also be compiled into <SPAN CLASS="textit">.lc</SPAN> files,
-and these are attempted by the configuration file search routines before
-<SPAN CLASS="textit">.lua</SPAN> files.
-
-<P>
-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_layouts.lua</SPAN></TD>
-<TD ALIGN="LEFT">Some workspace layouts are defined here.</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 (<code>--</code> is a
-line comment in Lua) in the actual file, as they're the defaults
-nevertheless.
-
-<P>
-The first thing done 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. Note that these two are Lua
-variables used in the configuration files only, and not Ion settings.
-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>
-There are some other options as well; see the documentation
-for <A HREF="node7.html#fn:ioncore.set"><TT>ioncore.set</TT></A> for details.
-
-<P>
-As a next step, in the actual <SPAN CLASS="textit">cfg_ion.lua</SPAN> file, we load
-<SPAN CLASS="textit">cfg_defaults.lua</SPAN>. However, it is merely a convenience file for
-doing exactly what we will going through below, and what is commented
-out in the actual file. If you do not want to load what
-<SPAN CLASS="textit">cfg_defaults.lua</SPAN> loads, just comment out the corresponding
-line, and uncomment the lines for the files that you want:
-
-<P>
-<PRE>
---dopath("cfg_defaults")
-dopath("cfg_ioncore")
-dopath("cfg_kludges")
-dopath("cfg_layouts")
-</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 collected 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("[^:]+: (.*)(<[0-9]+>)", "$1$2$|$1$<...$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<3>' to 'barba...<3>'; for
-details see the function reference entry for <A HREF="node7.html#fn:ioncore.defshortening"><TT>ioncore.defshortening</TT></A>.
-Finally, <SPAN CLASS="textit">cfg_layouts.lua</SPAN> defines some workspace layouts, available
-through the <SPAN CLASS="textbf">F9</SPAN> workspace creation query.
-
-<P>
-To actually be able to do something besides display windows in full screen
-mode, we must next load some modules:
-
-<P>
-<PRE>
-dopath("mod_query")
-dopath("mod_menu")
-dopath("mod_tiling")
-dopath("mod_statusbar")
---dopath("mod_dock")
-dopath("mod_sp")
-</PRE>
-
-<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"><IMG
- WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.png"
- ALT="$n$"></SPAN>:th workspaces is bound to <SPAN CLASS="textbf">Mod1+n</SPAN> while the switch to
-<SPAN CLASS="MATH"><IMG
- WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
- SRC="img1.png"
- ALT="$n$"></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 following
-special variables are available in this code.
-
-<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>. This should seldom be needed.</TD>
-</TR>
-</TABLE>
-
-<P>
-For example, supposing <TT>_</TT> (underscore) 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="node7.html#fn:ioncore.kpress"><TT>kpress</TT></A>, and
- <A HREF="node7.html#fn:ioncore.kpress_wait"><TT>kpress_wait</TT></A><TT>(keyspec, handler [, guard])</TT>.
-</LI>
-<LI><A HREF="node7.html#fn:ioncore.submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
-</LI>
-<LI><A HREF="node7.html#fn:ioncore.submap_enter"><TT>submap_enter</TT></A>, and
- <A HREF="node7.html#fn:ioncore.submap_wait"><TT>submap_wait</TT></A><TT>(handler [, guard])</TT>.
-</LI>
-</UL>
-Mouse actions:
-
-<UL>
-<LI><A HREF="node7.html#fn:ioncore.mclick"><TT>mclick</TT></A>,
- <A HREF="node7.html#fn:ioncore.mdblclick"><TT>mdblclick</TT></A>,
- <A HREF="node7.html#fn:ioncore.mpress"><TT>mpress</TT></A>, and
- <A HREF="node7.html#fn:ioncore.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="node7.html#fn:ioncore.kpress_wait"><TT>kpress_wait</TT></A> is simply
-<A HREF="node7.html#fn:ioncore.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="node7.html#fn:ioncore.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="node7.html#fn:ioncore.kpress"><TT>kpress</TT></A>) in the submap.
-The <A HREF="node7.html#fn:ioncore.submap_enter"><TT>submap_enter</TT></A> handler is called when the submap
-is entered, in which this handler is defined. Likewise, the
-<A HREF="node7.html#fn:ioncore.submap_wait"><TT>submap_wait</TT></A> handler is called when all modifiers
-have been released while waiting for further key presses 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="#foot880"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
-<A NAME="881"></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:
-
-<P>
-<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="882"></A>
-<A NAME="883"></A>
-<A NAME="884"></A>
-<A NAME="885"></A>
-<A NAME="886"></A>
-
-<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="887"></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="888"></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"><IMG
- WIDTH="82" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
- SRC="img2.png"
- ALT="$N=1{\ldots} 5$"></SPAN>)
-bound to <SPAN CLASS="textbf">NumLock</SPAN><A NAME="889"></A> or
-<SPAN CLASS="textbf">ScrollLock</SPAN><A NAME="890"></A>
-by default because such<A NAME="tex2html8"
- HREF="#foot859"><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="891"></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&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 `' (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="1148"></A>
-<A NAME="1202"></A>
-<A NAME="1203"></A>
-<A NAME="1204"></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>focuslist</TT>'</TD>
-<TD ALIGN="LEFT">List of client windows with recent activity in them, followed by
- previously focused client windows.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>focuslist_</TT>'</TD>
-<TD ALIGN="LEFT">List of previously focused client windows.</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.</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="1295"></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="1462"></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>float</TT> (boolean)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1463"></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="1464"></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="1465"></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="1466"></A>
- Ignore extended WM hints <TT>_NET_ACTIVE_WINDOW</TT> request.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>jumpto</TT> (boolean)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1467"></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>new_group</TT> (string)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1468"></A>
- If the region specified by <TT>target</TT> winprop does not exist
- (or that winprop is not set), create a new workspace using the
- previously stored layout (see <A HREF="node7.html#fn:ioncore.deflayout"><TT>ioncore.deflayout</TT></A>) named by
- this property. After creating the workspace, <TT>target</TT> is
- attempted to be found again. (If that still fails, the newly
- created workspace is still asked to manage the client window.)
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>oneshot</TT> (boolean)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1469"></A>
- Discard this winprop after first use.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>orientation</TT> (string)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1470"></A>
- The orientation of the window: one of `<TT>vertical</TT>' or
- `<TT>horizontal</TT>'. This is only useful when using the
- window as a status display.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>statusbar</TT> (string)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1471"></A>
- Put the window in the statusbar, in the named tray component,
- (The default tray component is called simply `<TT>systray</TT>',
- and others you give names to in your custom template, always
- prefixed by `<TT>systray_</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>switchto</TT> (boolean)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1472"></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="1473"></A>
- The name of an object (workspace, frame) that should manage
- windows of this type. See also <TT>new_group</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DT><STRONG>Winprop:</STRONG></DT>
-<DD><TT>transient_mode</TT> (string)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1474"></A>
- `<TT>normal</TT>': No change in behaviour. `<TT>current</TT>':
- 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. `<TT>off</TT>': 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>transparent</TT> (boolean)
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1475"></A>
- Should frames be made transparent when this window is selected?
-<BR>
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION00451000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-</H3>
-
-<P>
-Additionally, the winprops
-<TT>max_size</TT><A NAME="1476"></A>,
-<TT>min_size</TT><A NAME="1477"></A>,
-<TT>aspect</TT><A NAME="1478"></A>,
-<TT>resizeinc</TT><A NAME="1479"></A>,
-and
-<TT>ignore_max_size</TT><A NAME="1480"></A>,
-<TT>ignore_min_size</TT><A NAME="1481"></A>,
-<TT>ignore_aspect</TT><A NAME="1482"></A>,
-<TT>ignore_resizeinc</TT><A NAME="1483"></A>,
-may be used to override application-supplied size hints. The four
-first ones are tables with the fields <TT>w</TT> and <TT>h</TT>, indicating
-the width and height size hints in pixels, and the latter ignore
-winprop is a boolean.
-
-<P>
-Finally, the boolean
-<TT>userpos</TT><A NAME="1484"></A> option may be used to
-override the <TT>USPosition</TT> flag of the size hints. Normally,
-when this flag is set, Ion tries to respect the supplied window
-position more than when it is not set. Obviously, this makes sense
-only for floating windows.
-
-<P>
-
-<H3><A NAME="SECTION00452000000000000000"></A>
-<A NAME="sec:classesrolesinstances"></A>
-<BR>
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances
-</H3>
-
-<P>
-The identification information supported are
-<TT>class</TT><A NAME="1485"></A>,
-<TT>role</TT><A NAME="1486"></A>,
-<TT>instance</TT><A NAME="1487"></A>,
-<TT>name</TT><A NAME="1488"></A>,
-<TT>is_transient</TT><A NAME="1489"></A>, and
-<TT>is_dockapp</TT><A NAME="1490"></A>.
-It is not necessary to specify all of these fields.
-The first three are strings, and must exactly match the
-corresponding information obtained from the window's properties.
-The <TT>name</TT> field is a Lua-style regular expression matched against
-the window's title. The <TT>is_transient</TT> field is a boolean that can
-be used to include or exclude transients only, while the <TT>is_dockapp</TT>
-field is set by Ion for the dock windows of Window Maker dockapp protocol
-dockapps. Usually this is the only information available for these
-<SPAN CLASS="textit">icon</SPAN> windows.
-
-<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">other</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"> </TD>
-<TD ALIGN="LEFT"> </TD>
-<TD ALIGN="LEFT"> </TD>
-<TD ALIGN="LEFT">etc.</TD>
-</TR>
-</TABLE>
-</DIV>
-
-<P>
-If there are multiple matching winprops with the same
-<TT>class</TT>, <TT>role</TT> and <TT>instance</TT>, but other information
-different, the most recently defined one is used.
-
-<P>
-
-<H3><A NAME="SECTION00453000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</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="1439"></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="1443"></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
-simultaneously 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="tex2html9"
- HREF="#foot1492"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</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 program's
-windows, for example. Some other programs only set this information
-after the window has been mapped, i.e. the window manager has been
-told to start managing it, which is obviously too late.
-Gtk applications in particular are often guilty on both counts.
-
-<P>
-
-<H3><A NAME="SECTION00454000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
-</H3>
-
-<P>
-
-<H4><A NAME="SECTION00454100000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</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="SECTION00454200000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</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>
-
-<H2><A NAME="SECTION00460000000000000000"></A>
-<A NAME="sec:statusbar"></A>
-<BR>
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar
-</H2>
-
-<P>
-The <SPAN CLASS="textit">mod_statusbar</SPAN> module provides a statusbar that adapts to
-layouts of tilings, using only the minimal space needed. Ion only
-supports one adaptive ``status display'' object per screen, so this
-statusbar is mutually exclusive with the embedded mode of <SPAN CLASS="textit">mod_dock</SPAN>
-docks.
-
-<P>
-The statusbar is configured in <SPAN CLASS="textit">cfg_statusbar.lua</SPAN>. Typically,
-the configuration consists of two steps: creating a statusbar with
-<A HREF="node7.html#fn:mod_statusbar.create"><TT>mod_statusbar.create</TT></A>, and then launching the separate
-<TT>ion-statusd</TT> status daemon process with
-<A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>. This latter phase is done
-automatically, if it was not done by the configuration file, but
-the configuration file may pass extra parameters to <TT>ion-statusd</TT>
-monitors. (See Section <A HREF="node6.html#sec:statusd">5.4</A> for more information on
-writing <TT>ion-statusd</TT> monitors.)
-
-<P>
-A typical <SPAN CLASS="textit">cfg_statusbar.lua</SPAN> configuration might look as follows:
-
-<P>
-<PRE>
--- Create a statusbar
-mod_statusbar.create{
- screen = 0, -- First screen,
- pos = 'bl', -- bottom left corner
- systray = true, -- Swallow systray windows
-
- -- The template
- template = "[ %date || load:% %>load || mail:% %>mail_new/%>mail_total ]"
- .. " %filler%systray",
-}
-
--- Launch ion-statusd.
-mod_statusbar.launch_statusd{
- -- Date meter
- date={
- -- ISO-8601 date format with additional abbreviated day name
- date_format='%a %Y-%m-%d %H:%M',
- },
-}
-</PRE>
-
-<P>
-
-<H3><A NAME="SECTION00461000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
-</H3>
-
-<P>
-The template specifies what is shown on the statusbar; for information
-on the other options to <A HREF="node7.html#fn:mod_statusbar.create"><TT>mod_statusbar.create</TT></A>, see the reference.
-Strings of the form `<TT>%spec</TT>' tokens specially interpreter by
-the statusbar; the rest appears verbatim. The <TT>spec</TT> typically
-consists of the name of the value/meter to display (beginning with a latin
-alphabet), but may be preceded by an alignment specifier and a number
-specifying the minimum width. The alignment specifiers are: `<TT>></TT>'
-for right, `<TT><</TT>' for left, and `<TT>|</TT>' for centring. Additionally,
-space following `<TT>%</TT>' (that is, the string `<TT>% </TT>'), adds
-``stretchable space'' at that point. The special string `<TT>%filler</TT>'
-may be used to flush the rest of the template to the right end of
-the statusbar.
-
-<P>
-The stretchable space works as follows: <SPAN CLASS="textit">mod_statusbar</SPAN> remembers
-the widest string (in terms of graphical presentation) that it has
-seen for each meter, unless the width has been otherwise constrained.
-If there is stretchable space in the template, it tries to make the
-meter always take this much space, by stretching any space found in
-the direction indicated by the alignment specifier: the opposite
-direction for left or right alignment, and both for centring.
-
-<P>
-
-<H3><A NAME="SECTION00462000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
-</H3>
-
-<P>
-The special `<TT>%systray</TT>' and `<TT>%systray_*</TT>'
-(`<TT>*</TT>' varying) monitors indicate where to place system tray
-windows. There may be multiple of these. KDE-protocol system tray
-icons are placed in `<TT>%systray</TT>' automatically, unless disabled
-with the <TT>systray</TT> option. Otherwise the <TT>statusbar</TT> winprop may
-be used to place any window in any particular `<TT>%systray_*</TT>'.
-
-<P>
-
-<H3><A NAME="SECTION00463000000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
-</H3>
-
-<P>
-The part before the first
-underscore of each monitor name, describes the script/plugin/module
-that provides the meter, and any configuration should be passed
-in the a corresponding sub-table <A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>.
-Ion comes with date, load and mail (for plain old mbox)
-<TT>ion-statusd</TT> monitor scripts. More may be obtained from
-the scripts repository [<A
- HREF="node12.html#scripts">1</A>]. These included scripts
-provide the following monitors and their options
-
-<P>
-
-<H4><A NAME="SECTION00463100000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
-</H4>
-
-<P>
-Options: <TT>date_format</TT>: The date format in as seen above,
-in the usual <TT>strftime</TT> format. <TT>formats</TT>: table of
-formats for additional date monitors, the key being the name
-of the monitor (without the `<TT>date_</TT>' prefix).
-
-<P>
-Monitors: `<TT>date</TT>' and other user-specified ones with the
-`<TT>date_</TT>' prefix.
-
-<P>
-
-<H4><A NAME="SECTION00463200000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
-</H4>
-
-<P>
-Options: <TT>update_interval</TT>: Update interval in milliseconds
-(default 10s). <TT>important_threshold</TT>: Threshold above which
-the load is marked as important (default 1.5), so that the
-drawing engine may be suitably hinted. <TT>critical_threshold</TT>:
-Threshold above which the load is marked as critical (default 4.0).
-
-<P>
-Monitors: `<TT>load</TT>' (for all three values),
-`<TT>load_1min</TT>', `<TT>load_5min</TT>' and `<TT>load_15min</TT>'.
-
-<P>
-
-<H4><A NAME="SECTION00463300000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
-</H4>
-
-<P>
-Options: <TT>update_interval</TT>: Update interval in milliseconds
-(default 1min). <TT>mbox</TT>: mbox-format mailbox location
-(default <code>$MAIL</code>).
-<TT>files</TT>: list of additional mailboxes, the key giving the
-name of the monitor.
-
-<P>
-Monitors: `<TT>mail_new</TT>', `<TT>mail_unread</TT>',
-`<TT>mail_total</TT>', and corresponding
-`<TT>mail_*_new</TT>', `<TT>mail_*_unread</TT>', and `<TT>mail_*_total</TT>'
-for the additional mailboxes (`<TT>*</TT>' varying).
-
-<P>
-
-<P>
-<BR><HR><H4>Footnotes</H4>
-<DL>
-<DT><A NAME="foot880">...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="foot859">... 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="foot1492">... window.</A><A
- HREF="node4.html#tex2html9"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</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="tex2html288"
- HREF="node5.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html282"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html276"
- HREF="node3.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html284"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html286"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html289"
- HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html283"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html277"
- HREF="node3.html">2. Preliminaries: Key concepts</A>
- <B> <A NAME="tex2html285"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html287"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html331"
- HREF="node6.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html325"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html319"
- HREF="node4.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html327"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html329"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html332"
- HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html326"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html320"
- HREF="node4.html">3. Basic configuration</A>
- <B> <A NAME="tex2html328"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html330"
- 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="tex2html333"
- 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="tex2html334"
- 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="tex2html335"
- 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="tex2html336"
- 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="tex2html337"
- 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="tex2html338"
- 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="tex2html339"
- 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="tex2html340"
- 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="tex2html341"
- 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="tex2html342"
- 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="tex2html343"
- 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="tex2html344"
- 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="tex2html345"
- 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="tex2html346"
- 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="tex2html347"
- HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
-<UL>
-<LI><A NAME="tex2html348"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
-<LI><A NAME="tex2html349"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
-<LI><A NAME="tex2html350"
- HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</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. Some additional settings and
-user attributes are explained in Sections <A HREF="#sec:grmisc">4.3</A>.
-
-<P>
-
-<H2><A NAME="SECTION00510000000000000000"></A>
-<A NAME="sec:engines"></A><A NAME="1909"></A><A NAME="1910"></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 (`<TT>*</TT>') 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
-*
-</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="1922"></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.
- Substyle attributes: `<TT>active</TT>'/`<TT>inactive</TT>'
- (mutually exclusive) and
- `<TT>quasiactive</TT>'/`<TT>not_quasiactive</TT>'.
- A frame is ``quasiactive'' when an active region
- has a back-link to it, such as a detached window.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>frame-tiled</TT>'</TD>
-<TD ALIGN="LEFT">A more specific style for tiled frames.
- Substyle attributes 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.
- Substyle attributes:
- `<TT>active</TT>'/`<TT>inactive</TT>' and
- `<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.
- Additional substyle attributes include:
- `<TT>tagged</TT>'/`<TT>not_tagged</TT>',
- `<TT>dragged</TT>'/`<TT>not_dragged</TT>',
- `<TT>activity</TT>'/`<TT>no_activity</TT>',
- `<TT>quasiactive</TT>'/`<TT>not_quasiactive</TT>'.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled</TT>',</TD>
-<TD ALIGN="LEFT"> </TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled-alt</TT>',</TD>
-<TD ALIGN="LEFT"> </TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>tab-frame-floating</TT>',</TD>
-<TD ALIGN="LEFT"> </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.
- Additional substyle attributes include `<TT>submenu</TT>' and
- occasionally also `<TT>activity</TT>' is used.</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.
- Substyle attributes: `<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>stdisp</TT>'</TD>
-<TD ALIGN="LEFT">Any status display.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>stdisp-dock</TT>'</TD>
-<TD ALIGN="LEFT">The dock.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">`<TT>stdisp-statusbar</TT>'</TD>
-<TD ALIGN="LEFT">The statusbar. Substyles include:
- the name of any monitor/meter (such as `<TT>date</TT>'), and
- the supplied hint. Typical hints are: `<TT>normal</TT>',
- `<TT>important</TT>', and `<TT>critical</TT>'.</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 style file 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="2025"></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 ``shadow'' 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
- `<TT>elevated</TT>'/`<TT>inlaid</TT>'/`<TT>ridge</TT>'/`<TT>groove</TT>'
- as seen in the above sketch.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>border_sides</TT></TD>
-<TD ALIGN="LEFT">A string indicating which sides of the border
- to draw: `<TT>all</TT>'/`<TT>tb</TT>'/`<TT>lr</TT>' for all,
- top and bottom, and left and right. To control between
- left/right and top/bottom, use the pixel options below.</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 `<TT>left</TT>'/`<TT>right</TT>'/`<TT>center</TT>'.</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"></A>
-<A NAME="sec:grmisc"></A>
-<BR>
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings
-</H2>
-
-<P>
-
-<H3><A NAME="SECTION00531000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
-</H3>
-
-<P>
-The function <A HREF="node7.html#fn:WFrame.set_grattr"><TT>WFrame.set_grattr</TT></A> may be used to give frames
-(and their tabs) arbitrary extra attributes to be passed to the
-drawing engine. Hence, by configuring such substyles in the style
-configuration files, and turning on the attribute when needed,
-scripts may display visual cues related to the frame. There is
-also one extra attribute specially interpreted by the default
-drawing engine: the `<TT>numbered</TT>' attribute, which causes
-numbers to be displayed on the tabs.
-
-<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>frame</TT>'</A>
-</H3>
-
-<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>
-<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"><IMG
- WIDTH="42" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
- SRC="img3.png"
- ALT="$(0, 1]$"></SPAN>.</TD>
-</TR>
-</TABLE>
-
-<P>
-
-<H3><A NAME="SECTION00533000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</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="tex2html331"
- HREF="node6.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html325"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html319"
- HREF="node4.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html327"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html329"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html332"
- HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html326"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html320"
- HREF="node4.html">3. Basic configuration</A>
- <B> <A NAME="tex2html328"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html330"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html363"
- HREF="node7.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html357"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html351"
- HREF="node5.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html359"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html361"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html364"
- HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html358"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html352"
- HREF="node5.html">4. Graphical styles</A>
- <B> <A NAME="tex2html360"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html362"
- 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="tex2html365"
- HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html366"
- HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
-<UL>
-<LI><A NAME="tex2html367"
- 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="tex2html368"
- 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="tex2html369"
- HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html370"
- 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 explained 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 successfully. 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="node7.html#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A> and then calling <A HREF="node7.html#fn:WHook.add"><TT>WHook.add</TT></A>
-on the (successful) result with the handler as parameter. Similarly
-handlers are unregistered with <A HREF="node7.html#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.9</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.
-
-<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 scripts 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="#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="#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"></A>
-<A NAME="sec:statusd"></A>
-<BR>
-<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors
-</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 initialisation 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>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="tex2html363"
- HREF="node7.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html357"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html351"
- HREF="node5.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html359"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html361"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html364"
- HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html358"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html352"
- HREF="node5.html">4. Graphical styles</A>
- <B> <A NAME="tex2html360"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html362"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html383"
- HREF="node8.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html377"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html371"
- HREF="node6.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html379"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html381"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html384"
- HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html378"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html372"
- HREF="node6.html">5. Scripting</A>
- <B> <A NAME="tex2html380"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html382"
- 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="tex2html385"
- 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="tex2html386"
- 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="tex2html387"
- 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="tex2html388"
- 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="tex2html389"
- 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="tex2html390"
- 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="tex2html391"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
-<LI><A NAME="tex2html392"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
-<LI><A NAME="tex2html393"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
-<LI><A NAME="tex2html394"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
-<LI><A NAME="tex2html395"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
-<LI><A NAME="tex2html396"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
-<LI><A NAME="tex2html397"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
-<LI><A NAME="tex2html398"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
-<LI><A NAME="tex2html399"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
-<LI><A NAME="tex2html400"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
-<LI><A NAME="tex2html401"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
-<LI><A NAME="tex2html402"
- HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
-<LI><A NAME="tex2html403"
- HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
-</UL>
-<BR>
-<LI><A NAME="tex2html404"
- 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="tex2html405"
- 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="tex2html406"
- 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="tex2html407"
- 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="tex2html408"
- 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="tex2html409"
- 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="tex2html410"
- 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="tex2html411"
- 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="tex2html412"
- 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="tex2html413"
- 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="tex2html414"
- 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="tex2html415"
- 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="tex2html416"
- 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="tex2html417"
- 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="tex2html418"
- 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="tex2html419"
- HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
-<UL>
-<LI><A NAME="tex2html420"
- HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
-</UL>
-<BR>
-<LI><A NAME="tex2html421"
- HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html422"
- HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
-<LI><A NAME="tex2html423"
- HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
-<UL>
-<LI><A NAME="tex2html424"
- HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
-</UL></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="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="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="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="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="fn:ioncore.create_timer"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>WTimer ioncore.create_timer()</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Create a new timer.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.create_ws"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.create_ws(scr, tmpl, layout)</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 the layout named with <TT>layout</TT>.
- If no <TT>layout</TT> is given, "default" is used.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="fn:ioncore.deflayout"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.deflayout(name, tab)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Define a new workspace layout with name <TT>name</TT>, and
- attach/creation parameters given in <TT>tab</TT>. The layout
- "empty" may not be defined.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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="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="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="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="fn:ioncore.getlayout"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.getlayout(name, all)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Get named layout (or all of the latter parameter is set,
- but this is for internal use only).
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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>Returns first region on activity list.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.activity_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.activity_i(function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over activity list until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.clientwin_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.clientwin_i(function fn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over client windows until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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">$<</TD>
-<TD ALIGN="LEFT">Remove characters on the left of this marker to shorten the
- string.</TD>
-</TR>
-<TR><TD ALIGN="LEFT">$></TD>
-<TD ALIGN="LEFT">Remove characters on the right of this marker to shorten the
- string. Only the first $< or $> within an alternative
- shortening is used.</TD>
-</TR>
-</TABLE>
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.detach"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.detach(WRegion reg, string how)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Detach or reattach <TT>reg</TT>, depending on whether <TT>how</TT>
- is `<TT>set</TT>', `<TT>unset</TT>' or `<TT>toggle</TT>'. (Detaching
- means making <TT>reg</TT> managed by its nearest ancestor WGroup,
- framed if <TT>reg</TT> is not itself WFrame. Reattaching means
- making it managed where it used to be managed, if a return-placeholder
- exists.)
- If <TT>reg</TT> is the `bottom' of some group, the whole group is
- detached. If <TT>reg</TT> is a WWindow, it is put into a
- frame.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.focushistory_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.focushistory_i(function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over focus history until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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 (the fields <TT>userdir</TT>,
- <TT>sessiondir</TT>, <TT>searchpath</TT> in the returned table).
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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>.
- 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="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>.
- 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="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="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="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="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="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="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="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="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="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>.
- 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="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>
- (`<TT>up</TT>', `<TT>down</TT>', `<TT>left</TT>', `<TT>right</TT>',
- `<TT>next</TT>', `<TT>prev</TT>', or `<TT>any</TT>'). The table <TT>param</TT>
- 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 boolean functions <TT>ascend_filter</TT> and <TT>descend_filter</TT>
- on <TT>WRegion</TT> pairs (<TT>to</TT>, <TT>from</TT>), are used to decide when
- to descend or ascend into another region.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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 and stderr.
- When data is received through one of these pipes, <TT>h</TT> or <TT>errh</TT>
- is called with that data. When the pipe is closed, the handler is called
- with <TT>nil</TT> argument. The PID of the new process is returned, or
- -1 on error.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="fn:ioncore.region_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.region_i(function fn, string typenam)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over all non-client window regions with (inherited) class
- <TT>typenam</TT> until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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
- `<TT>last</TT>', `<TT>next</TT>', (for after current),
- or `<TT>next-act</TT>'
- (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 `<TT>udlr</TT>' (up-down, then left-right),
- `<TT>lrud</TT>' (left-right, then up-down), or
- `<TT>random</TT>'.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>mousefocus</TT></TD>
-<TD ALIGN="LEFT">(string) Mouse focus mode:
- `<TT>disable</TT>' or `<TT>sloppy</TT>'.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>unsqueeze</TT></TD>
-<TD ALIGN="LEFT">(boolean) Auto-unsqueeze transients/menus/queries/etc.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>autoraise</TT></TD>
-<TD ALIGN="LEFT">(boolean) Autoraise regions in groups on goto.</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="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 (the fields <TT>sessiondir</TT>, <TT>searchpath</TT>
- of <TT>tab</TT>).
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="fn:ioncore.tagged_clear"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void ioncore.tagged_clear()</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Untag all regions.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.tagged_first"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>WRegion ioncore.tagged_first(bool untag)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns first tagged object, untagging it as well if <TT>untag</TT> is set.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.tagged_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.tagged_i(function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over tagged regions until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.unsqueeze"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void ioncore.unsqueeze(WRegion reg, bool override)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Try to detach <TT>reg</TT> if it fits poorly in its
- current location. This function does not do anything,
- unless <TT>override</TT> is set or the <TT>unsqueeze</TT> option
- of <A HREF="#fn:ioncore.set"><TT>ioncore.set</TT></A> is set.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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. 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="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="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="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="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>cmd</TT>.
- The <TT>guard</TT> controls when the binding can be called.
- For more informationp see Section <A HREF="node4.html#sec:bindings">3.3</A>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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:ioncore.kpress"><TT>ioncore.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="fn:ioncore.defer"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool ioncore.defer(function fn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Defer execution of <TT>fn</TT> until the main loop.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.get_hook"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>WHook ioncore.get_hook(string name)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Find named hook <TT>name</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.match_winprop_dflt"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.match_winprop_dflt(prop, cwin, id)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>The basic name-based winprop matching criteria.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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>cmd</TT>.
- For more information, see Section <A HREF="node4.html#sec:bindings">3.3</A>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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:ioncore.mclick"><TT>ioncore.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="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="fn:ioncore.menuentry"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.menuentry(name, cmd, guard_or_opts)</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. The
- parameter <TT>cmd</TT> and <TT>guard_or_opts</TT> (when string) are similar
- to those of <A HREF="#fn:ioncore.defbindings"><TT>ioncore.defbindings</TT></A>. If <TT>guard_or_opts</TT> is
- a table, it may contains the <TT>guard</TT> field, and the <TT>priority</TT>
- field, for controlling positioning of entries in context menus.
- (The default priority is 1 for most entries, and -1 for auto-generated
- submenus.)
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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:ioncore.mclick"><TT>ioncore.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="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="fn:ioncore.submap"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.submap(keyspec, 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="fn:ioncore.submap_enter"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.submap_enter(cmd, guard)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Submap enter event for bindings.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.submap_wait"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.submap_wait(cmd, guard)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Submap modifier release event for bindings.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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>
-
- <DL>
-<DD><A NAME="fn:ioncore.tabnum.clear"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.tabnum.clear()</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Clear all tab numbers set by <A HREF="#fn:ioncore.tabnum.show"><TT>ioncore.tabnum.show</TT></A>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.tabnum.show"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.tabnum.show(frame, delay)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Show tab numbers on <TT>frame</TT>, clearing them when submap
- grab is released the next time. If <TT>delay</TT> is given, in
- milliseconds, the numbers are not actually displayed until this
- time has passed.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:ioncore.tagged_attach"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.tagged_attach(reg, param)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Attach tagged regions to <TT>reg</TT>. The method of attach
- depends on the types of attached regions and whether <TT>reg</TT>
- implements <TT>attach_framed</TT> and <TT>attach</TT>. If <TT>param</TT>
- is not set, the default of <code>{switchto=true}</code> is used.
- The function returns <TT>true</TT> if all tagged regions were
- succesfully attached, and <TT>false</TT> otherwisse.
-
-</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="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="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 <TT>XKillWindow</TT>) the client that owns
- the X window correspoding to <TT>cwin</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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="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 `<TT>tab</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WFrame.set_grattr"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WFrame.set_grattr(WFrame frame, string attr, string how)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set extra drawing engine attributes for the frame.
- The parameter <TT>attr</TT> is the attribute, and <TT>how</TT> is
- one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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>
- (`<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
- 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="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="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">(string) Class of the object to be created. Mandatory.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
-<TD ALIGN="LEFT">(string) Name of the object to be created.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
-<TD ALIGN="LEFT">(boolean) Should the region be switched to?</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
-<TD ALIGN="LEFT">(integer) Stacking level; default is 1.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
-<TD ALIGN="LEFT">(boolean) Make object modal; ignored if level is set.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
-<TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>bottom</TT></TD>
-<TD ALIGN="LEFT">(boolean) Mark the attached region as the
- ``bottom'' of <TT>ws</TT>.</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="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="fn:WGroup.is_fullscreen"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WGroup.is_fullscreen(WGroup grp)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Is <TT>reg</TT> in full screen mode?
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WGroup.managed_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WGroup.managed_i(WGroup ws, function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over managed regions of <TT>ws</TT> until <TT>iterfn</TT> returns
- <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WGroup.set_bottom"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WGroup.set_bottom(WGroup ws, WRegion reg)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Sets the `bottom' of <TT>ws</TT>. The region <TT>reg</TT> must already
- be managed by <TT>ws</TT>, unless <TT>nil</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WGroup.set_fullscreen"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WGroup.set_fullscreen(WGroup grp, string how)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set client window <TT>reg</TT> full screen state according to the
- parameter <TT>how</TT> (one of `<TT>set</TT>', `<TT>unset</TT>', or
- `<TT>toggle</TT>'). Resulting state is returned, which may not be
- what was requested.
-
-</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="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> WHook functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WHook.add"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WHook.add(WHook hk, function efn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Add <TT>efn</TT> to the list of functions to be called when the
- hook <TT>hk</TT> is triggered.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WHook.listed"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WHook.listed(WHook hk, function efn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Is <TT>fn</TT> hooked to hook <TT>hk</TT>?
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WHook.remove"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WHook.remove(WHook hk, function efn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Remove <TT>efn</TT> from the list of functions to be called when the
- hook <TT>hk</TT> is triggered.
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION00717000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WInfoWin.set_text"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WInfoWin.set_text(WInfoWin p, string str, integer maxw)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set contents of the info window.
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION00718000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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>passive</TT></TD>
-<TD ALIGN="LEFT">(boolean) Skip in certain focusing operations.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>pseudomodal</TT></TD>
-<TD ALIGN="LEFT">(boolean) The attached region is ``pseudomodal''
- if the stacking level dictates it to be modal.
- This means that the region may be hidden to display
- regions with lesser stacking levels.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
-<TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</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="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> ``left'' within objects managed by <TT>mplex</TT> on list 1.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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> on the mutually exclusive list of <TT>mplex</TT>.
- The indices begin from zero.. If <TT>reg</TT> is not on the list,
- -1 is returned.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="fn:WMPlex.managed_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WMPlex.managed_i(WMPlex mplex, function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over managed regions of <TT>mplex</TT> until <TT>iterfn</TT> returns
- <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="fn:WMPlex.mx_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WMPlex.mx_i(WMPlex mplex, function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over numbered/mutually exclusive region list of <TT>mplex</TT>
- until <TT>iterfn</TT> returns <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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 on the mutually exclusive
- list of <TT>mplex</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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>
- (one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
- The resulting state is returned.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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> to <TT>index</TT> within the mutually exclusive
- list of <TT>mplex</TT>. Special values for <TT>index</TT> are:
- <TABLE CELLPADDING=3 WIDTH="100%">
-<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"><IMG
- WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img4.png"
- ALT="$-1$"></SPAN></TD>
-<TD ALIGN="LEFT">Last.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"><IMG
- WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
- SRC="img5.png"
- ALT="$-2$"></SPAN></TD>
-<TD ALIGN="LEFT">After <A HREF="#fn:WMPlex.mx_current"><TT>WMPlex.mx_current</TT></A>.</TD>
-</TR>
-</TABLE>
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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">(string) 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>fullsize</TT></TD>
-<TD ALIGN="LEFT">(boolean) Waste all available space.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>action</TT></TD>
-<TD ALIGN="LEFT">(string) If this field is set to `<TT>keep</TT>',
- <TT>pos</TT> and <TT>fullsize</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="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="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="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="SECTION00719000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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="fn:WMoveresMode.geom"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>table WMoveresMode.geom(WMoveresMode mode)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns current geometry.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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>
-
- <DL>
-<DD><A NAME="fn:WMoveresMode.rqgeom"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>table WMoveresMode.rqgeom(WMoveresMode mode, table g)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Request exact geometry in move/resize mode. For details on parameters,
- see <A HREF="#fn:WRegion.rqgeom"><TT>WRegion.rqgeom</TT></A>.
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION007110000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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="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="fn:WRegion.get_configuration"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>table WRegion.get_configuration(WRegion reg, bool clientwins)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Get configuration tree. If <TT>clientwins</TT> is unset, client windows
- are filtered out.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="fn:WRegion.groupleader_of"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>WRegion WRegion.groupleader_of(WRegion reg)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns the group of <TT>reg</TT>, if <TT>reg</TT> is its bottom,
- and <TT>reg</TT> itself otherwise.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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="fn:WRegion.rqclose"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void 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>). The region will not be destroyed when
- this function returns. To find out if and when it is destroyed,
- use the `<TT>deinit</TT>' notification. 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="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. For further details, see
- notes for <A HREF="#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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 `<TT>front</TT>' and `<TT>back</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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 must be
- one of `<TT>set</TT>', `<TT>unset</TT>' or `<TT>toggle</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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><n></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="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><n></TT>' suffix or this function will fail.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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>
- (one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
- The resulting state is returned.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="SECTION007111000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="SECTION007112000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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="SECTION007113000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WTimer.is_set"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WTimer.is_set(WTimer timer)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Is timer set?
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WTimer.reset"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WTimer.reset(WTimer timer)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Reset timer.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WTimer.set"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WTimer.set(WTimer timer, integer msecs, function fn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set <TT>timer</TT> to call <TT>fn</TT> in <TT>msecs</TT> milliseconds.
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION007114000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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="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="SECTION007115000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="SECTION007116000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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">look.lua</SPAN>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="SECTION007117000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="SECTION007118000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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>
-
- <DL>
-<DD><A NAME="fn:mod_tiling.untile"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool mod_tiling.untile(WTiling tiling)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>If <TT>tiling</TT> is managed by some group, float the frames in
- the tiling in that group, and dispose of <TT>tiling</TT>.
-
-</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="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="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="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="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="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="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="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="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 `<TT>vertical</TT>' or
- `<TT>horizontal</TT>'.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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>split</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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>
- (`<TT>left</TT>', `<TT>right</TT>', `<TT>up</TT>', or `<TT>down</TT>').
- If <TT>any</TT> is not set, the status display is not considered.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WTiling.managed_i"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WTiling.managed_i(WTiling ws, function iterfn)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Iterate over managed regions of <TT>ws</TT> until <TT>iterfn</TT> returns
- <TT>false</TT>.
- The function itself returns <TT>true</TT> if it reaches the end of list
- without this happening.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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> (`<TT>left</TT>', `<TT>right</TT>', `<TT>up</TT>',
- or `<TT>down</TT>'). 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="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="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> (`<TT>set</TT>', `<TT>unset</TT>', or
- `<TT>toggle</TT>') and <TT>dirstr</TT> (`<TT>left</TT>', `<TT>right</TT>',
- `<TT>up</TT>', or `<TT>down</TT>'). The new status is returned
- (and <TT>false</TT> also on error).
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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> (`<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
- A split of the appropriate is returned, if there was a change.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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> `<TT>above</TT>', `<TT>below</TT>'
- `<TT>left</TT>' of, or `<TT>right</TT>' of <TT>node</TT> as indicated
- by <TT>dirstr</TT>. If <TT>dirstr</TT> is prefixed with
- `<TT>floating:</TT>' a floating split is created.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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 `<TT>left</TT>', `<TT>right</TT>', `<TT>top</TT>' or
- `<TT>bottom</TT>') 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 `<TT>floating:</TT>', a floating
- split is created.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="fn:WTiling.unsplit_at"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WTiling.unsplit_at(WTiling ws, WRegion reg)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Try to relocate regions managed by <TT>reg</TT> to another frame
- and, if possible, destroy it.
-
-</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="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="fn:mod_query.message"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_query.message(mplex, str)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Display a message in <TT>mplex</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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, bool exact)</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. If <TT>exact</TT> is not set, <TT>s</TT> only required
- to be a prefix of the match.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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>
-<TR><TD ALIGN="LEFT"><TT>caseicompl</TT></TD>
-<TD ALIGN="LEFT">(boolean) Turn some completions case-insensitive
- (default: false).</TD>
-</TR>
-</TABLE>
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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 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="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="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="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 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="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="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="fn:mod_query.query_menu"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_query.query_menu(mplex, sub, 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="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="fn:mod_query.query_renameworkspace"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_query.query_renameworkspace(mplex, ws)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>This function asks for a name new for the workspace <TT>ws</TT>,
- or the one on which <TT>mplex</TT> resides, if it is not set.
- If <TT>mplex</TT> is not set, one is looked for.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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>
-
- <DL>
-<DD><A NAME="fn:mod_query.warn"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_query.warn(mplex, str)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Display an error message box in the multiplexer <TT>mplex</TT>.
-
-</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="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="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="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="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="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="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="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="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 `<TT>next</TT>' or
- `<TT>prev</TT>', respectively.
- The <TT>mode</TT> may be `<TT>history</TT>' or `<TT>normal</TT>'. 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 `<TT>next-always</TT>' and `<TT>prev-always</TT>' for <TT>cycle</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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"><IMG
- WIDTH="142" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
- SRC="img6.png"
- ALT="$\{t,m,b\}\times\{t,c,b\}$"></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="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
- `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
- The resulting status is returned.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><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
- `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
- The resulting status is returned.
-
-</DD>
-</DL>
-
-<P>
-
-<H2><A NAME="SECTION00770000000000000000"></A>
-<A NAME="sec:statusbarref"></A>
-<BR>
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN>
-</H2>
-
- <DL>
-<DD><A NAME="fn:mod_statusbar.create"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_statusbar.create(param)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Create a statusbar. The possible parameters in the
- table <TT>param</TT> are:
-
-<P>
-<TABLE CELLPADDING=3 WIDTH="100%">
-<TR><TD ALIGN="LEFT">Variable</TD>
-<TD ALIGN="LEFT">Type</TD>
-<TD ALIGN="LEFT">Description</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>template</TT></TD>
-<TD ALIGN="LEFT">string</TD>
-<TD ALIGN="LEFT">The template; see
- Section <A HREF="node4.html#sec:statusbar">3.6</A>.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
-<TD ALIGN="LEFT">string</TD>
-<TD ALIGN="LEFT">Position: `<TT>tl</TT>', `<TT>tr</TT>',
- `<TT>bl</TT>' or `<TT>br</TT>'
- (for the obvious combinations of
- top/left/bottom/right).</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>screen</TT></TD>
-<TD ALIGN="LEFT">integer</TD>
-<TD ALIGN="LEFT">Screen number to create the statusbar on.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>fullsize</TT></TD>
-<TD ALIGN="LEFT">boolean</TD>
-<TD ALIGN="LEFT">If set, the statusbar will waste
- space instead of adapting to layout.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>systray</TT></TD>
-<TD ALIGN="LEFT">boolaen</TD>
-<TD ALIGN="LEFT">Swallow (KDE protocol) systray icons.</TD>
-</TR>
-</TABLE>
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:mod_statusbar.inform"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_statusbar.inform(name, value)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Inform of a value.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:mod_statusbar.launch_statusd"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_statusbar.launch_statusd(cfg)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Load modules and launch <SPAN CLASS="textit">ion-statusd</SPAN> with configuration
- table <TT>cfg</TT>. The options for each <SPAN CLASS="textit">ion-statusd</SPAN> monitor
- script should be contained in the corresponding sub-table of <TT>cfg</TT>.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:mod_statusbar.statusbars"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>table mod_statusbar.statusbars()</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns a list of all statusbars.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:mod_statusbar.update"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>mod_statusbar.update(update_templates)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Update statusbar contents. To be called after series
- of <A HREF="#fn:mod_statusbar.inform"><TT>mod_statusbar.inform</TT></A> calls.
-
-</DD>
-</DL>
-
-<P>
-
-<H3><A NAME="SECTION00771000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
-</H3>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.get_template_table"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>table WStatusBar.get_template_table(WStatusBar sb)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Get statusbar template as table.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.is_systray"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WStatusBar.is_systray(WStatusBar sb)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Is <TT>sb</TT> used as a systray?
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.set_systray"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WStatusBar.set_systray(WStatusBar sb, string how)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Enable or disable use of <TT>sb</TT> as systray.
- The parameter <TT>how</TT> can be one of
- `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
- Resulting state is returned.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.set_template"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WStatusBar.set_template(WStatusBar sb, string tmpl)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set statusbar template.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.set_template_table"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WStatusBar.set_template_table(WStatusBar sb, table t)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set statusbar template as table.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="fn:WStatusBar.update"></A>
-</DD>
-<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>void WStatusBar.update(WStatusBar sb, table t)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Set statusbar template.
-
-</DD>
-</DL>
-
-<P>
-
-<H2><A NAME="SECTION00780000000000000000"></A>
-<A NAME="sec:deref"></A>
-<BR>
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN>
-</H2>
-
- <DL>
-<DD><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="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="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="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="SECTION00790000000000000000"></A>
-<A NAME="sec:hookref"></A>
-<BR>
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks
-</H2>
-
-<P>
-
- <DL>
-<DD><A NAME="8270"></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 dock-app.</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="8271"></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="8272"></A>
-
-</DD>
-<DT><STRONG>Hook name:</STRONG></DT>
-<DD><A NAME="clientwin_property_change_hook"></A><TT>clientwin_property_change_hook</TT>
-
-</DD>
-<DT><STRONG>Parameters:</STRONG></DT>
-<DD><TT>(WClientWin, integer)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Called when the property identified by the parameter atom id
- (integer) has changed on a client window.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="8273"></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="8274"></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 occurred</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="8275"></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="8276"></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="8277"></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 main-loop, except no windows are yet being managed.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="8278"></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="8279"></A>
-
-</DD>
-<DT><STRONG>Hook name:</STRONG></DT>
-<DD><A NAME="ioncore_submap_ungrab_hook"></A><TT>ioncore_submap_ungrab_hook</TT>
-
-</DD>
-<DT><STRONG>Parameters:</STRONG></DT>
-<DD><TT>()</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>This hook is used to signal whenever Ion leaves the submap grab mode.
-
-</DD>
-</DL>
-
-<P>
-
- <DL>
-<DD><A NAME="8280"></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 successful 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="8281"></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="8282"></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>
-
- <DL>
-<DD><A NAME="8283"></A>
-
-</DD>
-<DT><STRONG>Hook name:</STRONG></DT>
-<DD><A NAME="region_notify_hook"></A><TT>region_notify_hook</TT>
-
-</DD>
-<DT><STRONG>Parameters:</STRONG></DT>
-<DD><TT>(WRegion, string)</TT>
-
-</DD>
-<DT><STRONG>Description:</STRONG></DT>
-<DD>Signalled when something (minor) has changed in relation to
- the first parameter region. The string argument gives the
- change:
-
-<P>
-<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
-<TR><TD ALIGN="LEFT">String</TD>
-<TD ALIGN="LEFT">Description</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>deinit</TT></TD>
-<TD ALIGN="LEFT">The region is about to be deinitialised.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>activated</TT></TD>
-<TD ALIGN="LEFT">The region has received focus.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>inactivated</TT></TD>
-<TD ALIGN="LEFT">The region has lost focus.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>activity</TT></TD>
-<TD ALIGN="LEFT">There's been activity in the region itself.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>sub_activity</TT></TD>
-<TD ALIGN="LEFT">There's been activity in some sub-region.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
-<TD ALIGN="LEFT">The name of the region has changed.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>unset_manager</TT></TD>
-<TD ALIGN="LEFT">The region no longer has a manager.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>set_manager</TT></TD>
-<TD ALIGN="LEFT">The region now has a manager.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>tag</TT></TD>
-<TD ALIGN="LEFT">Tagging state has changed.</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>pseudoactivated</TT></TD>
-<TD ALIGN="LEFT">The region has become pseudo-active
- (see below).</TD>
-</TR>
-<TR><TD ALIGN="LEFT"><TT>pseudoinactivated</TT></TD>
-<TD ALIGN="LEFT">The region is no longer pseudo-active.</TD>
-</TR>
-</TABLE>
-
-<P>
-A region is pseudo-active, when a) it is itself not active (does
- not not have the focus, and may not even have a window that could
- have it), but b) some region managed by it is active.
-
-</DD>
-</DL>
-
-<P>
-
-<P>
-
-<H2><A NAME="SECTION007100000000000000000"></A>
-<A NAME="sec:miscref"></A>
-<BR>
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous
-</H2>
-
-<P>
-
-<H3><A NAME="SECTION007101000000000000000"></A>
-<A NAME="sec:sizepolicies"></A>
-<BR>
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies
-</H3>
-
-<P>
-Some functions accept a <TT>sizepolicy</TT> parameter. The possible
-values are:
-
-<P>
-<DIV ALIGN="LEFT">
-`<TT>default</TT>',
-`<TT>full</TT>',
-`<TT>full_bounds</TT>',
-`<TT>free</TT>',
-`<TT>free_glue</TT>',
-`<TT>northwest</TT>',
-`<TT>north</TT>',
-`<TT>northeast</TT>',
-`<TT>west</TT>',
-`<TT>center</TT>',
-`<TT>east</TT>',
-`<TT>southwest</TT>',
-`<TT>south</TT>',
-`<TT>southeast</TT>',
-`<TT>stretch_top</TT>',
-`<TT>stretch_bottom</TT>',
-`<TT>stretch_left</TT>',
-`<TT>stretch_right</TT>',
-`<TT>free_glue_northwest</TT>',
-`<TT>free_glue_north</TT>',
-`<TT>free_glue_northeast</TT>',
-`<TT>free_glue_west</TT>',
-`<TT>free_glue_center</TT>',
-`<TT>free_glue_east</TT>',
-`<TT>free_glue_southwest</TT>',
-`<TT>free_glue_south</TT>', and
-`<TT>free_glue_southeast</TT>'.
-
-</DIV>
-
-<P>
-The ``free'' policies allow the managed
-object to be moved around, whereas the other versions do not.
-The ``glue'' policies glue the object to some border, while allowing
-it to be moved away from it by user action, but not automatically.
-The ``stretch'' policies stretch the object along the given border,
-while the coordinate-based policies simply place the object along
-that border.
-
-<P>
-
-<P>
-
-<DIV CLASS="navigation"><HR>
-<!--Navigation Panel-->
-<A NAME="tex2html383"
- HREF="node8.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html377"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html371"
- HREF="node6.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html379"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html381"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html384"
- HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html378"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html372"
- HREF="node6.html">5. Scripting</A>
- <B> <A NAME="tex2html380"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html382"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html437"
- HREF="node9.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html431"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html425"
- HREF="node7.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html433"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html435"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html438"
- HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html432"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html426"
- HREF="node7.html">6. Function reference</A>
- <B> <A NAME="tex2html434"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html436"
- 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="tex2html439"
- 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 © 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="tex2html437"
- HREF="node9.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html431"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html425"
- HREF="node7.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html433"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html435"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html438"
- HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html432"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html426"
- HREF="node7.html">6. Function reference</A>
- <B> <A NAME="tex2html434"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html436"
- HREF="node11.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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="tex2html452"
- HREF="node10.html">
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html446"
- HREF="ionconf.html">
-<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html440"
- HREF="node8.html">
-<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html448"
- HREF="node1.html">
-<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html450"
- HREF="node11.html">
-<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
-<BR>
-<B> Next:</B> <A NAME="tex2html453"
- HREF="node10.html">List of functions</A>
-<B> Up:</B> <A NAME="tex2html447"
- HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html441"
- HREF="node8.html">A. The GNU General</A>
- <B> <A NAME="tex2html449"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html451"
- 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
- |-->WHook
- |-->WTimer
- |-->WMoveresMode
- |-->WRegion
- | |-->WClientWin
- | |-->WWindow
- | | |-->WMPlex
- | | | |-->WFrame
- | | | |-->WScreen
- | | | |->WRootWin
- | | |-->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)
-</PRE>
-
-<P>
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-\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}{}
+++ /dev/null
-\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}
+++ /dev/null
-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.
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html8"
- HREF="node1.html">Contents</A></B>
- <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 © 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>
+++ /dev/null
-# 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;
-
+++ /dev/null
-/* 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 }
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html8"
- HREF="node1.html">Contents</A></B>
- <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 © 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>
+++ /dev/null
-# 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;
-
+++ /dev/null
-<!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>
- <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>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html79"
- HREF="node1.html">Contents</A></B>
- <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="#foot210"><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 hierarchy 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="317"></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
- |-->WRegion
- | |-->WClientWin
- | |-->WWindow
- | | |-->WMPlex
- | | | |-->WFrame
- | | | |-->WScreen
- | | | |-->WRootWin
- | | |-->WInput (mod_query)
- | | |-->WEdln (mod_query)
- | | |-->WMessage (mod_query)
- | |-->WGroup
- | | |-->WGroupWS
- | | |-->WGroupCW
- | |-->WTiling (mod_tiling)
- |-->WSplit (mod_tiling)
-</PRE></TD></TR>
-</TABLE>
-</DIV>
-
-<P>
-The core classes:
-
-<P>
-<DL>
-<DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="323"></A>
- Is the base of Ion's object system.
-
-<P>
-</DD>
-<DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="324"></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="325"></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="326"></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>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.
-
-<P>
-</DD>
-<DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="327"></A> is an instance of WMPlex
- for screens.
-
-<P>
-</DD>
-<DT><STRONG>WRootWin</STRONG></DT>
-<DD><A NAME="328"></A> is the class for
- root windows<A NAME="244"></A> of X screens<A NAME="245"></A>.
- It is an instance of WScreen.
- Note that an ``X screen'' or root window is not necessarily a
- single physical screen<A NAME="247"></A> as a root window
- may be split over multiple screens when ugly hacks such as
- Xinerama<A NAME="248"></A> are used. (Actually there can be only
- one root window when Xinerama is used.)
-
-<P>
-</DD>
-<DT><STRONG>WFrame</STRONG></DT>
-<DD><A NAME="329"></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="330"></A> is the base class for groups.
- Particular types of groups are workspaces
- (WGroupWS<A NAME="331"></A>)
- and groups of client windows
- (WGroupCW<A NAME="332"></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="334"></A> is the class for tilings
- of frames.
-
-</DD>
-<DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="335"></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="337"></A> is a virtual base class for the
- two classes below.
-
-</DD>
-<DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="338"></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="339"></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="280"></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="291"></A>
-<TABLE>
-<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
-Most common parent-child relations</CAPTION>
-<TR><TD><PRE>
- WRootWins
- |-->WScreens
- |-->WGroupWSs
- |-->WTilings
- |-->WClientWins in full screen mode
- |-->WFrames
- |-->WGroupCWs
- |-->WClientWins
- |-->WFrames for transients
- |-->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="295"></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="303"></A>
-<TABLE>
-<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
-Most common manager-managed relations</CAPTION>
-<TR><TD><PRE>
- WRootWins
- |-->WScreens
- |-->WGroupCWs for full screen WClientWins
- | |-->WClientWins
- | |-->WFrames for transients (dialogs)
- | |--> WClientWin
- |-->WGroupWSs for workspaces
- | |-->WTiling
- | | |-->WFrames
- | | | |-->WGroupCWs (with contents as above)
- | | |-->possibly a WStatusBar or WDock
- | |-->WFrames for floating content
- | |-->possibly a WEdln, WMessage or WMenu
- | |-->possibly a WStatusBar or WDock (if no tiling)
- |-->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="foot210">... 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>
- <B> <A NAME="tex2html79"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html81"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html98"
- HREF="node1.html">Contents</A></B>
- <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 initialised <A NAME="426"></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="428"></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="429"></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>
- <B> <A NAME="tex2html98"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html100"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html112"
- HREF="node1.html">Contents</A></B>
- <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"> </TD>
-</TR>
-<TR><TD ALIGN="RIGHT">b</TD>
-<TD ALIGN="LEFT">bool</TD>
-<TD ALIGN="LEFT"> </TD>
-</TR>
-<TR><TD ALIGN="RIGHT">t</TD>
-<TD ALIGN="LEFT">ExtlTab<A NAME="519"></A></TD>
-<TD ALIGN="LEFT">Reference to Lua table</TD>
-</TR>
-<TR><TD ALIGN="RIGHT">f</TD>
-<TD ALIGN="LEFT">ExltFn<A NAME="520"></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"> </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="489"></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="513"></A>,
-<TT>extl_call_named</TT><A NAME="514"></A>,
-<TT>extl_dofile</TT><A NAME="515"></A> and
-<TT>extl_dostring</TT><A NAME="516"></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="517"></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="518"></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>
- <B> <A NAME="tex2html112"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html114"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html130"
- HREF="node1.html">Contents</A></B>
- <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="617"></A>
-function that calls watches, the deinit routine and frees memory may
-be called directly. In all other cases the <TT>mainloop_defer_destroy</TT><A NAME="618"></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>mainloop_defer_action</TT><A NAME="619"></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>mainloop_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>
- <B> <A NAME="tex2html130"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html132"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html146"
- HREF="node1.html">Contents</A></B>
- <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 <SPAN CLASS="textbf">must</SPAN> 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 spaces.
-
-<P>
-</LI>
-<LI>No extra spaces between operators, delimiters etc. except
-
-<UL>
-<LI>around logical and, or (<TT>&&</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 && c+d==e){
- ...
- }
-}
-</PRE>
-
-<P>
-has correct style while the block
-
-<P>
-<PRE>
-void foo(int a,int b) {
- if (a == b && 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>
- <B> <A NAME="tex2html146"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html148"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html164"
- HREF="node1.html">Contents</A></B>
- <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 © 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>
- <B> <A NAME="tex2html164"
- HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html166"
- HREF="node8.html">Index</A></B> </DIV>
-<!--End of Navigation Panel-->
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <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#489"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>destroy_obj</TT></STRONG>
- : <A HREF="node5.html#617"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>extl_call</TT></STRONG>
- : <A HREF="node4.html#513"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>extl_call_named</TT></STRONG>
- : <A HREF="node4.html#514"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>extl_dofile</TT></STRONG>
- : <A HREF="node4.html#515"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>extl_dostring</TT></STRONG>
- : <A HREF="node4.html#516"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>extl_set_safelist</TT></STRONG>
- : <A HREF="node4.html#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG>ExtlFn</STRONG>
- : <A HREF="node4.html#520"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>ExtlTab</STRONG>
- : <A HREF="node4.html#519"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mainloop_defer_action</TT></STRONG>
- : <A HREF="node5.html#619"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mainloop_defer_destroy</TT></STRONG>
- : <A HREF="node5.html#618"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>manager</STRONG>
- : <A HREF="node2.html#295"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>Obj</STRONG>
- : <A HREF="node2.html#323"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>parent</STRONG>
- : <A HREF="node2.html#280"><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#518"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG>root window</STRONG>
- : <A HREF="node2.html#244"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>screen</STRONG><DL>
-<DD><STRONG>physical</STRONG> : <A HREF="node2.html#247"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node2.html#245"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG>WClientWin</STRONG>
- : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WEdln</STRONG>
- : <A HREF="node2.html#338"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WFrame</STRONG>
- : <A HREF="node2.html#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroup</STRONG>
- : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupCW</STRONG>
- : <A HREF="node2.html#332"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupWS</STRONG>
- : <A HREF="node2.html#331"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WInput</STRONG>
- : <A HREF="node2.html#337"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WMessage</STRONG>
- : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WObj</STRONG>
- : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG>WObjDescr</STRONG>
- : <A HREF="node3.html#428"><SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG>WRegion</STRONG>
- : <A HREF="node2.html#324"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WRootWin</STRONG>
- : <A HREF="node2.html#328"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WScreen</STRONG>
- : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WSplit</STRONG>
- : <A HREF="node2.html#335"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WTiling</STRONG>
- : <A HREF="node2.html#334"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WWatch</STRONG>
- : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG>WWindow</STRONG>
- : <A HREF="node2.html#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>Xinerama</STRONG>
- : <A HREF="node2.html#248"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-
-</DL>
-
-<P>
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!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>
- <B> <A NAME="tex2html189"
- HREF="node1.html">Contents</A></B>
- <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 © 1993, 1994, 1995, 1996,
-Nikos Drakos,
-Computer Based Learning Unit, University of Leeds.
-<BR>
-Copyright © 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 2007-09-27
-<BR><HR>
-
-</BODY>
-</HTML>
+++ /dev/null
-
-\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*}.)
-
+++ /dev/null
-\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{tt}
-
-% 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{\codestr}[1]{`\texttt{#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{\codestr}[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}
+++ /dev/null
-
-\subsection{Size policies}
-\label{sec:sizepolicies}
-
-Some functions accept a \var{sizepolicy} parameter. The possible
-values are:
-
-\begin{flushleft}
-\codestr{default},
-\codestr{full},
-\codestr{full\_bounds},
-\codestr{free},
-\codestr{free\_glue},
-\codestr{northwest},
-\codestr{north},
-\codestr{northeast},
-\codestr{west},
-\codestr{center},
-\codestr{east},
-\codestr{southwest},
-\codestr{south},
-\codestr{southeast},
-\codestr{stretch\_top},
-\codestr{stretch\_bottom},
-\codestr{stretch\_left},
-\codestr{stretch\_right},
-\codestr{free\_glue\_northwest},
-\codestr{free\_glue\_north},
-\codestr{free\_glue\_northeast},
-\codestr{free\_glue\_west},
-\codestr{free\_glue\_center},
-\codestr{free\_glue\_east},
-\codestr{free\_glue\_southwest},
-\codestr{free\_glue\_south}, and
-\codestr{free\_glue\_southeast}.
-\end{flushleft}
-
-The ``free'' policies allow the managed
-object to be moved around, whereas the other versions do not.
-The ``glue'' policies glue the object to some border, while allowing
-it to be moved away from it by user action, but not automatically.
-The ``stretch'' policies stretch the object along the given border,
-while the coordinate-based policies simply place the object along
-that border.
+++ /dev/null
-
-\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 hierarchy 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
- | | |-->WMPlex
- | | | |-->WFrame
- | | | |-->WScreen
- | | | |-->WRootWin
- | | |-->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{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.
-
- \item[\type{WScreen}]\indextype{WScreen} is an instance of \type{WMPlex}
- for screens.
-
- \item[\type{WRootWin}]\indextype{WRootWin} is the class for
- root windows\index{root window} of X screens\index{screen!X}.
- It is an instance of \type{WScreen}.
- 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 ugly hacks such as
- Xinerama\index{Xinerama} are used. (Actually there can be only
- one root window when Xinerama is used.)
-
- \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
- | | |-->WFrames
- | | | |-->WGroupCWs (with contents as above)
- | | |-->possibly a WStatusBar or WDock
- | |-->WFrames for floating content
- | |-->possibly a WEdln, WMessage or WMenu
- | |-->possibly a WStatusBar or WDock (if no tiling)
- |-->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}
-
+++ /dev/null
-\section{Object system implementation}
-
-First, to get things clear, what are considered objects here are C
-structures containing a properly initialised \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.
+++ /dev/null
-#!/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
+++ /dev/null
-
-\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 dock-apps.
- 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\_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 \file{ion3} executable loads all of the
-modules mentioned above except \file{mod\_dock}.
-The stock configuration for the \file{pwm3} executable (which differs
-from the \file{ion3} executable in a few configuration details)
-loads another set of modules.
-
-
-\input{objects}
+++ /dev/null
-# 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;
-
+++ /dev/null
-
-\section{Writing \command{ion-statusd} monitors}
-\label{sec:statusd}
-
-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 \codestr{\%foo} or \codestr{\%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
-\codestr{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 \codestr{normal}, \codestr{important} and
-\codestr{critical} hints.
-
-
-In our example of the 'foo monitor', at script initialisation 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}
+++ /dev/null
-
-\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 explained 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 successfully. 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 (successful) 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.
-
-
-\section{Referring to regions}
-
-\subsection{Direct object references}
-
-All Ion objects are passed to Lua scripts 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}
-
Context:
-[TAG ion-3rc-20070927
-Tuomo Valkonen <tuomov@iki.fi>**20070927162233]
+[TAG ion-3rc-20071109
+Tuomo Valkonen <tuomov@iki.fi>**20071109144719]
bool ioncore_detach(WRegion *reg, int sp)
{
- WPHolder *ph=region_get_return(reg);
WFrameMode mode;
WGroup *grp;
bool set, nset;
/*EXTL_DOC
- * Detach or reattach \var{reg}, depending on whether \var{how}
- * is \codestr{set}, \codestr{unset} or \codestr{toggle}. (Detaching
- * means making \var{reg} managed by its nearest ancestor \type{WGroup},
- * framed if \var{reg} is not itself \type{WFrame}. Reattaching means
- * making it managed where it used to be managed, if a return-placeholder
- * exists.)
- * If \var{reg} is the `bottom' of some group, the whole group is
- * detached. If \var{reg} is a \type{WWindow}, it is put into a
- * frame.
+ * Detach or reattach \var{reg} or any group it is the leader of
+ * (see \fnref{WRegion.groupleader_of}), depending on whether \var{how}
+ * is \codestr{set}, \codestr{unset} or \codestr{toggle}. If this
+ * region is not a window, it is put into a frame.
+ *
+ * Detaching a region means having it managed by its nearest ancestor
+ * \type{WGroup}. Reattaching means having it managed where it used
+ * to be managed, if a ``return placeholder'' exists.
+ *
+ * Additionally, setting \var{how} to \codestr{forget}, can be used to
+ * clear this return placeholder of the group leader of \var{reg}.
*/
EXTL_EXPORT_AS(ioncore, detach)
bool ioncore_detach_extl(WRegion *reg, const char *how)
if(how==NULL)
how="set";
+ if(strcmp(how, "forget")==0){
+ region_unset_return(region_groupleader_of(reg));
+ return FALSE;
+ }
+
return ioncore_detach(reg, libtu_string_to_setparam(how));
}
/*EXTL_DOC
- * Run \var{cmd} with a read pipe connected to its stdout and stderr.
+ * Run \var{cmd} in directory \var{wd} with a read pipe connected to its
+ * stdout and stderr.
* When data is received through one of these pipes, \var{h} or \var{errh}
* is called with that data. When the pipe is closed, the handler is called
* with \code{nil} argument. The PID of the new process is returned, or
*/
EXTL_SAFE
EXTL_EXPORT
-int ioncore_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh)
+int ioncore_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh,
+ const char *wd)
{
WExecP p;
p.target=NULL;
- p.wd=NULL;
+ p.wd=wd;
p.cmd=cmd;
return mainloop_popen_bgread(cmd, setup_exec, (void*)&p, h, errh);
extern bool ioncore_exec(const char *cmd);
extern int ioncore_do_exec_on(WRegion *reg, const char *cmd, const char *wd,
ExtlFn errh);
-extern bool ioncore_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh);
+extern bool ioncore_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh,
+ const char *wd);
extern void ioncore_setup_environ(const WExecP *p);
extern void ioncore_setup_display(int xscr);
}
-/*EXTL_DOC
- * Is \var{reg} in full screen mode?
- */
-EXTL_SAFE
-EXTL_EXPORT_MEMBER
-bool group_is_fullscreen(WGroup *grp)
-{
- return REGION_IS_FULLSCREEN(grp);
-}
-
-
/*}}}*/
}
+static WRegion *groupcw_managed_disposeroot(WGroupCW *ws, WRegion *reg)
+{
+ WGroupIterTmp tmp;
+ WStacking *st;
+ WRegion *tmpr;
+
+ FOR_ALL_NODES_IN_GROUP(&ws->grp, st, tmp){
+ if(st!=ws->grp.managed_stdisp && st->reg!=reg){
+ return reg;
+ }
+ }
+
+ tmpr=region_disposeroot((WRegion*)ws);
+ return (tmpr!=NULL ? tmpr : reg);
+}
+
+
/*}}}*/
{(DynFun*)region_prepare_manage_transient,
(DynFun*)groupcw_prepare_manage_transient},
+
+ {(DynFun*)region_managed_disposeroot,
+ (DynFun*)groupcw_managed_disposeroot},
{(DynFun*)region_displayname,
(DynFun*)groupcw_displayname},
bool groupws_attach_framed_extl(WGroupWS *ws, WRegion *reg, ExtlTab t)
{
WGroupAttachParams ap=GROUPATTACHPARAMS_INIT;
- WFramedParam fp=FRAMEDPARAM_INIT;
- ExtlTab gt;
+ WFramedParam frp=FRAMEDPARAM_INIT;
if(reg==NULL)
return FALSE;
- fp.gravity=ForgetGravity;
-
- if(extl_table_is_bool_set(t, "switchto")){
- ap.switchto_set=TRUE;
- ap.switchto=TRUE;
- }
+ group_get_attach_params(&ws->grp, t, &ap);
- if(extl_table_gets_t(t, "geom", >)){
- int pos=0, size=0;
-
- fp.inner_geom.x=0;
- fp.inner_geom.y=0;
-
- if(extl_table_gets_i(gt, "x", &(ap.geom.x)))
- pos++;
- if(extl_table_gets_i(gt, "y", &(ap.geom.y)))
- pos++;
-
- if(extl_table_gets_i(gt, "w", &(ap.geom.w)))
- size++;
- if(extl_table_gets_i(gt, "h", &(ap.geom.h)))
- size++;
-
- fp.inner_geom.w=maxof(fp.inner_geom.w, 1);
- fp.inner_geom.h=maxof(fp.inner_geom.h, 1);
+ /* Sensible size is given in framedparams */
+ if(ap.geom_set){
+ ap.geom_set=0;
+ ap.geom_weak_set=1;
+ ap.geom_weak=0;
- fp.inner_geom_gravity_set=(size==2 && pos==2);
-
- extl_unref_table(gt);
+ frp.inner_geom_gravity_set=1;
+ frp.inner_geom=ap.geom;
+ frp.gravity=NorthWestGravity;
+ extl_table_gets_i(t, "gravity", &frp.gravity);
}
- return groupws_attach_framed(ws, &ap, &fp, reg);
+ return groupws_attach_framed(ws, &ap, &frp, reg);
}
}
+static bool group_empty_for_bottom_stdisp(WGroup *ws)
+{
+ WGroupIterTmp tmp;
+ WStacking *st;
+
+ FOR_ALL_NODES_IN_GROUP(ws, st, tmp){
+ if(st!=ws->bottom && st!=ws->managed_stdisp)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static WRegion *groupws_managed_disposeroot(WGroupWS *ws, WRegion *reg)
+{
+ if(group_bottom(&ws->grp)==reg){
+ if(group_empty_for_bottom_stdisp(&ws->grp)){
+ WRegion *tmpr=region_disposeroot((WRegion*)ws);
+ return (tmpr!=NULL ? tmpr : reg);
+ }
+ }
+
+ return reg;
+}
+
+
/*}}}*/
{(DynFun*)region_prepare_manage_transient,
(DynFun*)groupws_prepare_manage_transient},
+
+ {(DynFun*)region_managed_disposeroot,
+ (DynFun*)groupws_managed_disposeroot},
{(DynFun*)region_handle_drop,
(DynFun*)groupws_handle_drop},
}
-static bool group_refocus_(WGroup *ws, WStacking *st)
-{
- if(st!=ws->current_managed && st->reg!=NULL){
- if(region_may_control_focus((WRegion*)ws))
- region_set_focus(st->reg);
- else
- ws->current_managed=st;
- return TRUE;
- }
-
- return FALSE;
-}
-
-
static void group_do_set_focus(WGroup *ws, bool warp)
{
- WStacking *st=ws->current_managed;
-
- if(st==NULL || st->reg==NULL)
- st=find_to_focus(ws, NULL, TRUE);
+ WStacking *st=find_to_focus(ws, ws->current_managed, FALSE);
if(st!=NULL && st->reg!=NULL)
region_do_set_focus(st->reg, warp);
}
-static bool group_empty_for_bottom_stdisp(WGroup *ws)
-{
- WGroupIterTmp tmp;
- WStacking *st;
-
- FOR_ALL_NODES_IN_GROUP(ws, st, tmp){
- if(st!=ws->bottom && st!=ws->managed_stdisp)
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-static WRegion *group_managed_disposeroot(WGroup *ws, WRegion *reg)
-{
- if(group_bottom(ws)==reg){
- if(group_empty_for_bottom_stdisp(ws))
- return region_disposeroot((WRegion*)ws);
- }
-
- return reg;
-}
-
-
/*}}}*/
}
+static int group_must_focus(WGroup *ws, WStacking *st)
+{
+ WStacking *stacking=group_get_stacking(ws);
+
+ return (stacking!=NULL && stacking_must_focus(stacking, st));
+}
+
+
bool group_do_attach_final(WGroup *ws,
WRegion *reg,
const WGroupAttachParams *param)
group_do_set_bottom(ws, st);
/* Focus */
- sw=(param->switchto_set ? param->switchto : ioncore_g.switchto_new);
+ sw=((param->switchto_set ? param->switchto : ioncore_g.switchto_new)
+ ? st==find_to_focus(ws, st, FALSE)
+ : group_must_focus(ws, st));
- if(sw || st->level>=STACKING_LEVEL_MODAL1){
- WStacking *stf=find_to_focus(ws, st, FALSE);
-
- if(stf==st){
- /* Ok, the new region can be focused */
- group_refocus_(ws, stf);
- }
+ if(sw){
+ if(region_may_control_focus((WRegion*)ws))
+ region_set_focus(st->reg);
+ else
+ ws->current_managed=st;
}
return TRUE;
}
-static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par)
+void group_get_attach_params(WGroup *ws, ExtlTab tab,
+ WGroupAttachParams *par)
{
int tmp;
+ bool tmpb;
char *tmps;
ExtlTab g;
if(extl_table_gets_i(tab, "level", &tmp)){
if(tmp>=0){
- par->level_set=STACKING_LEVEL_NORMAL;
+ par->level_set=1;
par->level=tmp;
}
}
par->level_set=1;
}
- if(extl_table_is_bool_set(tab, "switchto"))
- par->switchto=1;
-
+ if(extl_table_gets_b(tab, "switchto", &tmpb)){
+ par->switchto=(tmpb!=0);
+ par->switchto_set=1;
+ }
+
if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
par->szplcy_set=1;
par->szplcy=tmp;
if(reg==NULL)
return NULL;
- get_params(ws, param, &par);
+ group_get_attach_params(ws, param, &par);
data.type=REGION_ATTACH_REPARENT;
data.u.reg=reg;
WGroupAttachParams par=GROUPATTACHPARAMS_INIT;
WRegionAttachData data;
- get_params(ws, param, &par);
+ group_get_attach_params(ws, param, &par);
data.type=REGION_ATTACH_LOAD;
data.u.tab=param;
static int stdisp_szplcy(const WMPlexSTDispInfo *di, WRegion *stdisp)
{
int pos=di->pos;
+ int policy=0, gravity=0;
if(di->fullsize){
if(region_orientation(stdisp)==REGION_ORIENTATION_VERTICAL){
if(pos==MPLEX_STDISP_TL || pos==MPLEX_STDISP_BL)
- return SIZEPOLICY_STRETCH_LEFT;
+ policy=SIZEPOLICY_STRETCH_LEFT;
else
- return SIZEPOLICY_STRETCH_RIGHT;
+ policy=SIZEPOLICY_STRETCH_RIGHT;
}else{
if(pos==MPLEX_STDISP_TL || pos==MPLEX_STDISP_TR)
- return SIZEPOLICY_STRETCH_TOP;
+ policy=SIZEPOLICY_STRETCH_TOP;
else
- return SIZEPOLICY_STRETCH_BOTTOM;
+ policy=SIZEPOLICY_STRETCH_BOTTOM;
}
}else{
- if(pos==MPLEX_STDISP_TL)
- return SIZEPOLICY_GRAVITY_NORTHWEST;
- else if(pos==MPLEX_STDISP_BL)
- return SIZEPOLICY_GRAVITY_SOUTHWEST;
- else if(pos==MPLEX_STDISP_TR)
- return SIZEPOLICY_GRAVITY_NORTHEAST;
- else /*if(pos=MPLEX_STDISP_BR)*/
- return SIZEPOLICY_GRAVITY_SOUTHEAST;
+ policy=SIZEPOLICY_GRAVITY;
}
+
+ if(pos==MPLEX_STDISP_TL)
+ gravity=SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_LEFT;
+ else if(pos==MPLEX_STDISP_BL)
+ gravity=SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_LEFT;
+ else if(pos==MPLEX_STDISP_TR)
+ gravity=SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_RIGHT;
+ else /*if(pos=MPLEX_STDISP_BR)*/
+ gravity=SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_RIGHT;
+
+ return (policy|gravity);
}
{(DynFun*)region_get_configuration,
(DynFun*)group_get_configuration},
- {(DynFun*)region_managed_disposeroot,
- (DynFun*)group_managed_disposeroot},
-
{(DynFun*)region_current,
(DynFun*)group_current},
extern WStacking *group_do_add_managed_default(WGroup *ws, WRegion *reg,
int level, WSizePolicy szplcy);
+extern void group_get_attach_params(WGroup *ws, ExtlTab tab,
+ WGroupAttachParams *par);
+
extern WRegion *group_do_attach(WGroup *ws,
WGroupAttachParams *param,
WRegionAttachData *data);
local framestate={}
local function do_show(frame)
- frame:set_grattr('numbered', 'set')
- framestate[frame]='set'
+ if obj_exists(frame) then
+ frame:set_grattr('numbered', 'set')
+ framestate[frame]='set'
+ else
+ framestate[frame]=nil
+ end
end
--DOC
for f, s in pairs(st) do
if s=='set' then
- f:set_grattr('numbered', 'unset')
+ if obj_exists(f) then
+ f:set_grattr('numbered', 'unset')
+ end
elseif obj_is(s, "WTimer") then
s:reset()
end
WRegion *get_rescue;
bool failed_get;
bool test;
+ int flags;
};
}
+/* Bah, unsplitissä oikestaan pitäisi tehä non-deep rescue */
+
+bool region_do_rescue_this(WRegion *tosave_, WRescueInfo *info, int ph_flags)
+{
+ WClientWin *cwin=OBJ_CAST(tosave_, WClientWin);
+ WRegion *tosave=NULL;
+
+ if(cwin!=NULL){
+ if(cwin->flags&CLIENTWIN_UNMAP_RQ)
+ return TRUE;
+ tosave=(WRegion*)cwin;
+ }else if(info->flags®ION_RESCUE_NODEEP){
+ tosave=tosave_;
+ }else{
+ /* Try to rescue whole groups. */
+ /*tosave=(WRegion*)OBJ_CAST(tosave_, WGroupCW);*/
+ }
+
+ if(tosave==NULL){
+ return region_rescue_clientwins(tosave_, info);
+ }else if(info->test){
+ return FALSE;
+ }else{
+ int phf=(info->flags®ION_RESCUE_PHFLAGS_OK ? ph_flags : 0);
+
+ if(info->ph==NULL){
+ info->ph=region_get_rescue_pholder(info->get_rescue);
+ if(info->ph==NULL){
+ info->failed_get=TRUE;
+ return FALSE;
+ }
+ }
+ return pholder_attach(info->ph, phf, tosave);
+ }
+}
+
+
bool region_rescue_some_clientwins(WRegion *reg, WRescueInfo *info,
WRegionIterator *iter, void *st)
{
while(TRUE){
WRegion *tosave=iter(st);
- WClientWin *cwin;
if(tosave==NULL)
break;
-
- cwin=OBJ_CAST(tosave, WClientWin);
-
- if(cwin==NULL){
- if(!region_rescue_clientwins(tosave, info)){
- fails++;
- if(info->failed_get)
- break;
- }
- }else if(info->test){
+
+ if(!region_do_rescue_this(tosave, info, 0)){
fails++;
- break;
- }else if(!(cwin->flags&CLIENTWIN_UNMAP_RQ)){
- if(info->ph==NULL){
- info->ph=region_get_rescue_pholder(info->get_rescue);
- if(info->ph==NULL){
- info->failed_get=TRUE;
- break;
- }
- }
- if(!pholder_attach(info->ph, 0, (WRegion*)cwin))
- fails++;
+ if(info->failed_get)
+ break;
}
}
}
-bool region_rescue(WRegion *reg, WPHolder *ph_param)
+bool region_rescue(WRegion *reg, WPHolder *ph, int flags)
{
WRescueInfo info;
bool ret;
- info.ph=ph_param;
+ info.ph=ph;
+ info.flags=flags;
info.test=FALSE;
info.get_rescue=reg;
info.failed_get=FALSE;
ret=region_rescue_clientwins(reg, &info);
- if(info.ph!=ph_param)
+ if(info.ph!=ph)
destroy_obj((Obj*)info.ph);
return ret;
WRescueInfo info;
info.ph=NULL;
+ info.flags=0;
info.test=TRUE;
info.get_rescue=reg;
info.failed_get=FALSE;
/* Rescue */
+#define REGION_RESCUE_PHFLAGS_OK 0x01
+#define REGION_RESCUE_NODEEP 0x02
+
INTRSTRUCT(WRescueInfo);
/* if ph is given, it is used, otherwise one is looked for when needed */
-extern bool region_rescue(WRegion *reg, WPHolder *ph);
+extern bool region_rescue(WRegion *reg, WPHolder *ph, int flags);
extern bool region_rescue_needed(WRegion *reg);
extern bool region_rescue_clientwins(WRegion *reg, WRescueInfo *info);
extern bool region_rescue_child_clientwins(WRegion *reg, WRescueInfo *info);
extern bool region_rescue_some_clientwins(WRegion *reg, WRescueInfo *info,
WRegionIterator *iter, void *st);
+extern bool region_do_rescue_this(WRegion *tosave, WRescueInfo *info, int ph_flags);
#endif /* ION_IONCORE_MANAGE_H */
PtrList *hidelist=NULL;
PtrList **hidelistp=(ew ? NULL : &hidelist);
WStacking *foc;
- bool within=FALSE;
+ /*bool within=FALSE;*/
if(sub==NULL && node==NULL)
return FALSE;
if(!region_prepare_focus((WRegion*)mplex, flags, res))
return FALSE;
- foc=mplex_do_to_focus_on(mplex, node, sub, hidelistp, &within);
+ foc=mplex_do_to_focus_on(mplex, node, sub, hidelistp, NULL /*&within*/);
if(foc!=NULL){
while(hidelist!=NULL){
res->reg=foc->reg;
res->flags=flags;
- return within;
+ return (foc==sub || (sub==NULL && foc==node));
}else{
return FALSE;
}
static bool mplex_stack(WMPlex *mplex, WStacking *st)
{
WStacking *tmp=NULL;
- Window bottom=None, top=None;
WStacking **stackingp=mplex_get_stackingp(mplex);
if(stackingp==NULL)
sw=(!hidden && (param->flags&MPLEX_ATTACH_SWITCHTO
|| (param->flags&MPLEX_ATTACH_UNNUMBERED
- ? modal
+ ? FALSE
: (mplex_current_node(mplex)==NULL))));
hidden=(hidden || (!sw && !(param->flags&MPLEX_ATTACH_UNNUMBERED)));
node->pseudomodal=(param->flags&MPLEX_ATTACH_PSEUDOMODAL ? 1 : 0);
if(lnode!=NULL){
+ WMPlexPHolder *ph2, *phn, *php;
+
llist_link_after(&(mplex->mx_list),
(ph!=NULL ? ph->after : NULL),
lnode);
mplex->mx_count++;
- /* Move following placeholders after new node */
- while(ph->next!=NULL)
- mplexpholder_move(ph->next, mplex, NULL, lnode);
+
+ /* Move placeholders after new node */
+ for(php=NULL, ph2=ph; ph2!=NULL; php=ph2, ph2=phn){
+ phn=ph2->next;
+ mplexpholder_move(ph2, mplex, php, lnode);
+ }
}
LINK_ITEM(mplex->mgd, node, mgr_next, mgr_prev);
mplex_do_node_display(mplex, node, FALSE);
else
region_unmap(reg);
-
- if(sw && mcf)
- mplex_refocus(mplex, node, FALSE);
+
+ if(mcf){
+ if(sw){
+ mplex_refocus(mplex, node, FALSE);
+ }else if(!hidden &&
+ (level>=STACKING_LEVEL_MODAL1 || OBJ_IS(reg, WGroup))){
+ /* New modal regions may require focusing, so try to
+ * give focus back to currently active object.
+ * (There seems to be some problem with uncontained
+ * client windows still..)
+ */
+ mplex_refocus(mplex, NULL, FALSE);
+ }
+ }
if(lnode!=NULL)
mplex_managed_changed(mplex, MPLEX_CHANGE_ADD, sw, reg);
{
bool ret1, ret2;
WMPlexIterTmp tmp;
+ WLListIterTmp ltmp;
+ WLListNode *lnode, *was_current=mplex->mx_current;
+ /* First all mx stuff to move them nicely to another mplex (when that
+ * is the case), switching to the current region in the target if
+ * allowed by ph_flags_mask region_rescue.
+ */
+ FOR_ALL_NODES_ON_LLIST(lnode, mplex->mx_list, ltmp){
+ int sw=(lnode==was_current ? PHOLDER_ATTACH_SWITCHTO : 0);
+ region_do_rescue_this(lnode->st->reg, info, sw);
+ }
+
+ /* Then the rest (possibly retrying failed mx stuff).
+ */
mplex_iter_init(&tmp, mplex);
ret1=region_rescue_some_clientwins((WRegion*)mplex, info,
(WRegionIterator*)mplex_iter,
#include "mplexpholder.h"
#include "llist.h"
#include "framedpholder.h"
+#include "basicpholder.h"
static void mplex_watch_handler(Watch *watch, Obj *mplex);
}
-static WMPlexAttachParams dummy_param={0, 0, {0, 0, 0, 0}, 0, 0};
+static void mplex_get_attach_params(WMPlex *mplex, WStacking *st,
+ WMPlexAttachParams *param)
+{
+ param->flags=(MPLEX_ATTACH_SIZEPOLICY|
+ MPLEX_ATTACH_GEOM|
+ MPLEX_ATTACH_LEVEL|
+ (st->hidden ? MPLEX_ATTACH_HIDDEN : 0)|
+ (st->lnode==NULL ? MPLEX_ATTACH_UNNUMBERED : 0));
+ param->szplcy=st->szplcy;
+ param->geom=REGION_GEOM(st->reg);
+ param->level=st->level;
+}
bool mplexpholder_init(WMPlexPHolder *ph, WMPlex *mplex, WStacking *st,
return FALSE;
}
- if(param==NULL)
- param=&dummy_param;
-
if(st!=NULL){
- if(st->lnode!=NULL)
+ mplex_get_attach_params(mplex, st, &ph->param);
+
+ if(st->lnode!=NULL){
mplexpholder_do_link(ph, mplex,
LIST_LAST(st->lnode->phs, next, prev),
st->lnode);
- else
- ph->param.flags|=MPLEX_ATTACH_UNNUMBERED;
-
- ph->param.flags|=(MPLEX_ATTACH_SIZEPOLICY|
- MPLEX_ATTACH_GEOM|
- MPLEX_ATTACH_LEVEL|
- (st->hidden ? MPLEX_ATTACH_HIDDEN : 0));
- ph->param.szplcy=st->szplcy;
- ph->param.geom=REGION_GEOM(st->reg);
- ph->param.level=st->level;
+ }
}else{
+ static WMPlexAttachParams dummy_param={0, 0, {0, 0, 0, 0}, 0, 0};
+
+ if(param==NULL)
+ param=&dummy_param;
+
ph->param=*param;
if(!(param->flags&MPLEX_ATTACH_UNNUMBERED)){
}
-WMPlexPHolder *mplex_get_rescue_pholder_for(WMPlex *mplex, WRegion *mgd)
+/*}}}*/
+
+
+/*{{ Rescue */
+
+
+WRegion *mplex_rescue_attach(WMPlex *mplex, int flags, WRegionAttachData *data)
{
+ WMPlexAttachParams param;
+
+ param.flags=0;
+
+ /* Improved attach parametrisation hack for WMPlex source */
+ if(data->type==REGION_ATTACH_REPARENT){
+ WRegion *reg=data->u.reg;
+ WMPlex *src_mplex=REGION_MANAGER_CHK(reg, WMPlex);
+ if(src_mplex!=NULL){
+ WStacking *st=ioncore_find_stacking(reg);
+ if(st!=NULL)
+ mplex_get_attach_params(src_mplex, st, ¶m);
+ }
+ }
+
+ param.flags|=(MPLEX_ATTACH_INDEX|
+ (flags&PHOLDER_ATTACH_SWITCHTO ? MPLEX_ATTACH_SWITCHTO : 0));
+ param.index=LLIST_INDEX_LAST;
+
+ return mplex_do_attach(mplex, ¶m, data);
+}
+
+
+WPHolder *mplex_get_rescue_pholder_for(WMPlex *mplex, WRegion *mgd)
+{
+#if 0
WStacking *st=mplex_find_stacking(mplex, mgd);
+ WMPlexAttachParams param;
+
+ param.flags=MPLEX_ATTACH_INDEX;
+ param.index=LLIST_INDEX_LAST;
- return create_mplexpholder(mplex, st, NULL);
+ return create_mplexpholder(mplex, st, ¶m);
+#else
+ return (WPHolder*)create_basicpholder((WRegion*)mplex,
+ (WBasicPHolderHandler*)mplex_rescue_attach);
+#endif
}
extern WMPlexPHolder *mplex_managed_get_pholder(WMPlex *mplex,
WRegion *mgd);
-extern WMPlexPHolder *mplex_get_rescue_pholder_for(WMPlex *mplex,
- WRegion *mgd);
+extern WPHolder *mplex_get_rescue_pholder_for(WMPlex *mplex,
+ WRegion *mgd);
#endif /* ION_IONCORE_MPLEXPHOLDER_H */
WPrepareFocusResult *res)
{
- if(!REGION_IS_ACTIVE(reg) || !REGION_IS_MAPPED(reg)){
+ if(TRUE /* !REGION_IS_ACTIVE(reg) ||
+ !REGION_IS_MAPPED(reg) ||
+ ioncore_g.focus_next!=NULL*/){
WRegion *mgr=REGION_MANAGER(reg);
WRegion *par=REGION_PARENT_REG(reg);
WPHolder *ph=NULL;
if(rescue){
- if(!region_rescue(reg, NULL)){
+ if(!region_rescue(reg, NULL, 0)){
warn(TR("Failed to rescue some client windows - not closing."));
return FALSE;
}
}
+static WSizePolicy org(WSizePolicy base, WSizePolicy g)
+{
+ if((base&SIZEPOLICY_VERT_MASK)==0)
+ base|=g&SIZEPOLICY_VERT_MASK;
+
+ if((base&SIZEPOLICY_HORIZ_MASK)==0)
+ base|=g&SIZEPOLICY_HORIZ_MASK;
+
+ return base;
+}
+
+
void sizepolicy(WSizePolicy *szplcy, WRegion *reg,
const WRectangle *rq_geom, int rq_flags,
WFitParams *fp)
break;
case SIZEPOLICY_STRETCH_LEFT:
- gravity_stretch_policy(SIZEPOLICY_HORIZ_LEFT|SIZEPOLICY_VERT_CENTER,
+ gravity_stretch_policy(org(*szplcy, SIZEPOLICY_HORIZ_LEFT|SIZEPOLICY_VERT_CENTER),
reg, &tmp, fp, FALSE, TRUE);
break;
case SIZEPOLICY_STRETCH_RIGHT:
- gravity_stretch_policy(SIZEPOLICY_HORIZ_RIGHT|SIZEPOLICY_VERT_CENTER,
+ gravity_stretch_policy(org(*szplcy, SIZEPOLICY_HORIZ_RIGHT|SIZEPOLICY_VERT_CENTER),
reg, &tmp, fp, FALSE, TRUE);
break;
case SIZEPOLICY_STRETCH_TOP:
- gravity_stretch_policy(SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_CENTER,
+ gravity_stretch_policy(org(*szplcy, SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_CENTER),
reg, &tmp, fp, TRUE, FALSE);
break;
case SIZEPOLICY_STRETCH_BOTTOM:
- gravity_stretch_policy(SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_CENTER,
+ gravity_stretch_policy(org(*szplcy, SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_CENTER),
reg, &tmp, fp, TRUE, FALSE);
break;
case SIZEPOLICY_FULL_EXACT:
- gravity_stretch_policy(SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_CENTER,
+ gravity_stretch_policy(org(*szplcy, SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_CENTER),
reg, &tmp, fp, TRUE, TRUE);
break;
}
+static bool mapped_filt_neq(WStacking *st, void *st_neq)
+{
+ return (st!=(WStacking*)st_neq && mapped_filt(st, NULL));
+}
+
+
static bool mgr_filt(WStacking *st, void *mgr_)
{
return (st->reg!=NULL && REGION_MANAGER(st->reg)==(WRegion*)mgr_);
}
+bool stacking_must_focus(WStacking *stacking, WStacking *st)
+{
+ WStacking *stf=stacking_find_to_focus(stacking, NULL,
+ mapped_filt_neq, NULL, st);
+
+ return (stf==NULL ||
+ (st->level>stf->level &&
+ st->level>=STACKING_LEVEL_MODAL1));
+}
+
+
/*}}}*/
uint stacking_min_level_mapped(WStacking *stacking);
+bool stacking_must_focus(WStacking *stacking, WStacking *st);
WStacking *ioncore_find_stacking(WRegion *reg);
void stacking_unassoc(WStacking *stacking);
--DOC
-- This function can be used to read completions from an external source.
-- The parameter \var{cp} is the completion proxy to be used,
--- and the string \var{cmd} the shell command to be executed. To its stdout,
--- the command should on the first line write the \var{common_beg}
+-- and the string \var{cmd} the shell command to be executed, in the directory
+-- \var{wd}.
+-- To its stdout, the command should on the first line write the \var{common_beg}
-- parameter of \fnref{WComplProxy.set_completions} (which \var{fn} maybe used
-- to override) and a single actual completion on each of the successive lines.
-- The function \var{reshnd} may be used to override a result table
-- building routine.
-function mod_query.popen_completions(cp, cmd, fn, reshnd)
+function mod_query.popen_completions(cp, cmd, fn, reshnd, wd)
local pst={cp=cp, maybe_stalled=0}
if not found_clean then
pipes[rcv]=pst
- ioncore.popen_bgread(cmd, coroutine.wrap(rcv))
+ ioncore.popen_bgread(cmd, coroutine.wrap(rcv), nil, wd)
end
end
end
-function mod_query.exec_completor(wedln, str, point)
+function mod_query.exec_completor_(wd, wedln, str, point)
local parts=break_cmdline(str)
local complidx=find_point(parts, point+1)
if ic then
mod_query.popen_completions(wedln,
ic..wp..string.shell_safe(s_compl),
- set_fn, filter_fn)
+ set_fn, filter_fn, wd)
end
end
+function mod_query.exec_completor(...)
+ mod_query.exec_completor_(nil, ...)
+end
+
+
local cmd_overrides={}
-- \file{ion-runinxterm}. Two colons ('::') will ask you to press
-- enter after the command has finished.
function mod_query.query_exec(mplex)
- mod_query.query(mplex, TR("Run:"), nil, mod_query.exec_handler,
- mod_query.exec_completor,
- "run")
+ local function compl(...)
+ local wd=ioncore.get_dir_for(mplex)
+ mod_query.exec_completor_(wd, ...)
+ end
+ mod_query.query(mplex, TR("Run:"), nil, mod_query.exec_handler,
+ compl, "run")
end
INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
-SOURCES = main.c statusbar.c draw.c
-
-SUBDIRS = ion-statusd
-INSTALL_SUBDIRS = $(SUBDIRS)
+SOURCES = main.c statusbar.c draw.c statusd-launch.c
MAKE_EXPORTS = mod_statusbar
+++ /dev/null
-##
-## Ion-statusd Makefile
-##
-
-# System-specific configuration is in system.mk
-TOPDIR=../..
-include $(TOPDIR)/build/system-inc.mk
-
-######################################
-
-INCLUDES += $(LIBMAINLOOP_INCLUDES) $(LIBEXTL_INCLUDES) $(LIBTU_INCLUDES)
-LIBS += $(LIBMAINLOOP_LIBS) $(LIBEXTL_LIBS) $(LIBTU_LIBS) $(LUA_LIBS) $(DL_LIBS) -lm
-CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
-
-DEFINES += -DETCDIR=\"$(ETCDIR)\" -DSHAREDIR=\"$(SHAREDIR)\" \
- -DEXTRABINDIR=\"$(EXTRABINDIR)\" -DMODULEDIR=\"$(MODULEDIR)\" \
- -DLCDIR=\"$(LCDIR)\" -DLOCALEDIR=\"$(LOCALEDIR)\"
-
-SOURCES = ion-statusd.c exec.c extlrx.c
-
-TARGETS = ion-statusd
-
-LUA_SOURCES = statusd_date.lua statusd_mail.lua statusd_load.lua
-
-MAKE_EXPORTS = statusd
-
-include $(TOPDIR)/libmainloop/rx.mk
-
-######################################
-
-include $(TOPDIR)/build/rules.mk
-
-######################################
-
-ion-statusd: $(OBJS) $(EXT_OBJS)
- $(CC) $(LINKOPTS) $(OBJS) $(EXT_OBJS) $(LDFLAGS) -o $@
-
-_install: lc_install
- $(INSTALLDIR) $(EXTRABINDIR)
- $(INSTALL) -s -m $(BIN_MODE) ion-statusd $(EXTRABINDIR)
+++ /dev/null
-/*
- * ion/mod_statusbar/ion-statusd/exec.c
- *
- * Copyright (c) Tuomo Valkonen 2005-2006.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-
-#include <libmainloop/select.h>
-#include <libmainloop/exec.h>
-
-
-/*EXTL_DOC
- * Run \var{cmd} in the background.
- */
-EXTL_SAFE
-EXTL_EXPORT
-int statusd_exec(const char *cmd)
-{
- return mainloop_spawn(cmd);
-}
-
-
-/*EXTL_DOC
- * Run \var{cmd} with a read pipe connected to its stdout.
- * When data is received through the pipe, \var{h} is called
- * with that data.
- */
-EXTL_SAFE
-EXTL_EXPORT
-int statusd_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh)
-{
- return mainloop_popen_bgread(cmd, NULL, NULL, h, errh);
-}
-
+++ /dev/null
-/*
- * ion/mod_statusbar/ion-statusd/extlrx.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2006.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#include <libextl/extl.h>
-#include <libtu/output.h>
-#include <libtu/locale.h>
-
-
-/*{{{ libtu */
-
-
-/*EXTL_DOC
- * Issue a warning. How the message is displayed depends on the current
- * warning handler.
- */
-EXTL_EXPORT
-void statusd_warn(const char *str)
-{
- warn("%s", str);
-}
-
-
-EXTL_EXPORT
-const char *statusd_gettext(const char *s)
-{
- if(s==NULL)
- return NULL;
- else
- return TR(s);
-}
-
-
-/*}}}*/
-
+++ /dev/null
-/*
- * ion/mod_statusbar/ion-statusd/ion-statusd.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2006.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <libtu/util.h>
-#include <libtu/optparser.h>
-#include <libtu/errorlog.h>
-#include <libtu/locale.h>
-#include <libtu/misc.h>
-#include <libextl/readconfig.h>
-#include <libmainloop/select.h>
-#include <libmainloop/signal.h>
-#include <libmainloop/defer.h>
-
-#ifndef CF_NO_LOCALE
-#include <locale.h>
-#endif
-
-#include "../../version.h"
-
-
-static OptParserOpt ion_opts[]={
- /*{OPT_ID('d'), "display", OPT_ARG, "host:dpy.scr",
- DUMMY_TR("X display to use")},*/
-
- {'c', "conffile", OPT_ARG, "config_file",
- DUMMY_TR("Configuration file")},
-
- {'s', "searchdir", OPT_ARG, "dir",
- DUMMY_TR("Add directory to search path")},
-
- /*{OPT_ID('s'), "session", OPT_ARG, "session_name",
- DUMMY_TR("Name of session (affects savefiles)")},*/
-
- {'h', "help", 0, NULL,
- DUMMY_TR("Show this help")},
-
- {'V', "version", 0, NULL,
- DUMMY_TR("Show program version")},
-
- {OPT_ID('a'), "about", 0, NULL,
- DUMMY_TR("Show about text")},
-
- {'q', "quiet", 0, NULL,
- DUMMY_TR("Quiet mode")},
-
- {'m', "meter", OPT_ARG, "meter_module",
- DUMMY_TR("Load a meter module")},
-
- END_OPTPARSEROPTS
-};
-
-
-static const char statusd_copy[]=
- "Ion-statusd " ION_VERSION ", copyright (c) Tuomo Valkonen 2004-2005.";
-
-
-static const char statusd_license[]=DUMMY_TR(
- "This program is free software; you can redistribute it and/or\n"
- "modify it under the terms of the GNU Lesser General Public\n"
- "License as published by the Free Software Foundation; either\n"
- "version 2.1 of the License, or (at your option) any later version.\n"
- "\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- "Lesser General Public License for more details.\n");
-
-
-/* new_informs=TRUE because we should always print period when
- * initialisation is done.
- */
-static bool new_informs=TRUE;
-static ExtlTab configtab;
-
-static void help()
-{
- int i;
- printf(TR("Usage: %s [options]\n\n"), libtu_progname());
- for(i=0; ion_opts[i].descr!=NULL; i++)
- ion_opts[i].descr=TR(ion_opts[i].descr);
- optparser_printhelp(OPTP_MIDLONG, ion_opts);
- printf("\n");
-}
-
-
-static void flush_informs()
-{
- if(new_informs){
- printf(".\n");
- fflush(stdout);
- new_informs=FALSE;
- }
-}
-
-
-static void mainloop()
-{
- sigset_t trapset;
-
- sigemptyset(&trapset);
- sigaddset(&trapset, SIGALRM);
- sigaddset(&trapset, SIGCHLD);
- mainloop_trap_signals(&trapset);
-
- while(1){
- int kill_sig=mainloop_check_signals();
- if(kill_sig!=0 && kill_sig!=SIGUSR1){
- if(kill_sig==SIGTERM)
- exit(EXIT_FAILURE);
- else
- kill(getpid(), kill_sig);
- }
-
- mainloop_execute_deferred();
-
- flush_informs();
-
- mainloop_select();
- }
-}
-
-
-extern bool statusd_register_exports();
-extern void statusd_unregister_exports();
-
-
-static void stdout_closed(int fd, void *data)
-{
- exit(EXIT_SUCCESS);
-}
-
-
-int main(int argc, char*argv[])
-{
- const char *mod=NULL;
- char *mod2=NULL;
- int loaded=0;
- int opt;
- bool quiet=FALSE;
-
-#ifndef CF_NO_LOCALE
- if(setlocale(LC_ALL, "")==NULL)
- warn("setlocale() call failed.");
-#endif
-
- configtab=extl_table_none();
-
- libtu_init(argv[0]);
- extl_init();
-
- if(!statusd_register_exports())
- return EXIT_FAILURE;
-
- extl_add_searchdir(EXTRABINDIR);
- extl_add_searchdir(MODULEDIR);
- extl_add_searchdir(ETCDIR);
- extl_add_searchdir(SHAREDIR);
- extl_add_searchdir(LCDIR);
- extl_set_userdirs("ion3");
-
- optparser_init(argc, argv, OPTP_MIDLONG, ion_opts);
-
- extl_read_config("ioncore_luaext", NULL, TRUE);
-
- while((opt=optparser_get_opt())){
- switch(opt){
- /*case OPT_ID('d'):
- display=optparser_get_arg();
- break;*/
- case 's':
- extl_add_searchdir(optparser_get_arg());
- break;
- /*case OPT_ID('s'):
- extl_set_sessiondir(optparser_get_arg());
- break;*/
- case 'h':
- help();
- return EXIT_SUCCESS;
- case 'V':
- printf("%s\n", ION_VERSION);
- return EXIT_SUCCESS;
- case OPT_ID('a'):
- printf("%s\n\n%s", statusd_copy, TR(statusd_license));
- return EXIT_SUCCESS;
- case 'c':
- {
- ExtlTab t;
- const char *f=optparser_get_arg();
- if(extl_read_savefile(f, &t)){
- extl_unref_table(configtab);
- configtab=t;
- }else{
- warn(TR("Unable to load configuration file %s"), f);
- }
- }
- break;
- case 'q':
- quiet=TRUE;
- break;
- case 'm':
- mod=optparser_get_arg();
- if(strchr(mod, '/')==NULL && strchr(mod, '.')==NULL){
- mod2=scat("statusd_", mod);
- if(mod2==NULL)
- return EXIT_FAILURE;
- mod=mod2;
- }
- if(extl_read_config(mod, NULL, !quiet))
- loaded++;
- if(mod2!=NULL)
- free(mod2);
- break;
- default:
- warn(TR("Invalid command line."));
- help();
- return EXIT_FAILURE;
- }
- }
-
- if(loaded==0 && !quiet){
- warn(TR("No meters loaded."));
- return EXIT_FAILURE;
- }
-
- mainloop();
-
- return EXIT_SUCCESS;
-}
-
-
-/*EXTL_DOC
- * Inform that meter \var{name} has value \var{value}.
- */
-EXTL_EXPORT
-void statusd_inform(const char *name, const char *value)
-{
- printf("%s: %s\n", name, value);
- new_informs=TRUE;
-}
-
-
-/*EXTL_DOC
- * Get configuration table for module \var{name}
- */
-EXTL_EXPORT
-ExtlTab statusd_get_config(const char *name)
-{
- if(name==NULL){
- return extl_ref_table(configtab);
- }else{
- ExtlTab t;
- if(extl_table_gets_t(configtab, name, &t))
- return t;
- else
- return extl_create_table();
- }
-}
-
-
-/*EXTL_DOC
- * Get last file modification time.
- */
-EXTL_EXPORT
-double statusd_last_modified(const char *fname)
-{
- struct stat st;
-
- if(fname==NULL)
- return (double)(-1);
-
- if(stat(fname, &st)!=0){
- /*warn_err_obj(fname);*/
- return (double)(-1);
- }
-
- return (double)(st.st_mtime>st.st_ctime ? st.st_mtime : st.st_ctime);
-}
-
-
-EXTL_EXPORT
-ExtlTab statusd_getloadavg()
-{
- ExtlTab t=extl_create_table();
- double l[3];
- int n;
-
- n=getloadavg(l, 3);
-
- if(n>=1)
- extl_table_sets_d(t, "1min", l[0]);
- if(n>=2)
- extl_table_sets_d(t, "5min", l[1]);
- if(n>=3)
- extl_table_sets_d(t, "15min", l[2]);
-
- return t;
-}
-
+++ /dev/null
---
--- ion/mod_statusbar/ion-statusd/statusd_date.lua
---
--- Copyright (c) Tuomo Valkonen 2004-2006.
---
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
-
-
-local timer
-
-local defaults={
- date_format='%a %Y-%m-%d %H:%M',
- formats={},
-}
-
-local settings=table.join(statusd.get_config('date'), defaults)
-
-local function update()
- local tm=os.time()
- statusd.inform('date', os.date(settings.date_format, tm))
- for k, f in pairs(settings.formats) do
- statusd.inform('date_'..k, os.date(f, tm))
- end
- return tm
-end
-
-local function timer_handler(tmr)
- local tm=update()
-
- local t=os.date('*t', tm)
- local d=(60-t.sec)*1000
-
- timer:set(d, timer_handler)
-end
-
-timer=statusd.create_timer()
-timer_handler(timer)
+++ /dev/null
---
--- ion/mod_statusbar/ion-statusd/statusd_load.lua
---
--- Copyright (c) Tuomo Valkonen 2004-2006.
---
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
-
---
--- We should really use getloadavg(3) instead and move the meter to
--- Ion side to get properly up-to-date loads. But until such an export
--- is made, and we use potentially blocking files and external programs,
--- this meter must be in ion-statusd.
---
-
-local defaults={
- update_interval=10*1000,
- load_hint="1min",
- important_threshold=1.5,
- critical_threshold=4.0
-}
-
-local settings=table.join(statusd.get_config("load"), defaults)
-
-local load_timer
-
-local function get_hint(v)
- local i="normal"
- if v then
- if v>settings.critical_threshold then
- i="critical"
- elseif v>settings.important_threshold then
- i="important"
- end
- end
- return i
-end
-
-local function fmt(l)
- if not l then
- return "?"
- else
- return string.format("%0.2f", l)
- end
-end
-
-local function update_load()
- local lds = statusd.getloadavg()
- f1, f5, f15 = fmt(lds["1min"]), fmt(lds["5min"]), fmt(lds["15min"])
- statusd.inform("load", f1..", "..f5..", "..f15)
- statusd.inform("load_hint", get_hint(lds[settings.load_hint]))
- statusd.inform("load_1min", f1)
- statusd.inform("load_1min_hint", get_hint(lds["1min"]))
- statusd.inform("load_5min", f5)
- statusd.inform("load_5min_hint", get_hint(lds["5min"]))
- statusd.inform("load_15min", f15)
- statusd.inform("load_15min_hint", get_hint(lds["15min"]))
- load_timer:set(settings.update_interval, update_load)
-end
-
--- Init
---statusd.inform("load_template", "0.00, 0.00, 0.00");
-
-load_timer=statusd.create_timer()
-update_load()
-
-
+++ /dev/null
---
--- ion/mod_statusbar/ion-statusd/statusd_mail.lua
---
--- Copyright (c) Tuomo Valkonen 2004-2006.
---
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
---
-
--- The keyword for this monitor
-local mon = "mail"
-
-local defaults={
- update_interval=10*1000,
- retry_interval=60*10*1000,
- mbox = os.getenv("MAIL"),
- files = {}
-}
-
-local settings=table.join(statusd.get_config(mon), defaults)
-
-local function TR(s, ...)
- return string.format(statusd.gettext(s), unpack(arg))
-end
-
-local function check_spool()
- if not settings.mbox then
- statusd.warn(TR("MAIL environment variable not set "..
- "and no spool given."))
- end
-end
-
-if not settings.files["spool"] then
- check_spool()
- settings.files["spool"] = settings.mbox
-elseif not(settings.files["spool"] == mbox) then
- statusd.warn(TR("%s.mbox does not match %s.files['spool']; using %s.mbox",
- mon, mon, mon))
- check_spool()
- settings.files["spool"] = settings.mbox
-end
-
-local function calcmail(fname)
- local f, err=io.open(fname, 'r')
- local total, read, old=0, 0, 0
- local had_blank=true
- local in_headers=false
- local had_status=false
-
- if not f then
- statusd.warn(err)
- return
- end
-
- for l in f:lines() do
- if had_blank and string.find(l, '^From ') then
- total=total+1
- had_status=false
- in_headers=true
- had_blank=false
- else
- had_blank=false
- if l=="" then
- if in_headers then
- in_headers=false
- end
- had_blank=true
- elseif in_headers and not had_status then
- local st, en, stat=string.find(l, '^Status:(.*)')
- if stat then
- had_status=true
- if string.find(l, 'R') then
- read=read+1
- end
- if string.find(l, 'O') then
- old=old+1
- end
- end
- end
- end
- end
-
- f:close()
-
- return total, total-read, total-old
-end
-
-
-local mail_timer
-local mail_timestamps = {}
-function init_timestamps ()
- for key, val in pairs(settings.files) do
- mail_timestamps[key]=-2.0
- end
-end
-init_timestamps()
-
-local function update_mail()
- local failed
- for key, mbox in pairs(settings.files) do
- if not mbox then
- error(TR(key.." not set"))
- end
-
- local old_tm=mail_timestamps[key]
- mail_timestamps[key]=statusd.last_modified(mbox)
-
- if mail_timestamps[key]>old_tm then
- local mail_total, mail_unread, mail_new=calcmail(mbox)
- if failed == nil then
- failed = not mail_total
- else
- failed = failed and (not mail_total)
- end
-
- if key == "spool" then
- meter=mon
- else
- meter=mon.."_"..key
- end
- if mail_total then
- statusd.inform(meter.."_new", tostring(mail_new))
- statusd.inform(meter.."_unread", tostring(mail_unread))
- statusd.inform(meter.."_total", tostring(mail_total))
-
- if mail_new>0 then
- statusd.inform(meter.."_new_hint", "important")
- else
- statusd.inform(meter.."_new_hint", "normal")
- end
-
- if mail_unread>0 then
- statusd.inform(meter.."_unread_hint", "important")
- else
- statusd.inform(meter.."_unread_hint", "normal")
- end
- end
- end
- end
-
- if failed then
- statusd.warn(TR("Disabling mail monitor for %d seconds.",
- settings.retry_interval/1000))
- init_timestamps()
- mail_timer:set(settings.retry_interval, update_mail)
- return
- end
-
- mail_timer:set(settings.update_interval, update_mail)
-end
-
-mail_timer=statusd.create_timer()
-update_mail()
-
* See the included file LICENSE for details.
*/
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <time.h>
-#include <errno.h>
-
#include <libtu/minmax.h>
#include <libextl/readconfig.h>
-#include <libmainloop/exec.h>
-#include <libmainloop/select.h>
-#include <libmainloop/signal.h>
#include <ioncore/saveload.h>
#include <ioncore/bindmaps.h>
#include <ioncore/global.h>
#include "exports.h"
-#define CF_STATUSD_TIMEOUT_SEC 3
-
-
/*{{{ Module information */
/*}}}*/
-/*{{{ Statusd launch helper */
-
-
-#define BL 1024
-
-
-static bool process_pipe(int fd, ExtlFn fn,
- bool *doneseen, bool *eagain)
-{
- char buf[BL];
- int n;
- bool fnret;
-
- *eagain=FALSE;
-
- n=read(fd, buf, BL-1);
-
- if(n<0){
- if(errno==EAGAIN || errno==EINTR){
- *eagain=(errno==EAGAIN);
- return TRUE;
- }
- warn_err_obj(TR("reading a pipe"));
- return FALSE;
- }else if(n>0){
- buf[n]='\0';
- *doneseen=FALSE;
- return extl_call(fn, "s", "b", &buf, doneseen);
- }
-
- return FALSE;
-}
-
-
-#define USEC 1000000
-
-
-static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh)
-{
- fd_set rfds;
- struct timeval tv, endtime, now;
- int nfds=maxof(outfd, errfd);
- int retval;
- bool dummy, doneseen, eagain=FALSE;
-
- if(mainloop_gettime(&endtime)!=0){
- warn_err();
- return FALSE;
- }
-
- now=endtime;
- endtime.tv_sec+=CF_STATUSD_TIMEOUT_SEC;
-
- while(1){
- FD_ZERO(&rfds);
-
- /* Calculate remaining time */
- if(now.tv_sec>endtime.tv_sec){
- goto timeout;
- }else if(now.tv_sec==endtime.tv_sec){
- if(now.tv_usec>=endtime.tv_usec)
- goto timeout;
- tv.tv_sec=0;
- tv.tv_usec=endtime.tv_usec-now.tv_usec;
- }else{
- tv.tv_usec=USEC+endtime.tv_usec-now.tv_usec;
- tv.tv_sec=-1+endtime.tv_sec-now.tv_sec;
- /* Kernel lameness tuner: */
- tv.tv_sec+=tv.tv_usec/USEC;
- tv.tv_usec%=USEC;
- }
-
- FD_SET(outfd, &rfds);
- FD_SET(errfd, &rfds);
-
- retval=select(nfds+1, &rfds, NULL, NULL, &tv);
- if(retval>0){
- if(FD_ISSET(errfd, &rfds)){
- if(!process_pipe(errfd, eh, &dummy, &eagain))
- return FALSE;
- }
- if(FD_ISSET(outfd, &rfds)){
- if(!process_pipe(outfd, dh, &doneseen, &eagain))
- return FALSE;
- if(doneseen){
- /* Read rest of errors. */
- bool ok;
- do{
- ok=process_pipe(errfd, eh, &dummy, &eagain);
- }while(ok && !eagain);
- return TRUE;
- }
- }
- }else if(retval==0){
- goto timeout;
- }
-
- if(mainloop_gettime(&now)!=0){
- warn_err();
- return FALSE;
- }
- }
-
- return TRUE;
-
-timeout:
- /* Just complain to stderr, not startup error log, and do not fail.
- * The system might just be a bit slow. We can continue, but without
- * initial values for the meters, geometry adjustments may be necessary
- * when we finally get that information.
- */
- ioncore_warn_nolog(TR("ion-statusd timed out."));
- return TRUE;
-}
-
-
-EXTL_EXPORT
-int mod_statusbar__launch_statusd(const char *cmd,
- ExtlFn initdatahandler,
- ExtlFn initerrhandler,
- ExtlFn datahandler,
- ExtlFn errhandler)
-{
- pid_t pid;
- int outfd=-1, errfd=-1;
-
- if(cmd==NULL)
- return -1;
-
- pid=mainloop_do_spawn(cmd, NULL, NULL,
- NULL, &outfd, &errfd);
-
- if(pid<0)
- return -1;
-
- if(!wait_statusd_init(outfd, errfd, initdatahandler, initerrhandler))
- goto err;
-
- if(!mainloop_register_input_fd_extlfn(outfd, datahandler))
- goto err;
-
- if(!mainloop_register_input_fd_extlfn(errfd, errhandler))
- goto err2;
-
- return pid;
-
-err2:
- mainloop_unregister_input_fd(outfd);
-err:
- close(outfd);
- close(errfd);
- return -1;
-}
-
-
-/*}}}*/
-
-
/*{{{ Systray */
end
-local function get_modules()
+function mod_statusbar.get_modules()
local mods={}
local specials={["filler"]=true, ["systray"]=true}
end
end
-local tried_to_launch=false
-
--DOC
-- Load modules and launch \file{ion-statusd} with configuration
-- table \var{cfg}. The options for each \file{ion-statusd} monitor
return
end
- tried_to_launch=true
+ -- Launch tried, don't do it automatically after reading
+ -- configuration.
+ mod_statusbar.no_autolaunch=true
- local mods=get_modules()
+ local mods=mod_statusbar.get_modules()
-- Load modules
for m in pairs(mods) do
dopath('cfg_statusbar', true)
-- Launch statusd if the user didn't launch it.
-if not tried_to_launch then
+if not mod_statusbar.no_autolaunch then
mod_statusbar.launch_statusd()
end
--- /dev/null
+/*
+ * ion/mod_statusbar/statusd-launch.c
+ *
+ * Copyright (c) Tuomo Valkonen 1999-2007.
+ *
+ * See the included file LICENSE for details.
+ */
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <time.h>
+#include <errno.h>
+
+#include <libtu/minmax.h>
+#include <libextl/readconfig.h>
+#include <libmainloop/exec.h>
+#include <libmainloop/select.h>
+#include <libmainloop/signal.h>
+#include <ioncore/saveload.h>
+#include <ioncore/bindmaps.h>
+#include <ioncore/global.h>
+#include <ioncore/ioncore.h>
+
+#include "statusbar.h"
+
+
+#define CF_STATUSD_TIMEOUT_SEC 3
+
+#define BL 1024
+
+#define USEC 1000000
+
+
+static bool process_pipe(int fd, ExtlFn fn,
+ bool *doneseen, bool *eagain)
+{
+ char buf[BL];
+ int n;
+ bool fnret;
+
+ *eagain=FALSE;
+
+ n=read(fd, buf, BL-1);
+
+ if(n<0){
+ if(errno==EAGAIN || errno==EINTR){
+ *eagain=(errno==EAGAIN);
+ return TRUE;
+ }
+ warn_err_obj(TR("reading a pipe"));
+ return FALSE;
+ }else if(n>0){
+ buf[n]='\0';
+ *doneseen=FALSE;
+ return extl_call(fn, "s", "b", &buf, doneseen);
+ }
+
+ return FALSE;
+}
+
+
+static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh)
+{
+ fd_set rfds;
+ struct timeval tv, endtime, now;
+ int nfds=maxof(outfd, errfd);
+ int retval;
+ bool dummy, doneseen, eagain=FALSE;
+
+ if(mainloop_gettime(&endtime)!=0){
+ warn_err();
+ return FALSE;
+ }
+
+ now=endtime;
+ endtime.tv_sec+=CF_STATUSD_TIMEOUT_SEC;
+
+ while(1){
+ FD_ZERO(&rfds);
+
+ /* Calculate remaining time */
+ if(now.tv_sec>endtime.tv_sec){
+ goto timeout;
+ }else if(now.tv_sec==endtime.tv_sec){
+ if(now.tv_usec>=endtime.tv_usec)
+ goto timeout;
+ tv.tv_sec=0;
+ tv.tv_usec=endtime.tv_usec-now.tv_usec;
+ }else{
+ tv.tv_usec=USEC+endtime.tv_usec-now.tv_usec;
+ tv.tv_sec=-1+endtime.tv_sec-now.tv_sec;
+ /* Kernel lameness tuner: */
+ tv.tv_sec+=tv.tv_usec/USEC;
+ tv.tv_usec%=USEC;
+ }
+
+ FD_SET(outfd, &rfds);
+ FD_SET(errfd, &rfds);
+
+ retval=select(nfds+1, &rfds, NULL, NULL, &tv);
+ if(retval>0){
+ if(FD_ISSET(errfd, &rfds)){
+ if(!process_pipe(errfd, eh, &dummy, &eagain))
+ return FALSE;
+ }
+ if(FD_ISSET(outfd, &rfds)){
+ if(!process_pipe(outfd, dh, &doneseen, &eagain))
+ return FALSE;
+ if(doneseen){
+ /* Read rest of errors. */
+ bool ok;
+ do{
+ ok=process_pipe(errfd, eh, &dummy, &eagain);
+ }while(ok && !eagain);
+ return TRUE;
+ }
+ }
+ }else if(retval==0){
+ goto timeout;
+ }
+
+ if(mainloop_gettime(&now)!=0){
+ warn_err();
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+
+timeout:
+ /* Just complain to stderr, not startup error log, and do not fail.
+ * The system might just be a bit slow. We can continue, but without
+ * initial values for the meters, geometry adjustments may be necessary
+ * when we finally get that information.
+ */
+ ioncore_warn_nolog(TR("ion-statusd timed out."));
+ return TRUE;
+}
+
+
+EXTL_EXPORT
+int mod_statusbar__launch_statusd(const char *cmd,
+ ExtlFn initdatahandler,
+ ExtlFn initerrhandler,
+ ExtlFn datahandler,
+ ExtlFn errhandler)
+{
+ pid_t pid;
+ int outfd=-1, errfd=-1;
+
+ if(cmd==NULL)
+ return -1;
+
+ pid=mainloop_do_spawn(cmd, NULL, NULL,
+ NULL, &outfd, &errfd);
+
+ if(pid<0)
+ return -1;
+
+ if(!wait_statusd_init(outfd, errfd, initdatahandler, initerrhandler))
+ goto err;
+
+ if(!mainloop_register_input_fd_extlfn(outfd, datahandler))
+ goto err;
+
+ if(!mainloop_register_input_fd_extlfn(errfd, errhandler))
+ goto err2;
+
+ return pid;
+
+err2:
+ mainloop_unregister_input_fd(outfd);
+err:
+ close(outfd);
+ close(errfd);
+ return -1;
+}
+
WFrame *res_frame;
} WTilingPlacementParams;
-/* Handlers of this hook should take (WClientWin*, WTiling*, WManageParams*)
- * as parameter.
- */
+/* Handlers of this hook should take WTilingPlacementParams* as parameter. */
extern WHook *tiling_placement_alt;
extern WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin,
static int nstdisp=0;
WSplitInner *parent;
WSplit *other;
+ int hprimn=PRIMN_ANY, vprimn=PRIMN_ANY;
assert(node->tl==child || node->br==child);
- if(node->tl==child)
+ if(node->tl==child){
other=node->br;
- else
+ if(node->dir==SPLIT_VERTICAL)
+ vprimn=PRIMN_TL;
+ else
+ hprimn=PRIMN_TL;
+ }else{
other=node->tl;
+ if(node->dir==SPLIT_VERTICAL)
+ vprimn=PRIMN_BR;
+ else
+ hprimn=PRIMN_BR;
+ }
assert(other!=NULL);
splittree_changeroot((WSplit*)node, other);
if(reclaim_space)
- split_resize(other, &(((WSplit*)node)->geom), PRIMN_ANY, PRIMN_ANY);
+ split_resize(other, &(((WSplit*)node)->geom), hprimn, vprimn);
child->parent=NULL;
destroy_obj((Obj*)newframe);
return NULL;
}
-
- /* Restack */
- if(ws->split_tree!=NULL)
- split_restack(ws->split_tree, ws->dummywin, Above);
return newframe;
}
ph=region_get_rescue_pholder_for((WRegion*)ws, reg);
if(ph!=NULL){
- region_rescue(reg, ph);
+ region_rescue(reg, ph, REGION_RESCUE_NODEEP|REGION_RESCUE_PHFLAGS_OK);
destroy_obj((Obj*)ph);
}
const WRQGeomParams *rq,
WRectangle *geomret);
extern void tiling_managed_remove(WTiling *ws, WRegion *reg);
-extern void tiling_managed_activated(WTiling *ws, WRegion *reg);
extern bool tiling_rescue_clientwins(WTiling *ws, WRescueInfo *ph);
extern WPHolder *tiling_get_rescue_pholder_for(WTiling *ws, WRegion *mgd);
extern void tiling_do_set_focus(WTiling *ws, bool warp);
######################################
-SUBDIRS=ion-completefile
+SUBDIRS=ion-completefile ion-statusd
INSTALL_SUBDIRS=$(SUBDIRS)
SHELLSCRIPTS = ion-runinxterm ion-completeman
--- /dev/null
+##
+## Ion-statusd Makefile
+##
+
+# System-specific configuration is in system.mk
+TOPDIR=../..
+include $(TOPDIR)/build/system-inc.mk
+
+######################################
+
+INCLUDES += $(LIBMAINLOOP_INCLUDES) $(LIBEXTL_INCLUDES) $(LIBTU_INCLUDES)
+LIBS += $(LIBMAINLOOP_LIBS) $(LIBEXTL_LIBS) $(LIBTU_LIBS) $(LUA_LIBS) $(DL_LIBS) -lm
+CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
+
+DEFINES += -DETCDIR=\"$(ETCDIR)\" -DSHAREDIR=\"$(SHAREDIR)\" \
+ -DEXTRABINDIR=\"$(EXTRABINDIR)\" -DMODULEDIR=\"$(MODULEDIR)\" \
+ -DLCDIR=\"$(LCDIR)\" -DLOCALEDIR=\"$(LOCALEDIR)\"
+
+SOURCES = ion-statusd.c exec.c extlrx.c
+
+TARGETS = ion-statusd
+
+LUA_SOURCES = statusd_date.lua statusd_mail.lua statusd_load.lua
+
+MAKE_EXPORTS = statusd
+
+include $(TOPDIR)/libmainloop/rx.mk
+
+######################################
+
+include $(TOPDIR)/build/rules.mk
+
+######################################
+
+ion-statusd: $(OBJS) $(EXT_OBJS)
+ $(CC) $(LINKOPTS) $(OBJS) $(EXT_OBJS) $(LDFLAGS) -o $@
+
+_install: lc_install
+ $(INSTALLDIR) $(EXTRABINDIR)
+ $(INSTALL) -s -m $(BIN_MODE) ion-statusd $(EXTRABINDIR)
--- /dev/null
+/*
+ * ion/utils/ion-statusd/exec.c
+ *
+ * Copyright (c) Tuomo Valkonen 2005-2006.
+ *
+ * Ion is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ */
+
+
+#include <libmainloop/select.h>
+#include <libmainloop/exec.h>
+
+
+/*EXTL_DOC
+ * Run \var{cmd} in the background.
+ */
+EXTL_SAFE
+EXTL_EXPORT
+int statusd_exec(const char *cmd)
+{
+ return mainloop_spawn(cmd);
+}
+
+
+/*EXTL_DOC
+ * Run \var{cmd} with a read pipe connected to its stdout.
+ * When data is received through the pipe, \var{h} is called
+ * with that data.
+ */
+EXTL_SAFE
+EXTL_EXPORT
+int statusd_popen_bgread(const char *cmd, ExtlFn h, ExtlFn errh)
+{
+ return mainloop_popen_bgread(cmd, NULL, NULL, h, errh);
+}
+
--- /dev/null
+/*
+ * ion/utils/ion-statusd/extlrx.c
+ *
+ * Copyright (c) Tuomo Valkonen 2004-2006.
+ *
+ * Ion is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <libextl/extl.h>
+#include <libtu/output.h>
+#include <libtu/locale.h>
+
+
+/*{{{ libtu */
+
+
+/*EXTL_DOC
+ * Issue a warning. How the message is displayed depends on the current
+ * warning handler.
+ */
+EXTL_EXPORT
+void statusd_warn(const char *str)
+{
+ warn("%s", str);
+}
+
+
+EXTL_EXPORT
+const char *statusd_gettext(const char *s)
+{
+ if(s==NULL)
+ return NULL;
+ else
+ return TR(s);
+}
+
+
+/*}}}*/
+
--- /dev/null
+/*
+ * ion/utils/ion-statusd/ion-statusd.c
+ *
+ * Copyright (c) Tuomo Valkonen 2004-2006.
+ *
+ * Ion is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <libtu/util.h>
+#include <libtu/optparser.h>
+#include <libtu/errorlog.h>
+#include <libtu/locale.h>
+#include <libtu/misc.h>
+#include <libextl/readconfig.h>
+#include <libmainloop/select.h>
+#include <libmainloop/signal.h>
+#include <libmainloop/defer.h>
+
+#ifndef CF_NO_LOCALE
+#include <locale.h>
+#endif
+
+#include "../../version.h"
+
+
+static OptParserOpt ion_opts[]={
+ /*{OPT_ID('d'), "display", OPT_ARG, "host:dpy.scr",
+ DUMMY_TR("X display to use")},*/
+
+ {'c', "conffile", OPT_ARG, "config_file",
+ DUMMY_TR("Configuration file")},
+
+ {'s', "searchdir", OPT_ARG, "dir",
+ DUMMY_TR("Add directory to search path")},
+
+ /*{OPT_ID('s'), "session", OPT_ARG, "session_name",
+ DUMMY_TR("Name of session (affects savefiles)")},*/
+
+ {'h', "help", 0, NULL,
+ DUMMY_TR("Show this help")},
+
+ {'V', "version", 0, NULL,
+ DUMMY_TR("Show program version")},
+
+ {OPT_ID('a'), "about", 0, NULL,
+ DUMMY_TR("Show about text")},
+
+ {'q', "quiet", 0, NULL,
+ DUMMY_TR("Quiet mode")},
+
+ {'m', "meter", OPT_ARG, "meter_module",
+ DUMMY_TR("Load a meter module")},
+
+ END_OPTPARSEROPTS
+};
+
+
+static const char statusd_copy[]=
+ "Ion-statusd " ION_VERSION ", copyright (c) Tuomo Valkonen 2004-2005.";
+
+
+static const char statusd_license[]=DUMMY_TR(
+ "This program is free software; you can redistribute it and/or\n"
+ "modify it under the terms of the GNU Lesser General Public\n"
+ "License as published by the Free Software Foundation; either\n"
+ "version 2.1 of the License, or (at your option) any later version.\n"
+ "\n"
+ "This program is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+ "Lesser General Public License for more details.\n");
+
+
+/* new_informs=TRUE because we should always print period when
+ * initialisation is done.
+ */
+static bool new_informs=TRUE;
+static ExtlTab configtab;
+
+static void help()
+{
+ int i;
+ printf(TR("Usage: %s [options]\n\n"), libtu_progname());
+ for(i=0; ion_opts[i].descr!=NULL; i++)
+ ion_opts[i].descr=TR(ion_opts[i].descr);
+ optparser_printhelp(OPTP_MIDLONG, ion_opts);
+ printf("\n");
+}
+
+
+static void flush_informs()
+{
+ if(new_informs){
+ printf(".\n");
+ fflush(stdout);
+ new_informs=FALSE;
+ }
+}
+
+
+static void mainloop()
+{
+ sigset_t trapset;
+
+ sigemptyset(&trapset);
+ sigaddset(&trapset, SIGALRM);
+ sigaddset(&trapset, SIGCHLD);
+ mainloop_trap_signals(&trapset);
+
+ while(1){
+ int kill_sig=mainloop_check_signals();
+ if(kill_sig!=0 && kill_sig!=SIGUSR1){
+ if(kill_sig==SIGTERM)
+ exit(EXIT_FAILURE);
+ else
+ kill(getpid(), kill_sig);
+ }
+
+ mainloop_execute_deferred();
+
+ flush_informs();
+
+ mainloop_select();
+ }
+}
+
+
+extern bool statusd_register_exports();
+extern void statusd_unregister_exports();
+
+
+static void stdout_closed(int fd, void *data)
+{
+ exit(EXIT_SUCCESS);
+}
+
+
+int main(int argc, char*argv[])
+{
+ const char *mod=NULL;
+ char *mod2=NULL;
+ int loaded=0;
+ int opt;
+ bool quiet=FALSE;
+
+#ifndef CF_NO_LOCALE
+ if(setlocale(LC_ALL, "")==NULL)
+ warn("setlocale() call failed.");
+#endif
+
+ configtab=extl_table_none();
+
+ libtu_init(argv[0]);
+ extl_init();
+
+ if(!statusd_register_exports())
+ return EXIT_FAILURE;
+
+ extl_add_searchdir(EXTRABINDIR);
+ extl_add_searchdir(MODULEDIR);
+ extl_add_searchdir(ETCDIR);
+ extl_add_searchdir(SHAREDIR);
+ extl_add_searchdir(LCDIR);
+ extl_set_userdirs("ion3");
+
+ optparser_init(argc, argv, OPTP_MIDLONG, ion_opts);
+
+ extl_read_config("ioncore_luaext", NULL, TRUE);
+
+ while((opt=optparser_get_opt())){
+ switch(opt){
+ /*case OPT_ID('d'):
+ display=optparser_get_arg();
+ break;*/
+ case 's':
+ extl_add_searchdir(optparser_get_arg());
+ break;
+ /*case OPT_ID('s'):
+ extl_set_sessiondir(optparser_get_arg());
+ break;*/
+ case 'h':
+ help();
+ return EXIT_SUCCESS;
+ case 'V':
+ printf("%s\n", ION_VERSION);
+ return EXIT_SUCCESS;
+ case OPT_ID('a'):
+ printf("%s\n\n%s", statusd_copy, TR(statusd_license));
+ return EXIT_SUCCESS;
+ case 'c':
+ {
+ ExtlTab t;
+ const char *f=optparser_get_arg();
+ if(extl_read_savefile(f, &t)){
+ extl_unref_table(configtab);
+ configtab=t;
+ }else{
+ warn(TR("Unable to load configuration file %s"), f);
+ }
+ }
+ break;
+ case 'q':
+ quiet=TRUE;
+ break;
+ case 'm':
+ mod=optparser_get_arg();
+ if(strchr(mod, '/')==NULL && strchr(mod, '.')==NULL){
+ mod2=scat("statusd_", mod);
+ if(mod2==NULL)
+ return EXIT_FAILURE;
+ mod=mod2;
+ }
+ if(extl_read_config(mod, NULL, !quiet))
+ loaded++;
+ if(mod2!=NULL)
+ free(mod2);
+ break;
+ default:
+ warn(TR("Invalid command line."));
+ help();
+ return EXIT_FAILURE;
+ }
+ }
+
+ if(loaded==0 && !quiet){
+ warn(TR("No meters loaded."));
+ return EXIT_FAILURE;
+ }
+
+ mainloop();
+
+ return EXIT_SUCCESS;
+}
+
+
+/*EXTL_DOC
+ * Inform that meter \var{name} has value \var{value}.
+ */
+EXTL_EXPORT
+void statusd_inform(const char *name, const char *value)
+{
+ printf("%s: %s\n", name, value);
+ new_informs=TRUE;
+}
+
+
+/*EXTL_DOC
+ * Get configuration table for module \var{name}
+ */
+EXTL_EXPORT
+ExtlTab statusd_get_config(const char *name)
+{
+ if(name==NULL){
+ return extl_ref_table(configtab);
+ }else{
+ ExtlTab t;
+ if(extl_table_gets_t(configtab, name, &t))
+ return t;
+ else
+ return extl_create_table();
+ }
+}
+
+
+/*EXTL_DOC
+ * Get last file modification time.
+ */
+EXTL_EXPORT
+double statusd_last_modified(const char *fname)
+{
+ struct stat st;
+
+ if(fname==NULL)
+ return (double)(-1);
+
+ if(stat(fname, &st)!=0){
+ /*warn_err_obj(fname);*/
+ return (double)(-1);
+ }
+
+ return (double)(st.st_mtime>st.st_ctime ? st.st_mtime : st.st_ctime);
+}
+
+
+EXTL_EXPORT
+ExtlTab statusd_getloadavg()
+{
+ ExtlTab t=extl_create_table();
+ double l[3];
+ int n;
+
+ n=getloadavg(l, 3);
+
+ if(n>=1)
+ extl_table_sets_d(t, "1min", l[0]);
+ if(n>=2)
+ extl_table_sets_d(t, "5min", l[1]);
+ if(n>=3)
+ extl_table_sets_d(t, "15min", l[2]);
+
+ return t;
+}
+
--- /dev/null
+--
+-- ion/mod_statusbar/ion-statusd/statusd_date.lua
+--
+-- Copyright (c) Tuomo Valkonen 2004-2006.
+--
+-- Ion is free software; you can redistribute it and/or modify it under
+-- the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation; either version 2.1 of the License, or
+-- (at your option) any later version.
+--
+
+
+local timer
+
+local defaults={
+ date_format='%a %Y-%m-%d %H:%M',
+ formats={},
+}
+
+local settings=table.join(statusd.get_config('date'), defaults)
+
+local function update()
+ local tm=os.time()
+ statusd.inform('date', os.date(settings.date_format, tm))
+ for k, f in pairs(settings.formats) do
+ statusd.inform('date_'..k, os.date(f, tm))
+ end
+ return tm
+end
+
+local function timer_handler(tmr)
+ local tm=update()
+
+ local t=os.date('*t', tm)
+ local d=(60-t.sec)*1000
+
+ timer:set(d, timer_handler)
+end
+
+timer=statusd.create_timer()
+timer_handler(timer)
--- /dev/null
+--
+-- ion/mod_statusbar/ion-statusd/statusd_load.lua
+--
+-- Copyright (c) Tuomo Valkonen 2004-2006.
+--
+-- Ion is free software; you can redistribute it and/or modify it under
+-- the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation; either version 2.1 of the License, or
+-- (at your option) any later version.
+--
+
+--
+-- We should really use getloadavg(3) instead and move the meter to
+-- Ion side to get properly up-to-date loads. But until such an export
+-- is made, and we use potentially blocking files and external programs,
+-- this meter must be in ion-statusd.
+--
+
+local defaults={
+ update_interval=10*1000,
+ load_hint="1min",
+ important_threshold=1.5,
+ critical_threshold=4.0
+}
+
+local settings=table.join(statusd.get_config("load"), defaults)
+
+local load_timer
+
+local function get_hint(v)
+ local i="normal"
+ if v then
+ if v>settings.critical_threshold then
+ i="critical"
+ elseif v>settings.important_threshold then
+ i="important"
+ end
+ end
+ return i
+end
+
+local function fmt(l)
+ if not l then
+ return "?"
+ else
+ return string.format("%0.2f", l)
+ end
+end
+
+local function update_load()
+ local lds = statusd.getloadavg()
+ f1, f5, f15 = fmt(lds["1min"]), fmt(lds["5min"]), fmt(lds["15min"])
+ statusd.inform("load", f1..", "..f5..", "..f15)
+ statusd.inform("load_hint", get_hint(lds[settings.load_hint]))
+ statusd.inform("load_1min", f1)
+ statusd.inform("load_1min_hint", get_hint(lds["1min"]))
+ statusd.inform("load_5min", f5)
+ statusd.inform("load_5min_hint", get_hint(lds["5min"]))
+ statusd.inform("load_15min", f15)
+ statusd.inform("load_15min_hint", get_hint(lds["15min"]))
+ load_timer:set(settings.update_interval, update_load)
+end
+
+-- Init
+--statusd.inform("load_template", "0.00, 0.00, 0.00");
+
+load_timer=statusd.create_timer()
+update_load()
+
+
--- /dev/null
+--
+-- ion/mod_statusbar/ion-statusd/statusd_mail.lua
+--
+-- Copyright (c) Tuomo Valkonen 2004-2006.
+--
+-- Ion is free software; you can redistribute it and/or modify it under
+-- the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation; either version 2.1 of the License, or
+-- (at your option) any later version.
+--
+
+-- The keyword for this monitor
+local mon = "mail"
+
+local defaults={
+ update_interval=10*1000,
+ retry_interval=60*10*1000,
+ mbox = os.getenv("MAIL"),
+ files = {}
+}
+
+local settings=table.join(statusd.get_config(mon), defaults)
+
+local function TR(s, ...)
+ return string.format(statusd.gettext(s), unpack(arg))
+end
+
+local function check_spool()
+ if not settings.mbox then
+ statusd.warn(TR("MAIL environment variable not set "..
+ "and no spool given."))
+ end
+end
+
+if not settings.files["spool"] then
+ check_spool()
+ settings.files["spool"] = settings.mbox
+elseif not(settings.files["spool"] == mbox) then
+ statusd.warn(TR("%s.mbox does not match %s.files['spool']; using %s.mbox",
+ mon, mon, mon))
+ check_spool()
+ settings.files["spool"] = settings.mbox
+end
+
+local function calcmail(fname)
+ local f, err=io.open(fname, 'r')
+ local total, read, old=0, 0, 0
+ local had_blank=true
+ local in_headers=false
+ local had_status=false
+
+ if not f then
+ statusd.warn(err)
+ return
+ end
+
+ for l in f:lines() do
+ if had_blank and string.find(l, '^From ') then
+ total=total+1
+ had_status=false
+ in_headers=true
+ had_blank=false
+ else
+ had_blank=false
+ if l=="" then
+ if in_headers then
+ in_headers=false
+ end
+ had_blank=true
+ elseif in_headers and not had_status then
+ local st, en, stat=string.find(l, '^Status:(.*)')
+ if stat then
+ had_status=true
+ if string.find(l, 'R') then
+ read=read+1
+ end
+ if string.find(l, 'O') then
+ old=old+1
+ end
+ end
+ end
+ end
+ end
+
+ f:close()
+
+ return total, total-read, total-old
+end
+
+
+local mail_timer
+local mail_timestamps = {}
+function init_timestamps ()
+ for key, val in pairs(settings.files) do
+ mail_timestamps[key]=-2.0
+ end
+end
+init_timestamps()
+
+local function update_mail()
+ local failed
+ for key, mbox in pairs(settings.files) do
+ if not mbox then
+ error(TR(key.." not set"))
+ end
+
+ local old_tm=mail_timestamps[key]
+ mail_timestamps[key]=statusd.last_modified(mbox)
+
+ if mail_timestamps[key]>old_tm then
+ local mail_total, mail_unread, mail_new=calcmail(mbox)
+ if failed == nil then
+ failed = not mail_total
+ else
+ failed = failed and (not mail_total)
+ end
+
+ if key == "spool" then
+ meter=mon
+ else
+ meter=mon.."_"..key
+ end
+ if mail_total then
+ statusd.inform(meter.."_new", tostring(mail_new))
+ statusd.inform(meter.."_unread", tostring(mail_unread))
+ statusd.inform(meter.."_total", tostring(mail_total))
+
+ if mail_new>0 then
+ statusd.inform(meter.."_new_hint", "important")
+ else
+ statusd.inform(meter.."_new_hint", "normal")
+ end
+
+ if mail_unread>0 then
+ statusd.inform(meter.."_unread_hint", "important")
+ else
+ statusd.inform(meter.."_unread_hint", "normal")
+ end
+ end
+ end
+ end
+
+ if failed then
+ statusd.warn(TR("Disabling mail monitor for %d seconds.",
+ settings.retry_interval/1000))
+ init_timestamps()
+ mail_timer:set(settings.retry_interval, update_mail)
+ return
+ end
+
+ mail_timer:set(settings.update_interval, update_mail)
+end
+
+mail_timer=statusd.create_timer()
+update_mail()
+
-#define ION_VERSION "3rc-20070927"
+#define ION_VERSION "3rc-20071109"
#define ION_API_VERSION "3"