]> git.decadent.org.uk Git - ion3.git/commitdiff
[svn-upgrade] Integrating new upstream version, ion3 (20070506) 20070506
authorBen Hutchings <ben@decadent.org.uk>
Tue, 15 May 2007 00:13:09 +0000 (00:13 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 15 May 2007 00:13:09 +0000 (00:13 +0000)
366 files changed:
ChangeLog
LICENSE
README
RELNOTES
TODO.riot
build/ac/README.autoconf [deleted file]
build/ac/aclocal.m4 [deleted file]
build/ac/configure.ac [deleted file]
build/ac/system-ac.mk.in [deleted file]
build/mkman.lua
build/rules.mk
config.h
de/brush.c
de/brush.h
de/colour.c
de/colour.h
de/draw.c
de/font.c
de/font.h
de/fontset.h
de/init.c
de/init.h
de/private.h
de/style.c
de/style.h
doc/ChangeLog
doc/Makefile
doc/conf-bindings.tex
doc/conf-menus.tex
doc/conf-statusbar.tex [new file with mode: 0644]
doc/conf-winprops.tex
doc/conf.tex
doc/confintro.tex
doc/cstyle.tex
doc/de.tex
doc/designnotes.tex
doc/exact-version
doc/fnref.tex
doc/fullhierarchy.tex
doc/hookref.tex
doc/ionconf.dvi.gz
doc/ionconf.out
doc/ionconf.ps.gz
doc/ionconf.tex
doc/ionconf/images.log
doc/ionconf/images.pl
doc/ionconf/images.tex
doc/ionconf/img1.png
doc/ionconf/img2.png
doc/ionconf/img3.png
doc/ionconf/img4.png
doc/ionconf/img5.png
doc/ionconf/img6.png
doc/ionconf/index.html
doc/ionconf/internals.pl
doc/ionconf/ionconf.css
doc/ionconf/ionconf.html
doc/ionconf/labels.pl
doc/ionconf/node1.html
doc/ionconf/node10.html
doc/ionconf/node11.html
doc/ionconf/node12.html
doc/ionconf/node13.html [new file with mode: 0644]
doc/ionconf/node2.html
doc/ionconf/node3.html
doc/ionconf/node4.html
doc/ionconf/node5.html
doc/ionconf/node6.html
doc/ionconf/node7.html
doc/ionconf/node8.html
doc/ionconf/node9.html
doc/ionnotes.dvi.gz
doc/ionnotes.ps.gz
doc/ionnotes.tex
doc/ionnotes/index.html
doc/ionnotes/ionnotes.css
doc/ionnotes/ionnotes.html
doc/ionnotes/node2.html
doc/ionnotes/node3.html
doc/ionnotes/node4.html
doc/ionnotes/node5.html
doc/ionnotes/node6.html
doc/ionnotes/node8.html
doc/ionnotes/node9.html
doc/macros.tex
doc/miscref.tex [new file with mode: 0644]
doc/objects.tex
doc/objectsimpl.tex
doc/prelim.tex
doc/statusd.tex
doc/tricks.tex
etc/Makefile
etc/cfg_ion.lua
etc/cfg_ioncore.lua
etc/cfg_kludges.lua
etc/look_brownsteel.lua
etc/look_clean.lua
etc/look_cleanios.lua
etc/look_cleanviolet.lua
etc/look_dusky.lua
etc/look_greenlight.lua [new file with mode: 0644]
etc/look_greyviolet.lua
etc/look_ios.lua
etc/look_newviolet.lua
etc/look_simpleblue.lua
etc/lookcommon_clean.lua
etc/lookcommon_clean_frame.lua [deleted file]
etc/lookcommon_clean_stdisp.lua [deleted file]
etc/lookcommon_clean_tab.lua [deleted file]
etc/lookcommon_emboss.lua
etc/lookcommon_emboss_frame.lua [deleted file]
etc/lookcommon_emboss_stdisp.lua [deleted file]
etc/lookcommon_emboss_tab.lua [deleted file]
exact-version
ion/ion.c
ioncore/Makefile
ioncore/activity.c
ioncore/activity.h
ioncore/attach.c
ioncore/attach.h
ioncore/basicpholder.c
ioncore/basicpholder.h
ioncore/binding.c
ioncore/binding.h
ioncore/bindmaps.c
ioncore/bindmaps.h
ioncore/classes.h
ioncore/clientwin.c
ioncore/clientwin.h
ioncore/colormap.c
ioncore/colormap.h
ioncore/common.h
ioncore/conf-bindings.c
ioncore/conf-bindings.h
ioncore/conf.c
ioncore/conf.h
ioncore/cursor.c
ioncore/cursor.h
ioncore/detach.c
ioncore/detach.h
ioncore/dummywc.h
ioncore/event.c
ioncore/event.h
ioncore/eventh.c
ioncore/eventh.h
ioncore/exec.c
ioncore/exec.h
ioncore/extlconv.c
ioncore/extlconv.h
ioncore/extlrx.c
ioncore/float-placement.c
ioncore/float-placement.h
ioncore/focus.c
ioncore/focus.h
ioncore/frame-draw.c
ioncore/frame-draw.h
ioncore/frame-pointer.c
ioncore/frame-pointer.h
ioncore/frame.c
ioncore/frame.h
ioncore/framedpholder.c
ioncore/framedpholder.h
ioncore/framep.h
ioncore/fullscreen.c
ioncore/fullscreen.h
ioncore/global.h
ioncore/gr-util.h
ioncore/gr.c
ioncore/gr.h
ioncore/grab.c
ioncore/grab.h
ioncore/group-cw.c
ioncore/group-cw.h
ioncore/group-ws.c
ioncore/group-ws.h
ioncore/group.c
ioncore/group.h
ioncore/groupedpholder.c
ioncore/groupedpholder.h
ioncore/grouppholder.c
ioncore/grouppholder.h
ioncore/infowin.c
ioncore/infowin.h
ioncore/ioncore.c
ioncore/ioncore.h
ioncore/ioncore_bindings.lua
ioncore/ioncore_efbb.lua
ioncore/ioncore_ext.lua
ioncore/ioncore_luaext.lua
ioncore/ioncore_menudb.lua
ioncore/ioncore_misc.lua
ioncore/ioncore_tabnum.lua [new file with mode: 0644]
ioncore/ioncore_wd.lua
ioncore/ioncore_winprops.lua
ioncore/kbresize.c
ioncore/kbresize.h
ioncore/key.c
ioncore/key.h
ioncore/llist.c
ioncore/llist.h
ioncore/manage.c
ioncore/manage.h
ioncore/modules.c
ioncore/modules.h
ioncore/mplex.c
ioncore/mplex.h
ioncore/mplexpholder.c
ioncore/mplexpholder.h
ioncore/mwmhints.c
ioncore/mwmhints.h
ioncore/names.c
ioncore/names.h
ioncore/navi.c
ioncore/navi.h
ioncore/netwm.c
ioncore/netwm.h
ioncore/pholder.c
ioncore/pholder.h
ioncore/pointer.c
ioncore/pointer.h
ioncore/presize.c
ioncore/presize.h
ioncore/property.c
ioncore/property.h
ioncore/rectangle.c
ioncore/rectangle.h
ioncore/regbind.c
ioncore/regbind.h
ioncore/reginfo.c
ioncore/reginfo.h
ioncore/region-iter.h
ioncore/region.c
ioncore/region.h
ioncore/resize.c
ioncore/resize.h
ioncore/return.c
ioncore/return.h
ioncore/rootwin.c
ioncore/rootwin.h
ioncore/saveload.c
ioncore/saveload.h
ioncore/screen-notify.c
ioncore/screen-notify.h
ioncore/screen.c
ioncore/screen.h
ioncore/selection.c
ioncore/selection.h
ioncore/sizehint.c
ioncore/sizehint.h
ioncore/sizepolicy.c
ioncore/sizepolicy.h
ioncore/stacking.c
ioncore/stacking.h
ioncore/strings.c
ioncore/strings.h
ioncore/tags.c
ioncore/tags.h
ioncore/window.c
ioncore/window.h
ioncore/xic.c
ioncore/xic.h
ioncore/xwindow.c
ioncore/xwindow.h
libextl/exact-version
libextl/libextl-mkexports.in
libextl/luaextl.c
libextl/luaextl.h
libmainloop/defer.c
libmainloop/defer.h
libmainloop/exec.c
libmainloop/exec.h
libmainloop/hooks.c
libmainloop/hooks.h
libmainloop/rx.mk
libmainloop/select.c
libmainloop/select.h
libmainloop/signal.c
libmainloop/signal.h
libtu/exact-version
libtu/objlist.c
libtu/objlist.h
libtu/ptrlist.c
libtu/ptrlist.h
libtu/stringstore.c
man/Makefile
man/ion3.cs.in
man/ion3.de.in [deleted file]
man/ion3.fi.in
man/ion3.in
man/pwm3.cs.in
man/pwm3.de.in [deleted file]
man/pwm3.fi.in
man/pwm3.in
man/welcome.de.head [deleted file]
mod_dock/dock.c
mod_menu/grabmenu.c
mod_menu/main.c
mod_menu/main.h
mod_menu/menu.c
mod_menu/menu.h
mod_menu/mkmenu.c
mod_menu/mkmenu.h
mod_menu/mod_menu.lua
mod_mgmtmode/Makefile [deleted file]
mod_mgmtmode/main.c [deleted file]
mod_mgmtmode/main.h [deleted file]
mod_mgmtmode/mgmtmode.c [deleted file]
mod_mgmtmode/mgmtmode.h [deleted file]
mod_query/complete.c
mod_query/complete.h
mod_query/edln.c
mod_query/edln.h
mod_query/fwarn.c
mod_query/fwarn.h
mod_query/history.c
mod_query/history.h
mod_query/input.c
mod_query/input.h
mod_query/inputp.h
mod_query/listing.c
mod_query/listing.h
mod_query/main.c
mod_query/main.h
mod_query/mod_query.lua
mod_query/mod_query_chdir.lua
mod_query/query.c
mod_query/query.h
mod_query/wedln-wrappers.c
mod_query/wedln.c
mod_query/wedln.h
mod_query/wmessage.c
mod_query/wmessage.h
mod_sm/sm.c
mod_sp/main.c
mod_sp/main.h
mod_statusbar/draw.c
mod_statusbar/draw.h
mod_statusbar/main.c
mod_statusbar/main.h
mod_statusbar/mod_statusbar.lua
mod_statusbar/statusbar.c
mod_statusbar/statusbar.h
mod_tiling/main.c
mod_tiling/main.h
mod_tiling/ops.c
mod_tiling/panehandle.c
mod_tiling/panehandle.h
mod_tiling/placement.c
mod_tiling/placement.h
mod_tiling/split-stdisp.c
mod_tiling/split-stdisp.h
mod_tiling/split.c
mod_tiling/split.h
mod_tiling/splitfloat.c
mod_tiling/splitfloat.h
mod_tiling/tiling.c
mod_tiling/tiling.h
modulelist.mk
po/Makefile
po/cs.po
po/de.po [deleted file]
po/fi.po
po/ru.po [deleted file]
pwm/cfg_pwm.lua
pwm/pwm.c
version.h

index ae088618ad65803ee1f384c0465c294832e1e650..4410265957f2f2df9c909e9851373214fd376edd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,379 @@
+2007-05-06 14:43 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-3rc-20070506
+
+2007-05-06 14:43 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops
+
+2007-05-06 14:38 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Doc comment fix
+
+2007-05-06 14:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * predist.sh support for specifying additional repository base path
+
+2007-05-06 14:26 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Release notes date
+
+2007-05-06 14:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed mod_mgmtmode.
+  As it is not quite finished, it does not belong in the "stable" Ion3.
+  It will be distributed separately.
+
+2007-05-06 14:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Some more name policy clarifications
+
+2007-05-06 13:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Made the scrachpad (scratchws) pseudomodal.
+  (This will only take effect when a new scratchpad is created.)
+
+2007-05-06 13:54 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added back pseudomodal option for regions managed by WMPlexes.
+
+2007-05-06 13:12 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Stacking list traversal improvements
+
+2007-05-06 11:27 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed redundant code
+
+2007-05-05 19:04 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Doc fix
+
+2007-05-05 17:36 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Update notify window when name of window with activity changes.
+
+2007-05-05 16:44 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * *sigh*
+
+2007-05-04 21:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Display tab numbers on modifier release.
+  Seems to work better than delayed display.
+
+2007-05-04 21:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Simplified ioncore.tabnum interface.
+
+2007-05-04 21:29 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added submat_wait called on modifier release.
+
+2007-05-04 16:10 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Increased default tab numbers display delay to 250ms
+
+2007-05-04 15:57 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Draw tab numbers on right, unless tab text alignment is right.
+
+2007-05-04 15:53 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added automatically displayed tab numbers.
+  The functions in `ioncore.tabnum` can be used to display
+  tab numbers on a frame after a specified delay, and clear
+  them when the submap grab is released.
+
+2007-05-04 15:41 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added submap enter events and ungrab hook
+
+2007-05-04 15:36 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed defer to allow NULL parameters
+
+2007-05-04 06:50 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Name policy refinements
+
+2007-05-03 23:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed useless property setting special case.
+
+2007-05-03 16:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops.
+
+2007-05-02 22:06 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Some watches weren't being initialised
+
+2007-05-02 21:59 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Release notes updates
+
+2007-05-02 21:43 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed obsoleted and redundant WFrame.set_numbers.
+  (Didn't I do this already?)
+
+2007-05-02 18:50 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Store the region pointer in a Watch in binding handler.
+  It might get destroyed.
+
+2007-05-01 14:12 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Drawing engine extras table storage improvements.
+  Copy only unknown values, thus freeing memory. Append
+  to replaced style's table.
+
+2007-05-01 12:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added "userattr1" for frames to stock styles.
+  This could be used by e.g. a "place new windows here" script,
+  via `WFrame.set_grattr`. (Of course, arbitrary attributes may 
+  be defined and used, but this is one that all stock styles at 
+  least are bound to define.)
+
+2007-05-01 11:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Documentation fixes and style clean up
+
+2007-05-01 11:05 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Quasiactivate frames for detachs from groups within them too.
+
+2007-04-30 18:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * More based_on fixes.
+  (Still missing copying/appending of data_table.)
+
+2007-04-30 17:59 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Detach stacking level fix
+
+2007-04-30 17:51 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops, size hints fixing had broken unsqueeze
+
+2007-04-29 10:47 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Style file border tuning
+
+2007-04-29 10:47 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Drawing engine border calculation tuning
+
+2007-04-29 10:26 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Style file tuning
+
+2007-04-29 10:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added special "inherit" colour value.
+  This is needed in common style templates to not override padding_colour
+  with background_colour, as if padding_colour isn't set, it is set to
+  background_colour.
+
+2007-04-28 19:56 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Support based_on too after all
+
+2007-04-28 18:06 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Use based_on's based_on
+
+2007-04-27 23:57 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed based_on fields from style files
+
+2007-04-27 23:45 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Changes in de.defstyle
+  The based_on field is no longer used. Instead, the style is
+  based on the existing best-matching style. Thus the function
+  also amends to existing exactly matching style, instead of
+  redefining it.
+
+2007-04-27 21:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added name policy notice
+
+2007-04-27 21:50 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged pre-namepolicy-notice
+
+2007-04-27 16:06 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed note of removed autoconf script from README
+
+2007-04-27 15:15 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Changed license header in source files
+
+2007-04-25 13:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Release notes draft
+
+2007-04-24 23:53 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed dockapp hack with those few that actually have WM_CLASS.
+
+2007-04-24 14:25 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added green tabnumber substyle to tab-frame styles.
+  (Tab numbering can be toggled/set/unset with 
+  `frame:set_grattr('numbers', 'toggle')` etc.)
+
+2007-04-24 14:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixes and improvements to previously blind-written code.
+
+2007-04-24 11:08 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added WFrame.set_grattr/WFrame.is_grattr
+
+2007-04-24 11:38 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added numbering hack to drawing engine
+
+2007-04-24 11:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Drawing engine attribute matching improvements
+
+2007-04-24 11:22 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops, const
+
+2007-04-24 11:08 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added gr_stylespec_isset
+
+2007-04-24 10:02 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Store current frame base style in WFrame.baseattr 
+  instead of reconstructing it all the time.
+
+2007-04-24 09:08 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed unused setting from config.h
+
+2007-04-23 23:26 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed size hints ICCCM compliance degradation + code clean-up
+
+2007-04-23 23:01 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Improved dockapp winprop support hack.
+  Copy WM_CLASS from the (undisplayed) main window as _ION_DOCKAPP_HACK
+  property on the (displayed) icon window. Have WClientWin.get_ident
+  then report this information as `class` and `instance` for the dockapp
+  window, so that winprop matching code can use it.
+
+2007-04-22 18:10 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Place dockapps in the statusbar's systray.
+  (Added winprop in default `cfg_kludges.lua`.)
+
+2007-04-22 18:07 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed possibly obsolete Galeon winprop.
+  (Isn't the browser also dead already? Downwards slide started at Gnome 2.0.)
+
+2007-04-22 18:02 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Ugly hack for dockapp winprop support.
+  We save the dockapp state ourselves over restarts to get the right
+  winprop after that, because the way windows are loaded after restart,
+  the dockapp state would not be easily available otherwise. In addition,
+  dockapps usually don't have any class/role/instance identification
+  information in the dockapp (icon) window, so this method can not
+  be used -- easily. Some dockapps would function fine with us simply
+  using the main window instead of the icon window as specified by
+  the dockapp protocol, and this would provide better winprop support,
+  but then other dockapps don't display anything meaningful in the
+  main window, that the expect not to be shown. Hence this ugly hack
+  for at least basic all-dockapps winprop matching. For better matching
+  dockapps should preferrably be able to start normally, as `asclock` 
+  can do (an does by default), instead of the "withdrawn" mode.
+
+2007-04-22 15:11 UTC  Miroslav Kure <kurem@debian.cz>
+  * Updated Czech translation
+
+2007-04-22 10:16 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated Finnish translation
+
+2007-04-22 10:10 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Man page tuning
+
+2007-04-22 09:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Man page binding documentation extraction script improvements.
+  (To generate better PWM man pages.)
+
+2007-04-22 09:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed duplicate Mod1+T binding
+
+2007-04-22 09:13 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updates to PWM config file
+
+2007-04-22 00:33 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed ru translation, as it has not been updated as requested.
+
+2007-04-22 00:32 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Remove de translation, as it has not been updated as requested.
+
+2007-04-22 00:32 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed de and ru from translations to build
+  (to allow separately rolling back other removals to be recorded).
+
+2007-04-22 00:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed autoconf shit.
+  Since I will have nothing to do with that shit, and nobody else
+  seems to maintain or support it either, it has no place here.
+
+2007-04-21 17:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Changes in prepare_manage to cope with nested workspaces.
+  A priority parameter is passed instead of just a redirection
+  hint, which was poorly utilised anyway.
+
+2007-04-20 16:30 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added is_transient field to WClientWin.get_ident and for winprop matching.
+
+2007-04-20 16:30 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed unused transient_for field from WClientWin
+
+2007-04-20 16:09 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added look_greenlight
+
+2007-04-20 16:07 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Hmm...
+
+2007-04-09 09:42 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added commented-out bindings for plain-old-menus in cfg_ion.lua
+
+2007-04-08 12:37 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Ref. to size policy section etc.
+
+2007-04-08 12:18 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Use strings instead of numeric size policies
+
+2007-04-06 11:29 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Docs from $(LUA_SOURCES) too..
+
+2007-04-06 11:18 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added exports.tex make rule
+
+2007-04-06 11:00 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added padding to default look's transient style
+
+2007-04-05 16:30 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed documentation mixup
+
+2007-04-05 16:27 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Statusbar documetnation improvements
+
+2007-04-03 15:41 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated Finnish translation
+
+2007-04-03 15:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Tiling navigation code changes and semi-fixes
+
+2007-03-31 21:04 UTC  Miroslav Kure <kurem@debian.cz>
+  * Updated Czech translation
+
+2007-03-31 14:20 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Redirect frame placeholders in frame_rescue_clientwins. 
+  Dispose code changes had disabled the creation of a frame
+  recreation placeholder.
+
+2007-03-29 21:39 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Unsqueeze includes base size hint
+
+2007-03-29 21:35 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Put the scratchpad in the group *scratchws*
+
+2007-03-29 21:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * WGroup attach only switches to floating mode frames in tiled mode
+  (and not those in unknown or transient mode).
+
+2007-03-29 21:33 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Detach stacks one level above source now
+
+2007-03-29 17:12 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Don't override "level" by "bottom" in WGroup.attach
+
+2007-03-29 16:00 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Move tiled transient handling from tiling code to frame code
+  (check by frame mode). This is the place to get correct behaviour
+  on a more complex scratchpad configuration.
+
+2007-03-28 18:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Context menu generation changes.
+  The `ctxmenu` menu generator automatically uses WGroup.bottom, so that
+  it suffices to pass _sub instead of _chld to the menu functions. This
+  should fix tab drop-down menus.
+
+2007-03-25 11:53 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * region_may_control_focus policy change.
+  The focus may be controlled, if a manager is about to be given 
+  the focus (which makes sense, since we have not requested focus
+  within a particular region within it). This fixes unsqueeze focus
+  issues.
+
+2007-03-20 11:35 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Export name fix
+
+2007-03-19 19:02 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed redundant MPLEX_ATTACH_MODAL parameter
+
+2007-03-19 18:57 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Menus and queries use STACKING_LEVEL_MODAL1+1.
+  This is to not let transients steal the focus.
+
+2007-03-19 18:37 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops, return in wrong place in fs rq check was breaking other cfgrqs
+
+2007-03-19 18:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Unsqueeze infinite loop fix
+
 2007-03-18 20:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
   tagged ion-3ds-20070318
 
diff --git a/LICENSE b/LICENSE
index cf9b6b997263b8a4e007aa1edd4b16437f4583ca..b5cf6d283c53609af6ca35c4c8fa9233e22be16b 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,9 +1,70 @@
 
+Copyright (c) Tuomo Valkonen 1999-2007.
+
+The code of this project is "essentially" licensed under the LGPL, version
+2.1, unless otherwise indicated in components taken from elsewhere. It is
+reproduced below. Additionally, the following terms apply to the use of 
+the names Ion, Ion3, and other derived names:
+
+    Derived works and altered versions that significantly differ from the
+    original copyright holder's versions, must either a) be given names 
+    that can not be associated with the "Ion" project, or b) be qualified
+    as "Ion soup", and still be considerable as customised versions of this
+    software. In both cases, executables must also be given names that do 
+    not conflict with the original copyright holder's version, and the 
+    copyright holder may not be referred to for support.
+
+    Modules and other (standalone) extensions to Ion must also be named 
+    so that they can not be confused to be supported by the copyright 
+    holder. If "Ion" occurs in the name, it must be in the form
+    "Foo for Ion" instead of "Ion Foo", etc.
+    
+    If the name of the project (Ion), resp. names of particular branches
+    (Ion1, Ion2, Ion3, etc.), are used without further prominent version
+    qualifiers and notices of possible out-datedness to distribute this
+    software, then the following conditions must hold: a) The version
+    distributed online may not significantly differ from the copyright
+    holder's latest release marked stable, resp. latest release on a 
+    branch, within a reasonable delay (normally 28 days) from the release.
+    b) The holders of physical distribution media are provided ways to 
+    upgrade to the latest release within this same delay.
+
+    This name policy notice may not be altered, and must be included in
+    any altered versions and binary redistributions. It may only be
+    removed when using small portions of the code in unrelated projects. 
+
+    The copyright holder and the Ion project retain the same rights to
+    your modifications that it would have under the LGPL or GPL without
+    these or similar additional terms.
+
+Explanations:
+
+Significant change: Bug fixes are a priori insignificant as additions. 
+Basic changes that are needed to install or run the software on a target
+platform are a priori insignificant. Additionally, basic configuration
+changes to better integrate the software with the target platform, 
+without obstructing the standard behaviour, are a priori insignificant.
+The copyright holder, however, reserves the right to refine the 
+definition of significant changes on a per-case basis. Please consult
+when in doubt. 
+
+Distributions: For example, suppose an aggregate distribution of software
+provides a `installpkg` command for installing packages. Then the action
+`installpkg ion3` (resp. `installpkg ion`)  should always install the 
+latest release of Ion3 (resp. the latest stable release), online 
+connectivity provided. The action `installpkg ion-3ds-20070318` may
+at any date install this particular mentioned release. Likewise 
+`installpkg ion-soup` may install any non-conflicting customised
+version.
+
+---
+
+
                   GNU LESSER GENERAL PUBLIC LICENSE
                        Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -57,7 +118,7 @@ modified by someone else and passed on, the recipients should know
 that what they have is not the original version, so that the original
 author's reputation will not be affected by problems that might be
 introduced by others.
-^L
+\f
   Finally, software patents pose a constant threat to the existence of
 any free program.  We wish to make sure that a company cannot
 effectively restrict the users of a free program by obtaining a
@@ -113,7 +174,7 @@ modification follow.  Pay close attention to the difference between a
 "work based on the library" and a "work that uses the library".  The
 former contains code derived from the library, whereas the latter must
 be combined with the library in order to run.
-^L
+\f
                   GNU LESSER GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
@@ -218,7 +279,7 @@ instead of to this License.  (If a newer version than version 2 of the
 ordinary GNU General Public License has appeared, then you can specify
 that version instead if you wish.)  Do not make any other change in
 these notices.
-^L
+\f
   Once this change is made in a given copy, it is irreversible for
 that copy, so the ordinary GNU General Public License applies to all
 subsequent copies and derivative works made from that copy.
@@ -269,7 +330,7 @@ Library will still fall under Section 6.)
 distribute the object code for the work under the terms of Section 6.
 Any executables containing that work also fall under Section 6,
 whether or not they are linked directly with the Library itself.
-^L
+\f
   6. As an exception to the Sections above, you may also combine or
 link a "work that uses the Library" with the Library to produce a
 work containing portions of the Library, and distribute that work
@@ -331,7 +392,7 @@ restrictions of other proprietary libraries that do not normally
 accompany the operating system.  Such a contradiction means you cannot
 use both them and the Library together in an executable that you
 distribute.
-^L
+\f
   7. You may place library facilities that are a work based on the
 Library side-by-side in a single library together with other library
 facilities not covered by this License, and distribute such a combined
@@ -372,7 +433,7 @@ 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 with
 this License.
-^L
+\f
   11. 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
@@ -425,7 +486,7 @@ conditions either of that version or of any later version published by
 the Free Software Foundation.  If the Library does not specify a
 license version number, you may choose any version ever published by
 the Free Software Foundation.
-^L
+\f
   14. If you wish to incorporate parts of the Library into other free
 programs whose distribution conditions are incompatible with these,
 write to the author to ask for permission.  For software which is
@@ -459,7 +520,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
 
                      END OF TERMS AND CONDITIONS
-^L
+\f
            How to Apply These Terms to Your New Libraries
 
   If you develop a new library, and you want it to be of the greatest
@@ -490,7 +551,7 @@ notice is found.
 
     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 Also add information on how to contact you by electronic and paper mail.
 
diff --git a/README b/README
index 29fcb90f136728946dbc68e07df631dcac2c4990..226bbe43ef8ffa83c1d0a6142fafd2ec78d296ad 100644 (file)
--- a/README
+++ b/README
@@ -17,17 +17,8 @@ Building and installing
     * GNU make
     * Lua 5.1 (see <http://www.lua.org/>). 
 
-2. a) Edit `system.mk` to suit your system. Most GNU/Linux users should
-      need very few changes.
-
-   b) Alternatively, go to the directory `build/ac`, run `autoreconf`
-      and then `./configure`. Switch back to the top lvel directory 
-      afterwards. See `build/ac/README.autoconf` for details on parameters, 
-      especially if you are using the Debian Lua packages. If you try 
-      this method and it fails for some reason, please make sure 
-      `build/ac/system-ac.mk` does not exist before falling back to
-      alternative a). Also in such a case, find someone else to complain
-      to: I (tuomov) will have nothing to do with autoconf.
+2. Edit `system.mk` to suit your system. Most GNU/Linux users should
+   need very few changes.
 
 3. If you want to build some extra modules now or do not want to build
    some of the standard modules, edit `modulelist.mk`.
@@ -118,8 +109,6 @@ Credits
 
 Ion was written by Tuomo Valkonen.
 
-The autoconf script written by Tom Payne for the most part.
-
 The dock module was written by Tom Payne and Per Olofsson.
 
 `utils/ion-completefile/ion-completefile.c` is based on editline, (c)
index c8621c135374519da403bf7b65ed1044064c7b50..4a3998e7013d763d3311c62a37804662a4fe39d8 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,4 +1,37 @@
 
+ion-3rc-20070506
+----------------
+
+This is the first "rc" or "(stable) release candidate" release of 
+Ion3. This means that there will not be any further major changes 
+to it. Bugs will be fixed, and as an exception to the general 
+feature freeze, some hooks may still be added, if deemed useful.
+Translations may also be included. After no new bugs (that can not
+be deemed features) have been found in this or following "rc" 
+releases, the stable Ion3 will be released.
+
+Most of the changes in this release to the previous one already
+are bug fixes, in addition to some general clean-up. Other notable
+changes are:
+
+  * Winprop matching improvements: it is possible to match against
+    `is_dockapp` and `is_transient` (booleans), and there's a hack
+    to support `class` and `instance` for dockapps too.
+
+  * The default configuration puts dockapps in the statusbar's
+    tray area.
+
+  * The autoconf kludge has been removed, as I will have nothing
+    to do with it, and nobody else seems to support or maintain 
+    it either.
+
+  * Tab numbers are displayed when releasing modifiers in the
+    `Mod1+K` submap.
+
+Distributors should pay heed to the name policy notice in the
+LICENSE file.
+
+
 ion-3ds-20070318
 ----------------
 
index ffb87814f6fbd9a9a41049aa27e4076f615e6980..162a268ee2644ca03abc7022d6d012c3b75b3d7f 100644 (file)
--- a/TODO.riot
+++ b/TODO.riot
@@ -56,25 +56,6 @@ In-Reply-To: <riot.20060323180800.34@riot.invalid>
 
 Better support for the few applicable EWMH hints
 
-From background-static Thu Mar 23 17:52:17 EET 2006
-Message-Id: <riot.20060323175217.6@riot.invalid>
-Date: Thu Mar 23 17:52:17 EET 2006
-Status: RO
-X-Riot-Version: 1ds-yyyymmdd
-From: Riot
-X-Riot-Edited: Sat Apr 22 19:08:23 EEST 2006
-Content-Type: text/plain; charset=utf-8
-Subject: Numbered tabs
-In-Reply-To: <riot.20060323180800.34@riot.invalid>
-
-Numbered tabs
-
-Either togglable, or perhaps the numbers should be shown when
-a prefix of the key combo to switch tabs has been entered.
-The latter will be quite more complicated to implement.
-
-Done: basic toggleable numbering.
-
 From background-static Thu Mar 23 18:00:25 EET 2006
 Message-Id: <riot.20060323180025.17@riot.invalid>
 Date: Thu Mar 23 18:00:25 EET 2006
@@ -556,6 +537,25 @@ Subject: Done
 
 Done
 
+From background-static Thu Mar 23 17:52:17 EET 2006
+Message-Id: <riot.20060323175217.6@riot.invalid>
+Date: Thu Mar 23 17:52:17 EET 2006
+Status: RO
+X-Riot-Version: 1ds-yyyymmdd
+From: Riot
+X-Riot-Edited: Sat Apr 22 19:08:23 EEST 2006
+Content-Type: text/plain; charset=utf-8
+Subject: Numbered tabs
+In-Reply-To: <riot.20060323173244.4@riot.invalid>
+
+Numbered tabs
+
+Either togglable, or perhaps the numbers should be shown when
+a prefix of the key combo to switch tabs has been entered.
+The latter will be quite more complicated to implement.
+
+Done: basic toggleable numbering.
+
 From background-static Thu Mar 23 17:40:03 EET 2006
 Message-Id: <riot.20060323174003.7@riot.invalid>
 Date: Thu Mar 23 17:40:03 EET 2006
diff --git a/build/ac/README.autoconf b/build/ac/README.autoconf
deleted file mode 100644 (file)
index 9af494e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-Ion autoconf script README
-
-
-CONFIGURE SCRIPT OPTIONS
-
-The Ion-specific options to ./configure are:
-
-    --disable-xinerama
-    --disable-xfree86-textprop-bug-workaround
-    --enable-Xutf8
-    --disable-shared
-    --with-lua* (see DEBIAN NOTES below)
-    --enable-c99-source
-    --enable-xopen-source
-    --disable-locale
-    --enable-sun-f1x-remap
-
-Run ./configure --help for more information on these options. The
-defaults are chosen to generate a configuration very similar to the
-Ion default.
-
-
-DEBIAN NOTES
-
-If you are using the Lua 5.1 package on Debian then use
-
-    ./configure --with-lua-suffix=5.1 \
-    --with-lua-includes=/usr/include/lua5.1
-
-This will allow the script to find the Lua headers, binaries and
-libraries as renamed and located on Debian.
-
-
-CYGWIN NOTES
-
-Under Cygwin you must use statically linked modules:
-
-    ./configure --disabled-shared
-
-
-AUTHORS
-
-Tom Payne <ion@tompayne.org>
-
diff --git a/build/ac/aclocal.m4 b/build/ac/aclocal.m4
deleted file mode 100644 (file)
index c80e0ac..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN(PKG_CHECK_MODULES, [
-  succeeded=no
-
-  if test -z "$PKG_CONFIG"; then
-    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-  fi
-
-  if test "$PKG_CONFIG" = "no" ; then
-     echo "*** The pkg-config script could not be found. Make sure it is"
-     echo "*** in your path, or set the PKG_CONFIG environment variable"
-     echo "*** to the full path to pkg-config."
-     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-  else
-     PKG_CONFIG_MIN_VERSION=0.9.0
-     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-        AC_MSG_CHECKING(for $2)
-
-        if $PKG_CONFIG --exists "$2" ; then
-            AC_MSG_RESULT(yes)
-            succeeded=yes
-
-            AC_MSG_CHECKING($1_CFLAGS)
-            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-            AC_MSG_RESULT($$1_CFLAGS)
-
-            AC_MSG_CHECKING($1_LIBS)
-            $1_LIBS=`$PKG_CONFIG --libs "$2"`
-            AC_MSG_RESULT($$1_LIBS)
-        else
-            $1_CFLAGS=""
-            $1_LIBS=""
-            ## If we have a custom action on failure, don't print errors, but 
-            ## do set a variable so people can do so.
-            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-            ifelse([$4], ,echo $$1_PKG_ERRORS,)
-        fi
-
-        AC_SUBST($1_CFLAGS)
-        AC_SUBST($1_LIBS)
-     else
-        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-        echo "*** See http://www.freedesktop.org/software/pkgconfig"
-     fi
-  fi
-
-  if test $succeeded = yes; then
-     ifelse([$3], , :, [$3])
-  else
-     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-  fi
-])
-
-
diff --git a/build/ac/configure.ac b/build/ac/configure.ac
deleted file mode 100644 (file)
index 88a8d4d..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-dnl Please report bugs in this autoconf script Tom Payne <ion@tompayne.org>
-dnl $Header: /home/twp/cvsroot/twp/ion/ion-devel-autoconf/configure.ac,v 1.16 2004/01/14 11:32:19 twp Exp $
-
-AC_INIT([Ion Window Manager],
-        [3ds-20070318],
-        [nobody@nowhere.invalid],
-        [ion3])
-AC_PREREQ([2.58])
-AC_REVISION([$Revision: 1.16 $])
-
-dnl Checks for programs. {{{
-AC_PROG_CC()
-AC_PROG_EGREP()
-AC_PROG_INSTALL()
-AC_PROG_RANLIB()
-AC_CHECK_TOOL([STRIP], [strip], [:])
-AC_CHECK_TOOL([AR], [ar], [])
-AC_CHECK_PROG(XMESSAGE, xmessage, xmessage)
-if test "x${XMESSAGE}" = "x"; then
-   AC_MSG_WARN([*** ion needs xmessage to run correctly])
-fi
-dnl }}}
-
-dnl Checks for libraries. {{{
-AC_PATH_XTRA()
-AC_CHECK_HEADER([libintl.h], [],
-                [AC_MSG_ERROR([*** libintl.h not found.
-                  *** You probably need to install libc6-dev])])
-dnl Perhaps we should check for -lintl, but on my machine, 
-dnl the library isn't needed. Only the #include is necessary.
-
-test "${X_DISPLAY_MISSING+set}" = set && exit 1
-AC_CHECK_HEADER([X11/SM/SMlib.h], [], 
-                [AC_MSG_ERROR([*** SMlib.h not found.
-                  *** You probably need to install libsm-dev])])
-AC_CHECK_HEADER([X11/Xresource.h], [], 
-                [AC_MSG_ERROR([*** Xresource.h.h not found.
-                  *** You probably need to install libx11-dev])])
-AC_CHECK_LIB([Xext],
-             [XMissingExtension],
-             [X_LIBS="$X_LIBS -lXext"],
-             [AC_MSG_ERROR([*** Missing symbol XMissingExtension in Xext])],
-             [$X_PRE_LIBS -lX11 $X_LIBS $X_EXTRA_LIBS])
-dnl }}}
-
-dnl XINERAMA_LIBS, _DCF_NO_XINERAMA {{{
-
-AC_SUBST([XINERAMA_LIBS])
-AC_SUBST([_DCF_NO_XINERAMA])
-
-AC_ARG_ENABLE([xinerama],
-              [AS_HELP_STRING([--disable-xinerama],
-                              [Disable Xinerama support])])
-
-if test "x$enable_xinerama" != xno; then
-    AC_CHECK_LIB([Xinerama],
-                 [XineramaQueryExtension],
-                 [XINERAMA_LIBS="-lXinerama"],
-                 [AC_MSG_WARN([*** Xinerama disabled (not available)])
-                  enable_xinerama="no"],
-                 [$X_PRE_LIBS -lX11 $X_LIBS $X_EXTRA_LIBS])
-
-fi
-
-if test "x$enable_xinerama" = xno; then
-    _DCF_NO_XINERAMA="-DCF_NO_XINERAMA"
-fi
-
-dnl }}}
-
-dnl _DCF_XFREE86_TEXTPROP_BUG_WORKAROUND {{{
-
-AC_SUBST([_DCF_XFREE86_TEXTPROP_BUG_WORKAROUND])
-
-AC_ARG_ENABLE([xfree86-textprop-bug-workaround],
-              [AS_HELP_STRING([--disable-xfree86-textprop-bug-workaround],
-                              [Disable the XFree86 textprop bug workaround])])
-
-if test "x$enable_xfree86_textprop_bug_workaround" != xno; then
-    _DCF_XFREE86_TEXTPROP_BUG_WORKAROUND="-DCF_XFREE86_TEXTPROP_BUG_WORKAROUND"
-fi
-
-dnl }}}
-
-dnl _DCF_DE_USE_XUTF8 {{{
-
-AC_SUBST([_DCF_DE_USE_XUTF8])
-
-AC_ARG_ENABLE([Xutf8],
-              [AS_HELP_STRING([--enable-Xutf8],
-                              [Use the Xutf8 routines (XFree86 extension)
-                               instead of Xmb routines in an UTF-8 locale.])])
-
-if test "x$enable_Xutf8" = xyes; then
-    AC_MSG_CHECKING([for Xutf8*])
-    save_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $X_CFLAGS"
-    AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <X11/Xlib.h>
-
-int main()
-{
-#ifdef X_HAVE_UTF8_STRING
-    exit(0);
-#else
-    exit(1);
-#endif
-}
-                  ]])],
-                  [AC_MSG_RESULT([yes])
-                   _DCF_DE_USE_XUTF8="-DCF_DE_USE_XUTF8"],
-                  [AC_MSG_RESULT([no])
-                   exit 1])
-    CFLAGS="$save_CFLAGS"
-fi
-
-dnl }}}
-
-dnl _DCF_SUN_F1X_REMAP {{{
-
-AC_SUBST([_DCF_SUN_F1X_REMAP])
-
-AC_ARG_ENABLE([sun-f1x-remap],
-                         [AS_HELP_STRING([--enable-sun-f1x-remap],
-                                                         [Remap F11 key to SunF36 and F12 to SunF37])])
-
-if test "x$enable_sun_f1x_remap" == xyes; then
-       _DCF_SUN_F1X_REMAP="-DCF_SUN_F1X_REMAP"
-fi
-
-dnl }}}
-
-dnl DL_LIBS {{{
-
-AC_SUBST([DL_LIBS])
-
-AC_CHECK_HEADER([dlfcn.h], [], [AC_MSG_ERROR([*** missing header dlfcn.h])])
-AC_CHECK_LIB([dl], [dlopen], [DL_LIBS="-ldl"],
-             [AC_MSG_ERROR([*** missing library dl])])
-
-dnl }}}
-
-dnl PRELOAD_MODULES {{{
-
-AC_SUBST(PRELOAD_MODULES)
-
-AC_ARG_ENABLE([shared],
-              [AS_HELP_STRING([--disable-shared],
-                              [Do not dynamically load modules (preload modules
-                               instead)])])
-
-if test "x$enable_shared" = xno; then
-    PRELOAD_MODULES="1"
-fi
-
-dnl }}}
-
-dnl LUA, LUAC, LUA_INCLUDES, LUA_LIBS {{{
-
-AC_SUBST([LUA])
-AC_SUBST([LUAC])
-AC_SUBST([LUA_INCLUDES])
-AC_SUBST([LUA_LIBS])
-
-dnl Arguments {{{
-AC_ARG_WITH([lua-prefix],
-            [AS_HELP_STRING([--with-lua-prefix=DIR],
-                            [Lua files are in DIR])])
-AC_ARG_WITH([lua-includes],
-            [AS_HELP_STRING([--with-lua-includes=DIR],
-                            [Lua include files are in DIR])])
-AC_ARG_WITH([lua-libraries],
-            [AS_HELP_STRING([--with-lua-libraries=DIR],
-                            [Lua library files are in DIR])])
-AC_ARG_WITH([lua-suffix],
-            [AS_HELP_STRING([--with-lua-suffix=ARG],
-                            [Lua binary and library files are suffixed with
-                             ARG])])
-dnl }}}
-
-dnl LUA {{{
-if test "x$with_lua_prefix" = x; then
-    lua_search_path="$PATH"
-else
-    lua_search_path="$with_lua_prefix/bin"
-fi
-if test "x$LUA" = x; then
-    AC_PATH_PROG([LUA], [lua$with_lua_suffix], [], [$lua_search_path])
-    test "x$LUA" = x && AC_MSG_ERROR([*** Can't build ion without lua])
-fi
-dnl }}}
-
-dnl lua_version {{{
-AC_MSG_CHECKING([for lua version >= 5.1])
-lua_version=$($LUA -v 2>&1 | head -n 1 | cut -d' ' -f2)
-dnl lua_version=$($LUA -v 2>&1 >/dev/null | head -n 1 | $EGREP -o '[0-9]+(\.[0-9]+)+')
-case $lua_version in
-0.* | 1.* | 2.* | 3.* | 4.* | 5.0)
-    AC_MSG_RESULT([no (found $lua_version)])
-    AC_MSG_ERROR([*** can't build ion with this version of lua])
-    ;;
-*)
-    AC_MSG_RESULT([yes (found $lua_version)])
-    ;;
-esac
-dnl }}}
-
-dnl LUAC {{{
-if test "x$LUAC" = x; then
-    AC_PATH_PROG([LUAC], [luac$with_lua_suffix], [], [$lua_search_path])
-    test "x$LUAC" = x && exit 1
-fi
-dnl }}}
-
-dnl luac_version {{{
-AC_MSG_CHECKING([for lua version = luac version])
-luac_version=$($LUAC -v 2>&1 | head -n 1 | cut -d' ' -f2)
-if test "x$lua_version" = "x$luac_version"; then
-    AC_MSG_RESULT([yes (found $luac_version)])
-else
-    AC_MSG_RESULT([no (found $luac_version)])
-    exit 1
-fi
-dnl }}}
-
-dnl LUA_INCLUDES {{{
-if test "x$with_lua_includes" != x; then
-    LUA_INCLUDES="-I$with_lua_includes"
-elif test "x$with_lua_prefix" != x; then
-    LUA_INCLUDES="-I$with_lua_prefix/include"
-fi
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $LUA_INCLUDES"
-AC_CHECK_HEADERS([lua.h lualib.h], [],
-                 [AC_MSG_ERROR([*** missing headers lua.h or lualib.h.
-                  *** install the lua's -dev package or check --with-lua-includes option.])], [])
-CFLAGS="$save_CFLAGS"
-dnl }}}
-
-dnl LUA_LIBS {{{
-if test "x$with_lua_libraries" != x; then
-    LUA_LIBS="-L$with_lua_libraries"
-elif test "x$with_lua_prefix" != x; then
-    LUA_LIBS="-L$with_lua_prefix/lib"
-fi
-AC_CHECK_LIB([m], [exp], [lua_extra_libs="$lua_extra_libs -lm"], [])
-AC_CHECK_LIB([dl], [dlopen], [lua_extra_libs="$lua_extra_libs -ldl"], [])
-AC_CHECK_LIB([lua$with_lua_suffix],
-             [lua_call],
-             [LUA_LIBS="$LUA_LIBS -llua$with_lua_suffix $lua_extra_libs"],
-             [AC_MSG_ERROR([*** Can't find lua_call in lua$with_lua_suffix.
-                  *** Check for liblua installation or --with-lua-libraries or --with-lua-suffix options])],
-             [$LUA_LIBS $lua_extra_libs])
-dnl }}}
-
-dnl liblua_version {{{
-AC_MSG_CHECKING([for liblua version >= 5.1])
-save_CFLAGS="$CFLAGS"
-save_LIBS="$LIBS"
-CFLAGS="$CFLAGS $LUA_INCLUDES"
-LIBS="$LIBS $LUA_LIBS"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <lua.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-int main()
-{
-    printf("(found %s, %d)... ", LUA_VERSION, LUA_VERSION_NUM);
-    if(LUA_VERSION_NUM >= 501)
-        exit(EXIT_SUCCESS);
-    exit(EXIT_FAILURE);
-}
-
-]])],
-              [AC_MSG_RESULT([yes])],
-              [AC_MSG_RESULT([no])
-               exit 1])
-CFLAGS="$save_CFLAGS"
-LIBS="$save_LIBS"
-dnl }}}
-
-dnl }}}
-
-dnl HAS_SYSTEM_ASPRINTF {{{
-
-AC_SUBST([HAS_SYSTEM_ASPRINTF])
-
-AC_CHECK_FUNC([asprintf],
-              [AC_CHECK_FUNC([vasprintf],
-                             [HAS_SYSTEM_ASPRINTF="1"])])
-
-dnl }}}
-
-dnl XOPEN_SOURCE {{{
-
-AC_SUBST([XOPEN_SOURCE])
-
-AC_ARG_ENABLE([xopen-source],
-              [AS_HELP_STRING([--enable-xopen-source],
-                              [Enable X/Open C flags (development use only)])])
-
-if test "x$enable_xopen_source" = xyes; then
-    AC_MSG_CHECKING([for $CC flags to accept X/Open C])
-    case $host in
-    # FIXME: what flags are required for other hosts/compilers?
-    *-*-solaris* | *-*-sunos*)
-        XOPEN_SOURCE="-D__EXTENSIONS__"
-        ;;
-    *)
-        XOPEN_SOURCE="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED"
-        ;;
-    esac
-    AC_MSG_RESULT([$XOPEN_SOURCE])
-fi
-
-dnl }}}
-
-dnl C99_SOURCE {{{
-
-AC_SUBST([C99_SOURCE])
-
-AC_ARG_ENABLE([c99-source],
-              [AS_HELP_STRING([--enable-c99-source],
-                              [Enable C99 source (development use only)])])
-
-if test "x$enable_c99_source" = xyes; then
-    AC_MSG_CHECKING([for $CC flags to accept C99])
-    case $CC in
-    # FIXME: what flags are required for other hosts/compilers?
-    gcc*)
-        C99_SOURCE="-std=c99"
-        ;;
-    esac
-    AC_MSG_RESULT([$C99_SOURCE])
-fi
-
-dnl }}}
-
-dnl _DCF_HAS_VA_COPY {{{
-
-AC_SUBST([_DCF_HAS_VA_COPY])
-
-dnl check for va_copy {{{
-
-AC_MSG_CHECKING([for va_copy])
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $C99_SOURCE"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-void f(void *last, ...)
-{
-    va_list ap, aq;
-    va_start(ap, last);
-    va_copy(aq, ap);
-    va_end(ap);
-    exit(va_arg(aq, int));
-}
-
-int main()
-{
-    f(NULL, EXIT_SUCCESS);
-    exit(EXIT_FAILURE);
-}
-
-]])],
-                  [AC_MSG_RESULT([yes])
-                   _DCF_HAS_VA_COPY="-DCF_HAVE_VA_COPY"],
-                  [AC_MSG_RESULT([no])])
-CFLAGS="$save_CFLAGS"
-
-dnl }}}
-
-dnl check whether -ansi breaks va_copy {{{
-
-if test "x${XOPEN_SOURCE}" != "x"; then
-    AC_MSG_CHECKING([whether XOPEN_SOURCE breaks va_copy])
-    save_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $XOPEN_SOURCE $C99_SOURCE"
-    AC_LINK_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-void f(void *last, ...)
-{
-    va_list ap, aq;
-    va_start(ap, last);
-    va_copy(aq, ap);
-    va_end(ap);
-    va_end(aq);
-}
-
-int main()
-{
-    f(NULL);
-    exit(EXIT_SUCCESS);
-}
-
-]])],
-                      [AC_MSG_RESULT([no])],
-                      [AC_MSG_RESULT([yes, clearing XOPEN_SOURCE])
-                       XOPEN_SOURCE=""])
-    CFLAGS="$save_CFLAGS"
-fi
-dnl }}}
-
-dnl }}}
-
-dnl _DCF_NO_LOCALE {{{
-
-AC_SUBST([_DCF_NO_LOCALE])
-
-AC_ARG_ENABLE([locale],
-                         [AS_HELP_STRING([--disable-locale],
-                                                         [Disable locale support])])
-
-if test "x$enable_locale" == xno; then
-       _DCF_NO_LOCALE="-DCF_NO_LOCALE"
-fi
-
-dnl }}}
-
-
-AC_OUTPUT([system-ac.mk])
-
-if test "x$lua_version" = "x5.0"; then
-    AC_MSG_NOTICE([**])
-    AC_MSG_NOTICE([** lua version 5.0 is buggy, consider upgrading to 5.0.1])
-    AC_MSG_NOTICE([** see http://lua-users.org/lists/lua-l/2003-10/msg00039.html])
-    AC_MSG_NOTICE([**])
-fi
-
-dnl vim: foldmethod=marker tabstop=4 shiftwidth=4
diff --git a/build/ac/system-ac.mk.in b/build/ac/system-ac.mk.in
deleted file mode 100644 (file)
index 035a515..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-##
-## System settings
-##
-
-
-##
-## Installation paths
-##
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-# Unless you are creating a package conforming to some OS's standards, you
-# probably do not want to modify the following directories:
-
-# Main binaries
-BINDIR=@bindir@
-# Configuration .lua files
-ETCDIR=@sysconfdir@/@PACKAGE_TARNAME@
-# Some .lua files and ion-* shell scripts
-SHAREDIR=@datadir@/@PACKAGE_TARNAME@
-# Manual pages
-MANDIR=@datadir@/man
-# Some documents
-DOCDIR=@datadir@/doc/@PACKAGE_TARNAME@
-# Nothing at the moment
-INCDIR=@includedir@
-# Nothing at the moment
-LIBDIR=@libdir@
-# Modules
-MODULEDIR=@libdir@/@PACKAGE_TARNAME@/mod
-# Compiled Lua source code
-LCDIR=@libdir@/@PACKAGE_TARNAME@/lc
-# ion-completefile (does not belong in SHAREDIR being a binary file)
-EXTRABINDIR=@libexecdir@/@PACKAGE_TARNAME@/bin
-# For ion-completeman system-wide cache
-#VARDIR=@localstatedir@/cache/@PACKAGE_TARNAME@
-VARDIR=/var/cache/@PACKAGE_TARNAME@
-# Message catalogs
-LOCALEDIR=@prefix@/share/locale
-
-
-##
-## Modules
-##
-
-# Set PRELOAD_MODULES=1 if your system does not support dynamically loaded
-# modules through 'libdl' or has non-standard naming conventions.
-PRELOAD_MODULES=@PRELOAD_MODULES@
-
-# Flags to link with libdl.
-DL_LIBS=@DL_LIBS@
-
-
-##
-## Lua
-##
-
-# If you have installed Lua 5.0 from the official tarball without changing
-# paths, this should do it.
-#LUA_DIR=/usr/local
-LUA_LIBS = @LUA_LIBS@
-LUA_INCLUDES = @LUA_INCLUDES@
-LUA=@LUA@
-LUAC=@LUAC@
-
-# If you are using the Debian packages, the following settings should be
-# what you want.
-#LUA_LIBS=`lua-config50 --libs`
-#LUA_INCLUDES=`lua-config50 --include`
-#LUA=lua50
-#LUAC=luac50
-
-
-##
-## X libraries, includes and options
-##
-
-#X11_PREFIX=/usr/X11R6
-# SunOS/Solaris
-#X11_PREFIX=/usr/openwin
-
-X11_LIBS=@X_EXTRA_LIBS@ @X_PRE_LIBS@ -lX11 @X_LIBS@
-X11_INCLUDES=@X_CFLAGS@
-
-# Change commenting to disable Xinerama support
-XINERAMA_LIBS=@XINERAMA_LIBS@
-DEFINES += @_DCF_NO_XINERAMA@
-
-# XFree86 libraries up to 4.3.0 have a bug that will cause Ion to segfault
-# if Opera is used when i18n support is enabled. The following setting
-# should work around that situation.
-DEFINES += @_DCF_XFREE86_TEXTPROP_BUG_WORKAROUND@
-
-# Use the Xutf8 routines (XFree86 extension) instead of Xmb routines in
-# an UTF8 locale.
-DEFINES += @_DCF_DE_USE_XUTF8@
-
-# Remap F11 key to SunF36 and F12 to SunF37? You may want to set this
-# on SunOS.
-DEFINES += @_DCF_SUN_F1X_REMAP@
-
-
-##
-## libc
-##
-
-# You may uncomment this if you know your system has
-# asprintf and vasprintf in the c library. (gnu libc has.)
-# If HAS_SYSTEM_ASPRINTF is not defined, an implementation
-# in sprintf_2.2/ is used.
-HAS_SYSTEM_ASPRINTF=@HAS_SYSTEM_ASPRINTF@
-
-
-# If you're on an archaic system (such as relatively recent *BSD releases)
-# without even dummy multibyte/widechar and localisation support, you may
-# have to uncomment the following line:
-DEFINES += @_DCF_NO_LOCALE@
-
-
-##
-## C compiler
-##
-
-CC=@CC@
-
-# Same as '-Wall -pedantic' without '-Wunused' as callbacks often
-# have unused variables.
-WARN=  -W -Wimplicit -Wreturn-type -Wswitch -Wcomment \
-       -Wtrigraphs -Wformat -Wchar-subscripts \
-       -Wparentheses -pedantic -Wuninitialized
-
-CFLAGS=@CFLAGS@ $(WARN) $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES)
-LDFLAGS=@LDFLAGS@ $(EXTRA_LIBS) $(LIBS)
-EXPORT_DYNAMIC=-Xlinker --export-dynamic
-
-# The following options are mainly for development use and can be used
-# to check that the code seems to conform to some standards. Depending
-# on the version and vendor of you libc, the options may or may not have
-# expected results. If you define one of C99_SOURCE or XOPEN_SOURCE, you
-# may also have to define the other.
-
-#C89_SOURCE=-ansi
-
-#POSIX_SOURCE=@_D_POSIX_SOURCE@
-
-# Most systems
-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
-# SunOS, (Irix)
-#XOPEN_SOURCE=-D__EXTENSIONS__
-
-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
-
-# The -DCF_HAS_VA_COPY option should allow for some optimisations, and
-# in some cases simply defining
-C99_SOURCE=@_DCF_HAS_VA_COPY@
-# might allow for those optimisations to be taken without any  special
-# libc or compiler options.
-
-
-##
-## make depend
-##
-
-DEPEND_FILE=.depend
-DO_MAKE_DEPEND=$(CC) -MM $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES)
-MAKE_DEPEND=$(DO_MAKE_DEPEND) $(SOURCES) > $(DEPEND_FILE)
-
-##
-## AR
-##
-
-AR=@AR@
-ARFLAGS=cr
-RANLIB=@RANLIB@
-
-
-##
-## Install & strip
-##
-
-INSTALL=@INSTALL@
-INSTALLDIR=mkdir -p
-
-BIN_MODE=755
-DATA_MODE=644
-
-STRIP=@STRIP@
-
-RM=rm
index bd867c610a9f9244fc9380aae0209d9304d2d474..95f0bd92e361ea5adcdc75bcad775d1de60c0d66 100644 (file)
@@ -68,10 +68,24 @@ end
 
 local function dobindings(fn, bindings)
     local p={}
+    local dummy = function() end
     
     p.META="Mod1+"
     p.ALTMETA=""
     
+    p.dopath=dummy
+    p.defmenu=dummy
+    p.defctxmenu=dummy
+    p.menuentry=dummy
+    p.submenu=dummy
+    p.submap_enter=dummy
+    p.submap_leave=dummy
+    p.submap_wait=dummy
+    
+    p.ioncore={
+        set=dummy,
+    }
+    
     function p.bdoc(text)
         return {action = "doc", text = text}
     end
@@ -124,26 +138,43 @@ local function dobindings(fn, bindings)
         return mact("mdrag", buttonspec, cmd, guard)
     end
     
-    function p.defbindings(context, bnd)
-        if not bindings[context] then
-            bindings[context]=bnd
+    function ins(t, v)
+        if not t.seen then
+            t.seen={}
+        end
+        
+        if (not v.kcb) or v.submap then
+            -- Submap rebinds are not presently handled
+            table.insert(t, v)
         else
-            for _, v in ipairs(bnd) do
-                table.insert(bindings[context], v)
+            local id=v.action..":"..v.kcb..":"..(v.area or "")
+            local i=t.seen[id]
+            if i then
+                t[i].invalid=true
+            end
+            if v.cmd then
+                table.insert(t, v)
+                t.seen[id]=#t
+            else
+                -- Unbind only
+                t.seen[id]=nil
             end
         end
     end
-
-    local function dummy() 
-    end
     
-    p.defmenu=dummy
-    p.defctxmenu=dummy
-    p.menuentry=dummy
-    p.submenu=dummy
+    function p.defbindings(context, bnd)
+        if not bindings[context] then
+            bindings[context]={}
+        else
+            -- Reset documentation
+            table.insert(bindings[context], { action = "doc", text = nil })
+        end
+        
+        for _, v in ipairs(bnd) do
+            ins(bindings[context], v)
+        end
+    end
 
-    p.ioncore={ set=dummy }
-    
     local env=setmetatable({}, {
         __index=p, 
         __newindex=function(x) 
@@ -175,22 +206,30 @@ local function docgroup_bindings(bindings)
     
     local function parsetable(t, prefix)
         for _, v in ipairs(t) do
-            if v.kcb then
-                v.kcb=string.gsub(v.kcb, "AnyModifier%+", "")
-            end
-            if v.action=="doc" then
-                outi=outi+1
-                out[outi]={doc=v.text, bindings={}}
-            elseif v.submap then
-                parsetable(v.submap, prefix..v.kcb.." ")
-            else
-                assert(out[outi])
-                v.kcb=prefix..v.kcb
-                table.insert(out[outi].bindings, v)
+            if not v.invalid then
+                if v.kcb then
+                    v.kcb=string.gsub(v.kcb, "AnyModifier%+", "")
+                end
+                if v.action=="doc" then
+                    if outi==0 or #out[outi].bindings>0 then
+                        outi=outi+1
+                    end
+                    out[outi]={doc=v.text, bindings={}}
+                elseif v.submap then
+                    parsetable(v.submap, prefix..v.kcb.." ")
+                else
+                    assert(out[outi])
+                    v.kcb=prefix..v.kcb
+                    table.insert(out[outi].bindings, v)
+                end
             end
         end
     end
     
+    if outi~=0 and #out[outi].bindings==0 then
+        out[outi]=nil
+    end
+    
     parsetable(bindings, "")
     
     return out
@@ -227,7 +266,7 @@ end
 
 local function write_bindings_man(db)
     local function write_binding_man(v)
-        return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc)..'\n'
+        return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc or "?")..'\n'
     end
     
     local s=""
index 3f8a42d0cfff40963a6d6e5dad16a20655069753..b61e2f61b397d48a9daa870d145e29eaa13f85af 100644 (file)
@@ -40,11 +40,11 @@ depend: subdirs-depend _depend
 install: subdirs-install _install
 
 
+ifdef MAKE_EXPORTS
+
 # Exports
 ######################################
 
-ifdef MAKE_EXPORTS
-
 EXPORTS_C = exports.c
 EXPORTS_H = exports.h
 
@@ -56,14 +56,28 @@ _exports: $(EXPORTS_C)
 
 $(EXPORTS_H): $(EXPORTS_C)
 
-$(EXPORTS_C): $(SOURCES)
+$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS)
        $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \
        $(SOURCES) $(MKEXPORTS_EXTRAS)
 
+# Exports documentation
+######################################
+
+EXPORTS_DOC = exports.tex
+
+TO_CLEAN := $(TO_CLEAN) $(EXPORTS_DOC)
+
+_exports_doc: $(EXPORTS_DOC)
+
+$(EXPORTS_DOC): $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRA_DEPS)
+       $(MKEXPORTS) -mkdoc -module $(MAKE_EXPORTS) -o $(EXPORTS_DOC) \
+       $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRAS)
+
 else # !MAKE_EXPORTS
 
 EXPORTS_C = 
 EXPORTS_H = 
+EXPORTS_DOC =
 
 endif # !MAKE_EXPORTS
 
index f9d713146be8fec1ca95e013de72a67174be2992..03e80ee9021de69428ca82f3dac7a6b3a170bca0 100644 (file)
--- a/config.h
+++ b/config.h
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * FOOBARBAZQUK
  */
 
 #ifndef ION_CONFIG_H
@@ -21,7 +18,6 @@
 
 #define CF_MAX_MOVERES_STR_SIZE 32
 
-#define CF_TAB_TEXT_ALIGN ALIGN_CENTER
 #define CF_RESIZE_DELAY 1500
 
 #define CF_XMESSAGE "xmessage -file "
index 3101324f378849dbf4c524c2674f686844522349..74b47f137e3956747e78361e5f6a03036f5ae679 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
 /*{{{ Brush creation and releasing */
 
 
+#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0)
+#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0)
+
+#define ENSURE_INITSPEC(S, NM) \
+    if((S).attrs==NULL) gr_stylespec_load(&(S), NM);
+
+
 static GrStyleSpec tabframe_spec=GR_STYLESPEC_INIT;
 static GrStyleSpec tabinfo_spec=GR_STYLESPEC_INIT;
 static GrStyleSpec tabmenuentry_spec=GR_STYLESPEC_INIT;
@@ -185,6 +189,7 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw)
     uint tmp=0;
     uint tbf=1, lrf=1;
     uint pad=bd->pad;
+    uint spc=style->spacing;
     
     switch(bd->sides){
     case DEBORDER_TB:
@@ -195,16 +200,22 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw)
         break;
     }
     
+    /* Ridge/groove styles use 'padding' for the spacing between the
+     * 'highlight' and 'shadow' portions of the border, and 'spacing'
+     * between the border and contents. Inlaid style also uses 'spacing'
+     * between the contents and the border, and padding as its outer
+     * component. Elevated style does not use spacing.
+     */
     switch(bd->style){
     case DEBORDER_RIDGE:
     case DEBORDER_GROOVE:
-        tmp=bd->sh+bd->hl;
-        bdw->top=tbf*tmp+pad; bdw->bottom=tbf*tmp+pad
-        bdw->left=lrf*tmp+pad; bdw->right=lrf*tmp+pad;
+        tmp=bd->sh+bd->hl+pad;
+        bdw->top=tbf*tmp+spc; bdw->bottom=tbf*tmp+spc
+        bdw->left=lrf*tmp+spc; bdw->right=lrf*tmp+spc;
         break;
     case DEBORDER_INLAID:
-        tmp=bd->sh; bdw->top=tbf*tmp+pad; bdw->left=lrf*tmp+pad;
-        tmp=bd->hl; bdw->bottom=tbf*tmp+pad; bdw->right=lrf*tmp+pad;
+        tmp=bd->sh+pad; bdw->top=tbf*tmp+spc; bdw->left=lrf*tmp+spc;
+        tmp=bd->hl+pad; bdw->bottom=tbf*tmp+spc; bdw->right=lrf*tmp+spc;
         break;
     case DEBORDER_ELEVATED:
     default:
@@ -225,7 +236,7 @@ bool debrush_get_extra(DEBrush *brush, const char *key, char type, void *data)
 {
     DEStyle *style=brush->d;
     while(style!=NULL){
-        if(extl_table_get(style->data_table, 's', type, key, data))
+        if(extl_table_get(style->extras_table, 's', type, key, data))
             return TRUE;
         style=style->based_on;
     }
index d9a040a50f80b970c1d3838c15492f0835f3c478..3828a4377fe94faecb02847c15e19b45055b4b00 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_BRUSH_H
@@ -27,11 +24,11 @@ INTRCLASS(DEBrush);
 typedef void DEBrushExtrasFn(DEBrush *brush, 
                              const WRectangle *g, 
                              DEColourGroup *cg,
-                             GrBorderWidths *bdw,
-                             GrFontExtents *fnte,
+                             const GrBorderWidths *bdw,
+                             const GrFontExtents *fnte,
                              const GrStyleSpec *a1,
                              const GrStyleSpec *a2,
-                             bool pre);
+                             bool pre, int index);
 
 DECLCLASS(DEBrush){
     GrBrush grbrush;
index 5693d81a94948ff570238d3de6f228cc4e98e733..d3be1efbf38c817392bea86bbcf4c30d6fa8c13f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <ioncore/common.h>
index 06d865407e8fcb38611d8927502a517c96cca4c8..0f99863e649a899486d096d1a6fb4614460bd5e4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_COLOUR_H
index 40a2f8ffe02d257af6847cbbe97152ba8947f306..c48d49ab508dea40e56753aa74d07605ffa3297a 100644 (file)
--- a/de/draw.c
+++ b/de/draw.c
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -15,6 +12,7 @@
 #include <ioncore/global.h>
 #include <ioncore/common.h>
 #include <ioncore/gr.h>
+#include <ioncore/gr-util.h>
 #include "brush.h"
 #include "font.h"
 #include "private.h"
@@ -296,17 +294,43 @@ static void copy_masked(DEBrush *brush, Drawable src, Drawable dst,
 }
 
 
-static GrStyleSpec dragged_spec=GR_STYLESPEC_INIT;
-static GrStyleSpec tagged_spec=GR_STYLESPEC_INIT;
-static GrStyleSpec submenu_spec=GR_STYLESPEC_INIT;
+
+#define ISSET(S, A) ((S)!=NULL && gr_stylespec_isset(S, A))
+
+
+GR_DEFATTR(dragged);
+GR_DEFATTR(tagged);
+GR_DEFATTR(submenu);
+GR_DEFATTR(numbered);
+GR_DEFATTR(tabnumber);
+
+
+static void ensure_attrs()
+{
+    GR_ALLOCATTR_BEGIN;
+    GR_ALLOCATTR(dragged);
+    GR_ALLOCATTR(tagged);
+    GR_ALLOCATTR(submenu);
+    GR_ALLOCATTR(numbered);
+    GR_ALLOCATTR(tabnumber);
+    GR_ALLOCATTR_END;
+}
+
+
+static int get_ty(const WRectangle *g, const GrBorderWidths *bdw, 
+                  const GrFontExtents *fnte)
+{
+    return (g->y+bdw->top+fnte->baseline
+            +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2);
+}
 
 
 void debrush_tab_extras(DEBrush *brush, const WRectangle *g, 
-                        DEColourGroup *cg, GrBorderWidths *bdw,
-                        GrFontExtents *fnte,
+                        DEColourGroup *cg, const GrBorderWidths *bdw,
+                        const GrFontExtents *fnte,
                         const GrStyleSpec *a1, 
                         const GrStyleSpec *a2,
-                        bool pre)
+                        bool pre, int index)
 {
     DEStyle *d=brush->d;
     GC tmp;
@@ -315,22 +339,55 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g,
      */
     static bool swapped=FALSE;
 
-    ENSURE_INITSPEC(dragged_spec, "dragged");
-    ENSURE_INITSPEC(tagged_spec, "tagged");
+    ensure_attrs();
     
     if(pre){
-        if(!MATCHES2(dragged_spec, a1, a2))
-            return;
-        
-        tmp=d->normal_gc;
-        d->normal_gc=d->stipple_gc;
-        d->stipple_gc=tmp;
-        swapped=TRUE;
-        XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False);
+        if(ISSET(a2, GR_ATTR(dragged)) || ISSET(a1, GR_ATTR(dragged))){
+            tmp=d->normal_gc;
+            d->normal_gc=d->stipple_gc;
+            d->stipple_gc=tmp;
+            swapped=TRUE;
+            XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False);
+        }
         return;
     }
     
-    if(MATCHES2(tagged_spec, a1, a2)){
+    
+    if((ISSET(a1, GR_ATTR(numbered)) || ISSET(a2, GR_ATTR(numbered))) 
+       && index>=0){
+        
+        DEColourGroup *cg;
+        GrStyleSpec tmp;
+        
+        gr_stylespec_init(&tmp);
+        gr_stylespec_append(&tmp, a2);
+        gr_stylespec_set(&tmp, GR_ATTR(tabnumber));
+        
+        cg=debrush_get_colour_group2(brush, a1, &tmp);
+        
+        gr_stylespec_unalloc(&tmp);
+
+        if(cg!=NULL){
+            char *s=NULL;
+            
+            libtu_asprintf(&s, "[%d]", index+1);
+            
+            if(s!=NULL){
+                int l=strlen(s);
+                uint w=debrush_get_text_width(brush, s, l);
+                if(w < g->w-bdw->right-bdw->left){
+                    int ty=get_ty(g, bdw, fnte);
+                    int tx=(d->textalign==DEALIGN_RIGHT
+                            ? g->x+bdw->left
+                            : g->x+g->w-bdw->right-w);
+                    debrush_do_draw_string(brush, tx, ty, s, l, TRUE, cg);
+                }
+                free(s);
+            }
+        }
+    }
+    
+    if(ISSET(a2, GR_ATTR(tagged)) || ISSET(a1, GR_ATTR(tagged))){
         XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
             
         copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
@@ -338,7 +395,7 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g,
                     g->x+g->w-bdw->right-d->tag_pixmap_w, 
                     g->y+bdw->top);
     }
-
+    
     if(swapped){
         tmp=d->normal_gc;
         d->normal_gc=d->stipple_gc;
@@ -355,28 +412,26 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g,
 void debrush_menuentry_extras(DEBrush *brush, 
                               const WRectangle *g, 
                               DEColourGroup *cg, 
-                              GrBorderWidths *bdw,
-                              GrFontExtents *fnte,
+                              const GrBorderWidths *bdw,
+                              const GrFontExtents *fnte,
                               const GrStyleSpec *a1, 
                               const GrStyleSpec *a2, 
-                              bool pre)
+                              bool pre, int index)
 {
     int tx, ty;
 
     if(pre)
         return;
     
-    ENSURE_INITSPEC(submenu_spec, "submenu");
+    ensure_attrs();
     
-    if(!MATCHES2(submenu_spec, a1, a2))
-        return;
-        
-    ty=(g->y+bdw->top+fnte->baseline
-        +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2);
-    tx=g->x+g->w-bdw->right;
+    if(ISSET(a2, GR_ATTR(submenu)) || ISSET(a1, GR_ATTR(submenu))){
+        ty=get_ty(g, bdw, fnte);
+        tx=g->x+g->w-bdw->right;
 
-    debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN, 
-                           FALSE, cg);
+        debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN, 
+                               FALSE, cg);
+    }
 }
 
 
@@ -401,7 +456,8 @@ static void debrush_do_draw_textbox(DEBrush *brush,
                                     DEColourGroup *cg, 
                                     bool needfill,
                                     const GrStyleSpec *a1, 
-                                    const GrStyleSpec *a2)
+                                    const GrStyleSpec *a2,
+                                    int index)
 {
     uint len;
     GrBorderWidths bdw;
@@ -412,7 +468,7 @@ static void debrush_do_draw_textbox(DEBrush *brush,
     grbrush_get_font_extents(&(brush->grbrush), &fnte);
     
     if(brush->extras_fn!=NULL)
-        brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE);
+        brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE, index);
     
     debrush_do_draw_box(brush, geom, cg, needfill);
     
@@ -436,14 +492,13 @@ static void debrush_do_draw_textbox(DEBrush *brush,
             tx=geom->x+bdw.left;
         }
         
-        ty=(geom->y+bdw.top+fnte.baseline
-            +(geom->h-bdw.top-bdw.bottom-fnte.max_height)/2);
+        ty=get_ty(geom, &bdw, &fnte);
         
         debrush_do_draw_string(brush, tx, ty, text, len, FALSE, cg);
     }while(0);
     
     if(brush->extras_fn!=NULL)
-        brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE);
+        brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE, index);
 }
 
 
@@ -455,7 +510,7 @@ void debrush_draw_textbox(DEBrush *brush, const WRectangle *geom,
     
     if(cg!=NULL){
         debrush_do_draw_textbox(brush, geom, text, cg, needfill, 
-                                attr, NULL);
+                                attr, NULL, -1);
     }
 }
 
@@ -480,7 +535,7 @@ void debrush_draw_textboxes(DEBrush *brush, const WRectangle *geom,
         
         if(cg!=NULL){
             debrush_do_draw_textbox(brush, &g, elem[i].text, cg, needfill,
-                                    common_attrib, &elem[i].attr);
+                                    common_attrib, &elem[i].attr, i);
         }
         
         if(i==n-1)
index 957cc61671d378bd0439d0ecd15bb5fce60762ae..5521125f61d85e69c86db76c5c131dc3b919ee2f 100644 (file)
--- a/de/font.c
+++ b/de/font.c
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 7e40121a2c65fca82da316af5085b2f5b1faa78f..4ce192390c930e392f77ebf327a7356e6dc3447f 100644 (file)
--- a/de/font.h
+++ b/de/font.h
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_FONT_H
index 994c769c0920bbe0cf9bea5210208dcaea25bddf..632f6e2fd6a5b7020dbf008ea3388b28e7f3118c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_FONTSET_H
index bc771d08144a2407022505bf282c4e47bf7f0ac9..60c87156375883d50a5b872b2d85ce34f6dd97d6 100644 (file)
--- a/de/init.c
+++ b/de/init.c
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -130,45 +127,58 @@ void de_get_border(DEBorder *border, ExtlTab tab)
 /*{{{ Colours */
 
 
-bool de_get_colour(WRootWin *rootwin, DEColour *ret, 
-                   ExtlTab tab, DEStyle *based_on,
-                   const char *what, DEColour substitute)
+static bool de_get_colour_(WRootWin *rootwin, DEColour *ret, 
+                           ExtlTab tab, const char *what, 
+                           DEColour substitute, DEColour inherit)
 {
     char *name=NULL;
-    bool ok=FALSE;
+    bool set=FALSE;
     
     if(extl_table_gets_s(tab, what, &name)){
-        ok=de_alloc_colour(rootwin, ret, name);
+        if(strcmp(name, "inherit")==0){
+            set=de_duplicate_colour(rootwin, inherit, ret);
+        }else{
+            set=de_alloc_colour(rootwin, ret, name);
     
-        if(!ok)
-            warn(TR("Unable to allocate colour \"%s\"."), name);
-
+            if(!set)
+                warn(TR("Unable to allocate colour \"%s\"."), name);
+        }
         free(name);
-    }else if(based_on!=NULL){
-        return de_get_colour(rootwin, ret, based_on->data_table,
-                             based_on->based_on, what, substitute);
     }
     
-    if(!ok)
-        ok=de_duplicate_colour(rootwin, substitute, ret);
+    if(!set)
+        de_duplicate_colour(rootwin, substitute, ret);
     
-    return ok;
+    return set;
 }
 
 
+static bool de_get_colour(WRootWin *rootwin, DEColour *ret, 
+                          ExtlTab tab, const char *what, DEColour substitute)
+{
+    return de_get_colour_(rootwin, ret, tab, what, substitute, substitute);
+}
+                          
+
 void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg, 
                          ExtlTab tab, DEStyle *based_on)
 {
-    de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
-                  DE_WHITE(rootwin));
-    de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
-                  DE_WHITE(rootwin));
-    de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
-                  DE_BLACK(rootwin));
-    de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
-                  DE_WHITE(rootwin));
-    de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", 
-                  cg->bg);
+    bool bgset;
+    DEColour padinh;
+    
+    de_get_colour(rootwin, &(cg->hl), tab, "highlight_colour",
+                  (based_on ? based_on->cgrp.hl : DE_WHITE(rootwin)));
+    de_get_colour(rootwin, &(cg->sh), tab, "shadow_colour",
+                  (based_on ? based_on->cgrp.sh : DE_WHITE(rootwin)));
+    de_get_colour(rootwin, &(cg->fg), tab, "foreground_colour",
+                  (based_on ? based_on->cgrp.fg : DE_WHITE(rootwin)));
+    bgset=de_get_colour(rootwin, &(cg->bg), tab, "background_colour",
+                        (based_on ? based_on->cgrp.bg : DE_BLACK(rootwin)));
+                        
+    padinh=(based_on ? based_on->cgrp.pad : DE_WHITE(rootwin));
+    
+    de_get_colour_(rootwin, &(cg->pad), tab, "padding_colour", 
+                   (bgset ? cg->bg : padinh), padinh);
 }
 
 
@@ -258,6 +268,63 @@ void de_get_transparent_background(uint *mode, ExtlTab tab)
 /*}}}*/
 
 
+/*{{{ Extras filter/copy */
+
+
+static const char * const known_values[]={
+    "based_on",
+    "font",
+    "shadow_pixels",
+    "highlight_pixels",
+    "padding_pixels",
+    "border_style",
+    "border_sides",
+    "spacing",
+    "foreground_colour",
+    "background_colour",
+    "shadow_colour",
+    "highlight_colour",
+    "padding_colour",
+    "text_align",
+    NULL
+};
+
+
+static bool filter_extras_iter_fn(ExtlAny k, ExtlAny v, void *p)
+{
+    ExtlTab *tgt=(ExtlTab*)p;
+    const char *s;
+    int i;
+    
+    if(k.type!='s' && k.type!='S')
+        return TRUE;
+    
+    for(i=0; known_values[i]; i++){
+        if(strcmp(known_values[i], k.value.s)==0)
+            return TRUE;
+    }
+    
+    if(*tgt==extl_table_none())
+        *tgt=extl_create_table();
+        
+    extl_table_set(*tgt, 'a', 'a', k, v);
+    
+    return TRUE;
+}
+
+
+static void filter_extras(ExtlTab *tgt, ExtlTab src)
+{
+    /* Copy any unknown string-keyed values from src to tgt,
+     * possibly creating tgt.
+     */
+    extl_table_iter(src, filter_extras_iter_fn, tgt);
+}
+
+
+/*}}}*/
+
+
 /*{{{ de_defstyle */
 
 
@@ -265,8 +332,6 @@ void de_get_nonfont(WRootWin *rootwin, DEStyle *style, ExtlTab tab)
 {
     DEStyle *based_on=style->based_on;
     
-    style->data_table=extl_ref_table(tab);
-
     if(based_on!=NULL){
         style->border=based_on->border;
         style->transparency_mode=based_on->transparency_mode;
@@ -295,40 +360,37 @@ void de_get_nonfont(WRootWin *rootwin, DEStyle *style, ExtlTab tab)
 EXTL_EXPORT
 bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab)
 {
-    DEStyle *style;
-    char *fnt;
+    DEStyle *style, *based_on=NULL;
+    int based_on_score=-1;
+    char *fnt, *bss;
     uint n;
-    char *based_on_name;
-    DEStyle *based_on=NULL;
-    GrStyleSpec based_on_spec;
 
     if(name==NULL)
         return FALSE;
     
     style=de_create_style(rootwin, name);
-
+    
     if(style==NULL)
         return FALSE;
-
-    if(get_spec(tab, "based_on", &based_on_spec, &based_on_name)){
-        based_on=de_get_style(rootwin, &based_on_spec);
+    
+    if(extl_table_gets_s(tab, "based_on", &bss)){
+        GrStyleSpec bs;
         
-        gr_stylespec_unalloc(&based_on_spec);
-
-        if(based_on==style){
-            warn(TR("'based_on' for %s points back to the style itself."),
-                 name);
-        }else if(based_on==NULL){
-            warn(TR("Unknown base style. \"%s\""), based_on_name);
-        }else{
-            style->based_on=based_on;
-            based_on->usecount++;
-            /* Copy simple parameters */
-        }
+        gr_stylespec_load(&bs, bss);
+        
+        based_on=de_get_style(rootwin, &bs);
         
-        free(based_on_name);
+        gr_stylespec_unalloc(&bs);
+        free(bss);
+    }else{
+        based_on=de_get_style(rootwin, &style->spec);
     }
-
+    
+    if(based_on!=NULL){
+        style->based_on=based_on;
+        based_on->usecount++;
+    }
+    
     de_get_nonfont(rootwin, style, tab);
 
     if(extl_table_gets_s(tab, "font", &fnt)){
@@ -341,6 +403,54 @@ bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab)
     if(style->font==NULL)
         de_load_font_for_style(style, CF_FALLBACK_FONT_NAME);
     
+    if(based_on!=NULL && 
+       gr_stylespec_equals(&based_on->spec, &style->spec)){
+       
+        /* The new style replaces based_on, so it may be dumped. */
+        if(!based_on->is_fallback)
+            destyle_dump(based_on);
+        
+        if(based_on->usecount==1){
+            uint nb=based_on->n_extra_cgrps;
+            uint ns=style->n_extra_cgrps;
+            /* Nothing else is using based_on: optimise and move
+             * extra colour groups here, so that based_on can be freed.
+             */
+            
+            if(nb>0){
+                DEColourGroup *cgs=ALLOC_N(DEColourGroup, nb+ns);
+                
+                if(cgs!=NULL){
+                    memcpy(cgs, based_on->extra_cgrps, sizeof(DEColourGroup)*nb);
+                    memcpy(cgs+nb, style->extra_cgrps, sizeof(DEColourGroup)*ns);
+                
+                    free(style->extra_cgrps);
+                    style->extra_cgrps=cgs;
+                    style->n_extra_cgrps=nb+ns;
+                
+                    free(based_on->extra_cgrps);
+                    based_on->extra_cgrps=NULL;
+                    based_on->n_extra_cgrps=0;
+                    
+                }
+            }
+            
+            /* style->extras_table should be none still */
+            style->extras_table=based_on->extras_table;
+            based_on->extras_table=extl_table_none();
+            
+            style->based_on=based_on->based_on;
+            based_on->based_on=NULL;
+            
+            destyle_unref(based_on);
+        }
+        
+    }
+    
+    filter_extras(&style->extras_table, tab);
+    
+    destyle_add(style);
+    
     return TRUE;
 }
 
index c751bb0e9db6ad8f8bd5217062731c9be3fd5d3e..5a51ee622d1b311993ee30c7619c37d43fb88fa9 100644 (file)
--- a/de/init.h
+++ b/de/init.h
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_INIT_H
@@ -20,9 +17,6 @@ extern void de_get_border_val(uint *val, ExtlTab tab, const char *what);
 extern void de_get_border_style(uint *ret, ExtlTab tab);
 extern void de_get_border(DEBorder *border, ExtlTab tab);
 
-extern bool de_get_colour(WRootWin *rootwin, DEColour *ret, 
-                          ExtlTab tab, DEStyle *based_on,
-                          const char *what, DEColour substitute);
 extern void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg, 
                                 ExtlTab tab, DEStyle *based_on);
 extern void de_get_extra_cgrps(WRootWin *rootwin, DEStyle *style, 
index dde51c4ef26c98d861dcc00ee8638b2b573def4d..cb3700a91e8c6ad54348b78d681abf8cda23d087 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_PRIVATE_H
 #define DE_SUB_IND " ->"
 #define DE_SUB_IND_LEN 3
 
-#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0)
-#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0)
-
-#define ENSURE_INITSPEC(S, NM) \
-    if((S).attrs==NULL) gr_stylespec_load(&(S), NM);
-    
 #endif /* ION_DE_PRIVATE_H */
index b4493373e49b3e237726da77d1b0fd6e4cacd46f..2e61bf260367a918072f1e69a1722e8cca563984 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -176,7 +173,7 @@ void destyle_deinit(DEStyle *style)
     if(style->extra_cgrps!=NULL)
         free(style->extra_cgrps);
     
-    extl_unref_table(style->data_table);
+    extl_unref_table(style->extras_table);
     
     XFreeGC(ioncore_g.dpy, style->normal_gc);
     
@@ -195,7 +192,7 @@ void destyle_deinit(DEStyle *style)
 }
 
 
-static void dump_style(DEStyle *style)
+void destyle_dump(DEStyle *style)
 {
     /* Allow the style still be used but get if off the list. */
     UNLINK_ITEM(styles, style, next, prev);
@@ -241,7 +238,7 @@ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
     style->n_extra_cgrps=0;
     style->extra_cgrps=NULL;
     
-    style->data_table=extl_table_none();
+    style->extras_table=extl_table_none();
     
     create_normal_gc(style, rootwin);
     
@@ -251,7 +248,7 @@ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
 }
 
 
-static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
+DEStyle *de_create_style(WRootWin *rootwin, const char *name)
 {
     DEStyle *style=ALLOC(DEStyle);
     if(style!=NULL){
@@ -264,33 +261,12 @@ static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
 }
 
 
-DEStyle *de_create_style(WRootWin *rootwin, const char *name)
+void destyle_add(DEStyle *style)
 {
-    DEStyle *oldstyle, *style;
-    uint score;
-    
-    style=do_create_style(rootwin, name);
-    
-    if(style==NULL)
-        return NULL;
-    
-    for(oldstyle=styles; oldstyle!=NULL; oldstyle=oldstyle->next){
-        if(oldstyle->rootwin!=rootwin)
-            continue;
-        if(gr_stylespec_equals(&oldstyle->spec, &style->spec))
-            break;
-    }
-    
-    if(oldstyle!=NULL && !oldstyle->is_fallback)
-        dump_style(oldstyle);
-    
     LINK_ITEM_FIRST(styles, style, next, prev);
-    
-    return style;
 }
 
 
-
 /*EXTL_DOC
  * Clear all styles from drawing engine memory.
  */
@@ -301,7 +277,7 @@ void de_reset()
     for(style=styles; style!=NULL; style=next){
         next=style->next;
         if(!style->is_fallback)
-            dump_style(style);
+            destyle_dump(style);
     }
 }
 
@@ -315,7 +291,7 @@ void de_deinit_styles()
             warn(TR("Style is still in use [%d] but the module "
                     "is being unloaded!"), style->usecount);
         }
-        dump_style(style);
+        destyle_dump(style);
     }
 }
 
index 172b509f8481a65ce00e4effe817d5f4ab32f287..11fbc5efbbf4acb3fe5870d1a436ee779c40fecc 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_DE_STYLE_H
@@ -73,7 +70,7 @@ DECLSTRUCT(DEStyle){
     int textalign;
     uint spacing;
     
-    ExtlTab data_table;
+    ExtlTab extras_table;
 
     /* Only initialised if used as a DETabBrush */
     bool tabbrush_data_ok;
@@ -100,5 +97,8 @@ extern void de_deinit_styles();
 
 extern DEStyle *de_get_style(WRootWin *rootwin, const GrStyleSpec *spec);
 
+extern void destyle_add(DEStyle *style);
+extern void destyle_dump(DEStyle *style);
+
 
 #endif /* ION_DE_STYLE_H */
index 00fe495eaf7ed7e1208182371fcf3757a612bd69..c73b31603bf2f908fc7efc05cd4da3c2d29eb594 100644 (file)
@@ -1,3 +1,75 @@
+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
 
index aa203d8939c946cd6d2803e3f6174d70becd457d..ca100586f9cff55fbd295a1f8d69729f3286297a 100644 (file)
@@ -15,9 +15,9 @@ L2H=latex2html -show_section_numbers -short_index -local_icons -noaddress \
 
 DOCS=ionconf ionnotes
 
-FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \
-       mod_query-fns.tex de-fns.tex mod_menu-fns.tex \
-       mod_dock-fns.tex mod_sp-fns.tex mod_statusbar-fns.tex
+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
 ######################################
@@ -106,29 +106,13 @@ realclean: clean
 # Function reference rules
 ######################################
 
-ioncore-fns.tex: $(TOPDIR)/ioncore/*.c $(TOPDIR)/ioncore/*.lua
-       $(MKEXPORTS) -module ioncore -mkdoc -o $@ $+
+include $(TOPDIR)/libmainloop/rx.mk
 
-mod_tiling-fns.tex: $(TOPDIR)/mod_tiling/*.c
-       $(MKEXPORTS) -module mod_tiling -mkdoc -o $@ $+
+$(TOPDIR)/%/exports.tex:
+       $(MAKE) -C $$(dirname $@) _exports_doc
 
-mod_query-fns.tex: $(TOPDIR)/mod_query/*.c $(TOPDIR)/mod_query/mod_query.lua
-       $(MKEXPORTS) -module mod_query -mkdoc -o $@ $+
-
-mod_menu-fns.tex: $(TOPDIR)/mod_menu/*.c $(TOPDIR)/mod_menu/mod_menu.lua
-       $(MKEXPORTS) -module mod_menu -mkdoc -o $@ $+
-
-mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c
-       $(MKEXPORTS) -module mod_dock -mkdoc -o $@ $+
-
-mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c
-       $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+
-
-mod_statusbar-fns.tex: $(TOPDIR)/mod_statusbar/*.c
-       $(MKEXPORTS) -module mod_statusbar -mkdoc -o $@ $+
-
-de-fns.tex: $(TOPDIR)/de/*.c
-       $(MKEXPORTS) -module de -mkdoc -o $@ $+
+%.exports: $(TOPDIR)/%/exports.tex
+       cp $< $@
 
 # Function list
 ######################################
index 9afb2b88a3bafbf49cc1e78519c15da1751a3b46..efec6a4a393fb462401fb02f790a39ffc4f12b14 100644 (file)
@@ -8,7 +8,7 @@ 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
+\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
@@ -23,7 +23,7 @@ defbindings("WFrame", {
 \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
+``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 
@@ -34,27 +34,27 @@ classes being based on \type{WMPlex}, and in the stock configuration the
 switch to $n$:th workspaces is bound to \key{Mod1+n} while the switch to 
 $n$:th tab is bound to the sequence \key{Mod1+k n}.
 
-Currently known ''contexts'' include: 
-\code{WScreen},
-\code{WMPlex},
-\code{WMPlex.toplevel},
-\code{WFrame},
-\code{WFrame.toplevel},
-\code{WFrame.floating},
-\code{WFrame.tiled},
-\code{WFrame.transient},
-\code{WMoveresMode},
-\code{WGroup},
-\code{WGroupCW},
-\code{WGroupWS},
-\code{WClientWin},
-\code{WTiling}, and
-\code{WStatusBar}.
+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 \code{.toplevel} suffix
-refer to screens and ''toplevel''  frames, i.e. frames that are
-not used for transient windows. Likewise \code{.transient} refers
-to frames in transient mode, and \code{.tiled} and \code{.floating}
+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. 
 
                                                         
@@ -75,9 +75,9 @@ gets to handle the action.
 \subsection{Binding handlers and special variables}
 
 Unlike in Ion2, in Ion3 binding handlers are not normally passed as
-''anonymous functions'', although this is still possible. The preferred
-method now is to pass the code of the handler as a string. Two special 
-variables are available in this code. These are
+``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}
@@ -93,11 +93,12 @@ variables are available in this code. These are
       the binding. \\
     \code{_chld} &
       Object corresponding to the currently active child window of the
-       object referred to by \code{_}.
+       object referred to by \code{_}. This should seldom be needed.
 \end{tabularx}
 
-For example, supposing '\code{_}' is a \type{WFrame}, the following
-handler should move the active window to the right, if possible:
+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)"
@@ -106,14 +107,14 @@ handler should move the active window to the right, if possible:
 \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
+by a ``guard'' expression that blocks the handler from being called when
 the guard condition is not met. Currently the following guard expressions
 are supported (for both \code{_sub} and \code{_chld}):
 
 \begin{tabularx}{\linewidth}{lX}
     \tabhead{Guard & Description}
-    \code{"_sub:non-nil"} & The \code{_sub} parameter must be set. \\
-    \code{"_sub:SomeClass"} & The \code{_sub} parameter must be member
+    \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}
 
@@ -127,27 +128,33 @@ functions.
 
 Key presses:
 \begin{itemize}
-    \item \fnref{kpress}\code{(keyspec, handler [, guard])},
-    \item \fnref{kpress_wait}\code{(keyspec, handler [, guard])} and
-    \item \fnref{submap}\code{(keyspec, \{ ... more key bindings ... \})}.
+    \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 \fnref{mclick}\code{(buttonspec, handler [, guard])},
-    \item \fnref{mdblclick}\code{(buttonspec, handler [, guard])}, 
-    \item \fnref{mpress}\code{(buttonspec, handler [, guard])} and
-    \item \fnref{mdrag}\code{(buttonspec, handler [, guard])}.
+    \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, \fnref{kpress_wait} is simply
-\fnref{kpress} with a flag set instructing Ioncore wait for all
-modifiers to be released before processing any further actions.
+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 \fnref{submap}
-function is used to define submaps or ''prefix maps''. The second
-argument to this function is table listing the key press actions
-(\fnref{kpress}) in the submap
+\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,
@@ -195,10 +202,10 @@ 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
+The \var{keyspec} string may optionally have multiple ``modifier'' names
 followed by a plus sign (\code{+}) as a prefix. X defines the following
 modifiers:
-\begin{quotation}
+
 \key{Shift}, \key{Control}, \key{Mod1} to \key{Mod5},
 \key{AnyModifier} and \key{Lock}.
 \index{Shift@\key{Shift}}
@@ -206,14 +213,13 @@ modifiers:
 \index{ModN@\key{ModN}}
 \index{AnyModifier@\key{AnyModifier}}
 \index{Lock@\key{Lock}}
-\end{quotation}
 
 X allows binding all of these modifiers to almost any key and while this
 list of modifiers does not explicitly list keys such as 
 \key{Alt}\index{Alt@\key{Alt}} that are common on modern keyboards, such
 keys are bound to one of the \key{ModN}. On systems running XFree86
 \key{Alt} is usually \key{Mod1}. On Suns \key{Mod1} is the diamond key
-and \key{Alt} something else. One of the ''flying window'' keys on so
+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. 
@@ -241,8 +247,8 @@ and one of the button names \key{Button1} to
 specification may end with an optional area name following an @-sign.
 Only frames currently support areas, and the supported values in this
 case are
-\code{"border"}, \code{"tab"}, \code{"empty_tab"}, \code{"client"} and
-\code{nil} (for the whole frame).
+\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:
@@ -258,7 +264,7 @@ defbindings("WFrame", {
 
 The default binding configuration contains references to the variables
 \code{META} and \code{ALTMETA} instead of directly using the default
-values of \code{"Mod1+"} and \code{""} (nothing). As explained in
+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 
index f47a5a8077c0ce86397e913160807526f6549afb..531f63a6629dae895dfcd5a28d3c1310c6ec7e07 100644 (file)
@@ -44,26 +44,26 @@ just like the menus defined as above.
 
 \begin{tabularx}{\linewidth}{lX}
     \tabhead{Menu name & Description}
-    \code{windowlist} & 
+    \codestr{windowlist} & 
     List of all client windows. Activating an entry jumps to that window. \\
-    \code{workspacelist} & 
+    \codestr{workspacelist} & 
     List of all workspaces. Activating an entry jumps to that workspaces. \\
-    \code{focuslist} & 
+    \codestr{focuslist} & 
     List of client windows with recent activity in them, followed by 
     previously focused client windows. \\
-    \code{focuslist_} & 
+    \codestr{focuslist\_} & 
     List of previously focused client windows. \\
-    \code{stylemenu} &
+    \codestr{stylemenu} &
     List of available \file{look\_*.lua} style files. Activating an entry
     loads that style and ask to save the selection. \\
-    \code{ctxmenu} &
+    \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
+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.
 
@@ -81,9 +81,9 @@ defctxmenu("WFrame", {
 })
 \end{verbatim}
 
-Some of the same ''modes'' as were available for some bindings
-may also be used: \code{WFrame.tiled}, \code{WFrame.floating},
-and \code{WFrame.transient}.
+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}
@@ -105,10 +105,7 @@ handlers (and elsewhere):
     \fnref{mod_menu.grabmenu} &
       A special version of \fnref{mod_menu.menu} that grabs the keyboard
       and is scrolled with a given key until all modifiers have been released,
-      after which the selected entry is activated. This function is meant to 
-      be used for implementing, for example, Win***s-style \key{Alt-Tab} 
-      handling.\footnote{See the \file{wcirculate.lua} script in the Ion 
-        scripts repository \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.} \\
+      after which the selected entry is activated. \\
 \end{tabularx}
 
 The \fnrefx{mod_menu}{grabmenu} function takes the extra key parameter, but
diff --git a/doc/conf-statusbar.tex b/doc/conf-statusbar.tex
new file mode 100644 (file)
index 0000000..2475552
--- /dev/null
@@ -0,0 +1,124 @@
+\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).
index e564b47331f8110f7df4a007b4521bd9115afe43..e5e0133e3d4330be472f6b2eb918aa09e283b2af 100644 (file)
@@ -1,7 +1,7 @@
 \section{Winprops}
 \label{sec:winprops}
 
-The so-called ''winprops''\index{Winprops} can be used to change how
+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
@@ -94,9 +94,9 @@ usual method of identifying windows, and how to obtain this information.
 \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 \code{"systray"}, 
+    (The default tray component is called simply \codestr{systray}, 
     and others you give names to in your custom template, always 
-    prefixed by \code{"systray_"}.
+    prefixed by \codestr{systray\_}.
 \end{winprop}
 
 
@@ -116,10 +116,10 @@ usual method of identifying windows, and how to obtain this information.
         
 \begin{winprop}{transient_mode}{string}
     \index{transient-mode@\var{transient_mode}}
-    \code{"normal"}: No change in behaviour. \code{"current"}:
+    \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. \code{"off"}: The window should 
+    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}
@@ -159,15 +159,22 @@ only for floating windows.
 \subsection{Classes, roles and instances}
 \label{sec:classesrolesinstances}
 
-The identification information in the winprop specification is usually the
+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} and
-\var{name}
-of the window. The \var{name} field is a Lua-style regular expression
-matched against the window's title and the rest are strings that must
-exactly match the corresponding window information. It is not necessary
-to specify all of these fields.
+\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
@@ -179,7 +186,7 @@ fields) is tried.
 
 \begin{center}
 \begin{tabular}{llll}
-  \tabhead{\var{class} & \var{role} & \var{instance} & \var{name}}
+  \tabhead{\var{class} & \var{role} & \var{instance} & other}
   E           & E          & E              & E \\
   E           & E          & E              & * \\
   E           & E          & *              & E \\
@@ -191,8 +198,10 @@ fields) is tried.
 \end{tabular}
 \end{center}
 
-If there are multiple winprops with other identification information 
-the same but different \var{name}, the longest match is chosen.
+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}
 
@@ -209,10 +218,10 @@ 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
+So-called ``transient windows'' are usually short-lived dialogs (although
 some programs abuse this property) that have a parent window that they are
-''transient for''. On tiled workspaces Ion displays these windows 
-simulatenously with the parent window at the bottom of the same frame.
+``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
@@ -221,9 +230,13 @@ fix this, but nothing seems to be happening with respect to including it in
 XFree86.}
 
 Finally, it should be mentioned that too many authors these days
-''forget'' to set this vital identification to anything meaningful:
-everything except name is the same for all of the programs's 
-windows, for example.
+``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}
 
@@ -239,28 +252,6 @@ defwinprop{
 }
 \end{verbatim}
 
-\subsubsection{Fixing a Mozilla Firebird transient}
-
-Mozilla Firebird (0.7) incorrectly does not set the \code{WM_TRANSIENT_FOR} 
-property for the dialog that is used to ask the action to take for a file.
-It, however, sets the the property point to the main window for the save
-dialog. This can be annoying and confusing, as the first dialog is not 
-closed before the second is displayed.
-
-We'd like the first dialog to be transient to the main window. The closest
-we can get to that is to consider it transient to the current window (if
-there's one). Unfortunately Firebird does not set any meaningful classes, 
-instances or roles for the windows, so we'll have to rely on an ugly title
-match.
-
-\begin{verbatim}
-defwinprop{
-    class = "MozillaFirebird-bin",
-    name = "Opening .*",
-    transient_mode = "current",
-}
-\end{verbatim}
-
 \subsubsection{Forcing newly created windows in named frames}
 
 The following winprop should place xterm started with command-line parameter
@@ -275,7 +266,7 @@ defwinprop{
 \end{verbatim}
 
 For this example to work, we have to somehow create a frame named
-\code{sysmonframe}. One way to do this is to make the following
+\codestr{sysmonframe}. One way to do this is to make the following
 call in the \key{Mod1+F3} Lua code query:
 
 \begin{verbatim}
@@ -285,5 +276,5 @@ mod_query.query_renameframe(_)
 Recall that \code{_} points to the multiplexer (frame or screen) in which 
 the query was opened. Running this code should open a new query prefilled
 with the current name of the frame. In our example we would change the 
-name to \code{sysmonframe}, but we could just as well have used the 
+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.
index eb0f565067373710401e1c1be0ac38bae246b793..ed19b517b91c7b47b8c7af03822170900f376d2f 100644 (file)
@@ -15,8 +15,8 @@ configuration file \file{ion.lua} is provided in section
 \ref{sec:walkthrough}.
 How keys and mouse action are bound to functions is described in detail
 in \ref{sec:bindings} and in section \ref{sec:winprops} winprops are
-explained. For a reference on exported functions, see section
-\ref{sec:exports}.
+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}
@@ -44,7 +44,7 @@ file in \file{\~{}/.ion3/} and modify this file. When searching
 for a file, if no extension or path component is given, compiled \file{.lc} 
 files are attempted before \file{.lua} files.
 
-All the configuration files are named \file{cfg\_*.lua} with the ''\file{*}''
+All the configuration files are named \file{cfg\_*.lua} with the ``\file{*}''
 part varying. The configuration file for each module \file{mod\_modname} is
 \file{cfg\_modname.lua}, with \file{modname} varying by the module in
 question. The following table summarises these and other configuration
@@ -91,19 +91,21 @@ file. Some basic 'feel' settings are usually configured there and
 the necessary modules and other configuration files configuring some 
 more specific aspects of Ion are loaded there. In this section we
 take a walk through the stock \file{cfg\_ion.lua}.
-Notice that most of the settings are commented-out (\code{--} is a 
+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 one in the file is to set
+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. for details on modifiers and key 
-binding setup in general see section \ref{sec:bindings}.
+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:
 
@@ -134,7 +136,7 @@ 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 conveniency file for
+\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 
@@ -150,8 +152,8 @@ dopath("cfg_layouts")
 Most bindings and menus are defined in \file{cfg\_ioncore.lua}.
 Details on making such definitions follow in sections \ref{sec:bindings} 
 and \ref{sec:menus}, respectively. 
-some kludges or ''winprops'' to make some applications behave better
-under Ion are colledted in \file{cfg\_kludges.lua}; see section
+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}
@@ -184,3 +186,7 @@ dopath("mod_sp")
 \input{conf-menus.tex}
 
 \input{conf-winprops.tex}
+
+\input{conf-statusbar.tex}
+
+
index 9331614e9ab073b1de415851eca02827ee36a4ea..a04af82fd62efb09d479b28499fc40bd54f064d2 100644 (file)
@@ -1,52 +1,50 @@
 
 \chapter{Introduction}
 
-This document is an ''advanced user'' manual for Ion, the X11 window manager,
-and version 3 specifically. It is an attempt attempt at documenting what is 
-in Ion's configuration files, how to configure Ion by simple modifications 
+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 is advised to first glance at the Lua manual at 
+Readers unfamiliar with Lua might first want to first glance at some 
+Lua documentation at
 
-\centerurl{http://www.lua.org/docs.html}
+\begin{center}
+    \url{http://www.lua.org/docs.html}, or \\
+    \url{http://lua-users.org/wiki/LuaTutorial},
+\end{center}
 
-and perhaps some tutorial pages at the lua-users wiki:
-
-\centerurl{http://lua-users.org/wiki/LuaTutorial}
+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 and class hierarchies. While it might not at first 
-occur that knowing such things would be necessary to \emph{configure} 
-a program, this  material is essential because of the object-oriented 
-nature of most of Ion's scripting interface.
-
-The new user, fed up with the default key bindings and eager to just
-quickly configure Ion to his liking may question the reasons for 
-exposing the ''heavy'' internal OO structure in the scripting and
-configuration interface. I'm not the one to  blame him for that. 
-Sure it would be faster to configure Ion to everyone's liking
-if a simpler binding configuration interface was provided. Such an
-interface would, however, also be far more limited and make writing
-extensions more complicated and the advantages from using a real 
-scripting language would be partly lost. One more advantage from
-a rich scripting and configuration interface is that it allows 
-implementing scripts to read alternate configuration file formats,
-ones that could be, for example, modified by external configuration tools. 
-
-In chapter \ref{chap:config} the very basic Ion configuration know-how
-is provided. All the different configuration files and their locations
-are explained and instructions are given to allow the reader to
-configure bindings and so-called ''winprops''. Chapter \ref{chap:gr}
-explains the notion of drawing engines and graphical styles and how to
-write new looks for Ion and more advanced aspects of Ion's scripting 
-interface are documented in chapter \ref{chap:tricks} (a work in 
-progress).
-
+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 is an alphabetical
-listing of all these functions.
-
+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.
 
index 328a7c3a6b03bd843f77450cedfa2335125bbed6..e7f5917c62e0dd47375ec8326f39d6ce2edf1370 100644 (file)
@@ -1,6 +1,6 @@
 \section{C coding style}
 
-If you want to submit patches to Ion, you MUST follow my coding 
+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
@@ -10,7 +10,7 @@ things to take note of.
 \subsection{Whitespace}
 
 \begin{itemize}
-  \item Indentations of 4 with \emph{tab size=4}. 
+  \item Indentations of 4 with spaces.
     
   \item No extra spaces between operators, delimiters etc. except
     \begin{itemize}
index 4697dc6912d1eb6ef006da7491a5bc25c507fd1e..93402a702502928140ba577848c7aad7219fd0f0 100644 (file)
@@ -5,7 +5,9 @@
 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.
+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}
@@ -13,7 +15,7 @@ for the default 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''
+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 
@@ -28,16 +30,16 @@ are strings of the form
 element1-element2-...-elementn
 \end{verbatim}
 
-An example of such a style specification is \code{tab-frame};
+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 (\verb!*!) as some of the elements indicating
+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 \code{foo-bar-baz} be queried, then the following
+for style \codestr{foo-bar-baz} be queried, then the following
 brushes are in order of preference:
 
 \begin{verbatim}
@@ -70,19 +72,19 @@ tag and drag states.)
 
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Style name & Description}
-\code{frame} & Style for frames. 
-       Substyle attributes: \code{active}/\code{inactive} 
+\codestr{frame} & Style for frames. 
+       Substyle attributes: \codestr{active}/\codestr{inactive} 
        (mutually exclusive) and
-       \code{quasiactive}\nobreak/\code{not_quasiactive}. 
+       \codestr{quasiactive}/\codestr{not\_quasiactive}. 
        A frame is ``quasiactive'' when an active region
-       has a backlink to it, such as a detached window. \\
-\code{frame-tiled} & A more specific style for tiled frames.
-        Substyle attributes as for \code{frame}. \\
-\code{frame-tiled-alt} & An alternative style for tiled frames.
+       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. \\
-\code{frame-floating} & A more specific style for floating
+\codestr{frame-floating} & A more specific style for floating
         frames. \\
-\code{frame-transient} & A more specific style for frames
+\codestr{frame-transient} & A more specific style for frames
         containing transient windows. \\
 \end{tabularx}
 
@@ -90,25 +92,25 @@ tag and drag states.)
 
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Style name & Description}
-\code{tab} & Style for frames' tabs and menu entries. 
+\codestr{tab} & Style for frames' tabs and menu entries. 
        Substyle attributes:
-       \code{active}\nobreak/\code{inactive} and
-       \code{selected}\nobreak/\code{unselected} \\
-\code{tab-frame} & A more specific style for frames' tabs.
+       \codestr{active}/\codestr{inactive} and
+       \codestr{selected}/\codestr{unselected} \\
+\codestr{tab-frame} & A more specific style for frames' tabs.
         Additional substyle attributes include:
-       \code{tagged}\nobreak/\code{not_tagged},
-       \code{dragged}\nobreak/\code{not_dragged},
-       \code{activity}\nobreak/\code{no_activity} and
-       \code{quasiactive}\nobreak/\code{not_quasiactive}. \\
-\code{tab-frame-tiled}, & \\
-\code{tab-frame-tiled-alt}, & \\
-\code{tab-frame-floating}, & \\
-\code{tab-frame-transient} & More specific styles for frames in the
+       \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. \\
-\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. 
-        Additional substyle attributes include \code{submenu} and
-        occasionally also \code{activity} is used.\\
-\code{tab-menuentry-bigmenu} & 
+\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}
 
@@ -116,16 +118,21 @@ tag and drag states.)
 
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Style name & Description}
-\code{input} & A style for \type{WInput}s. \\
-\code{input-edln} & A more specific style for \type{WEdln}s. 
-       Substyle attributes: \code{selection} for selected text and
-       \code{cursor} for the cursor indicating current editing point. \\
-\code{input-message} & A more specific style for \type{WMessage}s. \\
-\code{input-menu} & A more specific style for \type{WMenu}s. \\
-\code{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\
-\code{moveres_display} & The box displaying position/size when
+\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. \\
-\code{dock} & The dock. \\     
+\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}
 
 
@@ -153,13 +160,13 @@ end
 
 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
+simply called ``de''). If the engine could not be found, it
 tries to load a module of the same name. If the engine still
-is not registered, \fnref{gr.select_engine} returns \code{false}
+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 \code{true}.
+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
@@ -230,16 +237,16 @@ 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. \\
+       Colour for the ``highlight'' part of a border. \\
 \var{shadow_colour}    &  
-       Colour for the ''highlight'' part of a border. \\
+       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 
+       Colour for the ``padding'' part of a border border. Set to 
        \var{background_colour} if unset. \\
 \end{tabularx}
 
@@ -252,12 +259,12 @@ indicating a number of pixels.
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Field  & Description}
 \var{border_style} & A string indicating the style of border; one of
-                    elevated/inlaid/ridge/groove as seen in the
-                    above sketch. \\
+                    \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: all/tb/lr for all, top and bottom, and
-                     left and right. To control between left/right
-                     and top/bottom, use the pixel options below. \\
+                     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}    &  
@@ -276,7 +283,7 @@ indicating a number of pixels.
 \var{font} & Font to be used in text-drawing operations; standard X font
             name. \\
 \var{text_align} & How text is to be aligned in text boxes/tabs; one of
-                  the strings left\nobreak/right\nobreak/center. \\
+                  the strings \codestr{left}/\codestr{right}/\codestr{center}. \\
 \end{tabularx}
 
 
@@ -295,13 +302,13 @@ indicating a number of pixels.
 \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
+indicate different states of the object being drawn. The ``de'' engine
 limits what can be configured in substyles to the set of colours in the
 first table above, but also specifically interprets for the main style
-\code{tab-frame} the substyles \code{*-*-tagged} and \code{*-*-*-dragged}
+\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 \code{*-*-submenu} are handled as a special case.
+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 
@@ -359,18 +366,32 @@ de.defstyle("tab-frame", {
 
 
 \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.
 
-\subsection{Extra fields for style \code{frame}}
-
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Field  & Description}
 \code{bar} & Controls the style of the tab-bar. Possible values
-        are the strings \code{"none"}, \code{"inside"}, \code{"outside"}
-        and \code{"shaped"}, with the last providing the PWM-style
+        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
@@ -380,15 +401,17 @@ engine configuration file.
        interval $(0, 1]$.
 \end{tabularx}
 
-\subsection{Extra fields for style \code{dock}}
+
+
+\subsection{Extra fields for style \codestr{dock}}
 
 \begin{tabularx}{\linewidth}{lX}
 \tabhead{Field  & Description}
 \code{outline_style} & How borders are drawn:
-                       \code{"none"} -- no border,
-                       \code{"all"} -- border around whole dock,
-                       \code{"each"} -- border around each dockapp. \\
-\code{tile_size} & A table with entries \code{width} and \code{height},
+                       \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}
 
index 4bb64854865d6fb7298dc8134d56099a73983d85..e22ed89b66d7dbe3d85785c9c82d916a4d858a9c 100644 (file)
@@ -6,8 +6,8 @@ To keep Ion's code as simple as possible yet safe, there are restrictions
 when the \type{WObj}
 \code{destroy_obj}\index{destroy-obj@\code{destroy_obj}}
 function that calls watches, the deinit routine and frees memory may
-be called directly. In all other cases the 
-\code{defer_destroy}\index{defer-destroy@\code{defer_destroy}}
+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. 
 
@@ -20,8 +20,8 @@ following cases:
       that wants to get rid of the object. This is the case, for example,
       when the function created a frame to manage some other object but for
       some reason failed to reparent the object to this frame.
-    \item In a deferred action handler set with
-      \code{defer_action}\index{defer-action@\code{defer_action}}.
+    \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
@@ -30,7 +30,7 @@ following cases:
 
 If there are no serious side effects from deferring destroying the
 object or you're unsure whether it is safe to destroy the object
-immediately, use \code{defer_destroy}.
+immediately, use \code{mainloop_defer_destroy}.
 
 \subsection{The types \code{char*} and \code{const char*} as function
   parameters and return values}
@@ -47,7 +47,7 @@ parameters to functions.
        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 called function may modify the string but the ``owner'' of
        the string is case-dependant. \\
 \end{tabularx}
 
index 483b16406d3129e778a72b7f938a400cc54df1ee..8549f120f51ff6dae58ff99f2f0e0f9c95602386 100644 (file)
@@ -1,5 +1,5 @@
 
 Context:
 
-[TAG ion-doc-3ds-20070318
-Tuomo Valkonen <tuomov@iki.fi>**20070318200902
+[TAG ion-doc-3rc-20070506
+Tuomo Valkonen <tuomov@iki.fi>**20070506144001
index c0590b6c7089c4812e2cf0fb62355942f981ca13..7c6e45a5df487547e0099264eac53d79241bfdc5 100644 (file)
@@ -3,40 +3,44 @@
 
 \section{Functions defined in \file{ioncore}}
 \label{sec:ioncoreref}
-\input{ioncore-fns.tex}
+\input{ioncore.exports}
 
 \section{Functions defined in \file{mod\_tiling}}
 \label{sec:tilingref}
-\input{mod_tiling-fns.tex}
+\input{mod_tiling.exports}
 
 %\section{Functions defined in \file{mod\_panews}}
 %\label{sec:panewsref}
-%\input{mod_panews-fns.tex}
+%\input{mod_panews.exports}
 
 \section{Functions defined in \file{mod\_query}}
 \label{sec:queryref}
-\input{mod_query-fns.tex}
+\input{mod_query.exports}
 
 \section{Functions defined in \file{mod\_menu}}
 \label{sec:menuref}
-\input{mod_menu-fns.tex}
+\input{mod_menu.exports}
 
 \section{Functions defined in \file{mod\_dock}}
 \label{sec:dockref}
-\input{mod_dock-fns.tex}
+\input{mod_dock.exports}
 
 \section{Functions defined in \file{mod\_sp}}
 \label{sec:spref}
-\input{mod_sp-fns.tex}
+\input{mod_sp.exports}
 
 \section{Functions defined in \file{mod\_statusbar}}
 \label{sec:statusbarref}
-\input{mod_statusbar-fns.tex}
+\input{mod_statusbar.exports}
 
 \section{Functions defined in \file{de}}
 \label{sec:deref}
-\input{de-fns.tex}
+\input{de.exports}
 
 \section{Hooks}
 \label{sec:hookref}
 \input{hookref}
+
+\section{Miscellaneous}
+\label{sec:miscref}
+\input{miscref}
index 8e1cfa972103590e8fdc08e6a92531b76d4e6325..51a0e8414066c5d9bd7654be74ab271f52ed54e4 100644 (file)
@@ -11,7 +11,6 @@
      |-->WHook
      |-->WTimer
      |-->WMoveresMode
-     |-->WMgmtMode (mod_mgmtmode)
      |-->WRegion
      |    |-->WClientWin
      |    |-->WWindow
index 4c26562b77c35302a24d23964aad280901cce3fd..5e0c05f9749caca87bcaae03b1798b0b31271077 100644 (file)
@@ -12,7 +12,7 @@
           \var{switchto} & bool & Do we want to switch to the client window. \\
           \var{jumpto} & bool & Do we want to jump to the client window. \\
           \var{userpos} & bool & Geometry set by user. \\
-          \var{dockapp} & bool & Client window is a dockapp. \\
+          \var{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}.\\
@@ -75,9 +75,9 @@ reg:attach(cwin)
       \begin{tabularx}{\linewidth}{llX}
           \tabhead{Field & Type & Description}
           \var{reg} & WFrame & The frame in question \\
-          \var{mode} & string & \var{"switchonly"}, \var{"reorder"},
-                                \var{"add"} or \var{"remove"} \\
-          \var{sw} & bool & Switch occured \\
+          \var{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}
@@ -111,7 +111,7 @@ reg:attach(cwin)
     \hookparams{()}
     \begin{funcdesc}
       Called when Ion has done all initialisation and is almost ready to
-      enter the mainloop, except no windows are yet being managed.
+      enter the main-loop, except no windows are yet being managed.
     \end{funcdesc}
 \end{function}
 
@@ -126,6 +126,16 @@ reg:attach(cwin)
 \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}
@@ -141,7 +151,7 @@ reg:attach(cwin)
               the moment) to be placed \\
           \var{mp} & \type{table} & This table contains the same fields as
             the parameter of \fnref{clientwin_do_manage_alt} \\
-          \var{res_frame} & \type{WFrame} & A succesfull handler should 
+          \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
@@ -196,12 +206,12 @@ reg:attach(cwin)
           \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 pseudoactive
+          \code{pseudoactivated} & The region has become pseudo-active
                       (see below). \\
-          \code{pseudoinactivated} & The region is no longer pseudoactive. \\
+          \code{pseudoinactivated} & The region is no longer pseudo-active. \\
       \end{tabularx}
 
-      A region is pseudoactive, when a) it is itself not active (does
+      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}
index acdd8088aa7b8987e290b0e4a02d1d75bfe4d2b1..f7e0ba99fa0e4f963aeb71929495da5ca3e9c06b 100644 (file)
Binary files a/doc/ionconf.dvi.gz and b/doc/ionconf.dvi.gz differ
index 7882440c930aa397033cec0f767c76dea63cf992..385ef4f1c16bf3861d4fba49fb19f50d48891781 100644 (file)
 \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 [2][-]{subsection.4.2.2}{ Defining the styles}{section.4.2}
 \BOOKMARK [2][-]{subsection.4.2.3}{ An example}{section.4.2}
 \BOOKMARK [1][-]{section.4.3}{ Miscellaneous settings}{chapter.4}
-\BOOKMARK [2][-]{lstlisting.4.-399}{ Extra fields for style !frame!}{section.4.3}
-\BOOKMARK [2][-]{lstlisting.4.-421}{ Extra fields for style !dock!}{section.4.3}
+\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.-462}{ Writing !ion-statusd! monitors}{chapter.5}
+\BOOKMARK [1][-]{lstlisting.5.-266}{ 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.3}{ WGroup functions}{section.6.1}
 \BOOKMARK [2][-]{subsection.6.1.4}{ WGroupCW functions}{section.6.1}
 \BOOKMARK [2][-]{subsection.6.1.5}{ WGroupWS functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.6}{ WInfoWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.7}{ WMPlex functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.8}{ WMoveresMode functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.9}{ WRegion functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.10}{ WRootWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.11}{ WScreen functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.12}{ WWindow functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.13}{ global functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.14}{ gr functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.15}{ string functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.16}{ table functions}{section.6.1}
+\BOOKMARK [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}
@@ -80,6 +87,9 @@
 \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*.17}{Index}{}
+\BOOKMARK [0][-]{section*.19}{Index}{}
+\BOOKMARK [0][-]{section*.21}{Bibliography}{}
index 3f368d759a705b891ca95f54443e24027c03494e..c59b71a2975da81af6c57321c5d3d3dce49a4112 100644 (file)
Binary files a/doc/ionconf.ps.gz and b/doc/ionconf.ps.gz differ
index b12cb1741cba47d316e5ad4e9bba450cb8b752e6..1bd52af2a701074c6001835555d3354bb2e9d2af 100644 (file)
@@ -10,7 +10,7 @@
 
 \title{Configuring and extending Ion3 with Lua}
 \author{Tuomo Valkonen \\ tuomov at iki.fi}
-\date{2007-03-18}
+\date{2007-05-06}
 
 \makeindex
 
@@ -20,7 +20,7 @@
 \maketitle
 
 Configuring and extending Ion3 with Lua\\
-Copyright \copyright\  2003--2005 Tuomo Valkonen.
+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
@@ -30,7 +30,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+chapter entitled ``GNU General Public License'' for more details.
 
 \tableofcontents
 
@@ -70,4 +70,9 @@ chapter entitled ''GNU General Public License'' for more details.
 
 \printindex
 
+\begin{thebibliography}{9}
+    \bibitem{scripts} The Ion 3 scripts repository,
+        \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.
+\end{thebibliography}
+
 \end{document}
index 2475ca58f3e2f8cab3e9f2076f075c5dc9d11549..aee5f70c487ba84226e8bfb6fe813e474ef17e8f 100644 (file)
@@ -1,4 +1,4 @@
-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.2.4)  18 MAR 2007 22:35
+This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8)  6 MAY 2007 17:46
 entering extended mode
 **./images.tex
 (./images.tex
@@ -353,42 +353,42 @@ 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_inline1041:7.0626pt::0.0pt::7.1201pt.
+l2hSize :tex2html_wrap_inline1055:7.0626pt::0.0pt::7.1201pt.
 [1
 
 
 
 ]
-l2hSize :tex2html_wrap_inline1045:7.48248pt::0.0pt::48.86426pt.
+l2hSize :tex2html_wrap_inline1059:7.48248pt::0.0pt::48.86426pt.
 [2
 
 
 ]
-l2hSize :tex2html_wrap_inline2020:8.7125pt::8.7125pt::23.6642pt.
+l2hSize :tex2html_wrap_inline2241:8.7125pt::8.7125pt::23.6642pt.
 [3
 
 
 ]
-l2hSize :tex2html_wrap_inline6387:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5502:7.5626pt::7.5626pt::14.53923pt.
 [4
 
 
 ]
-l2hSize :tex2html_wrap_inline6389:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5504:7.5626pt::7.5626pt::14.53923pt.
 [5
 
 
 ]
-l2hSize :tex2html_wrap_inline9409:8.7125pt::8.7125pt::86.9574pt.
+l2hSize :tex2html_wrap_inline7754:8.7125pt::8.7125pt::86.9574pt.
 [6
 
 
 ] (./images.aux) ) 
 Here is how much of TeX's memory you used:
- 4443 strings out of 94501
- 62984 string characters out of 1175795
- 122206 words of memory out of 1000000
- 7587 multiletter control sequences out of 10000+50000
+ 4467 strings out of 94501
+ 63452 string characters out of 1175795
+ 123525 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
index 6d0ccb42ff7b70009168199eb50e91ed79dc9ab2..d6e7651a8b8375d1b314d9b0aeeeaeb91bd3f615 100644 (file)
@@ -2,5 +2,41 @@
 # 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;
 
index 8ab5731b501b539fb85e3b1706665eea82ca292b..2912e907b556ff3d725745a588018db4b5d3acb8 100644 (file)
@@ -18,8 +18,7 @@
 \usepackage{calc}
 
 
-\urlstyle{rm}%
-\providecommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}} 
+\urlstyle{tt}
 
 %
 \providecommand{\note}[1]{\color{red}**#1**}%
@@ -31,6 +30,7 @@
 %
 \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}} 
 
@@ -82,7 +82,7 @@
 
 \title{Configuring and extending Ion3 with Lua}
 \author{Tuomo Valkonen \\tuomov at iki.fi}
-\date{2007-03-18}
+\date{2007-05-06}
 
 
 \makeindex
 \stepcounter{section}
 \stepcounter{section}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline1041}%
+\lthtmlinlinemathA{tex2html_wrap_inline1055}%
 $n$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -242,7 +242,7 @@ $n$%
 \stepcounter{subsection}
 \stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline1045}%
+\lthtmlinlinemathA{tex2html_wrap_inline1059}%
 $N=1{\ldots} 5$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -275,6 +275,12 @@ $N=1{\ldots} 5$%
 \stepcounter{subsection}
 \stepcounter{subsubsection}
 \stepcounter{subsubsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
 \stepcounter{subsubsection}
 \stepcounter{chapter}
 \stepcounter{section}
@@ -293,8 +299,9 @@ $N=1{\ldots} 5$%
 \stepcounter{subsection}
 \stepcounter{section}
 \stepcounter{subsection}
+\stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline2020}%
+\lthtmlinlinemathA{tex2html_wrap_inline2241}%
 $(0, 1]$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -316,14 +323,15 @@ $(0, 1]$%
 \stepcounter{subsection}
 \stepcounter{subsection}
 \stepcounter{subsection}
+\stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline6387}%
+\lthtmlinlinemathA{tex2html_wrap_inline5502}%
 $-1$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
 
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline6389}%
+\lthtmlinlinemathA{tex2html_wrap_inline5504}%
 $-2$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -337,6 +345,7 @@ $-2$%
 \stepcounter{subsection}
 \stepcounter{subsection}
 \stepcounter{subsection}
+\stepcounter{subsection}
 \stepcounter{section}
 \stepcounter{subsection}
 \stepcounter{subsection}
@@ -352,7 +361,7 @@ $-2$%
 \stepcounter{section}
 \stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline9409}%
+\lthtmlinlinemathA{tex2html_wrap_inline7754}%
 $\{t,m,b\}\times\{t,c,b\}$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -362,6 +371,8 @@ $\{t,m,b\}\times\{t,c,b\}$%
 \stepcounter{subsection}
 \stepcounter{section}
 \stepcounter{section}
+\stepcounter{section}
+\stepcounter{subsection}
 \appendix
 \stepcounter{chapter}
 \addtocounter{enumi}{-1}
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9d458d5539b431f6bef3387b0f39772ee459f8dc 100644 (file)
Binary files a/doc/ionconf/img1.png and b/doc/ionconf/img1.png differ
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d68136459c7deaf4d33aa93f958a9d50fddfeaa1 100644 (file)
Binary files a/doc/ionconf/img2.png and b/doc/ionconf/img2.png differ
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..38071fed0798e8e455fd66b91ac45682e6129169 100644 (file)
Binary files a/doc/ionconf/img3.png and b/doc/ionconf/img3.png differ
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3d3a3ef0ef82c58e701a42910f509f80f06bbc30 100644 (file)
Binary files a/doc/ionconf/img4.png and b/doc/ionconf/img4.png differ
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..38fbe56f6cb1f56f04d5286189a64d4dc58ddfa1 100644 (file)
Binary files a/doc/ionconf/img5.png and b/doc/ionconf/img5.png differ
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3601ccb5a58f67e073e54ac82fd6af3103b24e3d 100644 (file)
Binary files a/doc/ionconf/img6.png and b/doc/ionconf/img6.png differ
index a2f4405494e52ad41ef87334dde92b648547f917..47831079372a877cf6ff8da365c9de88d035a8bf 100644 (file)
@@ -25,27 +25,27 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html19"
+<A NAME="tex2html18"
   HREF="node1.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html13"
+<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="tex2html15"
+<A NAME="tex2html14"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html17"
+<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="tex2html20"
+<B> Next:</B> <A NAME="tex2html19"
   HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html14"
+<B> Up:</B> <A NAME="tex2html13"
   HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- &nbsp; <B>  <A NAME="tex2html16"
+ &nbsp; <B>  <A NAME="tex2html15"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html18"
+ &nbsp; <B>  <A NAME="tex2html17"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -57,13 +57,13 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
 <P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-03-18</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
 </DIV>
 
 <P>
 Configuring and extending Ion3 with Lua
 <BR>
-Copyright &#169;  2003-2005 Tuomo Valkonen.
+Copyright &#169;  2003-2007 Tuomo Valkonen.
 
 <P>
 This document is free; you can redistribute it and/or modify
@@ -75,7 +75,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+chapter entitled ``GNU General Public License'' for more details.
 
 <P>
 <BR><HR>
@@ -83,264 +83,294 @@ chapter entitled ''GNU General Public License'' for more details.
 <A NAME="CHILD_LINKS"></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html21"
+<LI><A NAME="tex2html20"
   HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html22"
+<LI><A NAME="tex2html21"
   HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html23"
+<LI><A NAME="tex2html22"
   HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
 <UL>
-<LI><A NAME="tex2html24"
+<LI><A NAME="tex2html23"
   HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html25"
+<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="tex2html26"
+<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="tex2html27"
+<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="tex2html28"
+<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="tex2html29"
+<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="tex2html30"
+<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="tex2html31"
+<LI><A NAME="tex2html30"
   HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
 <UL>
-<LI><A NAME="tex2html32"
+<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="tex2html33"
+<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="tex2html34"
+<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="tex2html35"
+<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="tex2html36"
+<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="tex2html37"
+<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="tex2html38"
+<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="tex2html39"
+<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="tex2html40"
+<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="tex2html41"
+<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="tex2html42"
+<LI><A NAME="tex2html41"
   HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
 <UL>
-<LI><A NAME="tex2html43"
+<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="tex2html44"
+<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="tex2html45"
+<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="tex2html46"
+<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="tex2html47"
+<LI><A NAME="tex2html46"
   HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
 <UL>
-<LI><A NAME="tex2html48"
+<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="tex2html49"
+<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="tex2html50"
+<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="tex2html51"
+<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="tex2html52"
+<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#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+  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#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+  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="tex2html55"
+<LI><A NAME="tex2html60"
   HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
 <UL>
-<LI><A NAME="tex2html56"
+<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="tex2html57"
+<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="tex2html58"
+<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="tex2html59"
+<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="tex2html60"
+<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="tex2html61"
+<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="tex2html62"
+<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="tex2html63"
+<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="tex2html64"
+<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="tex2html65"
+<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="tex2html66"
+<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="tex2html67"
+<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="tex2html68"
+<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="tex2html69"
+<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="tex2html70"
+<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="tex2html71"
-  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html72"
-  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<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="tex2html73"
+<LI><A NAME="tex2html79"
   HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
 <UL>
-<LI><A NAME="tex2html74"
+<LI><A NAME="tex2html80"
   HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html75"
+<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="tex2html76"
+<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="tex2html77"
+<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="tex2html78"
+<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="tex2html79"
+<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="tex2html80"
+<LI><A NAME="tex2html86"
   HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
 <UL>
-<LI><A NAME="tex2html81"
+<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="tex2html82"
-  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="tex2html83"
-  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="tex2html84"
-  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="tex2html85"
-  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="tex2html86"
-  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="tex2html87"
-  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
 <LI><A NAME="tex2html88"
-  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+  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#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+  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#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+  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#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+  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#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+  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#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+  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#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+  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#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+  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#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+  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#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
-</UL>
+  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="tex2html99"
+<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="tex2html100"
+<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="tex2html101"
+<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="tex2html102"
+<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="tex2html103"
+<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="tex2html104"
+<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="tex2html105"
+<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="tex2html106"
+<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="tex2html107"
+<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="tex2html108"
+<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="tex2html109"
+<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="tex2html110"
+<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="tex2html111"
+<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="tex2html112"
+<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="tex2html113"
+<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="tex2html114"
+<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="tex2html115"
+<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="tex2html116"
+<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="tex2html117"
+<LI><A NAME="tex2html127"
   HREF="node8.html">A. The GNU General Public License</A>
 <UL>
-<LI><A NAME="tex2html118"
+<LI><A NAME="tex2html128"
   HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
 </UL>
 <BR>
-<LI><A NAME="tex2html119"
+<LI><A NAME="tex2html129"
   HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html120"
+<LI><A NAME="tex2html130"
   HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html121"
+<LI><A NAME="tex2html131"
   HREF="node11.html">Index</A>
-<LI><A NAME="tex2html122"
-  HREF="node12.html">About this document ...</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>
index 0c3453a8e4119e81c0c2f46ff08514dff591c2c2..e2b61be8687af9e721f7a277db253e35453a5bc3 100644 (file)
@@ -18,6 +18,10 @@ $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";
@@ -26,6 +30,14 @@ $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";
@@ -34,11 +46,11 @@ $key = q/fn:ioncore.goto_first/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.insstr/;
+$key = q/fn:WClientWin.quote_next/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WClientWin.quote_next/;
+$key = q/fn:WEdln.insstr/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -50,11 +62,19 @@ $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:WTiling.farthest/;
+$key = q/fn:ioncore.submap_enter/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -62,11 +82,11 @@ $key = q/fn:ioncore.create_ws/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.finish/;
+$key = q/fn:WTiling.farthest/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.mark/;
+$key = q/fn:WEdln.finish/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -74,6 +94,10 @@ $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";
@@ -106,19 +130,19 @@ $key = q/fn:ioncore.kpress/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.is_mapped/;
+$key = q/fn:ioncore.goto_prev_screen/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.goto_prev_screen/;
+$key = q/fn:WRegion.is_mapped/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.transpose_words/;
+$key = q/sec:ioncoreref/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/sec:ioncoreref/;
+$key = q/fn:WEdln.transpose_words/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -146,6 +170,10 @@ $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";
@@ -166,6 +194,10 @@ $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";
@@ -198,8 +230,8 @@ $key = q/fn:WMoveresMode.resize/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WStatusBar.is_systray_extl/;
-$ref_files{$key} = "$dir".q|node7.html|; 
+$key = q/sec:statusbar/;
+$ref_files{$key} = "$dir".q|node4.html|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMenu.select_nth/;
@@ -214,6 +246,10 @@ $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";
@@ -226,7 +262,7 @@ $key = q/sec:modules/;
 $ref_files{$key} = "$dir".q|node3.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.tl/;
+$key = q/fn:ioncore.defctxmenu/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -234,7 +270,7 @@ $key = q/fn:mod_tiling.mkbottom/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.defctxmenu/;
+$key = q/fn:WSplitSplit.tl/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -246,11 +282,11 @@ $key = q/fn:WInput.scrollup/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.set_name_exact/;
+$key = q/fn:WMPlex.switch_nth/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WMPlex.switch_nth/;
+$key = q/fn:WRegion.set_name_exact/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -266,6 +302,10 @@ $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";
@@ -298,6 +338,10 @@ $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";
@@ -314,6 +358,10 @@ $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";
@@ -378,6 +426,10 @@ $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";
@@ -394,11 +446,11 @@ $key = q/fn:WMPlex.switch_next/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.unsqueeze/;
+$key = q/fn:WGroup.bottom/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WGroup.bottom/;
+$key = q/fn:ioncore.unsqueeze/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -462,15 +514,15 @@ $key = q/chap:tricks/;
 $ref_files{$key} = "$dir".q|node6.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.groupleader_of/;
+$key = q/fn:ioncore.get_savefile/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.get_savefile/;
+$key = q/fn:WRegion.groupleader_of/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:mod_query.history_push/;
+$key = q/fn:ioncore.lookup_clientwin/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -478,7 +530,7 @@ $key = q/fn:mod_query.get/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.lookup_clientwin/;
+$key = q/fn:mod_query.history_push/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -494,11 +546,11 @@ $key = q/sec:winprops/;
 $ref_files{$key} = "$dir".q|node4.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplit.parent/;
+$key = q/fn:ioncore.getctxmenu/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.getctxmenu/;
+$key = q/fn:WSplit.parent/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -546,6 +598,10 @@ $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";
@@ -642,6 +698,10 @@ $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";
@@ -718,11 +778,11 @@ $key = q/fn:WSplitSplit.br/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:string.shell_safe/;
+$key = q/fn:mod_query.query_restart/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:mod_query.query_restart/;
+$key = q/fn:string.shell_safe/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -786,14 +846,14 @@ $key = q/fn:WRegion.begin_kbresize/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.deflayout/;
-$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";
@@ -838,6 +898,10 @@ $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";
@@ -910,6 +974,10 @@ $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";
@@ -922,7 +990,7 @@ $key = q/sec:walkthrough/;
 $ref_files{$key} = "$dir".q|node4.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WFrame.set_numbers/;
+$key = q/fn:mod_statusbar.update/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -946,6 +1014,10 @@ $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";
@@ -954,11 +1026,11 @@ $key = q/fn:ioncore.mdblclick/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.flip/;
+$key = q/fn:WTiling.split_top/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WTiling.split_top/;
+$key = q/fn:WSplitSplit.flip/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -970,11 +1042,11 @@ $key = q/fn:mod_query.popen_completions/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -986,11 +1058,15 @@ $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:WSplit.transpose/;
+$key = q/fn:ioncore.submap_wait/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -998,11 +1074,15 @@ $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:WSplitSplit.dir/;
+$key = q/fn:WMPlex.set_stdisp/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1010,7 +1090,7 @@ $key = q/fn:WFrame.set_shaded/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WMPlex.set_stdisp/;
+$key = q/fn:WStatusBar.is_systray/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1022,11 +1102,11 @@ $key = q/fn:ioncore.x_change_property/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WInput.cancel/;
+$key = q/fn:WRegion.parent/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.parent/;
+$key = q/fn:WInput.cancel/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1074,10 +1154,6 @@ $key = q/clientwin_do_manage_alt/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.match_winprop_name/;
-$ref_files{$key} = "$dir".q|node7.html|; 
-$noresave{$key} = "$nosave";
-
 $key = q/ioncore_sigchld_hook/;
 $ref_files{$key} = "$dir".q|node7.html|; 
 $noresave{$key} = "$nosave";
@@ -1142,6 +1218,10 @@ $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";
@@ -1174,6 +1254,10 @@ $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";
@@ -1202,6 +1286,10 @@ $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";
@@ -1238,6 +1326,10 @@ $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";
@@ -1346,6 +1438,10 @@ $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";
index f0cd026d391a9025807ed506f9f490004b173e42..86d99dc947c421888b09d6b3797210f851d38e79 100644 (file)
@@ -29,6 +29,7 @@ TD.eqno                       { }     /* equation-number cells */
 
 /* document-specific styles come next */
 DIV.navigation         {   }
+DIV.flushleft          {   }
 DIV.center             {   }
 SPAN.sc                {   }
 DIV.quote              {   }
index a2f4405494e52ad41ef87334dde92b648547f917..47831079372a877cf6ff8da365c9de88d035a8bf 100644 (file)
@@ -25,27 +25,27 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html19"
+<A NAME="tex2html18"
   HREF="node1.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html13"
+<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="tex2html15"
+<A NAME="tex2html14"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html17"
+<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="tex2html20"
+<B> Next:</B> <A NAME="tex2html19"
   HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html14"
+<B> Up:</B> <A NAME="tex2html13"
   HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- &nbsp; <B>  <A NAME="tex2html16"
+ &nbsp; <B>  <A NAME="tex2html15"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html18"
+ &nbsp; <B>  <A NAME="tex2html17"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -57,13 +57,13 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
 <P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-03-18</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
 </DIV>
 
 <P>
 Configuring and extending Ion3 with Lua
 <BR>
-Copyright &#169;  2003-2005 Tuomo Valkonen.
+Copyright &#169;  2003-2007 Tuomo Valkonen.
 
 <P>
 This document is free; you can redistribute it and/or modify
@@ -75,7 +75,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+chapter entitled ``GNU General Public License'' for more details.
 
 <P>
 <BR><HR>
@@ -83,264 +83,294 @@ chapter entitled ''GNU General Public License'' for more details.
 <A NAME="CHILD_LINKS"></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html21"
+<LI><A NAME="tex2html20"
   HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html22"
+<LI><A NAME="tex2html21"
   HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html23"
+<LI><A NAME="tex2html22"
   HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
 <UL>
-<LI><A NAME="tex2html24"
+<LI><A NAME="tex2html23"
   HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html25"
+<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="tex2html26"
+<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="tex2html27"
+<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="tex2html28"
+<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="tex2html29"
+<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="tex2html30"
+<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="tex2html31"
+<LI><A NAME="tex2html30"
   HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
 <UL>
-<LI><A NAME="tex2html32"
+<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="tex2html33"
+<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="tex2html34"
+<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="tex2html35"
+<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="tex2html36"
+<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="tex2html37"
+<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="tex2html38"
+<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="tex2html39"
+<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="tex2html40"
+<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="tex2html41"
+<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="tex2html42"
+<LI><A NAME="tex2html41"
   HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
 <UL>
-<LI><A NAME="tex2html43"
+<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="tex2html44"
+<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="tex2html45"
+<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="tex2html46"
+<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="tex2html47"
+<LI><A NAME="tex2html46"
   HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
 <UL>
-<LI><A NAME="tex2html48"
+<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="tex2html49"
+<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="tex2html50"
+<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="tex2html51"
+<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="tex2html52"
+<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#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+  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#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+  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="tex2html55"
+<LI><A NAME="tex2html60"
   HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
 <UL>
-<LI><A NAME="tex2html56"
+<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="tex2html57"
+<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="tex2html58"
+<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="tex2html59"
+<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="tex2html60"
+<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="tex2html61"
+<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="tex2html62"
+<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="tex2html63"
+<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="tex2html64"
+<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="tex2html65"
+<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="tex2html66"
+<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="tex2html67"
+<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="tex2html68"
+<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="tex2html69"
+<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="tex2html70"
+<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="tex2html71"
-  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html72"
-  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<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="tex2html73"
+<LI><A NAME="tex2html79"
   HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
 <UL>
-<LI><A NAME="tex2html74"
+<LI><A NAME="tex2html80"
   HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html75"
+<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="tex2html76"
+<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="tex2html77"
+<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="tex2html78"
+<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="tex2html79"
+<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="tex2html80"
+<LI><A NAME="tex2html86"
   HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
 <UL>
-<LI><A NAME="tex2html81"
+<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="tex2html82"
-  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="tex2html83"
-  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="tex2html84"
-  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="tex2html85"
-  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="tex2html86"
-  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="tex2html87"
-  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
 <LI><A NAME="tex2html88"
-  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+  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#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+  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#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+  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#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+  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#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+  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#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+  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#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+  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#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+  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#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+  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#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
-</UL>
+  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="tex2html99"
+<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="tex2html100"
+<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="tex2html101"
+<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="tex2html102"
+<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="tex2html103"
+<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="tex2html104"
+<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="tex2html105"
+<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="tex2html106"
+<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="tex2html107"
+<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="tex2html108"
+<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="tex2html109"
+<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="tex2html110"
+<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="tex2html111"
+<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="tex2html112"
+<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="tex2html113"
+<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="tex2html114"
+<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="tex2html115"
+<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="tex2html116"
+<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="tex2html117"
+<LI><A NAME="tex2html127"
   HREF="node8.html">A. The GNU General Public License</A>
 <UL>
-<LI><A NAME="tex2html118"
+<LI><A NAME="tex2html128"
   HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
 </UL>
 <BR>
-<LI><A NAME="tex2html119"
+<LI><A NAME="tex2html129"
   HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html120"
+<LI><A NAME="tex2html130"
   HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html121"
+<LI><A NAME="tex2html131"
   HREF="node11.html">Index</A>
-<LI><A NAME="tex2html122"
-  HREF="node12.html">About this document ...</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>
index a14d1d0bdf35bbc170b45fa21204ef9eb439cd71..54a83c49e9b2234d98fccba937961b8e7977be18 100644 (file)
@@ -18,6 +18,10 @@ $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";
@@ -26,6 +30,14 @@ $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";
@@ -34,11 +46,11 @@ $key = q/fn:ioncore.goto_first/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.insstr/;
+$key = q/fn:WClientWin.quote_next/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WClientWin.quote_next/;
+$key = q/fn:WEdln.insstr/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -50,11 +62,19 @@ $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:WTiling.farthest/;
+$key = q/fn:ioncore.submap_enter/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -62,11 +82,11 @@ $key = q/fn:ioncore.create_ws/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.finish/;
+$key = q/fn:WTiling.farthest/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.mark/;
+$key = q/fn:WEdln.finish/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -74,6 +94,10 @@ $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";
@@ -106,19 +130,19 @@ $key = q/fn:ioncore.kpress/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.is_mapped/;
+$key = q/fn:ioncore.goto_prev_screen/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.goto_prev_screen/;
+$key = q/fn:WRegion.is_mapped/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.transpose_words/;
+$key = q/sec:ioncoreref/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/sec:ioncoreref/;
+$key = q/fn:WEdln.transpose_words/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -146,6 +170,10 @@ $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";
@@ -166,6 +194,10 @@ $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";
@@ -198,8 +230,8 @@ $key = q/fn:WMoveresMode.resize/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WStatusBar.is_systray_extl/;
-$external_labels{$key} = "$URL/" . q|node7.html|; 
+$key = q/sec:statusbar/;
+$external_labels{$key} = "$URL/" . q|node4.html|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMenu.select_nth/;
@@ -214,6 +246,10 @@ $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";
@@ -226,7 +262,7 @@ $key = q/sec:modules/;
 $external_labels{$key} = "$URL/" . q|node3.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.tl/;
+$key = q/fn:ioncore.defctxmenu/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -234,7 +270,7 @@ $key = q/fn:mod_tiling.mkbottom/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.defctxmenu/;
+$key = q/fn:WSplitSplit.tl/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -246,11 +282,11 @@ $key = q/fn:WInput.scrollup/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.set_name_exact/;
+$key = q/fn:WMPlex.switch_nth/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WMPlex.switch_nth/;
+$key = q/fn:WRegion.set_name_exact/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -266,6 +302,10 @@ $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";
@@ -298,6 +338,10 @@ $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";
@@ -314,6 +358,10 @@ $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";
@@ -378,6 +426,10 @@ $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";
@@ -394,11 +446,11 @@ $key = q/fn:WMPlex.switch_next/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.unsqueeze/;
+$key = q/fn:WGroup.bottom/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WGroup.bottom/;
+$key = q/fn:ioncore.unsqueeze/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -462,15 +514,15 @@ $key = q/chap:tricks/;
 $external_labels{$key} = "$URL/" . q|node6.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.groupleader_of/;
+$key = q/fn:ioncore.get_savefile/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.get_savefile/;
+$key = q/fn:WRegion.groupleader_of/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:mod_query.history_push/;
+$key = q/fn:ioncore.lookup_clientwin/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -478,7 +530,7 @@ $key = q/fn:mod_query.get/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.lookup_clientwin/;
+$key = q/fn:mod_query.history_push/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -494,11 +546,11 @@ $key = q/sec:winprops/;
 $external_labels{$key} = "$URL/" . q|node4.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplit.parent/;
+$key = q/fn:ioncore.getctxmenu/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.getctxmenu/;
+$key = q/fn:WSplit.parent/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -546,6 +598,10 @@ $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";
@@ -642,6 +698,10 @@ $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";
@@ -718,11 +778,11 @@ $key = q/fn:WSplitSplit.br/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:string.shell_safe/;
+$key = q/fn:mod_query.query_restart/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:mod_query.query_restart/;
+$key = q/fn:string.shell_safe/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -786,14 +846,14 @@ $key = q/fn:WRegion.begin_kbresize/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.deflayout/;
-$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";
@@ -838,6 +898,10 @@ $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";
@@ -910,6 +974,10 @@ $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";
@@ -922,7 +990,7 @@ $key = q/sec:walkthrough/;
 $external_labels{$key} = "$URL/" . q|node4.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WFrame.set_numbers/;
+$key = q/fn:mod_statusbar.update/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -946,6 +1014,10 @@ $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";
@@ -954,11 +1026,11 @@ $key = q/fn:ioncore.mdblclick/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.flip/;
+$key = q/fn:WTiling.split_top/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WTiling.split_top/;
+$key = q/fn:WSplitSplit.flip/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -970,11 +1042,11 @@ $key = q/fn:mod_query.popen_completions/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -986,11 +1058,15 @@ $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:WSplit.transpose/;
+$key = q/fn:ioncore.submap_wait/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -998,11 +1074,15 @@ $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:WSplitSplit.dir/;
+$key = q/fn:WMPlex.set_stdisp/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1010,7 +1090,7 @@ $key = q/fn:WFrame.set_shaded/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WMPlex.set_stdisp/;
+$key = q/fn:WStatusBar.is_systray/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1022,11 +1102,11 @@ $key = q/fn:ioncore.x_change_property/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WInput.cancel/;
+$key = q/fn:WRegion.parent/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.parent/;
+$key = q/fn:WInput.cancel/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
@@ -1074,10 +1154,6 @@ $key = q/clientwin_do_manage_alt/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.match_winprop_name/;
-$external_labels{$key} = "$URL/" . q|node7.html|; 
-$noresave{$key} = "$nosave";
-
 $key = q/ioncore_sigchld_hook/;
 $external_labels{$key} = "$URL/" . q|node7.html|; 
 $noresave{$key} = "$nosave";
@@ -1142,6 +1218,10 @@ $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";
@@ -1174,6 +1254,10 @@ $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";
@@ -1202,6 +1286,10 @@ $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";
@@ -1238,6 +1326,10 @@ $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";
@@ -1346,6 +1438,10 @@ $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";
@@ -1378,11 +1474,15 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.mx_nth/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:gr.select_engine/;
-$external_latex_labels{$key} = q|6.1.14|; 
+$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/;
@@ -1393,6 +1493,14 @@ $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";
@@ -1401,14 +1509,14 @@ $key = q/fn:ioncore.goto_first/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.insstr/;
-$external_latex_labels{$key} = q|6.3.2|; 
-$noresave{$key} = "$nosave";
-
 $key = q/fn:WClientWin.quote_next/;
 $external_latex_labels{$key} = q|6.1.1|; 
 $noresave{$key} = "$nosave";
 
+$key = q/fn: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";
@@ -1417,32 +1525,44 @@ $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:WTiling.farthest/;
-$external_latex_labels{$key} = q|6.2.5|; 
+$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.mark/;
+$key = q/fn:WEdln.bskip_word/;
 $external_latex_labels{$key} = q|6.3.2|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.bskip_word/;
+$key = q/fn:WEdln.mark/;
 $external_latex_labels{$key} = q|6.3.2|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.switch_prev/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WTiling.unsplit_at/;
@@ -1450,7 +1570,7 @@ $external_latex_labels{$key} = q|6.2.5|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.dec_index/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.current/;
@@ -1473,22 +1593,22 @@ $key = q/fn:ioncore.kpress/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.is_mapped/;
-$external_latex_labels{$key} = q|6.1.9|; 
-$noresave{$key} = "$nosave";
-
 $key = q/fn:ioncore.goto_prev_screen/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WEdln.transpose_words/;
-$external_latex_labels{$key} = q|6.3.2|; 
+$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";
@@ -1502,7 +1622,7 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WWindow.p_resize/;
-$external_latex_labels{$key} = q|6.1.12|; 
+$external_latex_labels{$key} = q|6.1.14|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WComplProxy.set_completions/;
@@ -1513,6 +1633,10 @@ $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";
@@ -1526,13 +1650,17 @@ $external_latex_labels{$key} = q|4.1.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.get_stdisp/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$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";
@@ -1554,7 +1682,7 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WScreen.id/;
-$external_latex_labels{$key} = q|6.1.11|; 
+$external_latex_labels{$key} = q|6.1.12|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WFrame.set_mode/;
@@ -1562,11 +1690,11 @@ $external_latex_labels{$key} = q|6.1.2|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMoveresMode.resize/;
-$external_latex_labels{$key} = q|6.1.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WStatusBar.is_systray_extl/;
-$external_latex_labels{$key} = q|6.7.1|; 
+$key = q/sec:statusbar/;
+$external_latex_labels{$key} = q|3.6|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMenu.select_nth/;
@@ -1581,6 +1709,10 @@ $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";
@@ -1593,16 +1725,16 @@ $key = q/sec:modules/;
 $external_latex_labels{$key} = q|2.1|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.tl/;
-$external_latex_labels{$key} = q|6.2.4|; 
+$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:ioncore.defctxmenu/;
-$external_latex_labels{$key} = q|6.1|; 
+$key = q/fn:WSplitSplit.tl/;
+$external_latex_labels{$key} = q|6.2.4|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.set_selection/;
@@ -1613,12 +1745,12 @@ $key = q/fn:WInput.scrollup/;
 $external_latex_labels{$key} = q|6.3.3|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.set_name_exact/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$key = q/fn:WMPlex.switch_nth/;
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WMPlex.switch_nth/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$key = q/fn:WRegion.set_name_exact/;
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.prev_completion/;
@@ -1633,6 +1765,10 @@ $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";
@@ -1658,13 +1794,17 @@ $external_latex_labels{$key} = q|3.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WInfoWin.set_text/;
-$external_latex_labels{$key} = q|6.1.6|; 
+$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";
@@ -1681,6 +1821,10 @@ $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";
@@ -1694,7 +1838,7 @@ $external_latex_labels{$key} = q|5.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WWindow.xid/;
-$external_latex_labels{$key} = q|6.1.12|; 
+$external_latex_labels{$key} = q|6.1.14|; 
 $noresave{$key} = "$nosave";
 
 $key = q/sec:statusbarref/;
@@ -1734,7 +1878,7 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:gr.read_config/;
-$external_latex_labels{$key} = q|6.1.14|; 
+$external_latex_labels{$key} = q|6.1.16|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WTiling.split_at/;
@@ -1754,21 +1898,21 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.screen_of/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.switch_next/;
-$external_latex_labels{$key} = q|6.1.7|; 
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.unsqueeze/;
-$external_latex_labels{$key} = q|6.1|; 
+$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";
@@ -1778,7 +1922,7 @@ $external_latex_labels{$key} = q|6.2.5|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRootWin.current_scr/;
-$external_latex_labels{$key} = q|6.1.10|; 
+$external_latex_labels{$key} = q|6.1.11|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.navi_first/;
@@ -1814,7 +1958,7 @@ $external_latex_labels{$key} = q|6.5.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.set_tagged/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/app:fullhierarchy/;
@@ -1830,23 +1974,23 @@ $external_latex_labels{$key} = q|5|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.groupleader_of/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$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:mod_query.history_push/;
-$external_latex_labels{$key} = q|6.3|; 
+$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:ioncore.lookup_clientwin/;
-$external_latex_labels{$key} = q|6.1|; 
+$key = q/fn:mod_query.history_push/;
+$external_latex_labels{$key} = q|6.3|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.restart/;
@@ -1861,16 +2005,16 @@ $key = q/sec:winprops/;
 $external_latex_labels{$key} = q|3.5|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplit.parent/;
-$external_latex_labels{$key} = q|6.2.1|; 
-$noresave{$key} = "$nosave";
-
 $key = q/fn:ioncore.getctxmenu/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
+$key = q/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.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WStatusBar.get_template_table/;
@@ -1890,7 +2034,7 @@ $external_latex_labels{$key} = q|6.1.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WWindow.p_move/;
-$external_latex_labels{$key} = q|6.1.12|; 
+$external_latex_labels{$key} = q|6.1.14|; 
 $noresave{$key} = "$nosave";
 
 $key = q/sec:objects/;
@@ -1898,7 +2042,7 @@ $external_latex_labels{$key} = q|2.2|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WScreen.set_managed_offset/;
-$external_latex_labels{$key} = q|6.1.11|; 
+$external_latex_labels{$key} = q|6.1.12|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.get_dir_for/;
@@ -1913,6 +2057,10 @@ $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";
@@ -1954,7 +2102,7 @@ $external_latex_labels{$key} = q|6.4.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:table.copy/;
-$external_latex_labels{$key} = q|6.1.16|; 
+$external_latex_labels{$key} = q|6.1.18|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WSplit.rqgeom/;
@@ -1962,7 +2110,7 @@ $external_latex_labels{$key} = q|6.2.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.managed_i/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.set_mark/;
@@ -1974,11 +2122,11 @@ $external_latex_labels{$key} = q|6.9|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.mx_count/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.attach/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fig:managership/;
@@ -1990,7 +2138,7 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMoveresMode.move/;
-$external_latex_labels{$key} = q|6.1.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_tiling.get/;
@@ -2009,6 +2157,10 @@ $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";
@@ -2018,7 +2170,7 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.inc_index/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.x_delete_property/;
@@ -2026,11 +2178,11 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.rqclose/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.set_activity/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_query.query_runfile/;
@@ -2054,7 +2206,7 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.mx_current/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_query.message/;
@@ -2085,14 +2237,14 @@ $key = q/fn:WSplitSplit.br/;
 $external_latex_labels{$key} = q|6.2.4|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:string.shell_safe/;
-$external_latex_labels{$key} = q|6.1.15|; 
-$noresave{$key} = "$nosave";
-
 $key = q/fn:mod_query.query_restart/;
 $external_latex_labels{$key} = q|6.3|; 
 $noresave{$key} = "$nosave";
 
+$key = q/fn: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";
@@ -2122,11 +2274,11 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.current/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.rqclose_propagate/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/region_notify_hook/;
@@ -2150,23 +2302,23 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.begin_kbresize/;
-$external_latex_labels{$key} = q|6.1.9|; 
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.deflayout/;
-$external_latex_labels{$key} = q|6.1|; 
+$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.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.next_completion/;
@@ -2174,7 +2326,7 @@ $external_latex_labels{$key} = q|6.3.2|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.set_hidden/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMenu.cancel/;
@@ -2186,7 +2338,7 @@ $external_latex_labels{$key} = q|6.1.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMoveresMode.geom/;
-$external_latex_labels{$key} = q|6.1.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.goto_nth_screen/;
@@ -2205,12 +2357,16 @@ $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.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.x_get_text_property/;
@@ -2226,7 +2382,7 @@ $external_latex_labels{$key} = q|6.9|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:table.append/;
-$external_latex_labels{$key} = q|6.1.16|; 
+$external_latex_labels{$key} = q|6.1.18|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.mclick/;
@@ -2238,7 +2394,7 @@ $external_latex_labels{$key} = q|6.7.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.set_index/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_query.history_clear/;
@@ -2254,7 +2410,7 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMoveresMode.finish/;
-$external_latex_labels{$key} = q|6.1.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_query.query_gotoclient/;
@@ -2277,6 +2433,10 @@ $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";
@@ -2289,12 +2449,12 @@ $key = q/sec:walkthrough/;
 $external_latex_labels{$key} = q|3.2|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WFrame.set_numbers/;
-$external_latex_labels{$key} = q|6.1.2|; 
+$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.8|; 
+$external_latex_labels{$key} = q|6.1.9|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.submap/;
@@ -2302,7 +2462,7 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.is_active/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.bkill_word/;
@@ -2310,7 +2470,11 @@ $external_latex_labels{$key} = q|6.3.2|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.attach_new/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$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/;
@@ -2337,11 +2501,11 @@ $key = q/fn:mod_query.popen_completions/;
 $external_latex_labels{$key} = q|6.3|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
 $external_latex_labels{$key} = q|6.1|; 
 $noresave{$key} = "$nosave";
 
@@ -2353,48 +2517,56 @@ $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:WSplit.transpose/;
-$external_latex_labels{$key} = q|6.2.1|; 
+$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.16|; 
+$external_latex_labels{$key} = q|6.1.18|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WSplitSplit.dir/;
-$external_latex_labels{$key} = q|6.2.4|; 
+$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:WMPlex.set_stdisp/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$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.9|; 
+$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:WInput.cancel/;
-$external_latex_labels{$key} = q|6.3.3|; 
+$key = q/fn:WRegion.parent/;
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
-$key = q/fn:WRegion.parent/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$key = q/fn:WInput.cancel/;
+$external_latex_labels{$key} = q|6.3.3|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.back/;
@@ -2418,7 +2590,7 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.geom/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.kpress_wait/;
@@ -2430,21 +2602,17 @@ $external_latex_labels{$key} = q|6.2.5|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.rootwin_of/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.mx_i/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$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/fn:ioncore.match_winprop_name/;
-$external_latex_labels{$key} = q|6.1|; 
-$noresave{$key} = "$nosave";
-
 $key = q/ioncore_sigchld_hook/;
 $external_latex_labels{$key} = q|6.9|; 
 $noresave{$key} = "$nosave";
@@ -2482,11 +2650,11 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:gr.refresh/;
-$external_latex_labels{$key} = q|6.1.14|; 
+$external_latex_labels{$key} = q|6.1.16|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.rqorder/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_menu.grabmenu/;
@@ -2498,7 +2666,7 @@ $external_latex_labels{$key} = q|6.2.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.size_hints/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.delete/;
@@ -2509,6 +2677,10 @@ $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";
@@ -2522,7 +2694,7 @@ $external_latex_labels{$key} = q|6.3.2|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.goto/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.goto_next_screen/;
@@ -2541,6 +2713,10 @@ $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";
@@ -2566,11 +2742,15 @@ $external_latex_labels{$key} = q|6.1|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.is_activity/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$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.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WInput.scrolldown/;
@@ -2605,12 +2785,16 @@ $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.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:table.join/;
-$external_latex_labels{$key} = q|6.1.16|; 
+$external_latex_labels{$key} = q|6.1.18|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:ioncore.activity_first/;
@@ -2622,11 +2806,11 @@ $external_latex_labels{$key} = q|6.6|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.is_hidden/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$external_latex_labels{$key} = q|6.1.8|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WRegion.get_configuration/;
-$external_latex_labels{$key} = q|6.1.9|; 
+$external_latex_labels{$key} = q|6.1.10|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:mod_menu.get/;
@@ -2666,7 +2850,7 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:export/;
-$external_latex_labels{$key} = q|6.1.13|; 
+$external_latex_labels{$key} = q|6.1.15|; 
 $noresave{$key} = "$nosave";
 
 $key = q/chap:gr/;
@@ -2690,7 +2874,7 @@ $external_latex_labels{$key} = q|6.9|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:table.icat/;
-$external_latex_labels{$key} = q|6.1.16|; 
+$external_latex_labels{$key} = q|6.1.18|; 
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WEdln.kill_line/;
@@ -2706,13 +2890,17 @@ $external_latex_labels{$key} = q|6.3|;
 $noresave{$key} = "$nosave";
 
 $key = q/fn:WMPlex.get_index/;
-$external_latex_labels{$key} = q|6.1.7|; 
+$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";
index b243cb3c3a5a6b5cc6bdb6bd5964bcd49d9c3ed8..8027deff1188c5bb714378b98faa578793f734e9 100644 (file)
@@ -28,26 +28,26 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html133"
+<A NAME="tex2html144"
   HREF="node2.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html129"
+<A NAME="tex2html140"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html123"
+<A NAME="tex2html134"
   HREF="ionconf.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>  
-<A NAME="tex2html131"
+<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="tex2html134"
+<B> Next:</B> <A NAME="tex2html145"
   HREF="node2.html">1. Introduction</A>
-<B> Up:</B> <A NAME="tex2html130"
+<B> Up:</B> <A NAME="tex2html141"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html124"
+<B> Previous:</B> <A NAME="tex2html135"
   HREF="ionconf.html">Configuring and extending Ion3</A>
- &nbsp; <B>  <A NAME="tex2html132"
+ &nbsp; <B>  <A NAME="tex2html143"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -60,219 +60,243 @@ Contents</A>
 <!--Table of Contents-->
 
 <UL CLASS="TofC">
-<LI><A NAME="tex2html135"
+<LI><A NAME="tex2html146"
   HREF="node2.html">1. Introduction</A>
-<LI><A NAME="tex2html136"
+<LI><A NAME="tex2html147"
   HREF="node3.html">2. Preliminaries: Key concepts and relations</A>
 <UL>
-<LI><A NAME="tex2html137"
+<LI><A NAME="tex2html148"
   HREF="node3.html#SECTION00310000000000000000">2.1 Modules</A>
-<LI><A NAME="tex2html138"
+<LI><A NAME="tex2html149"
   HREF="node3.html#SECTION00320000000000000000">2.2 Class and object hierarchies</A>
 <UL>
-<LI><A NAME="tex2html139"
+<LI><A NAME="tex2html150"
   HREF="node3.html#SECTION00321000000000000000">2.2.1 Class hierarchy</A>
-<LI><A NAME="tex2html140"
+<LI><A NAME="tex2html151"
   HREF="node3.html#SECTION00322000000000000000">2.2.2 Object hierarchies: WRegion parents and managers</A>
-<LI><A NAME="tex2html141"
+<LI><A NAME="tex2html152"
   HREF="node3.html#SECTION00323000000000000000">2.2.3 Summary</A>
 </UL>
 </UL>
 <BR>
-<LI><A NAME="tex2html142"
+<LI><A NAME="tex2html153"
   HREF="node4.html">3. Basic configuration</A>
 <UL>
-<LI><A NAME="tex2html143"
+<LI><A NAME="tex2html154"
   HREF="node4.html#SECTION00410000000000000000">3.1 The configuration files</A>
-<LI><A NAME="tex2html144"
+<LI><A NAME="tex2html155"
   HREF="node4.html#SECTION00420000000000000000">3.2 A walk through cfg_ion.lua</A>
-<LI><A NAME="tex2html145"
+<LI><A NAME="tex2html156"
   HREF="node4.html#SECTION00430000000000000000">3.3 Keys and rodents</A>
 <UL>
-<LI><A NAME="tex2html146"
+<LI><A NAME="tex2html157"
   HREF="node4.html#SECTION00431000000000000000">3.3.1 Binding handlers and special variables</A>
-<LI><A NAME="tex2html147"
+<LI><A NAME="tex2html158"
   HREF="node4.html#SECTION00432000000000000000">3.3.2 Guards</A>
-<LI><A NAME="tex2html148"
+<LI><A NAME="tex2html159"
   HREF="node4.html#SECTION00433000000000000000">3.3.3 Defining the bindings</A>
-<LI><A NAME="tex2html149"
+<LI><A NAME="tex2html160"
   HREF="node4.html#SECTION00434000000000000000">3.3.4 Examples</A>
-<LI><A NAME="tex2html150"
+<LI><A NAME="tex2html161"
   HREF="node4.html#SECTION00435000000000000000">3.3.5 Key specifications</A>
-<LI><A NAME="tex2html151"
+<LI><A NAME="tex2html162"
   HREF="node4.html#SECTION00436000000000000000">3.3.6 Button specifications</A>
-<LI><A NAME="tex2html152"
+<LI><A NAME="tex2html163"
   HREF="node4.html#SECTION00437000000000000000">3.3.7 A further note on the default binding configuration</A>
 </UL>
-<LI><A NAME="tex2html153"
+<LI><A NAME="tex2html164"
   HREF="node4.html#SECTION00440000000000000000">3.4 Menus</A>
 <UL>
-<LI><A NAME="tex2html154"
+<LI><A NAME="tex2html165"
   HREF="node4.html#SECTION00441000000000000000">3.4.1 Defining menus</A>
-<LI><A NAME="tex2html155"
+<LI><A NAME="tex2html166"
   HREF="node4.html#SECTION00442000000000000000">3.4.2 Special menus</A>
-<LI><A NAME="tex2html156"
+<LI><A NAME="tex2html167"
   HREF="node4.html#SECTION00443000000000000000">3.4.3 Defining context menus</A>
-<LI><A NAME="tex2html157"
+<LI><A NAME="tex2html168"
   HREF="node4.html#SECTION00444000000000000000">3.4.4 Displaying menus</A>
 </UL>
-<LI><A NAME="tex2html158"
+<LI><A NAME="tex2html169"
   HREF="node4.html#SECTION00450000000000000000">3.5 Winprops</A>
 <UL>
-<LI><A NAME="tex2html159"
+<LI><A NAME="tex2html170"
   HREF="node4.html#SECTION00451000000000000000">3.5.1 Sizehint winprops</A>
-<LI><A NAME="tex2html160"
+<LI><A NAME="tex2html171"
   HREF="node4.html#SECTION00452000000000000000">3.5.2 Classes, roles and instances</A>
-<LI><A NAME="tex2html161"
+<LI><A NAME="tex2html172"
   HREF="node4.html#SECTION00453000000000000000">3.5.3 Finding window identification</A>
-<LI><A NAME="tex2html162"
+<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="tex2html163"
+<LI><A NAME="tex2html178"
   HREF="node5.html">4. Graphical styles</A>
 <UL>
-<LI><A NAME="tex2html164"
+<LI><A NAME="tex2html179"
   HREF="node5.html#SECTION00510000000000000000">4.1 Drawing engines, style specifications and sub-styles</A>
 <UL>
-<LI><A NAME="tex2html165"
+<LI><A NAME="tex2html180"
   HREF="node5.html#SECTION00511000000000000000">4.1.1 Known styles and substyles</A>
 </UL>
-<LI><A NAME="tex2html166"
+<LI><A NAME="tex2html181"
   HREF="node5.html#SECTION00520000000000000000">4.2 Defining styles for the default drawing engine</A>
 <UL>
-<LI><A NAME="tex2html167"
+<LI><A NAME="tex2html182"
   HREF="node5.html#SECTION00521000000000000000">4.2.1 The structure of the configuration files</A>
-<LI><A NAME="tex2html168"
+<LI><A NAME="tex2html183"
   HREF="node5.html#SECTION00522000000000000000">4.2.2 Defining the styles</A>
-<LI><A NAME="tex2html169"
+<LI><A NAME="tex2html184"
   HREF="node5.html#SECTION00523000000000000000">4.2.3 An example</A>
 </UL>
-<LI><A NAME="tex2html170"
+<LI><A NAME="tex2html185"
   HREF="node5.html#SECTION00530000000000000000">4.3 Miscellaneous settings</A>
 <UL>
-<LI><A NAME="tex2html171"
-  HREF="node5.html#SECTION00531000000000000000">4.3.1 Extra fields for style frame</A>
-<LI><A NAME="tex2html172"
-  HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style dock</A>
+<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="tex2html173"
+<LI><A NAME="tex2html189"
   HREF="node6.html">5. Scripting</A>
 <UL>
-<LI><A NAME="tex2html174"
+<LI><A NAME="tex2html190"
   HREF="node6.html#SECTION00610000000000000000">5.1 Hooks</A>
-<LI><A NAME="tex2html175"
+<LI><A NAME="tex2html191"
   HREF="node6.html#SECTION00620000000000000000">5.2 Referring to regions</A>
 <UL>
-<LI><A NAME="tex2html176"
+<LI><A NAME="tex2html192"
   HREF="node6.html#SECTION00621000000000000000">5.2.1 Direct object references</A>
-<LI><A NAME="tex2html177"
+<LI><A NAME="tex2html193"
   HREF="node6.html#SECTION00622000000000000000">5.2.2 Name-based lookups</A>
 </UL>
-<LI><A NAME="tex2html178"
+<LI><A NAME="tex2html194"
   HREF="node6.html#SECTION00630000000000000000">5.3 Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html179"
+<LI><A NAME="tex2html195"
   HREF="node6.html#SECTION00640000000000000000">5.4 Writing ion-statusd monitors</A>
 </UL>
 <BR>
-<LI><A NAME="tex2html180"
+<LI><A NAME="tex2html196"
   HREF="node7.html">6. Function reference</A>
 <UL>
-<LI><A NAME="tex2html181"
+<LI><A NAME="tex2html197"
   HREF="node7.html#SECTION00710000000000000000">6.1 Functions defined in ioncore</A>
 <UL>
-<LI><A NAME="tex2html182"
+<LI><A NAME="tex2html198"
   HREF="node7.html#SECTION00711000000000000000">6.1.1 WClientWin functions</A>
-<LI><A NAME="tex2html183"
+<LI><A NAME="tex2html199"
   HREF="node7.html#SECTION00712000000000000000">6.1.2 WFrame functions</A>
-<LI><A NAME="tex2html184"
+<LI><A NAME="tex2html200"
   HREF="node7.html#SECTION00713000000000000000">6.1.3 WGroup functions</A>
-<LI><A NAME="tex2html185"
+<LI><A NAME="tex2html201"
   HREF="node7.html#SECTION00714000000000000000">6.1.4 WGroupCW functions</A>
-<LI><A NAME="tex2html186"
+<LI><A NAME="tex2html202"
   HREF="node7.html#SECTION00715000000000000000">6.1.5 WGroupWS functions</A>
-<LI><A NAME="tex2html187"
-  HREF="node7.html#SECTION00716000000000000000">6.1.6 WInfoWin functions</A>
-<LI><A NAME="tex2html188"
-  HREF="node7.html#SECTION00717000000000000000">6.1.7 WMPlex functions</A>
-<LI><A NAME="tex2html189"
-  HREF="node7.html#SECTION00718000000000000000">6.1.8 WMoveresMode functions</A>
-<LI><A NAME="tex2html190"
-  HREF="node7.html#SECTION00719000000000000000">6.1.9 WRegion functions</A>
-<LI><A NAME="tex2html191"
-  HREF="node7.html#SECTION007110000000000000000">6.1.10 WRootWin functions</A>
-<LI><A NAME="tex2html192"
-  HREF="node7.html#SECTION007111000000000000000">6.1.11 WScreen functions</A>
-<LI><A NAME="tex2html193"
-  HREF="node7.html#SECTION007112000000000000000">6.1.12 WWindow functions</A>
-<LI><A NAME="tex2html194"
-  HREF="node7.html#SECTION007113000000000000000">6.1.13 global functions</A>
-<LI><A NAME="tex2html195"
-  HREF="node7.html#SECTION007114000000000000000">6.1.14 gr functions</A>
-<LI><A NAME="tex2html196"
-  HREF="node7.html#SECTION007115000000000000000">6.1.15 string functions</A>
-<LI><A NAME="tex2html197"
-  HREF="node7.html#SECTION007116000000000000000">6.1.16 table 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="tex2html198"
+<LI><A NAME="tex2html216"
   HREF="node7.html#SECTION00720000000000000000">6.2 Functions defined in mod_tiling</A>
 <UL>
-<LI><A NAME="tex2html199"
+<LI><A NAME="tex2html217"
   HREF="node7.html#SECTION00721000000000000000">6.2.1 WSplit functions</A>
-<LI><A NAME="tex2html200"
+<LI><A NAME="tex2html218"
   HREF="node7.html#SECTION00722000000000000000">6.2.2 WSplitInner functions</A>
-<LI><A NAME="tex2html201"
+<LI><A NAME="tex2html219"
   HREF="node7.html#SECTION00723000000000000000">6.2.3 WSplitRegion functions</A>
-<LI><A NAME="tex2html202"
+<LI><A NAME="tex2html220"
   HREF="node7.html#SECTION00724000000000000000">6.2.4 WSplitSplit functions</A>
-<LI><A NAME="tex2html203"
+<LI><A NAME="tex2html221"
   HREF="node7.html#SECTION00725000000000000000">6.2.5 WTiling functions</A>
 </UL>
-<LI><A NAME="tex2html204"
+<LI><A NAME="tex2html222"
   HREF="node7.html#SECTION00730000000000000000">6.3 Functions defined in mod_query</A>
 <UL>
-<LI><A NAME="tex2html205"
+<LI><A NAME="tex2html223"
   HREF="node7.html#SECTION00731000000000000000">6.3.1 WComplProxy functions</A>
-<LI><A NAME="tex2html206"
+<LI><A NAME="tex2html224"
   HREF="node7.html#SECTION00732000000000000000">6.3.2 WEdln functions</A>
-<LI><A NAME="tex2html207"
+<LI><A NAME="tex2html225"
   HREF="node7.html#SECTION00733000000000000000">6.3.3 WInput functions</A>
 </UL>
-<LI><A NAME="tex2html208"
+<LI><A NAME="tex2html226"
   HREF="node7.html#SECTION00740000000000000000">6.4 Functions defined in mod_menu</A>
 <UL>
-<LI><A NAME="tex2html209"
+<LI><A NAME="tex2html227"
   HREF="node7.html#SECTION00741000000000000000">6.4.1 WMenu functions</A>
 </UL>
-<LI><A NAME="tex2html210"
+<LI><A NAME="tex2html228"
   HREF="node7.html#SECTION00750000000000000000">6.5 Functions defined in mod_dock</A>
 <UL>
-<LI><A NAME="tex2html211"
+<LI><A NAME="tex2html229"
   HREF="node7.html#SECTION00751000000000000000">6.5.1 WDock functions</A>
 </UL>
-<LI><A NAME="tex2html212"
+<LI><A NAME="tex2html230"
   HREF="node7.html#SECTION00760000000000000000">6.6 Functions defined in mod_sp</A>
-<LI><A NAME="tex2html213"
+<LI><A NAME="tex2html231"
   HREF="node7.html#SECTION00770000000000000000">6.7 Functions defined in mod_statusbar</A>
 <UL>
-<LI><A NAME="tex2html214"
+<LI><A NAME="tex2html232"
   HREF="node7.html#SECTION00771000000000000000">6.7.1 WStatusBar functions</A>
 </UL>
-<LI><A NAME="tex2html215"
+<LI><A NAME="tex2html233"
   HREF="node7.html#SECTION00780000000000000000">6.8 Functions defined in de</A>
-<LI><A NAME="tex2html216"
+<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="tex2html217"
+<LI><A NAME="tex2html237"
   HREF="node8.html">A. The GNU General Public License</A>
-<LI><A NAME="tex2html218"
+<LI><A NAME="tex2html238"
   HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html219"
+<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>
index 64992630e5f9d77966610d41d03570e9bdd8fcfc..d15711c6f6603c1f95d28588672b60484a2761ed 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html434"
+<A NAME="tex2html466"
   HREF="node11.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html428"
+<A NAME="tex2html460"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html422"
+<A NAME="tex2html454"
   HREF="node9.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html430"
+<A NAME="tex2html462"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html432"
+<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="tex2html435"
+<B> Next:</B> <A NAME="tex2html467"
   HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html429"
+<B> Up:</B> <A NAME="tex2html461"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html423"
+<B> Previous:</B> <A NAME="tex2html455"
   HREF="node9.html">B. Full class hierarchy</A>
- &nbsp; <B>  <A NAME="tex2html431"
+ &nbsp; <B>  <A NAME="tex2html463"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html433"
+ &nbsp; <B>  <A NAME="tex2html465"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -79,10 +79,12 @@ List of functions</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>
@@ -97,6 +99,7 @@ List of functions</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>
@@ -116,7 +119,7 @@ List of functions</A>
 <BR><A HREF="node7.html#fn:ioncore.lookup_clientwin"><TT>ioncore.lookup_clientwin</TT></A>
 <BR><A HREF="node7.html#fn:ioncore.lookup_region"><TT>ioncore.lookup_region</TT></A>
 <BR><A HREF="node7.html#fn:ioncore.lookup_script"><TT>ioncore.lookup_script</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.match_winprop_name"><TT>ioncore.match_winprop_name</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.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>
@@ -139,7 +142,11 @@ List of functions</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>
@@ -194,7 +201,11 @@ List of functions</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>
@@ -254,8 +265,8 @@ List of functions</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_numbers"><TT>WFrame.set_numbers</TT></A>
 <BR><A HREF="node7.html#fn:WFrame.set_shaded"><TT>WFrame.set_shaded</TT></A>
 <BR><A HREF="node7.html#fn:WGroup.attach"><TT>WGroup.attach</TT></A>
 <BR><A HREF="node7.html#fn:WGroup.attach_new"><TT>WGroup.attach_new</TT></A>
@@ -265,6 +276,9 @@ List of functions</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>
@@ -337,7 +351,7 @@ List of functions</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_extl"><TT>WStatusBar.is_systray_extl</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>
@@ -355,37 +369,40 @@ List of functions</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="tex2html434"
+<A NAME="tex2html466"
   HREF="node11.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html428"
+<A NAME="tex2html460"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html422"
+<A NAME="tex2html454"
   HREF="node9.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html430"
+<A NAME="tex2html462"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html432"
+<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="tex2html435"
+<B> Next:</B> <A NAME="tex2html467"
   HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html429"
+<B> Up:</B> <A NAME="tex2html461"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html423"
+<B> Previous:</B> <A NAME="tex2html455"
   HREF="node9.html">B. Full class hierarchy</A>
- &nbsp; <B>  <A NAME="tex2html431"
+ &nbsp; <B>  <A NAME="tex2html463"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html433"
+ &nbsp; <B>  <A NAME="tex2html465"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 4ad6ff23aa9bc5c0ccfc6120d56a09ffdd7681e8..98036497d8396f95001a0c2bd580b172eac576bd 100644 (file)
@@ -28,26 +28,26 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html446"
+<A NAME="tex2html478"
   HREF="node12.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html442"
+<A NAME="tex2html474"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html436"
+<A NAME="tex2html468"
   HREF="node10.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html444"
+<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="tex2html447"
-  HREF="node12.html">About this document ...</A>
-<B> Up:</B> <A NAME="tex2html443"
+<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="tex2html437"
+<B> Previous:</B> <A NAME="tex2html469"
   HREF="node10.html">List of functions</A>
- &nbsp; <B>  <A NAME="tex2html445"
+ &nbsp; <B>  <A NAME="tex2html477"
   HREF="node1.html">Contents</A></B> 
 <BR>
 <BR></DIV>
@@ -57,1086 +57,184 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <H2><A NAME="SECTION001100000000000000000">
 Index</A>
 </H2><HR><DL>
-<DD><STRONG><TT>aboutmsg</TT></STRONG>
- : <A HREF="node7.html#4407"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>acrobatic</TT></STRONG>
- : <A HREF="node4.html#1438"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>activity_first</TT></STRONG>
- : <A HREF="node7.html#4409"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_i</TT></STRONG>
- : <A HREF="node7.html#4411"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1451"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">Alt</SPAN></STRONG>
- : <A HREF="node4.html#878"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#883"><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#876"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>append</TT></STRONG>
- : <A HREF="node7.html#4712"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+ : <A HREF="node4.html#881"><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#1453"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1454"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>attach</TT></STRONG>
- : <A HREF="node7.html#4564"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4586"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
- | <A HREF="node7.html#9346"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>attach_framed</TT></STRONG>
- : <A HREF="node7.html#4580"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG>
- : <A HREF="node7.html#4566"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4588"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>back</TT></STRONG>
- : <A HREF="node7.html#8235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>backspace</TT></STRONG>
- : <A HREF="node7.html#8237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bdoc</TT></STRONG>
- : <A HREF="node7.html#4365"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>begin_kbresize</TT></STRONG>
- : <A HREF="node7.html#4636"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>bkill_word</TT></STRONG>
- : <A HREF="node7.html#8239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bol</TT></STRONG>
- : <A HREF="node7.html#8241"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bottom</TT></STRONG>
- : <A HREF="node7.html#4568"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>br</TT></STRONG>
- : <A HREF="node7.html#7135"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>bskip_word</TT></STRONG>
- : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1466"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node4.html#1467"><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#882"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>cancel</TT></STRONG>
- : <A HREF="node7.html#4623"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#8302"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9134"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>chdir_for</TT></STRONG>
- : <A HREF="node7.html#4367"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#887"><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#1460"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1473"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 </DL>
-<DD><STRONG><TT>clear_mark</TT></STRONG>
- : <A HREF="node7.html#8245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 <DD><STRONG><TT>clientwin_do_manage_alt</TT></STRONG>
- : <A HREF="node7.html#9877"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>clientwin_i</TT></STRONG>
- : <A HREF="node7.html#4413"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_mapped_hook</TT></STRONG>
- : <A HREF="node7.html#9878"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8233"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_property_change_hook</TT></STRONG>
- : <A HREF="node7.html#9879"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_unmapped_hook</TT></STRONG>
- : <A HREF="node7.html#9880"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>compile_cmd</TT></STRONG>
- : <A HREF="node7.html#4369"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>complete</TT></STRONG>
- : <A HREF="node7.html#8247"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>contents</TT></STRONG>
- : <A HREF="node7.html#8249"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>context</TT></STRONG>
- : <A HREF="node7.html#8251"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node7.html#8235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">Control</SPAN></STRONG>
- : <A HREF="node4.html#874"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG>
- : <A HREF="node7.html#4714"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
- | <A HREF="node7.html#8253"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>create_ws</TT></STRONG>
- : <A HREF="node7.html#4371"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG>
- : <A HREF="node7.html#4415"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4638"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7129"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>current_scr</TT></STRONG>
- : <A HREF="node7.html#4685"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
-<DD><STRONG><TT>cut</TT></STRONG>
- : <A HREF="node7.html#8255"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>de</TT></STRONG><DL>
-<DD><STRONG><TT>defstyle</TT></STRONG> : <A HREF="node7.html#9672"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defstyle_rootwin</TT></STRONG> : <A HREF="node7.html#9674"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>reset</TT></STRONG> : <A HREF="node7.html#9676"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>substyle</TT></STRONG> : <A HREF="node7.html#9678"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-</DL>
-<DD><STRONG><TT>dec_index</TT></STRONG>
- : <A HREF="node7.html#4590"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>defbindings</TT></STRONG>
- : <A HREF="node7.html#4373"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defcmd</TT></STRONG>
- : <A HREF="node7.html#8172"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>defctxmenu</TT></STRONG>
- : <A HREF="node7.html#4375"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>deflayout</TT></STRONG>
- : <A HREF="node7.html#4377"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#879"><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#1185"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4379"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defshortening</TT></STRONG>
- : <A HREF="node7.html#4417"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defstyle</TT></STRONG>
- : <A HREF="node7.html#9673"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defstyle_rootwin</TT></STRONG>
- : <A HREF="node7.html#9675"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defwinprop</TT></STRONG>
- : <A HREF="node7.html#4381"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>delete</TT></STRONG>
- : <A HREF="node7.html#8257"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>detach</TT></STRONG>
- : <A HREF="node7.html#4419"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>dir</TT></STRONG>
- : <A HREF="node7.html#7137"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <A HREF="node4.html#1198"><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#1709"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>eol</TT></STRONG>
- : <A HREF="node7.html#8259"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node5.html#1888"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>ETCDIR</TT></STRONG>
- : <A HREF="node4.html#591"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec</TT></STRONG>
- : <A HREF="node7.html#4421"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec_on</TT></STRONG>
- : <A HREF="node7.html#4383"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>export</TT></STRONG>
- : <A HREF="node7.html#4699"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN></A>
-<DD><STRONG><TT>farthest</TT></STRONG>
- : <A HREF="node7.html#7148"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>find_manager</TT></STRONG>
- : <A HREF="node7.html#4393"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_screen_id</TT></STRONG>
- : <A HREF="node7.html#4423"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG>
- : <A HREF="node7.html#4625"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#8261"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#9136"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>flip</TT></STRONG>
- : <A HREF="node7.html#7139"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>flip_at</TT></STRONG>
- : <A HREF="node7.html#7144"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#583"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>float</TT></STRONG>
- : <A HREF="node4.html#1439"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>focushistory_i</TT></STRONG>
- : <A HREF="node7.html#4425"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>forward</TT></STRONG>
- : <A HREF="node7.html#8263"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1452"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>frame_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#9881"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>fullscreen</TT></STRONG>
- : <A HREF="node4.html#1440"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG>
- : <A HREF="node7.html#4627"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#4640"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7120"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG>
- : <A HREF="node7.html#4427"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#7111"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#8176"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9127"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
- | <A HREF="node7.html#9348"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_configuration</TT></STRONG>
- : <A HREF="node7.html#4642"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>get_dir_for</TT></STRONG>
- : <A HREF="node7.html#4395"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_ident</TT></STRONG>
- : <A HREF="node7.html#4534"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_index</TT></STRONG>
- : <A HREF="node7.html#4592"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_paths</TT></STRONG>
- : <A HREF="node7.html#4429"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_savefile</TT></STRONG>
- : <A HREF="node7.html#4387"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_stdisp</TT></STRONG>
- : <A HREF="node7.html#4594"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_template_table</TT></STRONG>
- : <A HREF="node7.html#9552"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getbindings</TT></STRONG>
- : <A HREF="node7.html#4397"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getctxmenu</TT></STRONG>
- : <A HREF="node7.html#4399"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getlayout</TT></STRONG>
- : <A HREF="node7.html#4401"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getmenu</TT></STRONG>
- : <A HREF="node7.html#4403"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getwinprop</TT></STRONG>
- : <A HREF="node7.html#4405"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto</TT></STRONG>
- : <A HREF="node7.html#4644"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>goto_activity</TT></STRONG>
- : <A HREF="node7.html#4431"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_first</TT></STRONG>
- : <A HREF="node7.html#4433"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next</TT></STRONG>
- : <A HREF="node7.html#4435"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next_screen</TT></STRONG>
- : <A HREF="node7.html#4437"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_nth_screen</TT></STRONG>
- : <A HREF="node7.html#4439"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_prev_screen</TT></STRONG>
- : <A HREF="node7.html#4441"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_previous</TT></STRONG>
- : <A HREF="node7.html#4443"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>gr</TT></STRONG><DL>
-<DD><STRONG><TT>read_config</TT></STRONG> : <A HREF="node7.html#4701"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>refresh</TT></STRONG> : <A HREF="node7.html#4703"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>select_engine</TT></STRONG> : <A HREF="node7.html#4705"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-</DL>
-<DD><STRONG><TT>grabmenu</TT></STRONG>
- : <A HREF="node7.html#9123"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>groupleader_of</TT></STRONG>
- : <A HREF="node7.html#4646"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>history_clear</TT></STRONG>
- : <A HREF="node7.html#8178"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_get</TT></STRONG>
- : <A HREF="node7.html#8180"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_next</TT></STRONG>
- : <A HREF="node7.html#8265"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_prev</TT></STRONG>
- : <A HREF="node7.html#8267"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_push</TT></STRONG>
- : <A HREF="node7.html#8182"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_search</TT></STRONG>
- : <A HREF="node7.html#8184"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_table</TT></STRONG>
- : <A HREF="node7.html#8186"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>icat</TT></STRONG>
- : <A HREF="node7.html#4716"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>id</TT></STRONG>
- : <A HREF="node7.html#4688"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+ : <A HREF="node4.html#1453"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>ignore_resizeinc</TT></STRONG>
- : <A HREF="node4.html#1457"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1458"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1470"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node4.html#1471"><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#1441"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1454"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>ignore_max_size</TT></STRONG>
- : <A HREF="node4.html#1455"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1468"><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#1456"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1469"><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#1442"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>inc_index</TT></STRONG>
- : <A HREF="node7.html#4596"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>insstr</TT></STRONG>
- : <A HREF="node7.html#8269"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1455"><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#1462"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>ioncore</TT></STRONG><DL>
-<DD><STRONG><TT>aboutmsg</TT></STRONG> : <A HREF="node7.html#4406"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_first</TT></STRONG> : <A HREF="node7.html#4408"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_i</TT></STRONG> : <A HREF="node7.html#4410"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>bdoc</TT></STRONG> : <A HREF="node7.html#4364"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>chdir_for</TT></STRONG> : <A HREF="node7.html#4366"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>clientwin_i</TT></STRONG> : <A HREF="node7.html#4412"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>compile_cmd</TT></STRONG> : <A HREF="node7.html#4368"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>create_ws</TT></STRONG> : <A HREF="node7.html#4370"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4414"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defbindings</TT></STRONG> : <A HREF="node7.html#4372"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defctxmenu</TT></STRONG> : <A HREF="node7.html#4374"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>deflayout</TT></STRONG> : <A HREF="node7.html#4376"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defmenu</TT></STRONG> : <A HREF="node7.html#4378"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defshortening</TT></STRONG> : <A HREF="node7.html#4416"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defwinprop</TT></STRONG> : <A HREF="node7.html#4380"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>detach</TT></STRONG> : <A HREF="node7.html#4418"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec</TT></STRONG> : <A HREF="node7.html#4420"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec_on</TT></STRONG> : <A HREF="node7.html#4382"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_manager</TT></STRONG> : <A HREF="node7.html#4392"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_screen_id</TT></STRONG> : <A HREF="node7.html#4422"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>focushistory_i</TT></STRONG> : <A HREF="node7.html#4424"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#4426"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_dir_for</TT></STRONG> : <A HREF="node7.html#4394"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_paths</TT></STRONG> : <A HREF="node7.html#4428"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_savefile</TT></STRONG> : <A HREF="node7.html#4386"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getbindings</TT></STRONG> : <A HREF="node7.html#4396"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getctxmenu</TT></STRONG> : <A HREF="node7.html#4398"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getlayout</TT></STRONG> : <A HREF="node7.html#4400"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getmenu</TT></STRONG> : <A HREF="node7.html#4402"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getwinprop</TT></STRONG> : <A HREF="node7.html#4404"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_activity</TT></STRONG> : <A HREF="node7.html#4430"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_first</TT></STRONG> : <A HREF="node7.html#4432"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next</TT></STRONG> : <A HREF="node7.html#4434"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next_screen</TT></STRONG> : <A HREF="node7.html#4436"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_nth_screen</TT></STRONG> : <A HREF="node7.html#4438"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_prev_screen</TT></STRONG> : <A HREF="node7.html#4440"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_previous</TT></STRONG> : <A HREF="node7.html#4442"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_i18n</TT></STRONG> : <A HREF="node7.html#4444"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress</TT></STRONG> : <A HREF="node7.html#4508"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress_wait</TT></STRONG> : <A HREF="node7.html#4510"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>load_module</TT></STRONG> : <A HREF="node7.html#4446"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_clientwin</TT></STRONG> : <A HREF="node7.html#4448"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_region</TT></STRONG> : <A HREF="node7.html#4450"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_script</TT></STRONG> : <A HREF="node7.html#4388"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>match_winprop_name</TT></STRONG> : <A HREF="node7.html#4512"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mclick</TT></STRONG> : <A HREF="node7.html#4514"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdblclick</TT></STRONG> : <A HREF="node7.html#4516"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdrag</TT></STRONG> : <A HREF="node7.html#4518"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>menuentry</TT></STRONG> : <A HREF="node7.html#4520"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mpress</TT></STRONG> : <A HREF="node7.html#4522"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_first</TT></STRONG> : <A HREF="node7.html#4452"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_next</TT></STRONG> : <A HREF="node7.html#4454"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>popen_bgread</TT></STRONG> : <A HREF="node7.html#4456"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>progname</TT></STRONG> : <A HREF="node7.html#4458"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>read_savefile</TT></STRONG> : <A HREF="node7.html#4384"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>refresh_stylelist</TT></STRONG> : <A HREF="node7.html#4524"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>region_i</TT></STRONG> : <A HREF="node7.html#4460"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>request_selection</TT></STRONG> : <A HREF="node7.html#4462"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resign</TT></STRONG> : <A HREF="node7.html#4464"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart</TT></STRONG> : <A HREF="node7.html#4466"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart_other</TT></STRONG> : <A HREF="node7.html#4468"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#4470"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_paths</TT></STRONG> : <A HREF="node7.html#4472"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_selection</TT></STRONG> : <A HREF="node7.html#4474"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>shutdown</TT></STRONG> : <A HREF="node7.html#4476"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>snapshot</TT></STRONG> : <A HREF="node7.html#4478"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submap</TT></STRONG> : <A HREF="node7.html#4526"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submenu</TT></STRONG> : <A HREF="node7.html#4528"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_attach</TT></STRONG> : <A HREF="node7.html#4530"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_clear</TT></STRONG> : <A HREF="node7.html#4480"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_first</TT></STRONG> : <A HREF="node7.html#4482"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_i</TT></STRONG> : <A HREF="node7.html#4484"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>TR</TT></STRONG> : <A HREF="node7.html#4362"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>unsqueeze</TT></STRONG> : <A HREF="node7.html#4486"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>version</TT></STRONG> : <A HREF="node7.html#4488"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#4490"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn_traced</TT></STRONG> : <A HREF="node7.html#4492"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>write_savefile</TT></STRONG> : <A HREF="node7.html#4390"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_change_property</TT></STRONG> : <A HREF="node7.html#4494"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_delete_property</TT></STRONG> : <A HREF="node7.html#4496"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_atom_name</TT></STRONG> : <A HREF="node7.html#4498"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_text_property</TT></STRONG> : <A HREF="node7.html#4500"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_window_property</TT></STRONG> : <A HREF="node7.html#4502"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_intern_atom</TT></STRONG> : <A HREF="node7.html#4504"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_set_text_property</TT></STRONG> : <A HREF="node7.html#4506"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1475"><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#9883"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8238"><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#9884"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_sigchld_hook</TT></STRONG>
- : <A HREF="node7.html#9882"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_snapshot_hook</TT></STRONG>
- : <A HREF="node7.html#9885"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_active</TT></STRONG>
- : <A HREF="node7.html#4648"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_activity</TT></STRONG>
- : <A HREF="node7.html#4650"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_fullscreen</TT></STRONG>
- : <A HREF="node7.html#4570"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>is_hidden</TT></STRONG>
- : <A HREF="node7.html#4598"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>is_histcompl</TT></STRONG>
- : <A HREF="node7.html#8271"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_i18n</TT></STRONG>
- : <A HREF="node7.html#4445"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_mapped</TT></STRONG>
- : <A HREF="node7.html#4652"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_shaded</TT></STRONG>
- : <A HREF="node7.html#4545"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_systray_extl</TT></STRONG>
- : <A HREF="node7.html#9554"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_tagged</TT></STRONG>
- : <A HREF="node7.html#4654"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>join</TT></STRONG>
- : <A HREF="node7.html#4718"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+ : <A HREF="node7.html#8240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>ioncore_submap_ungrab_hook</TT></STRONG>
+ : <A HREF="node7.html#8241"><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#1478"><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#1477"><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#1443"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1456"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textit">keysymdef.h</SPAN></STRONG>
- : <A HREF="node4.html#872"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>kill</TT></STRONG>
- : <A HREF="node7.html#4536"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kill_line</TT></STRONG>
- : <A HREF="node7.html#8273"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_bol</TT></STRONG>
- : <A HREF="node7.html#8275"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_eol</TT></STRONG>
- : <A HREF="node7.html#8277"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_word</TT></STRONG>
- : <A HREF="node7.html#8279"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kpress</TT></STRONG>
- : <A HREF="node7.html#4509"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress_wait</TT></STRONG>
- : <A HREF="node7.html#4511"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>load_module</TT></STRONG>
- : <A HREF="node7.html#4447"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><SPAN  CLASS="textbf">Lock</SPAN></STRONG>
  : <A HREF="node4.html#877"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>lookup_clientwin</TT></STRONG>
- : <A HREF="node7.html#4449"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_region</TT></STRONG>
- : <A HREF="node7.html#4451"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_script</TT></STRONG>
- : <A HREF="node7.html#4389"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG>
- : <A HREF="node7.html#4572"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4600"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
- | <A HREF="node7.html#7150"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>manager</TT></STRONG>
- : <A HREF="node3.html#390"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4656"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>map</TT></STRONG>
- : <A HREF="node7.html#4720"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>mark</TT></STRONG>
- : <A HREF="node7.html#8281"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>match_winprop_name</TT></STRONG>
- : <A HREF="node7.html#4513"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN  CLASS="textbf">Lock</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>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#1451"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>maximize_horiz</TT></STRONG>
- : <A HREF="node7.html#4547"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_vert</TT></STRONG>
- : <A HREF="node7.html#4549"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mclick</TT></STRONG>
- : <A HREF="node7.html#4515"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdblclick</TT></STRONG>
- : <A HREF="node7.html#4517"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdrag</TT></STRONG>
- : <A HREF="node7.html#4519"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>menu</TT></STRONG>
- : <A HREF="node7.html#9125"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <A HREF="node4.html#1464"><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#1186"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4521"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1199"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>menus</STRONG>
- : <A HREF="node4.html#1128"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>message</TT></STRONG>
- : <A HREF="node7.html#8174"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1144"><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#1452"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mkbottom</TT></STRONG>
- : <A HREF="node7.html#7113"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mod_dock</TT></STRONG><DL>
-<DD><STRONG><TT>set_floating_shown_on</TT></STRONG> : <A HREF="node7.html#9342"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_menu</TT></STRONG><DL>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#9126"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>grabmenu</TT></STRONG> : <A HREF="node7.html#9122"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>menu</TT></STRONG> : <A HREF="node7.html#9124"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>pmenu</TT></STRONG> : <A HREF="node7.html#9130"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#9128"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_query</TT></STRONG><DL>
-<DD><STRONG><TT>defcmd</TT></STRONG> : <A HREF="node7.html#8171"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#8175"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_clear</TT></STRONG> : <A HREF="node7.html#8177"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_get</TT></STRONG> : <A HREF="node7.html#8179"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_push</TT></STRONG> : <A HREF="node7.html#8181"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_search</TT></STRONG> : <A HREF="node7.html#8183"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_table</TT></STRONG> : <A HREF="node7.html#8185"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>message</TT></STRONG> : <A HREF="node7.html#8173"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>popen_completions</TT></STRONG> : <A HREF="node7.html#8189"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query</TT></STRONG> : <A HREF="node7.html#8191"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_attachclient</TT></STRONG> : <A HREF="node7.html#8193"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_editfile</TT></STRONG> : <A HREF="node7.html#8195"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_exec</TT></STRONG> : <A HREF="node7.html#8197"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_gotoclient</TT></STRONG> : <A HREF="node7.html#8199"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_lua</TT></STRONG> : <A HREF="node7.html#8201"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_man</TT></STRONG> : <A HREF="node7.html#8203"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_menu</TT></STRONG> : <A HREF="node7.html#8205"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameframe</TT></STRONG> : <A HREF="node7.html#8207"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameworkspace</TT></STRONG> : <A HREF="node7.html#8209"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_restart</TT></STRONG> : <A HREF="node7.html#8211"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_runfile</TT></STRONG> : <A HREF="node7.html#8213"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_shutdown</TT></STRONG> : <A HREF="node7.html#8215"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_ssh</TT></STRONG> : <A HREF="node7.html#8217"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_workspace</TT></STRONG> : <A HREF="node7.html#8220"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_yesno</TT></STRONG> : <A HREF="node7.html#8222"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#8187"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_about_ion</TT></STRONG> : <A HREF="node7.html#8224"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_tree</TT></STRONG> : <A HREF="node7.html#8226"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#8228"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_sp</TT></STRONG><DL>
-<DD><STRONG><TT>set_shown</TT></STRONG> : <A HREF="node7.html#9451"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_shown_on</TT></STRONG> : <A HREF="node7.html#9453"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_statusbar</TT></STRONG><DL>
-<DD><STRONG><TT>statusbars</TT></STRONG> : <A HREF="node7.html#9548"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_tiling</TT></STRONG><DL>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#7110"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mkbottom</TT></STRONG> : <A HREF="node7.html#7112"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#7114"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>untile</TT></STRONG> : <A HREF="node7.html#7116"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>mode</TT></STRONG>
- : <A HREF="node7.html#4551"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1465"><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#875"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>move</TT></STRONG>
- : <A HREF="node7.html#4629"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>mpress</TT></STRONG>
- : <A HREF="node7.html#4523"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mx_count</TT></STRONG>
- : <A HREF="node7.html#4602"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_current</TT></STRONG>
- : <A HREF="node7.html#4604"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_i</TT></STRONG>
- : <A HREF="node7.html#4606"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_nth</TT></STRONG>
- : <A HREF="node7.html#4608"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>name</TT></STRONG>
- : <A HREF="node7.html#4658"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>navi_first</TT></STRONG>
- : <A HREF="node7.html#4453"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_next</TT></STRONG>
- : <A HREF="node7.html#4455"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#880"><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#1476"><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#1444"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>next_completion</TT></STRONG>
- : <A HREF="node7.html#8283"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>nextto</TT></STRONG>
- : <A HREF="node7.html#7152"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>node_of</TT></STRONG>
- : <A HREF="node7.html#7154"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>nudge</TT></STRONG>
- : <A HREF="node7.html#4538"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1457"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">NumLock</SPAN></STRONG>
- : <A HREF="node4.html#880"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#885"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG>Obj</STRONG>
- : <A HREF="node3.html#418"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#1445"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>p_move</TT></STRONG>
- : <A HREF="node7.html#4693"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_resize</TT></STRONG>
- : <A HREF="node7.html#4695"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_switch_tab</TT></STRONG>
- : <A HREF="node7.html#4553"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_tabdrag</TT></STRONG>
- : <A HREF="node7.html#4555"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG>
- : <A HREF="node3.html#375"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4660"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7122"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>paste</TT></STRONG>
- : <A HREF="node7.html#8285"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>pmenu</TT></STRONG>
- : <A HREF="node7.html#9131"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>point</TT></STRONG>
- : <A HREF="node7.html#8287"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>popen_bgread</TT></STRONG>
- : <A HREF="node7.html#4457"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>popen_completions</TT></STRONG>
- : <A HREF="node7.html#8190"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1458"><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#590"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>prev_completion</TT></STRONG>
- : <A HREF="node7.html#8289"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>progname</TT></STRONG>
- : <A HREF="node7.html#4459"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>query</TT></STRONG>
- : <A HREF="node7.html#8192"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_attachclient</TT></STRONG>
- : <A HREF="node7.html#8194"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_editfile</TT></STRONG>
- : <A HREF="node7.html#8196"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_exec</TT></STRONG>
- : <A HREF="node7.html#8198"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_gotoclient</TT></STRONG>
- : <A HREF="node7.html#8200"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_lua</TT></STRONG>
- : <A HREF="node7.html#8202"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_man</TT></STRONG>
- : <A HREF="node7.html#8204"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_menu</TT></STRONG>
- : <A HREF="node7.html#8206"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameframe</TT></STRONG>
- : <A HREF="node7.html#8208"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameworkspace</TT></STRONG>
- : <A HREF="node7.html#8210"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_restart</TT></STRONG>
- : <A HREF="node7.html#8212"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_runfile</TT></STRONG>
- : <A HREF="node7.html#8214"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_shutdown</TT></STRONG>
- : <A HREF="node7.html#8216"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_ssh</TT></STRONG>
- : <A HREF="node7.html#8218"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_workspace</TT></STRONG>
- : <A HREF="node7.html#8221"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_yesno</TT></STRONG>
- : <A HREF="node7.html#8223"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>quote_next</TT></STRONG>
- : <A HREF="node7.html#4540"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>read_config</TT></STRONG>
- : <A HREF="node7.html#4702"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>read_savefile</TT></STRONG>
- : <A HREF="node7.html#4385"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>refresh</TT></STRONG>
- : <A HREF="node7.html#4704"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>refresh_stylelist</TT></STRONG>
- : <A HREF="node7.html#4525"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>reg</TT></STRONG>
- : <A HREF="node7.html#7132"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#582"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>region_do_warp_alt</TT></STRONG>
- : <A HREF="node7.html#9887"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>region_i</TT></STRONG>
- : <A HREF="node7.html#4461"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>region_notify_hook</TT></STRONG>
- : <A HREF="node7.html#9889"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>request_selection</TT></STRONG>
- : <A HREF="node7.html#4463"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>reset</TT></STRONG>
- : <A HREF="node7.html#9677"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>resign</TT></STRONG>
- : <A HREF="node7.html#4465"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG>
- : <A HREF="node7.html#4631"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#9350"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart</TT></STRONG>
- : <A HREF="node7.html#4467"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart_other</TT></STRONG>
- : <A HREF="node7.html#4469"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8245"><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#1461"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1474"><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#336"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rootwin_of</TT></STRONG>
- : <A HREF="node7.html#4662"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose</TT></STRONG>
- : <A HREF="node7.html#4664"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose_propagate</TT></STRONG>
- : <A HREF="node7.html#4666"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG>
- : <A HREF="node7.html#4633"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#4668"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7124"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rqorder</TT></STRONG>
- : <A HREF="node7.html#4670"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <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#338"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node3.html#337"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<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#9888"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>screen_of</TT></STRONG>
- : <A HREF="node7.html#4672"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>scrolldown</TT></STRONG>
- : <A HREF="node7.html#8304"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">ScrollLock</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><TT>scrollup</TT></STRONG>
- : <A HREF="node7.html#8306"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>select_engine</TT></STRONG>
- : <A HREF="node7.html#4706"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>select_next</TT></STRONG>
- : <A HREF="node7.html#9138"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_nth</TT></STRONG>
- : <A HREF="node7.html#9140"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_prev</TT></STRONG>
- : <A HREF="node7.html#9142"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG>
- : <A HREF="node7.html#4471"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#7115"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#8188"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9129"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
- | <A HREF="node7.html#9352"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_activity</TT></STRONG>
- : <A HREF="node7.html#4674"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_bottom</TT></STRONG>
- : <A HREF="node7.html#4574"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_completions</TT></STRONG>
- : <A HREF="node7.html#8232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_context</TT></STRONG>
- : <A HREF="node7.html#8291"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_floating</TT></STRONG>
- : <A HREF="node7.html#7158"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_at</TT></STRONG>
- : <A HREF="node7.html#7156"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_shown_on</TT></STRONG>
- : <A HREF="node7.html#9343"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_fullscreen</TT></STRONG>
- : <A HREF="node7.html#4576"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_hidden</TT></STRONG>
- : <A HREF="node7.html#4610"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_index</TT></STRONG>
- : <A HREF="node7.html#4612"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_managed_offset</TT></STRONG>
- : <A HREF="node7.html#4690"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-<DD><STRONG><TT>set_mark</TT></STRONG>
- : <A HREF="node7.html#8293"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mode</TT></STRONG>
- : <A HREF="node7.html#4557"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_name</TT></STRONG>
- : <A HREF="node7.html#4676"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name_exact</TT></STRONG>
- : <A HREF="node7.html#4678"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_numbers</TT></STRONG>
- : <A HREF="node7.html#4559"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_paths</TT></STRONG>
- : <A HREF="node7.html#4473"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_selection</TT></STRONG>
- : <A HREF="node7.html#4475"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_shaded</TT></STRONG>
- : <A HREF="node7.html#4561"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_shown</TT></STRONG>
- : <A HREF="node7.html#9452"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_shown_on</TT></STRONG>
- : <A HREF="node7.html#9454"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_stdisp</TT></STRONG>
- : <A HREF="node7.html#4614"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_systray</TT></STRONG>
- : <A HREF="node7.html#9556"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_tagged</TT></STRONG>
- : <A HREF="node7.html#4680"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_template</TT></STRONG>
- : <A HREF="node7.html#9558"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template_table</TT></STRONG>
- : <A HREF="node7.html#9560"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_text</TT></STRONG>
- : <A HREF="node7.html#4583"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>shell_safe</TT></STRONG>
- : <A HREF="node7.html#4709"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
+ : <A HREF="node4.html#886"><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#873"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>show_about_ion</TT></STRONG>
- : <A HREF="node7.html#8225"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_tree</TT></STRONG>
- : <A HREF="node7.html#8227"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>shutdown</TT></STRONG>
- : <A HREF="node7.html#4477"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>size_hints</TT></STRONG>
- : <A HREF="node7.html#4682"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>skip_word</TT></STRONG>
- : <A HREF="node7.html#8295"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>snapshot</TT></STRONG>
- : <A HREF="node7.html#4479"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>split</TT></STRONG>
- : <A HREF="node7.html#7160"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_at</TT></STRONG>
- : <A HREF="node7.html#7162"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_top</TT></STRONG>
- : <A HREF="node7.html#7164"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_tree</TT></STRONG>
- : <A HREF="node7.html#7166"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#878"><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#1446"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>statusbars</TT></STRONG>
- : <A HREF="node7.html#9549"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>string</TT></STRONG><DL>
-<DD><STRONG><TT>shell_safe</TT></STRONG> : <A HREF="node7.html#4708"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
-</DL>
+ : <A HREF="node4.html#1459"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG>style</STRONG>
- : <A HREF="node5.html#1708"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submap</TT></STRONG>
- : <A HREF="node7.html#4527"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node5.html#1887"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>submenu</TT></STRONG>
- : <A HREF="node4.html#1187"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4529"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>substyle</TT></STRONG>
- : <A HREF="node5.html#1720"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#9679"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>switch_next</TT></STRONG>
- : <A HREF="node7.html#4616"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_nth</TT></STRONG>
- : <A HREF="node7.html#4618"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_prev</TT></STRONG>
- : <A HREF="node7.html#4620"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+ : <A HREF="node4.html#1200"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>substyle</STRONG>
+ : <A HREF="node5.html#1900"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>switchto</TT></STRONG>
- : <A HREF="node4.html#1447"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1460"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textit">system.mk</SPAN></STRONG>
- : <A HREF="node4.html#592"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>table</TT></STRONG><DL>
-<DD><STRONG><TT>append</TT></STRONG> : <A HREF="node7.html#4711"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#4713"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>icat</TT></STRONG> : <A HREF="node7.html#4715"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>join</TT></STRONG> : <A HREF="node7.html#4717"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>map</TT></STRONG> : <A HREF="node7.html#4719"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-</DL>
-<DD><STRONG><TT>tagged_attach</TT></STRONG>
- : <A HREF="node7.html#4531"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_clear</TT></STRONG>
- : <A HREF="node7.html#4481"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_first</TT></STRONG>
- : <A HREF="node7.html#4483"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_i</TT></STRONG>
- : <A HREF="node7.html#4485"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#584"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>target</TT></STRONG>
- : <A HREF="node4.html#1448"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1461"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>tiling_placement_alt</TT></STRONG>
- : <A HREF="node7.html#9886"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>tl</TT></STRONG>
- : <A HREF="node7.html#7141"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>TR</TT></STRONG>
- : <A HREF="node7.html#4363"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG>transient</STRONG>
- : <A HREF="node4.html#1415"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1432"><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#1449"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1462"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>transparent</TT></STRONG>
- : <A HREF="node4.html#1450"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose</TT></STRONG>
- : <A HREF="node7.html#7126"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>transpose_at</TT></STRONG>
- : <A HREF="node7.html#7146"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose_chars</TT></STRONG>
- : <A HREF="node7.html#8297"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_words</TT></STRONG>
- : <A HREF="node7.html#8299"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>typeahead_clear</TT></STRONG>
- : <A HREF="node7.html#9144"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>unsplit_at</TT></STRONG>
- : <A HREF="node7.html#7168"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>unsqueeze</TT></STRONG>
- : <A HREF="node7.html#4487"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>untile</TT></STRONG>
- : <A HREF="node7.html#7117"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>update</TT></STRONG>
- : <A HREF="node7.html#9562"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1463"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>userpos</TT></STRONG>
- : <A HREF="node4.html#1459"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>version</TT></STRONG>
- : <A HREF="node7.html#4489"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG>
- : <A HREF="node7.html#4491"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#8229"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>warn_traced</TT></STRONG>
- : <A HREF="node7.html#4493"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WClientWin</TT></STRONG>
- : <A HREF="node3.html#420"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>get_ident</TT></STRONG> : <A HREF="node7.html#4533"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kill</TT></STRONG> : <A HREF="node7.html#4535"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>nudge</TT></STRONG> : <A HREF="node7.html#4537"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>quote_next</TT></STRONG> : <A HREF="node7.html#4539"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4541"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WComplProxy</TT></STRONG><DL>
-<DD><STRONG><TT>set_completions</TT></STRONG> : <A HREF="node7.html#8231"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WDock</TT></STRONG><DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#9345"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#9347"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#9349"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#9351"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WEdln</TT></STRONG>
- : <A HREF="node3.html#433"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>back</TT></STRONG> : <A HREF="node7.html#8234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>backspace</TT></STRONG> : <A HREF="node7.html#8236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bkill_word</TT></STRONG> : <A HREF="node7.html#8238"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bol</TT></STRONG> : <A HREF="node7.html#8240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bskip_word</TT></STRONG> : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>clear_mark</TT></STRONG> : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>complete</TT></STRONG> : <A HREF="node7.html#8246"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>contents</TT></STRONG> : <A HREF="node7.html#8248"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>context</TT></STRONG> : <A HREF="node7.html#8250"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#8252"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>cut</TT></STRONG> : <A HREF="node7.html#8254"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>delete</TT></STRONG> : <A HREF="node7.html#8256"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>eol</TT></STRONG> : <A HREF="node7.html#8258"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#8260"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>forward</TT></STRONG> : <A HREF="node7.html#8262"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_next</TT></STRONG> : <A HREF="node7.html#8264"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_prev</TT></STRONG> : <A HREF="node7.html#8266"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>insstr</TT></STRONG> : <A HREF="node7.html#8268"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_histcompl</TT></STRONG> : <A HREF="node7.html#8270"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_line</TT></STRONG> : <A HREF="node7.html#8272"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_bol</TT></STRONG> : <A HREF="node7.html#8274"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_eol</TT></STRONG> : <A HREF="node7.html#8276"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_word</TT></STRONG> : <A HREF="node7.html#8278"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mark</TT></STRONG> : <A HREF="node7.html#8280"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>next_completion</TT></STRONG> : <A HREF="node7.html#8282"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>paste</TT></STRONG> : <A HREF="node7.html#8284"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>point</TT></STRONG> : <A HREF="node7.html#8286"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>prev_completion</TT></STRONG> : <A HREF="node7.html#8288"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_context</TT></STRONG> : <A HREF="node7.html#8290"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mark</TT></STRONG> : <A HREF="node7.html#8292"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>skip_word</TT></STRONG> : <A HREF="node7.html#8294"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_chars</TT></STRONG> : <A HREF="node7.html#8296"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_words</TT></STRONG> : <A HREF="node7.html#8298"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WFrame</TT></STRONG>
- : <A HREF="node3.html#424"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>is_shaded</TT></STRONG> : <A HREF="node7.html#4544"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_horiz</TT></STRONG> : <A HREF="node7.html#4546"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_vert</TT></STRONG> : <A HREF="node7.html#4548"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mode</TT></STRONG> : <A HREF="node7.html#4550"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_switch_tab</TT></STRONG> : <A HREF="node7.html#4552"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_tabdrag</TT></STRONG> : <A HREF="node7.html#4554"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mode</TT></STRONG> : <A HREF="node7.html#4556"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_numbers</TT></STRONG> : <A HREF="node7.html#4558"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_shaded</TT></STRONG> : <A HREF="node7.html#4560"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WGroup</TT></STRONG>
+ : <A HREF="node4.html#1472"><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>
-<DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4563"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4565"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>bottom</TT></STRONG> : <A HREF="node7.html#4567"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>is_fullscreen</TT></STRONG> : <A HREF="node7.html#4569"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#4571"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_bottom</TT></STRONG> : <A HREF="node7.html#4573"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_fullscreen</TT></STRONG> : <A HREF="node7.html#4575"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
+<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#427"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WGroupWS</TT></STRONG>
- : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>attach_framed</TT></STRONG> : <A HREF="node7.html#4579"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>WInfoWin</TT></STRONG><DL>
-<DD><STRONG><TT>set_text</TT></STRONG> : <A HREF="node7.html#4582"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-</DL>
+ : <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#1283"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>WInput</TT></STRONG>
- : <A HREF="node3.html#432"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#8301"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>scrolldown</TT></STRONG> : <A HREF="node7.html#8303"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>scrollup</TT></STRONG> : <A HREF="node7.html#8305"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>WMenu</TT></STRONG><DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#9133"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#9135"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_next</TT></STRONG> : <A HREF="node7.html#9137"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_nth</TT></STRONG> : <A HREF="node7.html#9139"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_prev</TT></STRONG> : <A HREF="node7.html#9141"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>typeahead_clear</TT></STRONG> : <A HREF="node7.html#9143"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
+ : <A HREF="node4.html#1291"><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#434"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WMoveresMode</TT></STRONG><DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#4622"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#4624"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#4626"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>move</TT></STRONG> : <A HREF="node7.html#4628"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#4630"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#4632"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-</DL>
-<DD><STRONG><TT>WMPlex</TT></STRONG><DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4585"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4587"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>dec_index</TT></STRONG> : <A HREF="node7.html#4589"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_index</TT></STRONG> : <A HREF="node7.html#4591"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_stdisp</TT></STRONG> : <A HREF="node7.html#4593"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>inc_index</TT></STRONG> : <A HREF="node7.html#4595"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>is_hidden</TT></STRONG> : <A HREF="node7.html#4597"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#4599"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_count</TT></STRONG> : <A HREF="node7.html#4601"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_current</TT></STRONG> : <A HREF="node7.html#4603"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_i</TT></STRONG> : <A HREF="node7.html#4605"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_nth</TT></STRONG> : <A HREF="node7.html#4607"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_hidden</TT></STRONG> : <A HREF="node7.html#4609"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_index</TT></STRONG> : <A HREF="node7.html#4611"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_stdisp</TT></STRONG> : <A HREF="node7.html#4613"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_next</TT></STRONG> : <A HREF="node7.html#4615"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_nth</TT></STRONG> : <A HREF="node7.html#4617"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_prev</TT></STRONG> : <A HREF="node7.html#4619"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-</DL>
-<DD><STRONG><TT>WRegion</TT></STRONG>
- : <A HREF="node3.html#419"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>begin_kbresize</TT></STRONG> : <A HREF="node7.html#4635"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4637"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#4639"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>get_configuration</TT></STRONG> : <A HREF="node7.html#4641"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>goto</TT></STRONG> : <A HREF="node7.html#4643"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>groupleader_of</TT></STRONG> : <A HREF="node7.html#4645"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_active</TT></STRONG> : <A HREF="node7.html#4647"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_activity</TT></STRONG> : <A HREF="node7.html#4649"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_mapped</TT></STRONG> : <A HREF="node7.html#4651"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_tagged</TT></STRONG> : <A HREF="node7.html#4653"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>manager</TT></STRONG> : <A HREF="node7.html#4655"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>name</TT></STRONG> : <A HREF="node7.html#4657"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#4659"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rootwin_of</TT></STRONG> : <A HREF="node7.html#4661"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose</TT></STRONG> : <A HREF="node7.html#4663"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose_propagate</TT></STRONG> : <A HREF="node7.html#4665"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#4667"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqorder</TT></STRONG> : <A HREF="node7.html#4669"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>screen_of</TT></STRONG> : <A HREF="node7.html#4671"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_activity</TT></STRONG> : <A HREF="node7.html#4673"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name</TT></STRONG> : <A HREF="node7.html#4675"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name_exact</TT></STRONG> : <A HREF="node7.html#4677"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_tagged</TT></STRONG> : <A HREF="node7.html#4679"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>size_hints</TT></STRONG> : <A HREF="node7.html#4681"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-</DL>
-<DD><STRONG><TT>write_savefile</TT></STRONG>
- : <A HREF="node7.html#4391"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WRootWin</TT></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>
-<DL>
-<DD><STRONG><TT>current_scr</TT></STRONG> : <A HREF="node7.html#4684"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
-</DL>
-<DD><STRONG><TT>WScreen</TT></STRONG>
- : <A HREF="node3.html#423"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>id</TT></STRONG> : <A HREF="node7.html#4687"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-<DD><STRONG><TT>set_managed_offset</TT></STRONG> : <A HREF="node7.html#4689"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplit</TT></STRONG>
- : <A HREF="node3.html#430"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#7119"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#7121"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#7123"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>transpose</TT></STRONG> : <A HREF="node7.html#7125"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitInner</TT></STRONG><DL>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#7128"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitRegion</TT></STRONG><DL>
-<DD><STRONG><TT>reg</TT></STRONG> : <A HREF="node7.html#7131"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitSplit</TT></STRONG><DL>
-<DD><STRONG><TT>br</TT></STRONG> : <A HREF="node7.html#7134"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>dir</TT></STRONG> : <A HREF="node7.html#7136"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>flip</TT></STRONG> : <A HREF="node7.html#7138"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>tl</TT></STRONG> : <A HREF="node7.html#7140"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-</DL>
-<DD><STRONG><TT>WStatusBar</TT></STRONG><DL>
-<DD><STRONG><TT>get_template_table</TT></STRONG> : <A HREF="node7.html#9551"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_systray_extl</TT></STRONG> : <A HREF="node7.html#9553"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_systray</TT></STRONG> : <A HREF="node7.html#9555"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template</TT></STRONG> : <A HREF="node7.html#9557"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template_table</TT></STRONG> : <A HREF="node7.html#9559"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>update</TT></STRONG> : <A HREF="node7.html#9561"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WTiling</TT></STRONG>
- : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>farthest</TT></STRONG> : <A HREF="node7.html#7147"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>flip_at</TT></STRONG> : <A HREF="node7.html#7143"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#7149"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>nextto</TT></STRONG> : <A HREF="node7.html#7151"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>node_of</TT></STRONG> : <A HREF="node7.html#7153"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating</TT></STRONG> : <A HREF="node7.html#7157"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_at</TT></STRONG> : <A HREF="node7.html#7155"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split</TT></STRONG> : <A HREF="node7.html#7159"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_at</TT></STRONG> : <A HREF="node7.html#7161"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_top</TT></STRONG> : <A HREF="node7.html#7163"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_tree</TT></STRONG> : <A HREF="node7.html#7165"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose_at</TT></STRONG> : <A HREF="node7.html#7145"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>unsplit_at</TT></STRONG> : <A HREF="node7.html#7167"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>WWindow</TT></STRONG>
+<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>
-<DL>
-<DD><STRONG><TT>p_move</TT></STRONG> : <A HREF="node7.html#4692"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_resize</TT></STRONG> : <A HREF="node7.html#4694"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4696"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-</DL>
-<DD><STRONG><TT>x_change_property</TT></STRONG>
- : <A HREF="node7.html#4495"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_delete_property</TT></STRONG>
- : <A HREF="node7.html#4497"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_atom_name</TT></STRONG>
- : <A HREF="node7.html#4499"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_text_property</TT></STRONG>
- : <A HREF="node7.html#4501"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_window_property</TT></STRONG>
- : <A HREF="node7.html#4503"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_intern_atom</TT></STRONG>
- : <A HREF="node7.html#4505"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_set_text_property</TT></STRONG>
- : <A HREF="node7.html#4507"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG>
- : <A HREF="node7.html#4542"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4697"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</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#339"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#879"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#884"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG>xprop</STRONG>
- : <A HREF="node4.html#1411"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1428"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
 
 </DL>
 
index 0bbefa4b3e63212f530020a14e0e7cafbcd0ed53..a2daa50cb0b88f792015f783f4b54f3e8f3e3b0d 100644 (file)
@@ -7,8 +7,8 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
   Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
 <HTML>
 <HEAD>
-<TITLE>About this document ...</TITLE>
-<META NAME="description" CONTENT="About this document ...">
+<TITLE>Bibliography</TITLE>
+<META NAME="description" CONTENT="Bibliography">
 <META NAME="keywords" CONTENT="ionconf">
 <META NAME="resource-type" CONTENT="document">
 <META NAME="distribution" CONTENT="global">
@@ -19,58 +19,53 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <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-->
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png"> 
-<A NAME="tex2html452"
+<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="tex2html448"
+<A NAME="tex2html480"
   HREF="node11.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html454"
+<A NAME="tex2html488"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html456"
+<A NAME="tex2html490"
   HREF="node11.html">
 <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
 <BR>
-<B> Up:</B> <A NAME="tex2html453"
+<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="tex2html449"
+<B> Previous:</B> <A NAME="tex2html481"
   HREF="node11.html">Index</A>
- &nbsp; <B>  <A NAME="tex2html455"
+ &nbsp; <B>  <A NAME="tex2html489"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html457"
+ &nbsp; <B>  <A NAME="tex2html491"
   HREF="node11.html">Index</A></B> 
-<BR>
-<BR></DIV>
+<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>
 
-<H1><A NAME="SECTION001200000000000000000">
-About this document ...</A>
-</H1>
- <STRONG>Configuring and extending Ion3 with Lua</STRONG><P>
-This document was generated using the
-<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
-<P>
-Copyright &#169; 1993, 1994, 1995, 1996,
-Nikos Drakos, 
-Computer Based Learning Unit, University of Leeds.
-<BR>
-Copyright &#169; 1997, 1998, 1999,
-<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
-Mathematics Department, Macquarie University, Sydney.
-<P>
-The command line arguments were: <BR>
- <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
 <P>
-The translation was initiated by tuomov on 2007-03-18
 <BR><HR>
 
 </BODY>
diff --git a/doc/ionconf/node13.html b/doc/ionconf/node13.html
new file mode 100644 (file)
index 0000000..b65d8cd
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by:  Nikos Drakos, CBLU, University of Leeds
+* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="previous" HREF="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>
+ &nbsp; <B>  <A NAME="tex2html501"
+  HREF="node1.html">Contents</A></B> 
+ &nbsp; <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 &#169; 1993, 1994, 1995, 1996,
+Nikos Drakos, 
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright &#169; 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>, 
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
+<P>
+The translation was initiated by tuomov on 2007-05-06
+<BR><HR>
+
+</BODY>
+</HTML>
index daebdf487a17e78f6bd16082fd506ac2f0a24715..a824fd2627f2da5ef53dcaa85e53f30ce1aaf2c4 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html232"
+<A NAME="tex2html253"
   HREF="node3.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html226"
+<A NAME="tex2html247"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html220"
+<A NAME="tex2html241"
   HREF="node1.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html228"
+<A NAME="tex2html249"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html230"
+<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="tex2html233"
+<B> Next:</B> <A NAME="tex2html254"
   HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html227"
+<B> Up:</B> <A NAME="tex2html248"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html221"
+<B> Previous:</B> <A NAME="tex2html242"
   HREF="node1.html">Contents</A>
- &nbsp; <B>  <A NAME="tex2html229"
+ &nbsp; <B>  <A NAME="tex2html250"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html231"
+ &nbsp; <B>  <A NAME="tex2html252"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -63,99 +63,91 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 </H1>
 
 <P>
-This document is an ''advanced user'' manual for Ion, the X11 window manager,
-and version 3 specifically. It is an attempt attempt at documenting what is 
-in Ion's configuration files, how to configure Ion by simple modifications 
+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 is advised to first glance at the Lua manual at 
+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>
-</DIV>
-
-<P>
-and perhaps some tutorial pages at the lua-users wiki:
+  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>,
 
-<P>
-<DIV ALIGN="CENTER">
-<TT><A NAME="tex2html2"
-  HREF="http://lua-users.org/wiki/LuaTutorial">http://lua-users.org/wiki/LuaTutorial</A></TT>
 </DIV>
 
 <P>
-Back in this document, first in chapter <A HREF="node3.html#chap:prelim">2</A> some key
-concepts and relations are explained. These include the module system
-and Ion's object and class hierarchies. While it might not at first 
-occur that knowing such things would be necessary to <SPAN  CLASS="textit">configure</SPAN> 
-a program, this  material is essential because of the object-oriented 
-nature of most of Ion's scripting interface.
+although this should not be strictly necessary for basic modifications
+of configuration files for anyone with at least some familiarity with
+programming languages.
 
 <P>
-The new user, fed up with the default key bindings and eager to just
-quickly configure Ion to his liking may question the reasons for 
-exposing the ''heavy'' internal OO structure in the scripting and
-configuration interface. I'm not the one to  blame him for that. 
-Sure it would be faster to configure Ion to everyone's liking
-if a simpler binding configuration interface was provided. Such an
-interface would, however, also be far more limited and make writing
-extensions more complicated and the advantages from using a real 
-scripting language would be partly lost. One more advantage from
-a rich scripting and configuration interface is that it allows 
-implementing scripts to read alternate configuration file formats,
-ones that could be, for example, modified by external configuration tools. 
+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>
-In chapter <A HREF="node4.html#chap:config">3</A> the very basic Ion configuration know-how
-is provided. All the different configuration files and their locations
-are explained and instructions are given to allow the reader to
-configure bindings and so-called ''winprops''. Chapter <A HREF="node5.html#chap:gr">4</A>
-explains the notion of drawing engines and graphical styles and how to
-write new looks for Ion and more advanced aspects of Ion's scripting 
-interface are documented in chapter <A HREF="node6.html#chap:tricks">5</A> (a work in 
-progress).
+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 is an alphabetical
-listing of all these functions.
-
-<P>
+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="tex2html232"
+<A NAME="tex2html253"
   HREF="node3.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html226"
+<A NAME="tex2html247"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html220"
+<A NAME="tex2html241"
   HREF="node1.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html228"
+<A NAME="tex2html249"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html230"
+<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="tex2html233"
+<B> Next:</B> <A NAME="tex2html254"
   HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html227"
+<B> Up:</B> <A NAME="tex2html248"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html221"
+<B> Previous:</B> <A NAME="tex2html242"
   HREF="node1.html">Contents</A>
- &nbsp; <B>  <A NAME="tex2html229"
+ &nbsp; <B>  <A NAME="tex2html250"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html231"
+ &nbsp; <B>  <A NAME="tex2html252"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 63c26668fb6f41c2581e2abe1966454a50abadbd..cfe57dd50badd1e87a34654db1e5522ffc87fa0c 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html246"
+<A NAME="tex2html267"
   HREF="node4.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html240"
+<A NAME="tex2html261"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html234"
+<A NAME="tex2html255"
   HREF="node2.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html242"
+<A NAME="tex2html263"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html244"
+<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="tex2html247"
+<B> Next:</B> <A NAME="tex2html268"
   HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html241"
+<B> Up:</B> <A NAME="tex2html262"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html235"
+<B> Previous:</B> <A NAME="tex2html256"
   HREF="node2.html">1. Introduction</A>
- &nbsp; <B>  <A NAME="tex2html243"
+ &nbsp; <B>  <A NAME="tex2html264"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html245"
+ &nbsp; <B>  <A NAME="tex2html266"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,22 +61,22 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html248"
+<LI><A NAME="tex2html269"
   HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html249"
+<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="tex2html250"
+<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="tex2html251"
+<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="tex2html252"
+<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="tex2html253"
+<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="tex2html254"
+<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-->
@@ -140,7 +140,7 @@ should be loaded. Currently Ion provides the following modules:
     
 </DD>
 <DT><STRONG><SPAN  CLASS="textit">mod_dock</SPAN></STRONG></DT>
-<DD>Module for docking Window Maker dockapps.
+<DD>Module for docking Window Maker dock-apps.
       The dock can both float and be embedded as the statusbar.
     
 </DD>
@@ -149,12 +149,6 @@ should be loaded. Currently Ion provides the following modules:
       be toggled on/off everywhere. Think of the 'console' in some 
       first-person shooters.
     
-</DD>
-<DT><STRONG><SPAN  CLASS="textit">mod_mgmtmode</SPAN></STRONG></DT>
-<DD>Support module for implementing ''management
-      modes'' with a XOR-frame similar to move/resize mode around selected
-      region.
-    
 </DD>
 <DT><STRONG><SPAN  CLASS="textit">mod_sm</SPAN></STRONG></DT>
 <DD>Session management support module.
@@ -167,10 +161,10 @@ So-called drawing engines are also implemented as a modules,
 but they are not discussed here; see chapter <A HREF="node5.html#chap:gr">4</A>.
 
 <P>
-The stock configuration for the 'ion3' executable loads all of the modules
-mentioned above except <SPAN  CLASS="textit">mod_dock</SPAN> and filemod_mgmtmode.
-The stock configuration for the 'pwm3' executable (which differs from the 
-'ion3' executable in a few configuration details, such as Xinerama usage)
+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>
@@ -186,9 +180,9 @@ loads another set of modules.
 <P>
 While Ion does not not have a truly object-oriented design
 <A NAME="tex2html3"
-  HREF="#foot306"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>,
+  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
+naturally expressed as such ``objects''. Therefore Ion implements
 a rather primitive OO system for these screen objects and some
 other things. 
 
@@ -206,7 +200,7 @@ basic relations.
 <P>
 For simplicity we consider only the essential-for-basic-configuration
 Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> classes. 
-See Appendix <A HREF="node9.html#app:fullhierarchy">B</A> for the full class hierachy visible
+See Appendix <A HREF="node9.html#app:fullhierarchy">B</A> for the full class hierarchy visible
 to Lua side.
 
 <P>
@@ -227,7 +221,7 @@ implement.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="412"></A>
+<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> 
@@ -259,77 +253,76 @@ The core classes:
 <P>
 <DL>
 <DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="418"></A>
+<DD><A NAME="410"></A>
     Is the base of Ion's object system.
 
 <P>
 </DD>
 <DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="419"></A>
+<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''
+    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="420"></A> is a class for
+<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="421"></A> is the base class for all
+<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>WRootWin</STRONG></DT>
-<DD><A NAME="422"></A> is the class for
-    root windows<A NAME="336"></A> of X screens<A NAME="337"></A>.
-    Note that an ''X screen'' or root window is not necessarily a
-    single  physical screen<A NAME="338"></A> as a root window
-    may be split over multiple screens when hacks such as 
-    Xinerama<A NAME="339"></A> are used. (Actually there can be only 
-    one root window when Xinerama is used.)
-
 <P>
 </DD>
 <DT><STRONG>WMPlex</STRONG></DT>
-<DD>is a base class for all regions that''multiplex'' 
+<DD>is a base class for all regions that ``multiplex'' 
     other regions. This means that of the regions managed by the multiplexer,
-    only one can be displayed at a time. Classes that inhereit WMPlex
-    include screens and frames.
+    only one can be displayed at a time. 
 
 <P>
 </DD>
 <DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="423"></A> is the class for objects
-    corresponding to physical screens. Screens may share a root
-    window when the Xinerama extension is used as explained above.
+<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="424"></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).
+<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="425"></A> is the base class for groups.
+<DD><A NAME="417"></A> is the base class for groups.
     Particular types of groups are workspaces 
-    (WGroupWS<A NAME="426"></A>)
+    (WGroupWS<A NAME="418"></A>)
     and groups of client windows
-    (WGroupCW<A NAME="427"></A>).
+    (WGroupCW<A NAME="419"></A>).
 </DD>
 </DL>
 
@@ -339,12 +332,12 @@ Classes implemented by the <SPAN  CLASS="textit">mod_tiling</SPAN> module:
 <P>
 <DL>
 <DT><STRONG>WTiling</STRONG></DT>
-<DD><A NAME="429"></A> is the class for tilings
+<DD><A NAME="421"></A> is the class for tilings
     of frames.
   
 </DD>
 <DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="430"></A> (or, more specifically, classes
+<DD><A NAME="422"></A> (or, more specifically, classes
     that inherit it) encode the WTiling tree structure.
 </DD>
 </DL>
@@ -355,26 +348,26 @@ Classes implemented by the <SPAN  CLASS="textit">mod_query</SPAN> module:
 <P>
 <DL>
 <DT><STRONG>WInput</STRONG></DT>
-<DD><A NAME="432"></A> is a virtual base class for the
+<DD><A NAME="424"></A> is a virtual base class for the
     two classes below.
   
 </DD>
 <DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="433"></A> is the class for the ''queries'',
+<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
+    screens. Queries are the functional equivalent of ``mini buffers'' in
     many text editors.
   
 </DD>
 <DT><STRONG>WMessage</STRONG></DT>
-<DD><A NAME="434"></A> implements the boxes for 
+<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
+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.
@@ -391,7 +384,7 @@ binding callbacks in the move and resize mode.
 <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="375"></A> for an object is always a 
+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.
@@ -401,7 +394,7 @@ Figure <A HREF="#fig:parentship">2.2</A>.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="386"></A>
+<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>
@@ -422,7 +415,7 @@ Most common parent-child relations</CAPTION>
 
 <P>
 WRegions have very little control over their children as a parent.
-The manager<A NAME="390"></A> WRegion has much more control over its
+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
@@ -440,7 +433,7 @@ but all have a parent-a screen if not anything else.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="398"></A>
+<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>
@@ -504,7 +497,7 @@ consideration:
 <P>
 <BR><HR><H4>Footnotes</H4>
 <DL>
-<DT><A NAME="foot306">... design</A><A
+<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
 
@@ -512,31 +505,31 @@ consideration:
 </DL>
 <DIV CLASS="navigation"><HR>
 <!--Navigation Panel-->
-<A NAME="tex2html246"
+<A NAME="tex2html267"
   HREF="node4.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html240"
+<A NAME="tex2html261"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html234"
+<A NAME="tex2html255"
   HREF="node2.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html242"
+<A NAME="tex2html263"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html244"
+<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="tex2html247"
+<B> Next:</B> <A NAME="tex2html268"
   HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html241"
+<B> Up:</B> <A NAME="tex2html262"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html235"
+<B> Previous:</B> <A NAME="tex2html256"
   HREF="node2.html">1. Introduction</A>
- &nbsp; <B>  <A NAME="tex2html243"
+ &nbsp; <B>  <A NAME="tex2html264"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html245"
+ &nbsp; <B>  <A NAME="tex2html266"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 0aab7ccf5ef6e25be645d51f6ef38fe919a96ca4..4eaa00e82c046a51c49d5ab6d561f0cf85f094af 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html267"
+<A NAME="tex2html288"
   HREF="node5.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html261"
+<A NAME="tex2html282"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html255"
+<A NAME="tex2html276"
   HREF="node3.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html263"
+<A NAME="tex2html284"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html265"
+<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="tex2html268"
+<B> Next:</B> <A NAME="tex2html289"
   HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html262"
+<B> Up:</B> <A NAME="tex2html283"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
+<B> Previous:</B> <A NAME="tex2html277"
   HREF="node3.html">2. Preliminaries: Key concepts</A>
- &nbsp; <B>  <A NAME="tex2html264"
+ &nbsp; <B>  <A NAME="tex2html285"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html266"
+ &nbsp; <B>  <A NAME="tex2html287"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,60 +61,77 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html269"
+<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="tex2html270"
+<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="tex2html271"
+<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="tex2html272"
+<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="tex2html273"
+<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="tex2html274"
+<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="tex2html275"
+<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="tex2html276"
+<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="tex2html277"
+<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="tex2html278"
+<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="tex2html279"
+<LI><A NAME="tex2html300"
   HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
 <UL>
-<LI><A NAME="tex2html280"
+<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="tex2html281"
+<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="tex2html282"
+<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="tex2html283"
+<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="tex2html284"
+<LI><A NAME="tex2html305"
   HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
 <UL>
-<LI><A NAME="tex2html285"
+<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="tex2html286"
+<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="tex2html287"
+<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="tex2html288"
+<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="tex2html289"
+<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="tex2html290"
-  HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
-<LI><A NAME="tex2html291"
-  HREF="node4.html#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</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>
@@ -140,8 +157,8 @@ configuration file <SPAN  CLASS="textit">ion.lua</SPAN> is provided in section
 <A HREF="#sec:walkthrough">3.2</A>.
 How keys and mouse action are bound to functions is described in detail
 in <A HREF="#sec:bindings">3.3</A> and in section <A HREF="#sec:winprops">3.5</A> winprops are
-explained. For a reference on exported functions, see section
-<A HREF="node7.html#sec:exports">6</A>.
+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>
 
@@ -155,9 +172,9 @@ explained. For a reference on exported functions, see section
 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="590"></A> or
-<TT>ETCDIR</TT><A NAME="591"></A> in
-<SPAN  CLASS="textit">system.mk</SPAN><A NAME="592"></A> before compiling Ion.
+<TT>PREFIX</TT><A NAME="582"></A> or
+<TT>ETCDIR</TT><A NAME="583"></A> in
+<SPAN  CLASS="textit">system.mk</SPAN><A NAME="584"></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. 
@@ -177,7 +194,7 @@ for a file, if no extension or path component is given, compiled <SPAN  CLASS="t
 files are attempted before <SPAN  CLASS="textit">.lua</SPAN> files.
 
 <P>
-All the configuration files are named <SPAN  CLASS="textit">cfg_*.lua</SPAN> with the ''<SPAN  CLASS="textit">*</SPAN>''
+All the configuration files are named <SPAN  CLASS="textit">cfg_*.lua</SPAN> with the ``<SPAN  CLASS="textit">*</SPAN>''
 part varying. The configuration file for each module <SPAN  CLASS="textit">mod_modname</SPAN> is
 <SPAN  CLASS="textit">cfg_modname.lua</SPAN>, with <SPAN  CLASS="textit">modname</SPAN> varying by the module in
 question. The following table summarises these and other configuration
@@ -232,20 +249,22 @@ file. Some basic 'feel' settings are usually configured there and
 the necessary modules and other configuration files configuring some 
 more specific aspects of Ion are loaded there. In this section we
 take a walk through the stock <SPAN  CLASS="textit">cfg_ion.lua</SPAN>.
-Notice that most of the settings are commented-out (<TT>-</TT> is a 
+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 one in the file is to set
+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. for details on modifiers and key 
-binding setup in general see section <A HREF="#sec:bindings">3.3</A>.
+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:
@@ -283,7 +302,7 @@ 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 conveniency file for
+<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 
@@ -301,8 +320,8 @@ dopath("cfg_layouts")
 Most bindings and menus are defined in <SPAN  CLASS="textit">cfg_ioncore.lua</SPAN>.
 Details on making such definitions follow in sections <A HREF="#sec:bindings">3.3</A> 
 and <A HREF="#sec:menus">3.4</A>, respectively. 
-some kludges or ''winprops'' to make some applications behave better
-under Ion are colledted in <SPAN  CLASS="textit">cfg_kludges.lua</SPAN>; see section
+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>
@@ -348,7 +367,7 @@ 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
+<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
@@ -365,7 +384,7 @@ defbindings("WFrame", {
 
 <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
+``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 
@@ -373,31 +392,37 @@ custom handlers would be more complicated. In addition one may want to
 bind the same function to different key for different types of objects.
 Indeed, the workspace and frame tab switching functions are the same both
 classes being based on WMPlex, and in the stock configuration the 
-switch to <SPAN CLASS="MATH"></SPAN>:th workspaces is bound to <SPAN  CLASS="textbf">Mod1+n</SPAN> while the switch to 
-<SPAN CLASS="MATH"></SPAN>:th tab is bound to the sequence <SPAN  CLASS="textbf">Mod1+k n</SPAN>.
-
-<P>
-Currently known ''contexts'' include: 
-<TT>WScreen</TT>,
-<TT>WMPlex</TT>,
-<TT>WMPlex.toplevel</TT>,
-<TT>WFrame</TT>,
-<TT>WFrame.toplevel</TT>,
-<TT>WFrame.floating</TT>,
-<TT>WFrame.tiled</TT>,
-<TT>WFrame.transient</TT>,
-<TT>WMoveresMode</TT>,
-<TT>WGroup</TT>,
-<TT>WGroupCW</TT>,
-<TT>WGroupWS</TT>,
-<TT>WClientWin</TT>,
-<TT>WTiling</TT>, and
-<TT>WStatusBar</TT>.
+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>
+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>
@@ -422,9 +447,9 @@ gets to handle the action.
 
 <P>
 Unlike in Ion2, in Ion3 binding handlers are not normally passed as
-''anonymous functions'', although this is still possible. The preferred
-method now is to pass the code of the handler as a string. Two special 
-variables are available in this code. These are
+``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%">
@@ -445,13 +470,14 @@ variables are available in this code. These are
 </TR>
 <TR><TD ALIGN="LEFT"><TT>_chld</TT></TD>
 <TD ALIGN="LEFT">Object corresponding to the currently active child window of the
-       object referred to by <TT>_</TT>.</TD>
+       object referred to by <TT>_</TT>. This should seldom be needed.</TD>
 </TR>
 </TABLE>
 
 <P>
-For example, supposing '<TT>_</TT>' is a WFrame, the following
-handler should move the active window to the right, if possible:
+For example, supposing <TT>_</TT> (underscore) is a WFrame, the 
+following handler should move the active window to the right, if 
+possible:
 
 <P>
 <PRE>
@@ -466,7 +492,7 @@ handler should move the active window to the right, if possible:
 
 <P>
 To suppress error messages, each binding handler may also be accompanied
-by a ''guard'' expression that blocks the handler from being called when
+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>):
 
@@ -475,10 +501,10 @@ are supported (for both <TT>_sub</TT> and <TT>_chld</TT>):
 <TR><TD ALIGN="LEFT">Guard</TD>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>"_sub:non-nil"</TT></TD>
+<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>
+<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>
@@ -501,36 +527,39 @@ functions.
 Key presses:
 
 <UL>
-<LI><A HREF="#fn:kpress"><TT>kpress</TT></A><TT>(keyspec, handler [, guard])</TT>,
+<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="#fn:kpress_wait"><TT>kpress_wait</TT></A><TT>(keyspec, handler [, guard])</TT> and
+<LI><A HREF="node7.html#fn:ioncore.submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
 </LI>
-<LI><A HREF="#fn:submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
+<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="#fn:mclick"><TT>mclick</TT></A><TT>(buttonspec, handler [, guard])</TT>,
-</LI>
-<LI><A HREF="#fn:mdblclick"><TT>mdblclick</TT></A><TT>(buttonspec, handler [, guard])</TT>, 
-</LI>
-<LI><A HREF="#fn:mpress"><TT>mpress</TT></A><TT>(buttonspec, handler [, guard])</TT> and
-</LI>
-<LI><A HREF="#fn:mdrag"><TT>mdrag</TT></A><TT>(buttonspec, handler [, guard])</TT>.
+<LI><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="#fn:kpress_wait"><TT>kpress_wait</TT></A> is simply
-<A HREF="#fn:kpress"><TT>kpress</TT></A> with a flag set instructing Ioncore wait for all
-modifiers to be released before processing any further actions.
+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="#fn:submap"><TT>submap</TT></A>
-function is used to define submaps or ''prefix maps''. The second
-argument to this function is table listing the key press actions
-(<A HREF="#fn:kpress"><TT>kpress</TT></A>) in the submap
+<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
@@ -583,36 +612,35 @@ defbindings("WFrame", {
 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="#foot871"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
-<A NAME="872"></A>
+  HREF="#foot876"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
+<A NAME="877"></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
+The <TT>keyspec</TT> string may optionally have multiple ``modifier'' names
 followed by a plus sign (<TT>+</TT>) as a prefix. X defines the following
 modifiers:
-<BLOCKQUOTE>
+
+<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="873"></A>
-<A NAME="874"></A>
-<A NAME="875"></A>
-<A NAME="876"></A>
-<A NAME="877"></A>
-
-</BLOCKQUOTE>
+<A NAME="878"></A>
+<A NAME="879"></A>
+<A NAME="880"></A>
+<A NAME="881"></A>
+<A NAME="882"></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="878"></A> that are common on modern keyboards, such
+<SPAN  CLASS="textbf">Alt</SPAN><A NAME="883"></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
+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="879"></A>
+such a key. Use the program <SPAN  CLASS="textit">xmodmap</SPAN><A NAME="884"></A>
 to find out what exactly is bound where. 
 
 <P>
@@ -623,11 +651,14 @@ specified modifiers in nested regions. For this reason, Ion recognises
 default.
 
 <P>
-Ion ignores the <SPAN  CLASS="textbf">Lock</SPAN> modifier and any <SPAN  CLASS="textbf">ModN</SPAN> (<SPAN CLASS="MATH"></SPAN>)
-bound to <SPAN  CLASS="textbf">NumLock</SPAN><A NAME="880"></A> or
-<SPAN  CLASS="textbf">ScrollLock</SPAN><A NAME="881"></A>
+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="885"></A> or
+<SPAN  CLASS="textbf">ScrollLock</SPAN><A NAME="886"></A>
 by default because such<A NAME="tex2html8"
-  HREF="#foot850"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A> locking keys may otherwise
+  HREF="#foot855"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A> locking keys may otherwise
 cause confusion.
 
 <P>
@@ -640,12 +671,12 @@ cause confusion.
 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="882"></A>. Additionally the
+<SPAN  CLASS="textbf">Button5</SPAN><A NAME="887"></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).
+`<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 
@@ -667,7 +698,7 @@ defbindings("WFrame", {
 <P>
 The default binding configuration contains references to the variables
 <TT>META</TT> and <TT>ALTMETA</TT> instead of directly using the default
-values of <TT>"Mod1+"</TT> and <TT>""</TT> (nothing). As explained in
+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 
@@ -691,10 +722,10 @@ to it is available virtually everywhere.
 </H3>
 
 <P>
-<A NAME="1128"></A>
-<A NAME="1185"></A>
-<A NAME="1186"></A>
-<A NAME="1187"></A>
+<A NAME="1144"></A>
+<A NAME="1198"></A>
+<A NAME="1199"></A>
+<A NAME="1200"></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
@@ -743,24 +774,24 @@ just like the menus defined as above.
 <TR><TD ALIGN="LEFT">Menu name</TD>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>windowlist</TT></TD>
+<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>
+<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>
+<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>
+<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>
+<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>
+<TR><TD ALIGN="LEFT">`<TT>ctxmenu</TT>'</TD>
 <TD ALIGN="LEFT">Context menu for given object.</TD>
 </TR>
 </TABLE>
@@ -772,7 +803,7 @@ just like the menus defined as above.
 </H3>
 
 <P>
-The ''ctxmenu'' is a special menu that is assembled from a defined context
+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.
 
@@ -793,9 +824,9 @@ defctxmenu("WFrame", {
 </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>.
+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>
 
@@ -828,10 +859,7 @@ handlers (and elsewhere):
 <TR><TD ALIGN="LEFT"><A HREF="node7.html#fn:mod_menu.grabmenu"><TT>mod_menu.grabmenu</TT></A></TD>
 <TD ALIGN="LEFT">A special version of <A HREF="node7.html#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A> that grabs the keyboard
       and is scrolled with a given key until all modifiers have been released,
-      after which the selected entry is activated. This function is meant to 
-      be used for implementing, for example, Win***s-style <SPAN  CLASS="textbf">Alt-Tab</SPAN> 
-      handling.<A NAME="tex2html9"
-  HREF="#foot1188"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></TD>
+      after which the selected entry is activated.</TD>
 </TR>
 </TABLE>
 
@@ -859,7 +887,7 @@ defbindings("WFrame", {
 </H2>
 
 <P>
-The so-called ''winprops''<A NAME="1283"></A> can be used to change how
+The so-called ``winprops''<A NAME="1291"></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
@@ -877,7 +905,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1438"></A>
+<DD><A NAME="1451"></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
@@ -895,7 +923,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1439"></A>
+<DD><A NAME="1452"></A>
     Set this to open the window in a floating frame, when
     in a group.
 
@@ -910,7 +938,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1440"></A>
+<DD><A NAME="1453"></A>
     Should the window be initially in full screen mode?
 
 </DD>
@@ -924,7 +952,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1441"></A>
+<DD><A NAME="1454"></A>
     Should configure requests on the window be ignored?
     Only has effect on floating windows.
 
@@ -939,7 +967,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1442"></A>
+<DD><A NAME="1455"></A>
     Ignore extended WM hints <TT>_NET_ACTIVE_WINDOW</TT> request.
 
 </DD>
@@ -953,7 +981,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1443"></A>
+<DD><A NAME="1456"></A>
     Should a newly created client window always be made
     active, even if the allocated frame isn't.
 
@@ -968,7 +996,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1444"></A>
+<DD><A NAME="1457"></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
@@ -987,7 +1015,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1445"></A>
+<DD><A NAME="1458"></A>
     Discard this winprop after first use.
 
 </DD>
@@ -1001,11 +1029,11 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1446"></A>
+<DD><A NAME="1459"></A>
     Put the window in the statusbar, in the named tray component,
-    (The default tray component is called simply <TT>"systray"</TT>
+    (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>.
+    prefixed by `<TT>systray_</TT>'.
 
 </DD>
 </DL>
@@ -1018,7 +1046,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1447"></A>
+<DD><A NAME="1460"></A>
     Should a newly mapped client window be switched to within
     its frame.
 
@@ -1033,7 +1061,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1448"></A>
+<DD><A NAME="1461"></A>
     The name of an object (workspace, frame) that should manage 
     windows of this type. See also <TT>new_group</TT>.
 
@@ -1048,11 +1076,11 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1449"></A>
-    <TT>"normal"</TT>: No change in behaviour. <TT>"current"</TT>:
+<DD><A NAME="1462"></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 
+    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.
 
@@ -1067,7 +1095,7 @@ usual method of identifying windows, and how to obtain this information.
       
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1450"></A>
+<DD><A NAME="1463"></A>
     Should frames be made transparent when this window is selected? 
 <BR>  
   
@@ -1082,15 +1110,15 @@ usual method of identifying windows, and how to obtain this information.
 
 <P>
 Additionally, the winprops 
-<TT>max_size</TT><A NAME="1451"></A>,
-<TT>min_size</TT><A NAME="1452"></A>,
-<TT>aspect</TT><A NAME="1453"></A>,
-<TT>resizeinc</TT><A NAME="1454"></A>,
+<TT>max_size</TT><A NAME="1464"></A>,
+<TT>min_size</TT><A NAME="1465"></A>,
+<TT>aspect</TT><A NAME="1466"></A>,
+<TT>resizeinc</TT><A NAME="1467"></A>,
 and
-<TT>ignore_max_size</TT><A NAME="1455"></A>,
-<TT>ignore_min_size</TT><A NAME="1456"></A>,
-<TT>ignore_aspect</TT><A NAME="1457"></A>,
-<TT>ignore_resizeinc</TT><A NAME="1458"></A>,
+<TT>ignore_max_size</TT><A NAME="1468"></A>,
+<TT>ignore_min_size</TT><A NAME="1469"></A>,
+<TT>ignore_aspect</TT><A NAME="1470"></A>,
+<TT>ignore_resizeinc</TT><A NAME="1471"></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
@@ -1098,7 +1126,7 @@ winprop is a boolean.
 
 <P>
 Finally, the boolean
-<TT>userpos</TT><A NAME="1459"></A> option may be used to
+<TT>userpos</TT><A NAME="1472"></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
@@ -1113,15 +1141,22 @@ only for floating windows.
 </H3>
 
 <P>
-The identification information in the winprop specification is usually the
-<TT>class</TT><A NAME="1460"></A>,
-<TT>role</TT><A NAME="1461"></A>,
-<TT>instance</TT><A NAME="1462"></A> and
-<TT>name</TT>
-of the window. The <TT>name</TT> field is a Lua-style regular expression
-matched against the window's title and the rest are strings that must
-exactly match the corresponding window information. It is not necessary
-to specify all of these fields.
+The identification information supported are
+<TT>class</TT><A NAME="1473"></A>,
+<TT>role</TT><A NAME="1474"></A>,
+<TT>instance</TT><A NAME="1475"></A>,
+<TT>name</TT><A NAME="1476"></A>,
+<TT>is_transient</TT><A NAME="1477"></A>, and
+<TT>is_dockapp</TT><A NAME="1478"></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
@@ -1138,7 +1173,7 @@ fields) is tried.
 <TR><TD ALIGN="LEFT"><TT>class</TT></TD>
 <TD ALIGN="LEFT"><TT>role</TT></TD>
 <TD ALIGN="LEFT"><TT>instance</TT></TD>
-<TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">other</TD>
 </TR>
 <TR><TD ALIGN="LEFT">E</TD>
 <TD ALIGN="LEFT">E</TD>
@@ -1184,8 +1219,9 @@ fields) is tried.
 </DIV>
 
 <P>
-If there are multiple winprops with other identification information 
-the same but different <TT>name</TT>, the longest match is chosen.
+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>
 
@@ -1199,7 +1235,7 @@ 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="1411"></A> 
+<A NAME="1428"></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
@@ -1208,21 +1244,24 @@ windows have this property - use the command <TT>xprop WM_ROLE</TT>.
 This method, however, will not work on transients. 
 
 <P>
-<A NAME="1415"></A>
-So-called ''transient windows'' are usually short-lived dialogs (although
+<A NAME="1432"></A>
+So-called ``transient windows'' are usually short-lived dialogs (although
 some programs abuse this property) that have a parent window that they are
-''transient for''. On tiled workspaces Ion displays these windows 
-simulatenously with the parent window at the bottom of the same frame.
+``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="tex2html11"
-  HREF="#foot1464"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A>
+for that window.<A NAME="tex2html9"
+  HREF="#foot1480"><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 programs's 
-windows, for example.
+``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>
 
@@ -1251,36 +1290,7 @@ defwinprop{
 <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> Fixing a Mozilla Firebird transient</A>
-</H4>
-
-<P>
-Mozilla Firebird (0.7) incorrectly does not set the <TT>WM_TRANSIENT_FOR</TT> 
-property for the dialog that is used to ask the action to take for a file.
-It, however, sets the the property point to the main window for the save
-dialog. This can be annoying and confusing, as the first dialog is not 
-closed before the second is displayed.
-
-<P>
-We'd like the first dialog to be transient to the main window. The closest
-we can get to that is to consider it transient to the current window (if
-there's one). Unfortunately Firebird does not set any meaningful classes, 
-instances or roles for the windows, so we'll have to rely on an ugly title
-match.
-
-<P>
-<PRE>
-defwinprop{
-    class = "MozillaFirebird-bin",
-    name = "Opening .*",
-    transient_mode = "current",
-}
-</PRE>
-
-<P>
-
-<H4><A NAME="SECTION00454300000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+<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>
@@ -1297,7 +1307,7 @@ defwinprop{
 
 <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
+`<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>
@@ -1309,35 +1319,192 @@ mod_query.query_renameframe(_)
 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 
+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:% %&gt;load || mail:% %&gt;mail_new/%&gt;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>&gt;</TT>'
+for right, `<TT>&lt;</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="foot871">...keysymdef.h</A><A
+<DT><A NAME="foot876">...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="foot850">... such</A><A
+<DT><A NAME="foot855">... 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="foot1188">... handling.</A><A
+<DT><A NAME="foot1480">... window.</A><A
  HREF="node4.html#tex2html9"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></DT>
-<DD>See the <SPAN  CLASS="textit">wcirculate.lua</SPAN> script in the Ion 
-        scripts repository <TT><A NAME="tex2html10"
-  HREF="http://iki.fi/tuomov/repos/ion-scripts-3/">http://iki.fi/tuomov/repos/ion-scripts-3/</A></TT>.
-
-</DD>
-<DT><A NAME="foot1464">... window.</A><A
- HREF="node4.html#tex2html11"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A></DT>
 <DD>There's a patch to <TT>xprop</TT> to
 fix this, but nothing seems to be happening with respect to including it in 
 XFree86.
@@ -1346,31 +1513,31 @@ XFree86.
 </DL>
 <DIV CLASS="navigation"><HR>
 <!--Navigation Panel-->
-<A NAME="tex2html267"
+<A NAME="tex2html288"
   HREF="node5.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html261"
+<A NAME="tex2html282"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html255"
+<A NAME="tex2html276"
   HREF="node3.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html263"
+<A NAME="tex2html284"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html265"
+<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="tex2html268"
+<B> Next:</B> <A NAME="tex2html289"
   HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html262"
+<B> Up:</B> <A NAME="tex2html283"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
+<B> Previous:</B> <A NAME="tex2html277"
   HREF="node3.html">2. Preliminaries: Key concepts</A>
- &nbsp; <B>  <A NAME="tex2html264"
+ &nbsp; <B>  <A NAME="tex2html285"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html266"
+ &nbsp; <B>  <A NAME="tex2html287"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index de5ae5ec4bc23893e205c9a005e7cc940289f971..b5247f6f90c079d89604bba7855dce15a80cdf5d 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html304"
+<A NAME="tex2html331"
   HREF="node6.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html298"
+<A NAME="tex2html325"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html292"
+<A NAME="tex2html319"
   HREF="node4.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html300"
+<A NAME="tex2html327"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html302"
+<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="tex2html305"
+<B> Next:</B> <A NAME="tex2html332"
   HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html299"
+<B> Up:</B> <A NAME="tex2html326"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html293"
+<B> Previous:</B> <A NAME="tex2html320"
   HREF="node4.html">3. Basic configuration</A>
- &nbsp; <B>  <A NAME="tex2html301"
+ &nbsp; <B>  <A NAME="tex2html328"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html303"
+ &nbsp; <B>  <A NAME="tex2html330"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,51 +61,53 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html306"
+<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="tex2html307"
+<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="tex2html308"
+<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="tex2html309"
+<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="tex2html310"
+<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="tex2html311"
+<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="tex2html312"
+<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="tex2html313"
+<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="tex2html314"
+<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="tex2html315"
+<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="tex2html316"
+<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="tex2html317"
+<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="tex2html318"
+<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="tex2html319"
+<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="tex2html320"
+<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="tex2html321"
-  HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html322"
-  HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<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>
@@ -120,12 +122,13 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 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.
+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="1708"></A><A NAME="1709"></A>
+<A NAME="sec:engines"></A><A NAME="1887"></A><A NAME="1888"></A>
 <BR>
 <SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles
 </H2>
@@ -133,7 +136,7 @@ for the default drawing engine.
 <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''
+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 
@@ -150,17 +153,17 @@ element1-element2-...-elementn
 </PRE>
 
 <P>
-An example of such a style specification is <TT>tab-frame</TT>;
+An example of such a style specification is `<TT>tab-frame</TT>';
 see the table in subsection <A HREF="#sec:styles">4.1.1</A> for more styles.
 
 <P>
 When an object asks for a brush of certain style, the selected
 drawing engine will attempt to find the closest match to this
 specification. The styles/brushes defined by the drawing engines 
-may have asterisks (<code>*</code>) as some of the elements indicating
+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
+for style `<TT>foo-bar-baz</TT>' be queried, then the following
 brushes are in order of preference:
 
 <P>
@@ -177,7 +180,7 @@ specified, also in the form
 <PRE>
 attr1-attr2-...-attrn
 </PRE>
-These extra attributes are called <SPAN  CLASS="textit">substyles</SPAN><A NAME="1720"></A>
+These extra attributes are called <SPAN  CLASS="textit">substyles</SPAN><A NAME="1900"></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 
@@ -206,27 +209,27 @@ tag and drag states.)
 <TR><TD ALIGN="LEFT">Style name</TD>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>frame</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame</TT>'</TD>
 <TD ALIGN="LEFT">Style for frames. 
-       Substyle attributes: <TT>active</TT>/<TT>inactive</TT> 
+       Substyle attributes: `<TT>active</TT>'/`<TT>inactive</TT>' 
        (mutually exclusive) and
-       <TT>quasiactive</TT>/<TT>not_quasiactive</TT>
+       `<TT>quasiactive</TT>'/`<TT>not_quasiactive</TT>'
        A frame is ``quasiactive'' when an active region
-       has a backlink to it, such as a detached window.</TD>
+       has a back-link to it, such as a detached window.</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>frame-tiled</TT></TD>
+<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>
+        Substyle attributes as for `<TT>frame</TT>'.</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>frame-tiled-alt</TT></TD>
+<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>
+<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>
+<TR><TD ALIGN="LEFT">`<TT>frame-transient</TT>'</TD>
 <TD ALIGN="LEFT">A more specific style for frames
         containing transient windows.</TD>
 </TR>
@@ -243,39 +246,39 @@ tag and drag states.)
 <TR><TD ALIGN="LEFT">Style name</TD>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>tab</TT></TD>
+<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>
+       `<TT>active</TT>'/`<TT>inactive</TT>' and
+       `<TT>selected</TT>'/`<TT>unselected</TT>'</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame</TT></TD>
+<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> and
-       <TT>quasiactive</TT>/<TT>not_quasiactive</TT>.</TD>
+       `<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>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled</TT>',</TD>
 <TD ALIGN="LEFT">&nbsp;</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-tiled-alt</TT>,</TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled-alt</TT>',</TD>
 <TD ALIGN="LEFT">&nbsp;</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-floating</TT>,</TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-floating</TT>',</TD>
 <TD ALIGN="LEFT">&nbsp;</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-transient</TT></TD>
+<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>
+<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>
+        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>
+<TR><TD ALIGN="LEFT">`<TT>tab-menuentry-bigmenu</TT>'</TD>
 <TD ALIGN="LEFT">An alternate style for entries in WMenus.</TD>
 </TR>
 </TABLE>
@@ -291,30 +294,39 @@ tag and drag states.)
 <TR><TD ALIGN="LEFT">Style name</TD>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>input</TT></TD>
+<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>
+<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>
+       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>
+<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>
+<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>
+<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>
+<TR><TD ALIGN="LEFT">`<TT>moveres_display</TT>'</TD>
 <TD ALIGN="LEFT">The box displaying position/size when
        moving or resizing frames.</TD>
 </TR>
-<TR><TD ALIGN="LEFT"><TT>dock</TT></TD>
+<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>
@@ -354,13 +366,13 @@ end
 <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
+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>
+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>.
+and returns `<TT>true</TT>'.
 
 <P>
 Before defining new styles it may be a good idea to clear old
@@ -412,7 +424,7 @@ border elements and styles referred to there are explained in Figure
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="1817"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="2003"></A>
 <TABLE>
 <CAPTION ALIGN="BOTTOM"><STRONG>Figure 4.1:</STRONG>
 Sketch of different border styles and elements</CAPTION>
@@ -450,10 +462,10 @@ in <SPAN  CLASS="textit">/usr/X11R6/lib/X11/rgb.txt</SPAN> (exact path varying).
 <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>
+<TD ALIGN="LEFT">Colour for the ``highlight'' part of a border.</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>shadow_colour</TT></TD>
-<TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD>
+<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>
@@ -463,7 +475,7 @@ in <SPAN  CLASS="textit">/usr/X11R6/lib/X11/rgb.txt</SPAN> (exact path varying).
        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 
+<TD ALIGN="LEFT">Colour for the ``padding'' part of a border border. Set to 
        <TT>background_colour</TT> if unset.</TD>
 </TR>
 </TABLE>
@@ -485,14 +497,14 @@ indicating a number of pixels.
 </TR>
 <TR><TD ALIGN="LEFT"><TT>border_style</TT></TD>
 <TD ALIGN="LEFT">A string indicating the style of border; one of
-                    elevated/inlaid/ridge/groove as seen in the
-                    above sketch.</TD>
+                    `<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: all/tb/lr for all, top and bottom, and
-                     left and right. To control between left/right
-                     and top/bottom, use the pixel options below.</TD>
+                     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>
@@ -525,7 +537,7 @@ indicating a number of pixels.
 </TR>
 <TR><TD ALIGN="LEFT"><TT>text_align</TT></TD>
 <TD ALIGN="LEFT">How text is to be aligned in text boxes/tabs; one of
-                  the strings left/right/center.</TD>
+                  the strings `<TT>left</TT>'/`<TT>right</TT>'/`<TT>center</TT>'.</TD>
 </TR>
 </TABLE>
 
@@ -558,13 +570,13 @@ indicating a number of pixels.
 
 <P>
 As discussed in previous sections, styles may have substyles to e.g.
-indicate different states of the object being drawn. The ''de'' engine
+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>
+`<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.
+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
@@ -629,21 +641,39 @@ de.defstyle("tab-frame", {
 
 <P>
 
-<H2><A NAME="SECTION00530000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+<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>
-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.
+
+<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.
 
-<H3><A NAME="SECTION00531000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+<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>
@@ -651,8 +681,8 @@ engine configuration file.
 </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
+        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>
@@ -663,14 +693,17 @@ engine configuration file.
 <TR><TD ALIGN="LEFT"><TT>floatframe_bar_max_w_q</TT></TD>
 <TD ALIGN="LEFT">Maximum tab-bar width quotient of
        frame width for the shaped styles. A number in the 
-       interval <SPAN CLASS="MATH"></SPAN>.</TD>
+       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="SECTION00532000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<H3><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>
@@ -680,12 +713,12 @@ engine configuration file.
 </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>
+                       `<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>,
+<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>
@@ -699,31 +732,31 @@ style configuration files.
 
 <DIV CLASS="navigation"><HR>
 <!--Navigation Panel-->
-<A NAME="tex2html304"
+<A NAME="tex2html331"
   HREF="node6.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html298"
+<A NAME="tex2html325"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html292"
+<A NAME="tex2html319"
   HREF="node4.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html300"
+<A NAME="tex2html327"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html302"
+<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="tex2html305"
+<B> Next:</B> <A NAME="tex2html332"
   HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html299"
+<B> Up:</B> <A NAME="tex2html326"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html293"
+<B> Previous:</B> <A NAME="tex2html320"
   HREF="node4.html">3. Basic configuration</A>
- &nbsp; <B>  <A NAME="tex2html301"
+ &nbsp; <B>  <A NAME="tex2html328"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html303"
+ &nbsp; <B>  <A NAME="tex2html330"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 17e8f34d6980950fb3a4ff4a8d13ce17a1511dd1..88aa9be89661e5a3719240a63cd598f2d4affce6 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html335"
+<A NAME="tex2html363"
   HREF="node7.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html329"
+<A NAME="tex2html357"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html323"
+<A NAME="tex2html351"
   HREF="node5.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html331"
+<A NAME="tex2html359"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html333"
+<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="tex2html336"
+<B> Next:</B> <A NAME="tex2html364"
   HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html330"
+<B> Up:</B> <A NAME="tex2html358"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html324"
+<B> Previous:</B> <A NAME="tex2html352"
   HREF="node5.html">4. Graphical styles</A>
- &nbsp; <B>  <A NAME="tex2html332"
+ &nbsp; <B>  <A NAME="tex2html360"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html334"
+ &nbsp; <B>  <A NAME="tex2html362"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,20 +61,20 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html337"
+<LI><A NAME="tex2html365"
   HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html338"
+<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="tex2html339"
+<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="tex2html340"
+<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="tex2html341"
+<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="tex2html342"
+<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-->
@@ -89,7 +89,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 This chapter documents some additional features of the Ion configuration
 and scripting interface that can be used for more advanced scripting than
-the basic configuration exlained in chapter <A HREF="node4.html#chap:config">3</A>.
+the basic configuration explained in chapter <A HREF="node4.html#chap:config">3</A>.
 
 <P>
 
@@ -101,16 +101,16 @@ the basic configuration exlained in chapter <A HREF="node4.html#chap:config">3</
 
 <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
+There are two types of them; normal and ``alternative'' hooks. Normal
 hooks do not return anything, but alt-hooks should return a boolean
-indicating whether it handled its assigned task succesfully. In the case
+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="#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A> and then calling <A HREF="#fn:WHook.add"><TT>WHook.add</TT></A>
-on the (succesfull) result with the handler as parameter. Similarly
-handlers are unregistered with <A HREF="#fn:WHook.remove"><TT>WHook.remove</TT></A>. For example:
+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>
@@ -125,7 +125,7 @@ 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 
+Note that many of the hooks are called in ``protected mode'' and can not 
 use any functions that modify Ion's internal state. TODO: More detailed 
 documentation when this is final.
 
@@ -142,7 +142,7 @@ documentation when this is final.
 </H3>
 
 <P>
-All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+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
@@ -219,8 +219,10 @@ and <A HREF="node7.html#fn:ioncore.x_get_text_property"><TT>ioncore.x_get_text_p
 
 <P>
 
-<H2><A NAME="SECTION00640000000000000000">
-<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+<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>
@@ -228,11 +230,11 @@ 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 
+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>'.
+`<TT>foo</TT>'.
 
 <P>
 To provide this value, the script should simply call <TT>statusd.inform</TT>
@@ -241,11 +243,11 @@ 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.
+stock styles support the `<TT>normal</TT>', `<TT>important</TT>' and 
+`<TT>critical</TT>' hints.
 
 <P>
-In our example of the 'foo monitor', at script init we might broadcast
+In our example of the 'foo monitor', at script initialisation we might broadcast
 the template as follows:
 
 <P>
@@ -319,31 +321,31 @@ local settings=table.join(statusd.get_config("foo"), defaults)
 
 <DIV CLASS="navigation"><HR>
 <!--Navigation Panel-->
-<A NAME="tex2html335"
+<A NAME="tex2html363"
   HREF="node7.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html329"
+<A NAME="tex2html357"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html323"
+<A NAME="tex2html351"
   HREF="node5.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html331"
+<A NAME="tex2html359"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html333"
+<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="tex2html336"
+<B> Next:</B> <A NAME="tex2html364"
   HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html330"
+<B> Up:</B> <A NAME="tex2html358"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html324"
+<B> Previous:</B> <A NAME="tex2html352"
   HREF="node5.html">4. Graphical styles</A>
- &nbsp; <B>  <A NAME="tex2html332"
+ &nbsp; <B>  <A NAME="tex2html360"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html334"
+ &nbsp; <B>  <A NAME="tex2html362"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 9b8b3e3d8db7d7e16466be2f186f92927422364a..11dd84ac7f6beabb8c1ac86c3a22afa950aa48a0 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html355"
+<A NAME="tex2html383"
   HREF="node8.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html349"
+<A NAME="tex2html377"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html343"
+<A NAME="tex2html371"
   HREF="node6.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html351"
+<A NAME="tex2html379"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html353"
+<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="tex2html356"
+<B> Next:</B> <A NAME="tex2html384"
   HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html350"
+<B> Up:</B> <A NAME="tex2html378"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html344"
+<B> Previous:</B> <A NAME="tex2html372"
   HREF="node6.html">5. Scripting</A>
- &nbsp; <B>  <A NAME="tex2html352"
+ &nbsp; <B>  <A NAME="tex2html380"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html354"
+ &nbsp; <B>  <A NAME="tex2html382"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,97 +61,106 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html357"
+<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="tex2html358"
+<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="tex2html359"
+<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="tex2html360"
+<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="tex2html361"
+<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="tex2html362"
+<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="tex2html363"
-  HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
-<LI><A NAME="tex2html364"
-  HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
-<LI><A NAME="tex2html365"
-  HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
-<LI><A NAME="tex2html366"
-  HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
-<LI><A NAME="tex2html367"
-  HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
-<LI><A NAME="tex2html368"
-  HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
-<LI><A NAME="tex2html369"
-  HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
-<LI><A NAME="tex2html370"
-  HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
-<LI><A NAME="tex2html371"
-  HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
-<LI><A NAME="tex2html372"
-  HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
-<LI><A NAME="tex2html373"
-  HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table 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="tex2html374"
+<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="tex2html375"
+<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="tex2html376"
+<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="tex2html377"
+<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="tex2html378"
+<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="tex2html379"
+<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="tex2html380"
+<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="tex2html381"
+<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="tex2html382"
+<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="tex2html383"
+<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="tex2html384"
+<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="tex2html385"
+<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="tex2html386"
+<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="tex2html387"
+<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="tex2html388"
+<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="tex2html389"
+<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="tex2html390"
+<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="tex2html391"
+<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="tex2html392"
+<LI><A NAME="tex2html422"
   HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
-</UL>
+<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>
 
@@ -170,9 +179,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 </H2>
 
   <DL>
-<DD><A NAME="4362"></A>
-<A NAME="4363"></A>
-<A NAME="fn:ioncore.TR"></A>  
+<DD><A NAME="fn:ioncore.TR"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.TR(s, ...)</TT>
@@ -187,9 +194,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 
   <DL>
-<DD><A NAME="4364"></A>
-<A NAME="4365"></A>
-<A NAME="fn:ioncore.bdoc"></A>  
+<DD><A NAME="fn:ioncore.bdoc"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.bdoc(text)</TT>
@@ -205,9 +210,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 
   <DL>
-<DD><A NAME="4366"></A>
-<A NAME="4367"></A>
-<A NAME="fn:ioncore.chdir_for"></A>  
+<DD><A NAME="fn:ioncore.chdir_for"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.chdir_for(reg, dir)</TT>
@@ -222,9 +225,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 
   <DL>
-<DD><A NAME="4368"></A>
-<A NAME="4369"></A>
-<A NAME="fn:ioncore.compile_cmd"></A>  
+<DD><A NAME="fn:ioncore.compile_cmd"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.compile_cmd(cmd, guard)</TT>
@@ -249,9 +250,22 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4370"></A>
-<A NAME="4371"></A>
-<A NAME="fn:ioncore.create_ws"></A>  
+<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>
@@ -268,9 +282,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4372"></A>
-<A NAME="4373"></A>
-<A NAME="fn:ioncore.defbindings"></A>  
+<DD><A NAME="fn:ioncore.defbindings"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.defbindings(context, bindings)</TT>
@@ -287,9 +299,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4374"></A>
-<A NAME="4375"></A>
-<A NAME="fn:ioncore.defctxmenu"></A>  
+<DD><A NAME="fn:ioncore.defctxmenu"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.defctxmenu(ctx, ...)</TT>
@@ -305,9 +315,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4376"></A>
-<A NAME="4377"></A>
-<A NAME="fn:ioncore.deflayout"></A>  
+<DD><A NAME="fn:ioncore.deflayout"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.deflayout(name, tab)</TT>
@@ -324,9 +332,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4378"></A>
-<A NAME="4379"></A>
-<A NAME="fn:ioncore.defmenu"></A>  
+<DD><A NAME="fn:ioncore.defmenu"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.defmenu(name, tab)</TT>
@@ -343,9 +349,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4380"></A>
-<A NAME="4381"></A>
-<A NAME="fn:ioncore.defwinprop"></A>  
+<DD><A NAME="fn:ioncore.defwinprop"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.defwinprop(list)</TT>
@@ -360,9 +364,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4382"></A>
-<A NAME="4383"></A>
-<A NAME="fn:ioncore.exec_on"></A>  
+<DD><A NAME="fn:ioncore.exec_on"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.exec_on(reg, cmd, merr_internal)</TT>
@@ -383,9 +385,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4384"></A>
-<A NAME="4385"></A>
-<A NAME="fn:ioncore.read_savefile"></A>  
+<DD><A NAME="fn:ioncore.read_savefile"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table ioncore.read_savefile(string basename)</TT>
@@ -400,9 +400,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4386"></A>
-<A NAME="4387"></A>
-<A NAME="fn:ioncore.get_savefile"></A>  
+<DD><A NAME="fn:ioncore.get_savefile"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string ioncore.get_savefile(string basename)</TT>
@@ -418,9 +416,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4388"></A>
-<A NAME="4389"></A>
-<A NAME="fn:ioncore.lookup_script"></A>  
+<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>
@@ -436,9 +432,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4390"></A>
-<A NAME="4391"></A>
-<A NAME="fn:ioncore.write_savefile"></A>  
+<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>
@@ -454,9 +448,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4392"></A>
-<A NAME="4393"></A>
-<A NAME="fn:ioncore.find_manager"></A>  
+<DD><A NAME="fn:ioncore.find_manager"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.find_manager(obj, t)</TT>
@@ -472,9 +464,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4394"></A>
-<A NAME="4395"></A>
-<A NAME="fn:ioncore.get_dir_for"></A>  
+<DD><A NAME="fn:ioncore.get_dir_for"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.get_dir_for(reg)</TT>
@@ -489,9 +479,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4396"></A>
-<A NAME="4397"></A>
-<A NAME="fn:ioncore.getbindings"></A>  
+<DD><A NAME="fn:ioncore.getbindings"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.getbindings(maybe_context)</TT>
@@ -506,9 +494,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4398"></A>
-<A NAME="4399"></A>
-<A NAME="fn:ioncore.getctxmenu"></A>  
+<DD><A NAME="fn:ioncore.getctxmenu"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.getctxmenu(name)</TT>
@@ -523,9 +509,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4400"></A>
-<A NAME="4401"></A>
-<A NAME="fn:ioncore.getlayout"></A>  
+<DD><A NAME="fn:ioncore.getlayout"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.getlayout(name, all)</TT>
@@ -541,9 +525,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4402"></A>
-<A NAME="4403"></A>
-<A NAME="fn:ioncore.getmenu"></A>  
+<DD><A NAME="fn:ioncore.getmenu"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.getmenu(name)</TT>
@@ -558,9 +540,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4404"></A>
-<A NAME="4405"></A>
-<A NAME="fn:ioncore.getwinprop"></A>  
+<DD><A NAME="fn:ioncore.getwinprop"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.getwinprop(cwin)</TT>
@@ -575,9 +555,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4406"></A>
-<A NAME="4407"></A>
-<A NAME="fn:ioncore.aboutmsg"></A>  
+<DD><A NAME="fn:ioncore.aboutmsg"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string ioncore.aboutmsg()</TT>
@@ -592,16 +570,14 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4408"></A>
-<A NAME="4409"></A>
-<A NAME="fn:ioncore.activity_first"></A>  
+<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>Return first regio non activity list.
+<DD>Returns first region on activity list.
   
 </DD>
 </DL>
@@ -609,9 +585,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4410"></A>
-<A NAME="4411"></A>
-<A NAME="fn:ioncore.activity_i"></A>  
+<DD><A NAME="fn:ioncore.activity_i"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.activity_i(function iterfn)</TT>
@@ -628,9 +602,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4412"></A>
-<A NAME="4413"></A>
-<A NAME="fn:ioncore.clientwin_i"></A>  
+<DD><A NAME="fn:ioncore.clientwin_i"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.clientwin_i(function fn)</TT>
@@ -647,9 +619,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4414"></A>
-<A NAME="4415"></A>
-<A NAME="fn:ioncore.current"></A>  
+<DD><A NAME="fn:ioncore.current"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion ioncore.current()</TT>
@@ -664,9 +634,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <P>
 
   <DL>
-<DD><A NAME="4416"></A>
-<A NAME="4417"></A>
-<A NAME="fn:ioncore.defshortening"></A>  
+<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>
@@ -718,9 +686,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4418"></A>
-<A NAME="4419"></A>
-<A NAME="fn:ioncore.detach"></A>  
+<DD><A NAME="fn:ioncore.detach"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.detach(WRegion reg, string how)</TT>
@@ -728,11 +694,12 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Detach or reattach <TT>reg</TT>, depending on whether <TT>how</TT>
- is 'set'/'unset'/'toggle'. (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
+ 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.
   
@@ -742,9 +709,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4420"></A>
-<A NAME="4421"></A>
-<A NAME="fn:ioncore.exec"></A>  
+<DD><A NAME="fn:ioncore.exec"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>integer ioncore.exec(string cmd)</TT>
@@ -762,9 +727,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4422"></A>
-<A NAME="4423"></A>
-<A NAME="fn:ioncore.find_screen_id"></A>  
+<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>
@@ -779,9 +742,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4424"></A>
-<A NAME="4425"></A>
-<A NAME="fn:ioncore.focushistory_i"></A>  
+<DD><A NAME="fn:ioncore.focushistory_i"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.focushistory_i(function iterfn)</TT>
@@ -798,9 +759,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4426"></A>
-<A NAME="4427"></A>
-<A NAME="fn:ioncore.get"></A>  
+<DD><A NAME="fn:ioncore.get"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table ioncore.get()</TT>
@@ -815,16 +774,15 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4428"></A>
-<A NAME="4429"></A>
-<A NAME="fn:ioncore.get_paths"></A>  
+<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 (userdir, sessiondir, searchpath).
+<DD>Get important directories (the fields <TT>userdir</TT>, 
+ <TT>sessiondir</TT>, <TT>searchpath</TT> in the returned table).
   
 </DD>
 </DL>
@@ -832,9 +790,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4430"></A>
-<A NAME="4431"></A>
-<A NAME="fn:ioncore.goto_activity"></A>  
+<DD><A NAME="fn:ioncore.goto_activity"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.goto_activity()</TT>
@@ -849,20 +805,17 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4432"></A>
-<A NAME="4433"></A>
-<A NAME="fn:ioncore.goto_first"></A>  
+<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>
- (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
- the boolean <TT>nofront</TT> field, for not bringing the object to
- front.
+<DD>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>
@@ -870,20 +823,17 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4434"></A>
-<A NAME="4435"></A>
-<A NAME="fn:ioncore.goto_next"></A>  
+<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>
- (up/down/left/right/next/prev/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
- the boolean <TT>nofront</TT> field, for not bringing the object to
- front.
+<DD>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>
@@ -891,9 +841,7 @@ Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
 <P>
 
   <DL>
-<DD><A NAME="4436"></A>
-<A NAME="4437"></A>
-<A NAME="fn:ioncore.goto_next_screen"></A>  
+<DD><A NAME="fn:ioncore.goto_next_screen"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WScreen ioncore.goto_next_screen()</TT>
@@ -912,9 +860,7 @@ Note that this function is asynchronous; the screen will not
 <P>
 
   <DL>
-<DD><A NAME="4438"></A>
-<A NAME="4439"></A>
-<A NAME="fn:ioncore.goto_nth_screen"></A>  
+<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>
@@ -933,9 +879,7 @@ Note that this function is asynchronous; the screen will not
 <P>
 
   <DL>
-<DD><A NAME="4440"></A>
-<A NAME="4441"></A>
-<A NAME="fn:ioncore.goto_prev_screen"></A>  
+<DD><A NAME="fn:ioncore.goto_prev_screen"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WScreen ioncore.goto_prev_screen()</TT>
@@ -954,9 +898,7 @@ Note that this function is asynchronous; the screen will not
 <P>
 
   <DL>
-<DD><A NAME="4442"></A>
-<A NAME="4443"></A>
-<A NAME="fn:ioncore.goto_previous"></A>  
+<DD><A NAME="fn:ioncore.goto_previous"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion ioncore.goto_previous()</TT>
@@ -975,9 +917,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4444"></A>
-<A NAME="4445"></A>
-<A NAME="fn:ioncore.is_i18n"></A>  
+<DD><A NAME="fn:ioncore.is_i18n"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.is_i18n()</TT>
@@ -992,9 +932,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4446"></A>
-<A NAME="4447"></A>
-<A NAME="fn:ioncore.load_module"></A>  
+<DD><A NAME="fn:ioncore.load_module"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.load_module(string modname)</TT>
@@ -1009,9 +947,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4448"></A>
-<A NAME="4449"></A>
-<A NAME="fn:ioncore.lookup_clientwin"></A>  
+<DD><A NAME="fn:ioncore.lookup_clientwin"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WClientWin ioncore.lookup_clientwin(string name)</TT>
@@ -1026,9 +962,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4450"></A>
-<A NAME="4451"></A>
-<A NAME="fn:ioncore.lookup_region"></A>  
+<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>
@@ -1044,18 +978,15 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4452"></A>
-<A NAME="4453"></A>
-<A NAME="fn:ioncore.navi_first"></A>  
+<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>
- (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+<DD>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>
@@ -1063,9 +994,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4454"></A>
-<A NAME="4455"></A>
-<A NAME="fn:ioncore.navi_next"></A>  
+<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>
@@ -1073,8 +1002,9 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Find region next from <TT>reg</TT> in direction <TT>dirstr</TT>
- (up/down/left/right/next/prev/any). The table <TT>param</TT> may
- contain the boolean field <TT>nowrap</TT>, instructing not to wrap 
+ (`<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
@@ -1086,9 +1016,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4456"></A>
-<A NAME="4457"></A>
-<A NAME="fn:ioncore.popen_bgread"></A>  
+<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>
@@ -1105,9 +1033,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4458"></A>
-<A NAME="4459"></A>
-<A NAME="fn:ioncore.progname"></A>  
+<DD><A NAME="fn:ioncore.progname"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string ioncore.progname()</TT>
@@ -1122,9 +1048,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4460"></A>
-<A NAME="4461"></A>
-<A NAME="fn:ioncore.region_i"></A>  
+<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>
@@ -1142,9 +1066,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4462"></A>
-<A NAME="4463"></A>
-<A NAME="fn:ioncore.request_selection"></A>  
+<DD><A NAME="fn:ioncore.request_selection"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.request_selection(function fn)</TT>
@@ -1160,9 +1082,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4464"></A>
-<A NAME="4465"></A>
-<A NAME="fn:ioncore.resign"></A>  
+<DD><A NAME="fn:ioncore.resign"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.resign()</TT>
@@ -1178,9 +1098,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4466"></A>
-<A NAME="4467"></A>
-<A NAME="fn:ioncore.restart"></A>  
+<DD><A NAME="fn:ioncore.restart"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.restart()</TT>
@@ -1195,9 +1113,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4468"></A>
-<A NAME="4469"></A>
-<A NAME="fn:ioncore.restart_other"></A>  
+<DD><A NAME="fn:ioncore.restart_other"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.restart_other(string cmd)</TT>
@@ -1212,9 +1128,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4470"></A>
-<A NAME="4471"></A>
-<A NAME="fn:ioncore.set"></A>  
+<DD><A NAME="fn:ioncore.set"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.set(table tab)</TT>
@@ -1250,7 +1164,8 @@ Note that this function is asynchronous; the region will not
 <TR><TD ALIGN="LEFT"><TT>frame_default_index</TT></TD>
 <TD ALIGN="LEFT">(string) Specifies where to add new regions
                         on the mutually exclusive list of a frame. One of
-                        ''last'', ''next'' (for after current), ''next-act''
+                        `<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>
@@ -1279,11 +1194,13 @@ Note that this function is asynchronous; the region will not
 </TR>
 <TR><TD ALIGN="LEFT"><TT>float_placement_method</TT></TD>
 <TD ALIGN="LEFT">(string) How to place floating frames.
-                          One of ''udlr'' (up-down, then left-right), 
-                          ''lrud'' (left-right, then up-down) or ''random''.</TD>
+                          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: ''disable'' or ''sloppy''.</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>
@@ -1308,16 +1225,15 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4472"></A>
-<A NAME="4473"></A>
-<A NAME="fn:ioncore.set_paths"></A>  
+<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 (sessiondir, searchpath).
+<DD>Set important directories (the fields <TT>sessiondir</TT>, <TT>searchpath</TT>
+ of <TT>tab</TT>).
   
 </DD>
 </DL>
@@ -1325,9 +1241,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4474"></A>
-<A NAME="4475"></A>
-<A NAME="fn:ioncore.set_selection"></A>  
+<DD><A NAME="fn:ioncore.set_selection"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.set_selection(string p)</TT>
@@ -1342,9 +1256,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4476"></A>
-<A NAME="4477"></A>
-<A NAME="fn:ioncore.shutdown"></A>  
+<DD><A NAME="fn:ioncore.shutdown"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.shutdown()</TT>
@@ -1359,9 +1271,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4478"></A>
-<A NAME="4479"></A>
-<A NAME="fn:ioncore.snapshot"></A>  
+<DD><A NAME="fn:ioncore.snapshot"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.snapshot()</TT>
@@ -1376,9 +1286,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4480"></A>
-<A NAME="4481"></A>
-<A NAME="fn:ioncore.tagged_clear"></A>  
+<DD><A NAME="fn:ioncore.tagged_clear"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.tagged_clear()</TT>
@@ -1393,16 +1301,14 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4482"></A>
-<A NAME="4483"></A>
-<A NAME="fn:ioncore.tagged_first"></A>  
+<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>Returns first tagged object, untagging it as well if <TT>untag</TT> is set.
   
 </DD>
 </DL>
@@ -1410,9 +1316,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4484"></A>
-<A NAME="4485"></A>
-<A NAME="fn:ioncore.tagged_i"></A>  
+<DD><A NAME="fn:ioncore.tagged_i"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool ioncore.tagged_i(function iterfn)</TT>
@@ -1429,9 +1333,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4486"></A>
-<A NAME="4487"></A>
-<A NAME="fn:ioncore.unsqueeze"></A>  
+<DD><A NAME="fn:ioncore.unsqueeze"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.unsqueeze(WRegion reg, bool override)</TT>
@@ -1449,9 +1351,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4488"></A>
-<A NAME="4489"></A>
-<A NAME="fn:ioncore.version"></A>  
+<DD><A NAME="fn:ioncore.version"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string ioncore.version()</TT>
@@ -1466,9 +1366,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4490"></A>
-<A NAME="4491"></A>
-<A NAME="fn:ioncore.warn"></A>  
+<DD><A NAME="fn:ioncore.warn"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.warn(string str)</TT>
@@ -1484,9 +1382,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4492"></A>
-<A NAME="4493"></A>
-<A NAME="fn:ioncore.warn_traced"></A>  
+<DD><A NAME="fn:ioncore.warn_traced"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void ioncore.warn_traced(string str)</TT>
@@ -1501,9 +1397,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4494"></A>
-<A NAME="4495"></A>
-<A NAME="fn:ioncore.x_change_property"></A>  
+<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>
@@ -1511,7 +1405,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</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
`<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.
   
@@ -1521,9 +1415,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4496"></A>
-<A NAME="4497"></A>
-<A NAME="fn:ioncore.x_delete_property"></A>  
+<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>
@@ -1538,9 +1430,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4498"></A>
-<A NAME="4499"></A>
-<A NAME="fn:ioncore.x_get_atom_name"></A>  
+<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>
@@ -1556,17 +1446,14 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4500"></A>
-<A NAME="4501"></A>
-<A NAME="fn:ioncore.x_get_text_property"></A>  
+<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 (<TT>STRING</TT>, <TT>COMPOUND_TEXT</TT>,
- or <TT>UTF8_STRING</TT> property converted). The fields in the returned
+<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.
   
@@ -1576,9 +1463,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4502"></A>
-<A NAME="4503"></A>
-<A NAME="fn:ioncore.x_get_window_property"></A>  
+<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>
@@ -1598,9 +1483,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4504"></A>
-<A NAME="4505"></A>
-<A NAME="fn:ioncore.x_intern_atom"></A>  
+<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>
@@ -1615,9 +1498,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4506"></A>
-<A NAME="4507"></A>
-<A NAME="fn:ioncore.x_set_text_property"></A>  
+<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>
@@ -1634,9 +1515,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4508"></A>
-<A NAME="4509"></A>
-<A NAME="fn:ioncore.kpress"></A>  
+<DD><A NAME="fn:ioncore.kpress"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.kpress(keyspec, cmd, guard)</TT>
@@ -1653,9 +1532,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4510"></A>
-<A NAME="4511"></A>
-<A NAME="fn:ioncore.kpress_wait"></A>  
+<DD><A NAME="fn:ioncore.kpress_wait"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.kpress_wait(keyspec, cmd, guard)</TT>
@@ -1673,12 +1550,40 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4512"></A>
-<A NAME="4513"></A>
-<A NAME="fn:ioncore.match_winprop_name"></A>  
+<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>ioncore.match_winprop_name(prop, cwin)</TT>
+<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>
@@ -1690,9 +1595,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4514"></A>
-<A NAME="4515"></A>
-<A NAME="fn:ioncore.mclick"></A>  
+<DD><A NAME="fn:ioncore.mclick"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.mclick(buttonspec, cmd, guard)</TT>
@@ -1710,9 +1613,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4516"></A>
-<A NAME="4517"></A>
-<A NAME="fn:ioncore.mdblclick"></A>  
+<DD><A NAME="fn:ioncore.mdblclick"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.mdblclick(buttonspec, cmd, guard)</TT>
@@ -1728,9 +1629,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4518"></A>
-<A NAME="4519"></A>
-<A NAME="fn:ioncore.mdrag"></A>  
+<DD><A NAME="fn:ioncore.mdrag"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.mdrag(buttonspec, cmd, guard)</TT>
@@ -1749,9 +1648,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4520"></A>
-<A NAME="4521"></A>
-<A NAME="fn:ioncore.menuentry"></A>  
+<DD><A NAME="fn:ioncore.menuentry"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.menuentry(name, cmd, guard_or_opts)</TT>
@@ -1773,9 +1670,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4522"></A>
-<A NAME="4523"></A>
-<A NAME="fn:ioncore.mpress"></A>  
+<DD><A NAME="fn:ioncore.mpress"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.mpress(buttonspec, cmd, guard)</TT>
@@ -1791,9 +1686,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4524"></A>
-<A NAME="4525"></A>
-<A NAME="fn:ioncore.refresh_stylelist"></A>  
+<DD><A NAME="fn:ioncore.refresh_stylelist"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.refresh_stylelist()</TT>
@@ -1808,9 +1701,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4526"></A>
-<A NAME="4527"></A>
-<A NAME="fn:ioncore.submap"></A>  
+<DD><A NAME="fn:ioncore.submap"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>ioncore.submap(kcb_, list)</TT>
@@ -1828,9 +1719,37 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4528"></A>
-<A NAME="4529"></A>
-<A NAME="fn:ioncore.submenu"></A>  
+<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>
@@ -1851,9 +1770,40 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4530"></A>
-<A NAME="4531"></A>
-<A NAME="fn:ioncore.tagged_attach"></A>  
+<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>
@@ -1877,9 +1827,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4533"></A>
-<A NAME="4534"></A>
-<A NAME="fn:WClientWin.get_ident"></A>  
+<DD><A NAME="fn:WClientWin.get_ident"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WClientWin.get_ident(WClientWin cwin)</TT>
@@ -1897,17 +1845,15 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4535"></A>
-<A NAME="4536"></A>
-<A NAME="fn:WClientWin.kill"></A>  
+<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 XKillWindow) the client that owns the X
- window correspoding to <TT>cwin</TT>.
+<DD>Attempt to kill (with <TT>XKillWindow</TT>) the client that owns 
the X window correspoding to <TT>cwin</TT>.
   
 </DD>
 </DL>
@@ -1915,9 +1861,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4537"></A>
-<A NAME="4538"></A>
-<A NAME="fn:WClientWin.nudge"></A>  
+<DD><A NAME="fn:WClientWin.nudge"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WClientWin.nudge(WClientWin cwin)</TT>
@@ -1933,9 +1877,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4539"></A>
-<A NAME="4540"></A>
-<A NAME="fn:WClientWin.quote_next"></A>  
+<DD><A NAME="fn:WClientWin.quote_next"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WClientWin.quote_next(WClientWin cwin)</TT>
@@ -1950,9 +1892,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4541"></A>
-<A NAME="4542"></A>
-<A NAME="fn:WClientWin.xid"></A>  
+<DD><A NAME="fn:WClientWin.xid"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>double WClientWin.xid(WClientWin cwin)</TT>
@@ -1973,9 +1913,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4544"></A>
-<A NAME="4545"></A>
-<A NAME="fn:WFrame.is_shaded"></A>  
+<DD><A NAME="fn:WFrame.is_shaded"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WFrame.is_shaded(WFrame frame)</TT>
@@ -1990,9 +1928,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4546"></A>
-<A NAME="4547"></A>
-<A NAME="fn:WFrame.maximize_horiz"></A>  
+<DD><A NAME="fn:WFrame.maximize_horiz"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WFrame.maximize_horiz(WFrame frame)</TT>
@@ -2007,9 +1943,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4548"></A>
-<A NAME="4549"></A>
-<A NAME="fn:WFrame.maximize_vert"></A>  
+<DD><A NAME="fn:WFrame.maximize_vert"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WFrame.maximize_vert(WFrame frame)</TT>
@@ -2024,9 +1958,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4550"></A>
-<A NAME="4551"></A>
-<A NAME="fn:WFrame.mode"></A>  
+<DD><A NAME="fn:WFrame.mode"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string WFrame.mode(WFrame frame)</TT>
@@ -2041,9 +1973,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4552"></A>
-<A NAME="4553"></A>
-<A NAME="fn:WFrame.p_switch_tab"></A>  
+<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>
@@ -2059,9 +1989,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4554"></A>
-<A NAME="4555"></A>
-<A NAME="fn:WFrame.p_tabdrag"></A>  
+<DD><A NAME="fn:WFrame.p_tabdrag"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WFrame.p_tabdrag(WFrame frame)</TT>
@@ -2070,7 +1998,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Start dragging the tab that the user pressed on with the pointing device.
  This function should only be used by binding it to <SPAN  CLASS="textit">mpress</SPAN> or
- <SPAN  CLASS="textit">mdrag</SPAN> action with area ''tab''.
+ <SPAN  CLASS="textit">mdrag</SPAN> action with area `<TT>tab</TT>'.
   
 </DD>
 </DL>
@@ -2078,16 +2006,16 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4556"></A>
-<A NAME="4557"></A>
-<A NAME="fn:WFrame.set_mode"></A>  
+<DD><A NAME="fn:WFrame.set_grattr"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
+<DD><TT>bool WFrame.set_grattr(WFrame frame, string attr, string how)</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Set frame mode.
+<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>
@@ -2095,18 +2023,14 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4558"></A>
-<A NAME="4559"></A>
-<A NAME="fn:WFrame.set_numbers"></A>  
+<DD><A NAME="fn:WFrame.set_mode"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WFrame.set_numbers(WFrame frame, string how)</TT>
+<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Control whether tabs show numbers (set/unset/toggle). 
- Resulting state is returned, which may not be what was 
- requested.
+<DD>Set frame mode.
   
 </DD>
 </DL>
@@ -2114,9 +2038,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4560"></A>
-<A NAME="4561"></A>
-<A NAME="fn:WFrame.set_shaded"></A>  
+<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>
@@ -2124,7 +2046,8 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Set shading state according to the parameter <TT>how</TT> 
- (set/unset/toggle). Resulting state is returned, which may not be
+ (`<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'). 
+ Resulting state is returned, which may not be
  what was requested.
   
 </DD>
@@ -2139,9 +2062,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4563"></A>
-<A NAME="4564"></A>
-<A NAME="fn:WGroup.attach"></A>  
+<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>
@@ -2158,9 +2079,7 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <P>
 
   <DL>
-<DD><A NAME="4565"></A>
-<A NAME="4566"></A>
-<A NAME="fn:WGroup.attach_new"></A>  
+<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>
@@ -2176,22 +2095,22 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <TD ALIGN="LEFT">Description</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>type</TT></TD>
-<TD ALIGN="LEFT">Class name (a string) of the object to be created. Mandatory.</TD>
+<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">Name of the object to be created (a string). Optional.</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">Should the region be switched to (boolean)? Optional.</TD>
+<TD ALIGN="LEFT">(boolean) Should the region be switched to?</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>level</TT></TD>
-<TD ALIGN="LEFT">Stacking level; default is 1.</TD>
+<TD ALIGN="LEFT">(integer) Stacking level; default is 1.</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
-<TD ALIGN="LEFT">Make object modal; ignored if level is set.</TD>
+<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">Size policy.</TD>
+<TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</TD>
 </TR>
 </TABLE>
 
@@ -2205,16 +2124,14 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4567"></A>
-<A NAME="4568"></A>
-<A NAME="fn:WGroup.bottom"></A>  
+<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>Returns the `bottom' of <TT>ws</TT>.
   
 </DD>
 </DL>
@@ -2222,9 +2139,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4569"></A>
-<A NAME="4570"></A>
-<A NAME="fn:WGroup.is_fullscreen"></A>  
+<DD><A NAME="fn:WGroup.is_fullscreen"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WGroup.is_fullscreen(WGroup grp)</TT>
@@ -2239,9 +2154,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4571"></A>
-<A NAME="4572"></A>
-<A NAME="fn:WGroup.managed_i"></A>  
+<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>
@@ -2259,16 +2172,14 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4573"></A>
-<A NAME="4574"></A>
-<A NAME="fn:WGroup.set_bottom"></A>  
+<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
+<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>
@@ -2277,9 +2188,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4575"></A>
-<A NAME="4576"></A>
-<A NAME="fn:WGroup.set_fullscreen"></A>  
+<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>
@@ -2287,8 +2196,9 @@ In addition parameters to the region to be created are passed in this
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Set client window <TT>reg</TT> full screen state according to the 
- parameter <TT>how</TT> (set/unset/toggle). Resulting state is returned,
- which may not be what was requested.
+ 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>
@@ -2308,9 +2218,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4579"></A>
-<A NAME="4580"></A>
-<A NAME="fn:WGroupWS.attach_framed"></A>  
+<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>
@@ -2341,15 +2249,66 @@ In addition parameters to the region to be created are passed in this
 <P>
 
 <H3><A NAME="SECTION00716000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<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="4582"></A>
-<A NAME="4583"></A>
-<A NAME="fn:WInfoWin.set_text"></A>  
+<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>
@@ -2363,16 +2322,14 @@ In addition parameters to the region to be created are passed in this
 
 <P>
 
-<H3><A NAME="SECTION00717000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<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="4585"></A>
-<A NAME="4586"></A>
-<A NAME="fn:WMPlex.attach"></A>  
+<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>
@@ -2389,9 +2346,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4587"></A>
-<A NAME="4588"></A>
-<A NAME="fn:WMPlex.attach_new"></A>  
+<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>
@@ -2434,8 +2389,14 @@ In addition parameters to the region to be created are passed in this
                   by e.g. the mutually exclusive list being empty.
                   This option overrides <TT>switchto</TT>.</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">(integer) Size policy.</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>
@@ -2452,16 +2413,14 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4589"></A>
-<A NAME="4590"></A>
-<A NAME="fn:WMPlex.dec_index"></A>  
+<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> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+<DD>Move <TT>r</TT> ``left'' within objects managed by <TT>mplex</TT> on list 1.
   
 </DD>
 </DL>
@@ -2469,9 +2428,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4591"></A>
-<A NAME="4592"></A>
-<A NAME="fn:WMPlex.get_index"></A>  
+<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>
@@ -2488,9 +2445,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4593"></A>
-<A NAME="4594"></A>
-<A NAME="fn:WMPlex.get_stdisp"></A>  
+<DD><A NAME="fn:WMPlex.get_stdisp"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WMPlex.get_stdisp(WMPlex mplex)</TT>
@@ -2506,16 +2461,14 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4595"></A>
-<A NAME="4596"></A>
-<A NAME="fn:WMPlex.inc_index"></A>  
+<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>Move <TT>r</TT> ``right'' within objects managed by <TT>mplex</TT> on list 1.
   
 </DD>
 </DL>
@@ -2523,9 +2476,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4597"></A>
-<A NAME="4598"></A>
-<A NAME="fn:WMPlex.is_hidden"></A>  
+<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>
@@ -2540,9 +2491,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4599"></A>
-<A NAME="4600"></A>
-<A NAME="fn:WMPlex.managed_i"></A>  
+<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>
@@ -2560,9 +2509,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4601"></A>
-<A NAME="4602"></A>
-<A NAME="fn:WMPlex.mx_count"></A>  
+<DD><A NAME="fn:WMPlex.mx_count"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>integer WMPlex.mx_count(WMPlex mplex)</TT>
@@ -2577,9 +2524,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4603"></A>
-<A NAME="4604"></A>
-<A NAME="fn:WMPlex.mx_current"></A>  
+<DD><A NAME="fn:WMPlex.mx_current"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion WMPlex.mx_current(WMPlex mplex)</TT>
@@ -2595,9 +2540,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4605"></A>
-<A NAME="4606"></A>
-<A NAME="fn:WMPlex.mx_i"></A>  
+<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>
@@ -2615,9 +2558,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4607"></A>
-<A NAME="4608"></A>
-<A NAME="fn:WMPlex.mx_nth"></A>  
+<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>
@@ -2633,9 +2574,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4609"></A>
-<A NAME="4610"></A>
-<A NAME="fn:WMPlex.set_hidden"></A>  
+<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>
@@ -2643,7 +2582,8 @@ In addition parameters to the region to be created are passed in this
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Set the visibility of the region <TT>reg</TT> on <TT>mplex</TT>
- as specified with the parameter <TT>how</TT> (set/unset/toggle).
+ 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>
@@ -2652,9 +2592,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4611"></A>
-<A NAME="4612"></A>
-<A NAME="fn:WMPlex.set_index"></A>  
+<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>
@@ -2664,10 +2602,16 @@ In addition parameters to the region to be created are passed in this
 <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"></SPAN></TD>
+<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"></SPAN></TD>
+<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>
@@ -2678,9 +2622,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4613"></A>
-<A NAME="4614"></A>
-<A NAME="fn:WMPlex.set_stdisp"></A>  
+<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>
@@ -2699,14 +2641,15 @@ In addition parameters to the region to be created are passed in this
 </TR>
 <TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
 <TD ALIGN="LEFT">The corner of the screen to place the status display
-               in. One of <TT>tl</TT>, <TT>tr</TT>, <TT>bl</TT> or <TT>br</TT>.</TD>
+               in: one of `<TT>tl</TT>', `<TT>tr</TT>', `<TT>bl</TT>' 
+               or `<TT>br</TT>'.</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>action</TT></TD>
-<TD ALIGN="LEFT">If this field is set to <TT>keep</TT>, <TT>corner</TT>
+<TD ALIGN="LEFT">If this field is set to `<TT>keep</TT>', <TT>corner</TT>
                   and <TT>orientation</TT> are changed for the existing
-                  status display. If this field is set to <TT>remove</TT>,
+                  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 
+                  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>
@@ -2718,9 +2661,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4615"></A>
-<A NAME="4616"></A>
-<A NAME="fn:WMPlex.switch_next"></A>  
+<DD><A NAME="fn:WMPlex.switch_next"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMPlex.switch_next(WMPlex mplex)</TT>
@@ -2736,9 +2677,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4617"></A>
-<A NAME="4618"></A>
-<A NAME="fn:WMPlex.switch_nth"></A>  
+<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>
@@ -2753,9 +2692,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4619"></A>
-<A NAME="4620"></A>
-<A NAME="fn:WMPlex.switch_prev"></A>  
+<DD><A NAME="fn:WMPlex.switch_prev"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMPlex.switch_prev(WMPlex mplex)</TT>
@@ -2770,16 +2707,14 @@ In addition parameters to the region to be created are passed in this
 
 <P>
 
-<H3><A NAME="SECTION00718000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<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="4622"></A>
-<A NAME="4623"></A>
-<A NAME="fn:WMoveresMode.cancel"></A>  
+<DD><A NAME="fn:WMoveresMode.cancel"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMoveresMode.cancel(WMoveresMode mode)</TT>
@@ -2795,9 +2730,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4624"></A>
-<A NAME="4625"></A>
-<A NAME="fn:WMoveresMode.finish"></A>  
+<DD><A NAME="fn:WMoveresMode.finish"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMoveresMode.finish(WMoveresMode mode)</TT>
@@ -2813,9 +2746,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4626"></A>
-<A NAME="4627"></A>
-<A NAME="fn:WMoveresMode.geom"></A>  
+<DD><A NAME="fn:WMoveresMode.geom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WMoveresMode.geom(WMoveresMode mode)</TT>
@@ -2830,9 +2761,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4628"></A>
-<A NAME="4629"></A>
-<A NAME="fn:WMoveresMode.move"></A>  
+<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>
@@ -2863,9 +2792,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4630"></A>
-<A NAME="4631"></A>
-<A NAME="fn:WMoveresMode.resize"></A>  
+<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>
@@ -2883,9 +2810,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4632"></A>
-<A NAME="4633"></A>
-<A NAME="fn:WMoveresMode.rqgeom"></A>  
+<DD><A NAME="fn:WMoveresMode.rqgeom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WMoveresMode.rqgeom(WMoveresMode mode, table g)</TT>
@@ -2900,16 +2825,14 @@ In addition parameters to the region to be created are passed in this
 
 <P>
 
-<H3><A NAME="SECTION00719000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<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="4635"></A>
-<A NAME="4636"></A>
-<A NAME="fn:WRegion.begin_kbresize"></A>  
+<DD><A NAME="fn:WRegion.begin_kbresize"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WMoveresMode WRegion.begin_kbresize(WRegion reg)</TT>
@@ -2929,16 +2852,14 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4637"></A>
-<A NAME="4638"></A>
-<A NAME="fn:WRegion.current"></A>  
+<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''
+<DD>Return the object, if any, that is considered ``currently active''
  within the objects managed by <TT>mplex</TT>.
   
 </DD>
@@ -2947,9 +2868,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4639"></A>
-<A NAME="4640"></A>
-<A NAME="fn:WRegion.geom"></A>  
+<DD><A NAME="fn:WRegion.geom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WRegion.geom(WRegion reg)</TT>
@@ -2965,9 +2884,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4641"></A>
-<A NAME="4642"></A>
-<A NAME="fn:WRegion.get_configuration"></A>  
+<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>
@@ -2983,9 +2900,7 @@ In addition parameters to the region to be created are passed in this
 <P>
 
   <DL>
-<DD><A NAME="4643"></A>
-<A NAME="4644"></A>
-<A NAME="fn:WRegion.goto"></A>  
+<DD><A NAME="fn:WRegion.goto"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.goto(WRegion reg)</TT>
@@ -3005,9 +2920,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4645"></A>
-<A NAME="4646"></A>
-<A NAME="fn:WRegion.groupleader_of"></A>  
+<DD><A NAME="fn:WRegion.groupleader_of"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion WRegion.groupleader_of(WRegion reg)</TT>
@@ -3023,9 +2936,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4647"></A>
-<A NAME="4648"></A>
-<A NAME="fn:WRegion.is_active"></A>  
+<DD><A NAME="fn:WRegion.is_active"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.is_active(WRegion reg)</TT>
@@ -3040,9 +2951,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4649"></A>
-<A NAME="4650"></A>
-<A NAME="fn:WRegion.is_activity"></A>  
+<DD><A NAME="fn:WRegion.is_activity"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.is_activity(WRegion reg)</TT>
@@ -3057,9 +2966,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4651"></A>
-<A NAME="4652"></A>
-<A NAME="fn:WRegion.is_mapped"></A>  
+<DD><A NAME="fn:WRegion.is_mapped"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.is_mapped(WRegion reg)</TT>
@@ -3074,9 +2981,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4653"></A>
-<A NAME="4654"></A>
-<A NAME="fn:WRegion.is_tagged"></A>  
+<DD><A NAME="fn:WRegion.is_tagged"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.is_tagged(WRegion reg)</TT>
@@ -3091,9 +2996,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4655"></A>
-<A NAME="4656"></A>
-<A NAME="fn:WRegion.manager"></A>  
+<DD><A NAME="fn:WRegion.manager"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion WRegion.manager(WRegion reg)</TT>
@@ -3108,9 +3011,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4657"></A>
-<A NAME="4658"></A>
-<A NAME="fn:WRegion.name"></A>  
+<DD><A NAME="fn:WRegion.name"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string WRegion.name(WRegion reg)</TT>
@@ -3125,9 +3026,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4659"></A>
-<A NAME="4660"></A>
-<A NAME="fn:WRegion.parent"></A>  
+<DD><A NAME="fn:WRegion.parent"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WWindow WRegion.parent(WRegion reg)</TT>
@@ -3142,9 +3041,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4661"></A>
-<A NAME="4662"></A>
-<A NAME="fn:WRegion.rootwin_of"></A>  
+<DD><A NAME="fn:WRegion.rootwin_of"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRootWin WRegion.rootwin_of(WRegion reg)</TT>
@@ -3159,9 +3056,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4663"></A>
-<A NAME="4664"></A>
-<A NAME="fn:WRegion.rqclose"></A>  
+<DD><A NAME="fn:WRegion.rqclose"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WRegion.rqclose(WRegion reg, bool relocate)</TT>
@@ -3174,8 +3069,8 @@ Note that this function is asynchronous; the region will not
  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 "deinit" notification. If <TT>relocate</TT> is not set, and
- <TT>reg</TT> manages other regions, it will not be closed. Otherwise
+ 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>
@@ -3184,9 +3079,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4665"></A>
-<A NAME="4666"></A>
-<A NAME="fn:WRegion.rqclose_propagate"></A>  
+<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>
@@ -3205,9 +3098,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4667"></A>
-<A NAME="4668"></A>
-<A NAME="fn:WRegion.rqgeom"></A>  
+<DD><A NAME="fn:WRegion.rqgeom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WRegion.rqgeom(WRegion reg, table g)</TT>
@@ -3225,9 +3116,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4669"></A>
-<A NAME="4670"></A>
-<A NAME="fn:WRegion.rqorder"></A>  
+<DD><A NAME="fn:WRegion.rqorder"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WRegion.rqorder(WRegion reg, string ord)</TT>
@@ -3235,7 +3124,7 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Request ordering. Currently supported values for <TT>ord</TT>
- are 'front' and 'back'.
+ are `<TT>front</TT>' and `<TT>back</TT>'.
   
 </DD>
 </DL>
@@ -3243,9 +3132,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4671"></A>
-<A NAME="4672"></A>
-<A NAME="fn:WRegion.screen_of"></A>  
+<DD><A NAME="fn:WRegion.screen_of"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WScreen WRegion.screen_of(WRegion reg)</TT>
@@ -3260,17 +3147,15 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4673"></A>
-<A NAME="4674"></A>
-<A NAME="fn:WRegion.set_activity"></A>  
+<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 most be
- one of (set/unset/toggle).
+<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>
@@ -3278,9 +3163,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4675"></A>
-<A NAME="4676"></A>
-<A NAME="fn:WRegion.set_name"></A>  
+<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>
@@ -3288,7 +3171,7 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Set the name of <TT>reg</TT> to <TT>p</TT>. If the name is already in use,
- an instance number suffix <TT>&lt;n&gt;</TT> will be attempted. If <TT>p</TT> has
+ an instance number suffix `<TT>&lt;n&gt;</TT>' will be attempted. If <TT>p</TT> has
  such a suffix, it will be modified, otherwise such a suffix will be
  added. Setting <TT>p</TT> to nil will cause current name to be removed.
   
@@ -3298,9 +3181,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4677"></A>
-<A NAME="4678"></A>
-<A NAME="fn:WRegion.set_name_exact"></A>  
+<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>
@@ -3309,7 +3190,7 @@ Note that this function is asynchronous; the region will not
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Similar to <A HREF="#fn:WRegion.set_name"><TT>WRegion.set_name</TT></A> except if the name is already in use,
  other instance numbers will not be attempted. The string <TT>p</TT> should
- not contain a <TT>&lt;n&gt;</TT> suffix or this function will fail.
+ not contain a `<TT>&lt;n&gt;</TT>' suffix or this function will fail.
   
 </DD>
 </DL>
@@ -3317,9 +3198,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4679"></A>
-<A NAME="4680"></A>
-<A NAME="fn:WRegion.set_tagged"></A>  
+<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>
@@ -3327,7 +3206,8 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Change tagging state of <TT>reg</TT> as defined by <TT>how</TT>
- (set/unset/toggle). Resulting state is returned.
+ (one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
+ The resulting state is returned.
   
 </DD>
 </DL>
@@ -3335,9 +3215,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4681"></A>
-<A NAME="4682"></A>
-<A NAME="fn:WRegion.size_hints"></A>  
+<DD><A NAME="fn:WRegion.size_hints"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WRegion.size_hints(WRegion reg)</TT>
@@ -3353,16 +3231,14 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007110000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<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="4684"></A>
-<A NAME="4685"></A>
-<A NAME="fn:WRootWin.current_scr"></A>  
+<DD><A NAME="fn:WRootWin.current_scr"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WScreen WRootWin.current_scr(WRootWin rootwin)</TT>
@@ -3376,16 +3252,14 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007111000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<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="4687"></A>
-<A NAME="4688"></A>
-<A NAME="fn:WScreen.id"></A>  
+<DD><A NAME="fn:WScreen.id"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>integer WScreen.id(WScreen scr)</TT>
@@ -3400,9 +3274,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4689"></A>
-<A NAME="4690"></A>
-<A NAME="fn:WScreen.set_managed_offset"></A>  
+<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>
@@ -3419,16 +3291,65 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007112000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<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="4692"></A>
-<A NAME="4693"></A>
-<A NAME="fn:WWindow.p_move"></A>  
+<DD><A NAME="fn:WWindow.p_move"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WWindow.p_move(WWindow wwin)</TT>
@@ -3445,9 +3366,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4694"></A>
-<A NAME="4695"></A>
-<A NAME="fn:WWindow.p_resize"></A>  
+<DD><A NAME="fn:WWindow.p_resize"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WWindow.p_resize(WWindow wwin)</TT>
@@ -3464,9 +3383,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4696"></A>
-<A NAME="4697"></A>
-<A NAME="fn:WWindow.xid"></A>  
+<DD><A NAME="fn:WWindow.xid"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>double WWindow.xid(WWindow wwin)</TT>
@@ -3480,15 +3397,14 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007113000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<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="4699"></A>
-<A NAME="fn:export"></A>  
+<DD><A NAME="fn:export"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>export(lib, ...)</TT>
@@ -3502,23 +3418,21 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007114000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<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="4701"></A>
-<A NAME="4702"></A>
-<A NAME="fn:gr.read_config"></A>  
+<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">draw.lua</SPAN>.
+<DD>Read drawing engine configuration file <SPAN  CLASS="textit">look.lua</SPAN>.
   
 </DD>
 </DL>
@@ -3526,9 +3440,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4703"></A>
-<A NAME="4704"></A>
-<A NAME="fn:gr.refresh"></A>  
+<DD><A NAME="fn:gr.refresh"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void gr.refresh()</TT>
@@ -3543,16 +3455,14 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4705"></A>
-<A NAME="4706"></A>
-<A NAME="fn:gr.select_engine"></A>  
+<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
+<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
@@ -3563,16 +3473,14 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007115000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<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="4708"></A>
-<A NAME="4709"></A>
-<A NAME="fn:string.shell_safe"></A>  
+<DD><A NAME="fn:string.shell_safe"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string.shell_safe(str)</TT>
@@ -3586,16 +3494,14 @@ Note that this function is asynchronous; the region will not
 
 <P>
 
-<H3><A NAME="SECTION007116000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+<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="4711"></A>
-<A NAME="4712"></A>
-<A NAME="fn:table.append"></A>  
+<DD><A NAME="fn:table.append"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table.append(t1, t2)</TT>
@@ -3610,9 +3516,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4713"></A>
-<A NAME="4714"></A>
-<A NAME="fn:table.copy"></A>  
+<DD><A NAME="fn:table.copy"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table.copy(t, deep)</TT>
@@ -3628,9 +3532,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4715"></A>
-<A NAME="4716"></A>
-<A NAME="fn:table.icat"></A>  
+<DD><A NAME="fn:table.icat"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table.icat(t1, t2)</TT>
@@ -3645,9 +3547,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4717"></A>
-<A NAME="4718"></A>
-<A NAME="fn:table.join"></A>  
+<DD><A NAME="fn:table.join"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table.join(t1, t2)</TT>
@@ -3663,9 +3563,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="4719"></A>
-<A NAME="4720"></A>
-<A NAME="fn:table.map"></A>  
+<DD><A NAME="fn:table.map"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table.map(f, t)</TT>
@@ -3686,9 +3584,7 @@ Note that this function is asynchronous; the region will not
 </H2>
 
   <DL>
-<DD><A NAME="7110"></A>
-<A NAME="7111"></A>
-<A NAME="fn:mod_tiling.get"></A>  
+<DD><A NAME="fn:mod_tiling.get"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table mod_tiling.get()</TT>
@@ -3703,9 +3599,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7112"></A>
-<A NAME="7113"></A>
-<A NAME="fn:mod_tiling.mkbottom"></A>  
+<DD><A NAME="fn:mod_tiling.mkbottom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool mod_tiling.mkbottom(WRegion reg)</TT>
@@ -3721,9 +3615,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7114"></A>
-<A NAME="7115"></A>
-<A NAME="fn:mod_tiling.set"></A>  
+<DD><A NAME="fn:mod_tiling.set"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void mod_tiling.set(table tab)</TT>
@@ -3739,9 +3631,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7116"></A>
-<A NAME="7117"></A>
-<A NAME="fn:mod_tiling.untile"></A>  
+<DD><A NAME="fn:mod_tiling.untile"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool mod_tiling.untile(WTiling tiling)</TT>
@@ -3763,9 +3653,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7119"></A>
-<A NAME="7120"></A>
-<A NAME="fn:WSplit.geom"></A>  
+<DD><A NAME="fn:WSplit.geom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WSplit.geom(WSplit split)</TT>
@@ -3780,9 +3668,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7121"></A>
-<A NAME="7122"></A>
-<A NAME="fn:WSplit.parent"></A>  
+<DD><A NAME="fn:WSplit.parent"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WSplitInner WSplit.parent(WSplit split)</TT>
@@ -3797,9 +3683,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7123"></A>
-<A NAME="7124"></A>
-<A NAME="fn:WSplit.rqgeom"></A>  
+<DD><A NAME="fn:WSplit.rqgeom"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WSplit.rqgeom(WSplit node, table g)</TT>
@@ -3816,9 +3700,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7125"></A>
-<A NAME="7126"></A>
-<A NAME="fn:WSplit.transpose"></A>  
+<DD><A NAME="fn:WSplit.transpose"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WSplit.transpose(WSplit node)</TT>
@@ -3839,9 +3721,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7128"></A>
-<A NAME="7129"></A>
-<A NAME="fn:WSplitInner.current"></A>  
+<DD><A NAME="fn:WSplitInner.current"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WSplit WSplitInner.current(WSplitInner node)</TT>
@@ -3862,9 +3742,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7131"></A>
-<A NAME="7132"></A>
-<A NAME="fn:WSplitRegion.reg"></A>  
+<DD><A NAME="fn:WSplitRegion.reg"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WRegion WSplitRegion.reg(WSplitRegion node)</TT>
@@ -3885,9 +3763,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7134"></A>
-<A NAME="7135"></A>
-<A NAME="fn:WSplitSplit.br"></A>  
+<DD><A NAME="fn:WSplitSplit.br"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WSplit WSplitSplit.br(WSplitSplit split)</TT>
@@ -3903,17 +3779,15 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7136"></A>
-<A NAME="7137"></A>
-<A NAME="fn:WSplitSplit.dir"></A>  
+<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 ''vertical'' or
''horizontal''.
+<DD>Returns the direction of <TT>split</TT>; either `<TT>vertical</TT>' or
`<TT>horizontal</TT>'.
   
 </DD>
 </DL>
@@ -3921,9 +3795,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7138"></A>
-<A NAME="7139"></A>
-<A NAME="fn:WSplitSplit.flip"></A>  
+<DD><A NAME="fn:WSplitSplit.flip"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WSplitSplit.flip(WSplitSplit split)</TT>
@@ -3938,9 +3810,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7140"></A>
-<A NAME="7141"></A>
-<A NAME="fn:WSplitSplit.tl"></A>  
+<DD><A NAME="fn:WSplitSplit.tl"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WSplit WSplitSplit.tl(WSplitSplit split)</TT>
@@ -3962,9 +3832,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7143"></A>
-<A NAME="7144"></A>
-<A NAME="fn:WTiling.flip_at"></A>  
+<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>
@@ -3979,9 +3847,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7145"></A>
-<A NAME="7146"></A>
-<A NAME="fn:WTiling.transpose_at"></A>  
+<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>
@@ -3996,9 +3862,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7147"></A>
-<A NAME="7148"></A>
-<A NAME="fn:WTiling.farthest"></A>  
+<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>
@@ -4007,8 +3871,8 @@ Note that this function is asynchronous; the region will not
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Return the most previously active region on <TT>ws</TT> with no
  other regions next to it in  direction <TT>dirstr</TT> 
- (left/right/up/down). If <TT>any</TT> is not set, the status 
- display is not considered.
+ (`<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>
@@ -4016,9 +3880,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7149"></A>
-<A NAME="7150"></A>
-<A NAME="fn:WTiling.managed_i"></A>  
+<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>
@@ -4036,9 +3898,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7151"></A>
-<A NAME="7152"></A>
-<A NAME="fn:WTiling.nextto"></A>  
+<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>
@@ -4046,7 +3906,8 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Return the most previously active region next to <TT>reg</TT> in
- direction <TT>dirstr</TT> (left/right/up/down). The region <TT>reg</TT>
+ 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.
   
@@ -4056,9 +3917,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7153"></A>
-<A NAME="7154"></A>
-<A NAME="fn:WTiling.node_of"></A>  
+<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>
@@ -4074,9 +3933,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7155"></A>
-<A NAME="7156"></A>
-<A NAME="fn:WTiling.set_floating_at"></A>  
+<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>
@@ -4084,9 +3941,10 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Toggle floating of the sides of a split containin <TT>reg</TT> as indicated 
- by the parameters <TT>how</TT> (set/unset/toggle) and <TT>dirstr</TT>
- (left/right/up/down/any). The new status is returned (and <TT>false</TT>
- also on error).
+ 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>
@@ -4094,9 +3952,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7157"></A>
-<A NAME="7158"></A>
-<A NAME="fn:WTiling.set_floating"></A>  
+<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>
@@ -4104,8 +3960,8 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Toggle floating of a split's sides at <TT>split</TT> as indicated by the 
- parameter <TT>how</TT> (set/unset/toggle). A split of the appropriate is 
- returned, if there was a change.
+ 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>
@@ -4113,18 +3969,17 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7159"></A>
-<A NAME="7160"></A>
-<A NAME="fn:WTiling.split"></A>  
+<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> above/below/left of/right of
- <TT>node</TT> as indicated by <TT>dirstr</TT>. If <TT>dirstr</TT> is 
- prefixed with ''floating:'' a floating split is created.
+<DD>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>
@@ -4132,9 +3987,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7161"></A>
-<A NAME="7162"></A>
-<A NAME="fn:WTiling.split_at"></A>  
+<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>
@@ -4142,11 +3995,12 @@ Note that this function is asynchronous; the region will not
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Split <TT>frame</TT> creating a new frame to direction <TT>dirstr</TT>
- (one of ''left'', ''right'', ''top'' or ''bottom'') of <TT>frame</TT>.
+ (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 ''floating:'' a floating split is
- created.
+ If <TT>dirstr</TT> is prefixed with `<TT>floating:</TT>', a floating
split is created.
   
 </DD>
 </DL>
@@ -4154,9 +4008,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7163"></A>
-<A NAME="7164"></A>
-<A NAME="fn:WTiling.split_top"></A>  
+<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>
@@ -4171,9 +4023,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7165"></A>
-<A NAME="7166"></A>
-<A NAME="fn:WTiling.split_tree"></A>  
+<DD><A NAME="fn:WTiling.split_tree"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>WSplit WTiling.split_tree(WTiling ws)</TT>
@@ -4188,9 +4038,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="7167"></A>
-<A NAME="7168"></A>
-<A NAME="fn:WTiling.unsplit_at"></A>  
+<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>
@@ -4212,9 +4060,7 @@ Note that this function is asynchronous; the region will not
 </H2>
 
   <DL>
-<DD><A NAME="8171"></A>
-<A NAME="8172"></A>
-<A NAME="fn:mod_query.defcmd"></A>  
+<DD><A NAME="fn:mod_query.defcmd"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.defcmd(cmd, fn)</TT>
@@ -4229,9 +4075,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8173"></A>
-<A NAME="8174"></A>
-<A NAME="fn:mod_query.message"></A>  
+<DD><A NAME="fn:mod_query.message"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.message(mplex, str)</TT>
@@ -4246,9 +4090,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8175"></A>
-<A NAME="8176"></A>
-<A NAME="fn:mod_query.get"></A>  
+<DD><A NAME="fn:mod_query.get"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table mod_query.get()</TT>
@@ -4264,9 +4106,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8177"></A>
-<A NAME="8178"></A>
-<A NAME="fn:mod_query.history_clear"></A>  
+<DD><A NAME="fn:mod_query.history_clear"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void mod_query.history_clear()</TT>
@@ -4281,9 +4121,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8179"></A>
-<A NAME="8180"></A>
-<A NAME="fn:mod_query.history_get"></A>  
+<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>
@@ -4298,9 +4136,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8181"></A>
-<A NAME="8182"></A>
-<A NAME="fn:mod_query.history_push"></A>  
+<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>
@@ -4315,9 +4151,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8183"></A>
-<A NAME="8184"></A>
-<A NAME="fn:mod_query.history_search"></A>  
+<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>
@@ -4336,9 +4170,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8185"></A>
-<A NAME="8186"></A>
-<A NAME="fn:mod_query.history_table"></A>  
+<DD><A NAME="fn:mod_query.history_table"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table mod_query.history_table()</TT>
@@ -4353,9 +4185,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8187"></A>
-<A NAME="8188"></A>
-<A NAME="fn:mod_query.set"></A>  
+<DD><A NAME="fn:mod_query.set"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void mod_query.set(table tab)</TT>
@@ -4389,9 +4219,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8189"></A>
-<A NAME="8190"></A>
-<A NAME="fn:mod_query.popen_completions"></A>  
+<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>
@@ -4413,9 +4241,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8191"></A>
-<A NAME="8192"></A>
-<A NAME="fn:mod_query.query"></A>  
+<DD><A NAME="fn:mod_query.query"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query(mplex, prompt, initvalue, handler, completor,
@@ -4440,18 +4266,16 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8193"></A>
-<A NAME="8194"></A>
-<A NAME="fn:mod_query.query_attachclient"></A>  
+<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 switches
focus to the one entered. It uses the completion function
- <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+<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>
@@ -4459,9 +4283,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8195"></A>
-<A NAME="8196"></A>
-<A NAME="fn:mod_query.query_editfile"></A>  
+<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>
@@ -4478,9 +4300,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8197"></A>
-<A NAME="8198"></A>
-<A NAME="fn:mod_query.query_exec"></A>  
+<DD><A NAME="fn:mod_query.query_exec"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_exec(mplex)</TT>
@@ -4499,18 +4319,16 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8199"></A>
-<A NAME="8200"></A>
-<A NAME="fn:mod_query.query_gotoclient"></A>  
+<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 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>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>
@@ -4518,9 +4336,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8201"></A>
-<A NAME="8202"></A>
-<A NAME="fn:mod_query.query_lua"></A>  
+<DD><A NAME="fn:mod_query.query_lua"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_lua(mplex)</TT>
@@ -4538,9 +4354,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8203"></A>
-<A NAME="8204"></A>
-<A NAME="fn:mod_query.query_man"></A>  
+<DD><A NAME="fn:mod_query.query_man"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_man(mplex, prog)</TT>
@@ -4557,9 +4371,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8205"></A>
-<A NAME="8206"></A>
-<A NAME="fn:mod_query.query_menu"></A>  
+<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>
@@ -4574,9 +4386,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8207"></A>
-<A NAME="8208"></A>
-<A NAME="fn:mod_query.query_renameframe"></A>  
+<DD><A NAME="fn:mod_query.query_renameframe"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_renameframe(frame)</TT>
@@ -4592,9 +4402,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8209"></A>
-<A NAME="8210"></A>
-<A NAME="fn:mod_query.query_renameworkspace"></A>  
+<DD><A NAME="fn:mod_query.query_renameworkspace"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_renameworkspace(mplex, ws)</TT>
@@ -4611,9 +4419,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8211"></A>
-<A NAME="8212"></A>
-<A NAME="fn:mod_query.query_restart"></A>  
+<DD><A NAME="fn:mod_query.query_restart"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_restart(mplex)</TT>
@@ -4629,9 +4435,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8213"></A>
-<A NAME="8214"></A>
-<A NAME="fn:mod_query.query_runfile"></A>  
+<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>
@@ -4648,9 +4452,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8215"></A>
-<A NAME="8216"></A>
-<A NAME="fn:mod_query.query_shutdown"></A>  
+<DD><A NAME="fn:mod_query.query_shutdown"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_shutdown(mplex)</TT>
@@ -4667,9 +4469,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8217"></A>
-<A NAME="8218"></A>
-<A NAME="fn:mod_query.query_ssh"></A>  
+<DD><A NAME="fn:mod_query.query_ssh"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_ssh(mplex, ssh)</TT>
@@ -4685,9 +4485,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8220"></A>
-<A NAME="8221"></A>
-<A NAME="fn:mod_query.query_workspace"></A>  
+<DD><A NAME="fn:mod_query.query_workspace"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.query_workspace(mplex)</TT>
@@ -4706,9 +4504,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8222"></A>
-<A NAME="8223"></A>
-<A NAME="fn:mod_query.query_yesno"></A>  
+<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>
@@ -4725,9 +4521,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8224"></A>
-<A NAME="8225"></A>
-<A NAME="fn:mod_query.show_about_ion"></A>  
+<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>
@@ -4742,9 +4536,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8226"></A>
-<A NAME="8227"></A>
-<A NAME="fn:mod_query.show_tree"></A>  
+<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>
@@ -4759,9 +4551,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8228"></A>
-<A NAME="8229"></A>
-<A NAME="fn:mod_query.warn"></A>  
+<DD><A NAME="fn:mod_query.warn"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>mod_query.warn(mplex, str)</TT>
@@ -4782,9 +4572,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8231"></A>
-<A NAME="8232"></A>
-<A NAME="fn:WComplProxy.set_completions"></A>  
+<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>
@@ -4809,9 +4597,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8234"></A>
-<A NAME="8235"></A>
-<A NAME="fn:WEdln.back"></A>  
+<DD><A NAME="fn:WEdln.back"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.back(WEdln wedln)</TT>
@@ -4826,9 +4612,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8236"></A>
-<A NAME="8237"></A>
-<A NAME="fn:WEdln.backspace"></A>  
+<DD><A NAME="fn:WEdln.backspace"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.backspace(WEdln wedln)</TT>
@@ -4843,9 +4627,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8238"></A>
-<A NAME="8239"></A>
-<A NAME="fn:WEdln.bkill_word"></A>  
+<DD><A NAME="fn:WEdln.bkill_word"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.bkill_word(WEdln wedln)</TT>
@@ -4861,9 +4643,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8240"></A>
-<A NAME="8241"></A>
-<A NAME="fn:WEdln.bol"></A>  
+<DD><A NAME="fn:WEdln.bol"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.bol(WEdln wedln)</TT>
@@ -4878,9 +4658,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8242"></A>
-<A NAME="8243"></A>
-<A NAME="fn:WEdln.bskip_word"></A>  
+<DD><A NAME="fn:WEdln.bskip_word"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.bskip_word(WEdln wedln)</TT>
@@ -4896,9 +4674,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8244"></A>
-<A NAME="8245"></A>
-<A NAME="fn:WEdln.clear_mark"></A>  
+<DD><A NAME="fn:WEdln.clear_mark"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.clear_mark(WEdln wedln)</TT>
@@ -4913,9 +4689,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8246"></A>
-<A NAME="8247"></A>
-<A NAME="fn:WEdln.complete"></A>  
+<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>
@@ -4924,11 +4698,12 @@ Note that this function is asynchronous; the region will not
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Call completion handler with the text between the beginning of line and
  current cursor position, or select next/previous completion from list if in
- auto-show-completions mode and <TT>cycle</TT> is set to ``next'' or ``prev'',
- respectively. The <TT>mode</TT> may be ``history'' or ``normal''. If it is 
+ 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 ``next-always'' and ``prev-always'' for <TT>cycle</TT>.
+ this, use `<TT>next-always</TT>' and `<TT>prev-always</TT>' for <TT>cycle</TT>.
   
 </DD>
 </DL>
@@ -4936,9 +4711,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8248"></A>
-<A NAME="8249"></A>
-<A NAME="fn:WEdln.contents"></A>  
+<DD><A NAME="fn:WEdln.contents"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string WEdln.contents(WEdln wedln)</TT>
@@ -4953,9 +4726,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8250"></A>
-<A NAME="8251"></A>
-<A NAME="fn:WEdln.context"></A>  
+<DD><A NAME="fn:WEdln.context"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>string WEdln.context(WEdln wedln)</TT>
@@ -4970,9 +4741,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8252"></A>
-<A NAME="8253"></A>
-<A NAME="fn:WEdln.copy"></A>  
+<DD><A NAME="fn:WEdln.copy"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.copy(WEdln wedln)</TT>
@@ -4987,9 +4756,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8254"></A>
-<A NAME="8255"></A>
-<A NAME="fn:WEdln.cut"></A>  
+<DD><A NAME="fn:WEdln.cut"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.cut(WEdln wedln)</TT>
@@ -5005,9 +4772,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8256"></A>
-<A NAME="8257"></A>
-<A NAME="fn:WEdln.delete"></A>  
+<DD><A NAME="fn:WEdln.delete"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.delete(WEdln wedln)</TT>
@@ -5022,9 +4787,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8258"></A>
-<A NAME="8259"></A>
-<A NAME="fn:WEdln.eol"></A>  
+<DD><A NAME="fn:WEdln.eol"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.eol(WEdln wedln)</TT>
@@ -5039,9 +4802,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8260"></A>
-<A NAME="8261"></A>
-<A NAME="fn:WEdln.finish"></A>  
+<DD><A NAME="fn:WEdln.finish"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.finish(WEdln wedln)</TT>
@@ -5056,9 +4817,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8262"></A>
-<A NAME="8263"></A>
-<A NAME="fn:WEdln.forward"></A>  
+<DD><A NAME="fn:WEdln.forward"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.forward(WEdln wedln)</TT>
@@ -5073,9 +4832,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8264"></A>
-<A NAME="8265"></A>
-<A NAME="fn:WEdln.history_next"></A>  
+<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>
@@ -5092,9 +4849,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8266"></A>
-<A NAME="8267"></A>
-<A NAME="fn:WEdln.history_prev"></A>  
+<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>
@@ -5111,9 +4866,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8268"></A>
-<A NAME="8269"></A>
-<A NAME="fn:WEdln.insstr"></A>  
+<DD><A NAME="fn:WEdln.insstr"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.insstr(WEdln wedln, string str)</TT>
@@ -5128,9 +4881,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8270"></A>
-<A NAME="8271"></A>
-<A NAME="fn:WEdln.is_histcompl"></A>  
+<DD><A NAME="fn:WEdln.is_histcompl"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WEdln.is_histcompl(WEdln wedln)</TT>
@@ -5145,9 +4896,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8272"></A>
-<A NAME="8273"></A>
-<A NAME="fn:WEdln.kill_line"></A>  
+<DD><A NAME="fn:WEdln.kill_line"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.kill_line(WEdln wedln)</TT>
@@ -5162,9 +4911,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8274"></A>
-<A NAME="8275"></A>
-<A NAME="fn:WEdln.kill_to_bol"></A>  
+<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>
@@ -5179,9 +4926,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8276"></A>
-<A NAME="8277"></A>
-<A NAME="fn:WEdln.kill_to_eol"></A>  
+<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>
@@ -5196,9 +4941,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8278"></A>
-<A NAME="8279"></A>
-<A NAME="fn:WEdln.kill_word"></A>  
+<DD><A NAME="fn:WEdln.kill_word"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.kill_word(WEdln wedln)</TT>
@@ -5214,9 +4957,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8280"></A>
-<A NAME="8281"></A>
-<A NAME="fn:WEdln.mark"></A>  
+<DD><A NAME="fn:WEdln.mark"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>integer WEdln.mark(WEdln wedln)</TT>
@@ -5233,9 +4974,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8282"></A>
-<A NAME="8283"></A>
-<A NAME="fn:WEdln.next_completion"></A>  
+<DD><A NAME="fn:WEdln.next_completion"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WEdln.next_completion(WEdln wedln)</TT>
@@ -5250,9 +4989,7 @@ Note that this function is asynchronous; the region will not
 <P>
 
   <DL>
-<DD><A NAME="8284"></A>
-<A NAME="8285"></A>
-<A NAME="fn:WEdln.paste"></A>  
+<DD><A NAME="fn:WEdln.paste"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.paste(WEdln wedln)</TT>
@@ -5272,9 +5009,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8286"></A>
-<A NAME="8287"></A>
-<A NAME="fn:WEdln.point"></A>  
+<DD><A NAME="fn:WEdln.point"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>integer WEdln.point(WEdln wedln)</TT>
@@ -5290,9 +5025,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8288"></A>
-<A NAME="8289"></A>
-<A NAME="fn:WEdln.prev_completion"></A>  
+<DD><A NAME="fn:WEdln.prev_completion"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WEdln.prev_completion(WEdln wedln)</TT>
@@ -5307,9 +5040,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8290"></A>
-<A NAME="8291"></A>
-<A NAME="fn:WEdln.set_context"></A>  
+<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>
@@ -5324,9 +5055,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8292"></A>
-<A NAME="8293"></A>
-<A NAME="fn:WEdln.set_mark"></A>  
+<DD><A NAME="fn:WEdln.set_mark"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.set_mark(WEdln wedln)</TT>
@@ -5341,9 +5070,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8294"></A>
-<A NAME="8295"></A>
-<A NAME="fn:WEdln.skip_word"></A>  
+<DD><A NAME="fn:WEdln.skip_word"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.skip_word(WEdln wedln)</TT>
@@ -5359,9 +5086,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8296"></A>
-<A NAME="8297"></A>
-<A NAME="fn:WEdln.transpose_chars"></A>  
+<DD><A NAME="fn:WEdln.transpose_chars"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.transpose_chars(WEdln wedln)</TT>
@@ -5376,9 +5101,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8298"></A>
-<A NAME="8299"></A>
-<A NAME="fn:WEdln.transpose_words"></A>  
+<DD><A NAME="fn:WEdln.transpose_words"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WEdln.transpose_words(WEdln wedln)</TT>
@@ -5399,9 +5122,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8301"></A>
-<A NAME="8302"></A>
-<A NAME="fn:WInput.cancel"></A>  
+<DD><A NAME="fn:WInput.cancel"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WInput.cancel(WInput input)</TT>
@@ -5416,9 +5137,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8303"></A>
-<A NAME="8304"></A>
-<A NAME="fn:WInput.scrolldown"></A>  
+<DD><A NAME="fn:WInput.scrolldown"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WInput.scrolldown(WInput input)</TT>
@@ -5433,9 +5152,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="8305"></A>
-<A NAME="8306"></A>
-<A NAME="fn:WInput.scrollup"></A>  
+<DD><A NAME="fn:WInput.scrollup"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WInput.scrollup(WInput input)</TT>
@@ -5456,9 +5173,7 @@ Note that this function is asynchronous; the selection will not
 </H2>
 
   <DL>
-<DD><A NAME="9122"></A>
-<A NAME="9123"></A>
-<A NAME="fn:mod_menu.grabmenu"></A>  
+<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>
@@ -5475,9 +5190,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9124"></A>
-<A NAME="9125"></A>
-<A NAME="fn:mod_menu.menu"></A>  
+<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>
@@ -5502,9 +5215,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9126"></A>
-<A NAME="9127"></A>
-<A NAME="fn:mod_menu.get"></A>  
+<DD><A NAME="fn:mod_menu.get"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table mod_menu.get()</TT>
@@ -5519,9 +5230,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9128"></A>
-<A NAME="9129"></A>
-<A NAME="fn:mod_menu.set"></A>  
+<DD><A NAME="fn:mod_menu.set"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void mod_menu.set(table tab)</TT>
@@ -5554,9 +5263,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9130"></A>
-<A NAME="9131"></A>
-<A NAME="fn:mod_menu.pmenu"></A>  
+<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>
@@ -5579,9 +5286,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9133"></A>
-<A NAME="9134"></A>
-<A NAME="fn:WMenu.cancel"></A>  
+<DD><A NAME="fn:WMenu.cancel"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMenu.cancel(WMenu menu)</TT>
@@ -5596,9 +5301,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9135"></A>
-<A NAME="9136"></A>
-<A NAME="fn:WMenu.finish"></A>  
+<DD><A NAME="fn:WMenu.finish"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMenu.finish(WMenu menu)</TT>
@@ -5614,9 +5317,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9137"></A>
-<A NAME="9138"></A>
-<A NAME="fn:WMenu.select_next"></A>  
+<DD><A NAME="fn:WMenu.select_next"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMenu.select_next(WMenu menu)</TT>
@@ -5631,9 +5332,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9139"></A>
-<A NAME="9140"></A>
-<A NAME="fn:WMenu.select_nth"></A>  
+<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>
@@ -5648,9 +5347,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9141"></A>
-<A NAME="9142"></A>
-<A NAME="fn:WMenu.select_prev"></A>  
+<DD><A NAME="fn:WMenu.select_prev"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMenu.select_prev(WMenu menu)</TT>
@@ -5665,9 +5362,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9143"></A>
-<A NAME="9144"></A>
-<A NAME="fn:WMenu.typeahead_clear"></A>  
+<DD><A NAME="fn:WMenu.typeahead_clear"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WMenu.typeahead_clear(WMenu menu)</TT>
@@ -5688,9 +5383,7 @@ Note that this function is asynchronous; the selection will not
 </H2>
 
   <DL>
-<DD><A NAME="9342"></A>
-<A NAME="9343"></A>
-<A NAME="fn:mod_dock.set_floating_shown_on"></A>  
+<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>
@@ -5711,9 +5404,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9345"></A>
-<A NAME="9346"></A>
-<A NAME="fn:WDock.attach"></A>  
+<DD><A NAME="fn:WDock.attach"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool WDock.attach(WDock dock, WRegion reg)</TT>
@@ -5728,9 +5419,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9347"></A>
-<A NAME="9348"></A>
-<A NAME="fn:WDock.get"></A>  
+<DD><A NAME="fn:WDock.get"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table WDock.get(WDock dock)</TT>
@@ -5746,9 +5435,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9349"></A>
-<A NAME="9350"></A>
-<A NAME="fn:WDock.resize"></A>  
+<DD><A NAME="fn:WDock.resize"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WDock.resize(WDock dock)</TT>
@@ -5763,9 +5450,7 @@ Note that this function is asynchronous; the selection will not
 <P>
 
   <DL>
-<DD><A NAME="9351"></A>
-<A NAME="9352"></A>
-<A NAME="fn:WDock.set"></A>  
+<DD><A NAME="fn:WDock.set"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WDock.set(WDock dock, table conftab)</TT>
@@ -5788,7 +5473,10 @@ Note that this function is asynchronous; the selection will not
 <TD ALIGN="LEFT">string in <!-- MATH
  $\{t,m,b\}\times\{t,c,b\}$
  -->
-<SPAN CLASS="MATH"></SPAN></TD>
+<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>
@@ -5819,9 +5507,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </H2>
 
   <DL>
-<DD><A NAME="9451"></A>
-<A NAME="9452"></A>
-<A NAME="fn:mod_sp.set_shown"></A>  
+<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>
@@ -5829,7 +5515,9 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Toggle displayed status of <TT>sp</TT>.
- The parameter <TT>how</TT> is one of (set/unset/toggle).
+ 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>
@@ -5837,9 +5525,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9453"></A>
-<A NAME="9454"></A>
-<A NAME="fn:mod_sp.set_shown_on"></A>  
+<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>
@@ -5847,7 +5533,9 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Change displayed status of some scratchpad on <TT>mplex</TT> if one is 
- found. The parameter <TT>how</TT> is one of (set/unset/toggle).
+ 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>
@@ -5861,9 +5549,88 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </H2>
 
   <DL>
-<DD><A NAME="9548"></A>
-<A NAME="9549"></A>
-<A NAME="fn:mod_statusbar.statusbars"></A>  
+<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>
@@ -5875,6 +5642,22 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </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">
@@ -5884,9 +5667,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9551"></A>
-<A NAME="9552"></A>
-<A NAME="fn:WStatusBar.get_template_table"></A>  
+<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>
@@ -5901,12 +5682,10 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9553"></A>
-<A NAME="9554"></A>
-<A NAME="fn:WStatusBar.is_systray_extl"></A>  
+<DD><A NAME="fn:WStatusBar.is_systray"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WStatusBar.is_systray_extl(WStatusBar sb)</TT>
+<DD><TT>bool WStatusBar.is_systray(WStatusBar sb)</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
@@ -5918,9 +5697,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9555"></A>
-<A NAME="9556"></A>
-<A NAME="fn:WStatusBar.set_systray"></A>  
+<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>
@@ -5928,7 +5705,8 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </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 (set/unset/toggle). 
+ The parameter <TT>how</TT> can be one of 
+ `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
  Resulting state is returned.
   
 </DD>
@@ -5937,9 +5715,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9557"></A>
-<A NAME="9558"></A>
-<A NAME="fn:WStatusBar.set_template"></A>  
+<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>
@@ -5954,9 +5730,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9559"></A>
-<A NAME="9560"></A>
-<A NAME="fn:WStatusBar.set_template_table"></A>  
+<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>
@@ -5971,9 +5745,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9561"></A>
-<A NAME="9562"></A>
-<A NAME="fn:WStatusBar.update"></A>  
+<DD><A NAME="fn:WStatusBar.update"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void WStatusBar.update(WStatusBar sb, table t)</TT>
@@ -5994,9 +5766,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </H2>
 
   <DL>
-<DD><A NAME="9672"></A>
-<A NAME="9673"></A>
-<A NAME="fn:de.defstyle"></A>  
+<DD><A NAME="fn:de.defstyle"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>bool de.defstyle(string name, table tab)</TT>
@@ -6011,9 +5781,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9674"></A>
-<A NAME="9675"></A>
-<A NAME="fn:de.defstyle_rootwin"></A>  
+<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>
@@ -6028,9 +5796,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9676"></A>
-<A NAME="9677"></A>
-<A NAME="fn:de.reset"></A>  
+<DD><A NAME="fn:de.reset"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>void de.reset()</TT>
@@ -6045,9 +5811,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9678"></A>
-<A NAME="9679"></A>
-<A NAME="fn:de.substyle"></A>  
+<DD><A NAME="fn:de.substyle"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
 <DD><TT>table de.substyle(string pattern, table tab)</TT>
@@ -6070,7 +5834,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="9877"></A>
+<DD><A NAME="8232"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6105,7 +5869,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </TR>
 <TR><TD ALIGN="LEFT"><TT>dockapp</TT></TD>
 <TD ALIGN="LEFT">bool</TD>
-<TD ALIGN="LEFT">Client window is a dockapp.</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>
@@ -6142,7 +5906,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9878"></A>
+<DD><A NAME="8233"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6162,7 +5926,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9879"></A>
+<DD><A NAME="8234"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6183,7 +5947,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9880"></A>
+<DD><A NAME="8235"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6204,7 +5968,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9881"></A>
+<DD><A NAME="8236"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6231,12 +5995,12 @@ reg:attach(cwin)
 </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>
+<TD ALIGN="LEFT">`<TT>switchonly</TT>', `<TT>reorder</TT>',
+                                `<TT>add</TT>' or `<TT>remove</TT>'</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>sw</TT></TD>
 <TD ALIGN="LEFT">bool</TD>
-<TD ALIGN="LEFT">Switch occured</TD>
+<TD ALIGN="LEFT">Switch occurred</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>sub</TT></TD>
 <TD ALIGN="LEFT">WRegion</TD>
@@ -6250,7 +6014,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9882"></A>
+<DD><A NAME="8237"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6271,7 +6035,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9883"></A>
+<DD><A NAME="8238"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6291,7 +6055,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9884"></A>
+<DD><A NAME="8239"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6304,7 +6068,7 @@ reg:attach(cwin)
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Called when Ion has done all initialisation and is almost ready to
-      enter the mainloop, except no windows are yet being managed.
+      enter the main-loop, except no windows are yet being managed.
       
 </DD>
 </DL>
@@ -6312,7 +6076,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9885"></A>
+<DD><A NAME="8240"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6332,7 +6096,27 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9886"></A>
+<DD><A NAME="8241"></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="8242"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6368,7 +6152,7 @@ reg:attach(cwin)
 </TR>
 <TR><TD ALIGN="LEFT"><TT>res_frame</TT></TD>
 <TD ALIGN="LEFT">WFrame</TD>
-<TD ALIGN="LEFT">A succesfull handler should 
+<TD ALIGN="LEFT">A successful handler should 
             return the target frame here.</TD>
 </TR>
 </TABLE>
@@ -6384,7 +6168,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9887"></A>
+<DD><A NAME="8243"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6405,7 +6189,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9888"></A>
+<DD><A NAME="8244"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6427,7 +6211,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="9889"></A>
+<DD><A NAME="8245"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6476,16 +6260,16 @@ reg:attach(cwin)
 <TD ALIGN="LEFT">Tagging state has changed.</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>pseudoactivated</TT></TD>
-<TD ALIGN="LEFT">The region has become pseudoactive
+<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 pseudoactive.</TD>
+<TD ALIGN="LEFT">The region is no longer pseudo-active.</TD>
 </TR>
 </TABLE>
 
 <P>
-A region is pseudoactive, when a) it is itself not active (does
+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.
       
@@ -6496,35 +6280,96 @@ A region is pseudoactive, when a) it is itself not active (does
 
 <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="tex2html355"
+<A NAME="tex2html383"
   HREF="node8.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html349"
+<A NAME="tex2html377"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html343"
+<A NAME="tex2html371"
   HREF="node6.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html351"
+<A NAME="tex2html379"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html353"
+<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="tex2html356"
+<B> Next:</B> <A NAME="tex2html384"
   HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html350"
+<B> Up:</B> <A NAME="tex2html378"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html344"
+<B> Previous:</B> <A NAME="tex2html372"
   HREF="node6.html">5. Scripting</A>
- &nbsp; <B>  <A NAME="tex2html352"
+ &nbsp; <B>  <A NAME="tex2html380"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html354"
+ &nbsp; <B>  <A NAME="tex2html382"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 555d7bf0403882659c599de1ae97920e35e26293..33cb380bc2f5e8c6dbc173c63368c8c0f527655e 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html405"
+<A NAME="tex2html437"
   HREF="node9.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html399"
+<A NAME="tex2html431"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html393"
+<A NAME="tex2html425"
   HREF="node7.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html401"
+<A NAME="tex2html433"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html403"
+<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="tex2html406"
+<B> Next:</B> <A NAME="tex2html438"
   HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html400"
+<B> Up:</B> <A NAME="tex2html432"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html394"
+<B> Previous:</B> <A NAME="tex2html426"
   HREF="node7.html">6. Function reference</A>
- &nbsp; <B>  <A NAME="tex2html402"
+ &nbsp; <B>  <A NAME="tex2html434"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html404"
+ &nbsp; <B>  <A NAME="tex2html436"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -61,7 +61,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
 
 <UL CLASS="ChildLinks">
-<LI><A NAME="tex2html407"
+<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-->
@@ -565,31 +565,31 @@ General Public License instead of this License.
 
 <DIV CLASS="navigation"><HR>
 <!--Navigation Panel-->
-<A NAME="tex2html405"
+<A NAME="tex2html437"
   HREF="node9.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html399"
+<A NAME="tex2html431"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html393"
+<A NAME="tex2html425"
   HREF="node7.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html401"
+<A NAME="tex2html433"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html403"
+<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="tex2html406"
+<B> Next:</B> <A NAME="tex2html438"
   HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html400"
+<B> Up:</B> <A NAME="tex2html432"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html394"
+<B> Previous:</B> <A NAME="tex2html426"
   HREF="node7.html">6. Function reference</A>
- &nbsp; <B>  <A NAME="tex2html402"
+ &nbsp; <B>  <A NAME="tex2html434"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html404"
+ &nbsp; <B>  <A NAME="tex2html436"
   HREF="node11.html">Index</A></B> </DIV>
 <!--End of Navigation Panel-->
 
index 06f669013bd3a0f0ff5a7307938f38c1c41dc703..0b16372626ea19ba5f44ec1383e2b73af8815a42 100644 (file)
@@ -28,31 +28,31 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <BODY >
 
 <DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html420"
+<A NAME="tex2html452"
   HREF="node10.html">
 <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
-<A NAME="tex2html414"
+<A NAME="tex2html446"
   HREF="ionconf.html">
 <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
-<A NAME="tex2html408"
+<A NAME="tex2html440"
   HREF="node8.html">
 <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
-<A NAME="tex2html416"
+<A NAME="tex2html448"
   HREF="node1.html">
 <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
-<A NAME="tex2html418"
+<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="tex2html421"
+<B> Next:</B> <A NAME="tex2html453"
   HREF="node10.html">List of functions</A>
-<B> Up:</B> <A NAME="tex2html415"
+<B> Up:</B> <A NAME="tex2html447"
   HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html409"
+<B> Previous:</B> <A NAME="tex2html441"
   HREF="node8.html">A. The GNU General</A>
- &nbsp; <B>  <A NAME="tex2html417"
+ &nbsp; <B>  <A NAME="tex2html449"
   HREF="node1.html">Contents</A></B> 
- &nbsp; <B>  <A NAME="tex2html419"
+ &nbsp; <B>  <A NAME="tex2html451"
   HREF="node11.html">Index</A></B> 
 <BR>
 <BR></DIV>
@@ -70,7 +70,6 @@ B. Full class hierarchy visible to Lua-side
      |--&gt;WHook
      |--&gt;WTimer
      |--&gt;WMoveresMode
-     |--&gt;WMgmtMode (mod_mgmtmode)
      |--&gt;WRegion
      |    |--&gt;WClientWin
      |    |--&gt;WWindow
index 1d53cb60189a766c054dd4fa40ffe6f873df8ee9..d69a4eee3d476f19cdb525978db95fb0a3990344 100644 (file)
Binary files a/doc/ionnotes.dvi.gz and b/doc/ionnotes.dvi.gz differ
index d83c4f96f524dab0f7f3f0b155792689c4e9a21d..1180c8ada1c20982cbe5734b15d1255540ff1a89 100644 (file)
Binary files a/doc/ionnotes.ps.gz and b/doc/ionnotes.ps.gz differ
index d8c10f3a37a323725cc87e069c54d0b670ec1ce3..c8f779d3b9961b39a483fe55f5319dd2f99f5f73 100644 (file)
@@ -30,7 +30,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+section entitled ``GNU General Public License'' for more details.
 
 \bigskip
 
index 27c31f27432c4c0de6e432f8242e1460eed81db1..9ebfb0d473c0dabdba4839c39bacde1146d2e7f2 100644 (file)
@@ -74,7 +74,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+section entitled ``GNU General Public License'' for more details.
 
 <P>
 
index d22be91d53c22cf8c5825d1bba5b54f525b4fc8a..f0cd026d391a9025807ed506f9f490004b173e42 100644 (file)
@@ -35,3 +35,4 @@ DIV.quote             {   }
 PRE.preform            {   }
 SPAN.textit            { font-style: italic  }
 SPAN.arabic            {   }
+SPAN.textbf            { font-weight: bold  }
index 27c31f27432c4c0de6e432f8242e1460eed81db1..9ebfb0d473c0dabdba4839c39bacde1146d2e7f2 100644 (file)
@@ -74,7 +74,7 @@ the Free Software Foundation; either version 2 of the License, or
 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.
+section entitled ``GNU General Public License'' for more details.
 
 <P>
 
index d181c54bab3845079a5915f9fd08b3b322723848..4996b37b15ed292b2ddf3adb8d9f4a33b8f1a229 100644 (file)
@@ -87,9 +87,9 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 While Ion does not not have a truly object-oriented design
 <A NAME="tex2html1"
-  HREF="#foot212"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A>,
+  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
+naturally expressed as such ``objects''. Therefore Ion implements
 a rather primitive OO system for these screen objects and some
 other things. 
 
@@ -107,7 +107,7 @@ basic relations.
 <P>
 For simplicity we consider only the essential-for-basic-configuration
 Ioncore, <SPAN  CLASS="textit">mod_tiling</SPAN> and <SPAN  CLASS="textit">mod_query</SPAN> classes. 
-See Appendix <A HREF="#app:fullhierarchy"><IMG  ALIGN="BOTTOM" BORDER="1" ALT="[*]" SRC="crossref.png"></A> for the full class hierachy visible
+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>
@@ -128,7 +128,7 @@ implement.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="318"></A>
+<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> 
@@ -160,77 +160,76 @@ The core classes:
 <P>
 <DL>
 <DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="324"></A>
+<DD><A NAME="323"></A>
     Is the base of Ion's object system.
 
 <P>
 </DD>
 <DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="325"></A>
+<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''
+    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="326"></A> is a class for
+<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="327"></A> is the base class for all
+<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>WRootWin</STRONG></DT>
-<DD><A NAME="328"></A> is the class for
-    root windows<A NAME="242"></A> of X screens<A NAME="243"></A>.
-    Note that an ''X screen'' or root window is not necessarily a
-    single  physical screen<A NAME="244"></A> as a root window
-    may be split over multiple screens when hacks such as 
-    Xinerama<A NAME="245"></A> are used. (Actually there can be only 
-    one root window when Xinerama is used.)
-
 <P>
 </DD>
 <DT><STRONG>WMPlex</STRONG></DT>
-<DD>is a base class for all regions that''multiplex'' 
+<DD>is a base class for all regions that ``multiplex'' 
     other regions. This means that of the regions managed by the multiplexer,
-    only one can be displayed at a time. Classes that inhereit WMPlex
-    include screens and frames.
+    only one can be displayed at a time. 
 
 <P>
 </DD>
 <DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="329"></A> is the class for objects
-    corresponding to physical screens. Screens may share a root
-    window when the Xinerama extension is used as explained above.
+<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="330"></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).
+<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="331"></A> is the base class for groups.
+<DD><A NAME="330"></A> is the base class for groups.
     Particular types of groups are workspaces 
-    (WGroupWS<A NAME="332"></A>)
+    (WGroupWS<A NAME="331"></A>)
     and groups of client windows
-    (WGroupCW<A NAME="333"></A>).
+    (WGroupCW<A NAME="332"></A>).
 </DD>
 </DL>
 
@@ -240,12 +239,12 @@ Classes implemented by the <SPAN  CLASS="textit">mod_tiling</SPAN> module:
 <P>
 <DL>
 <DT><STRONG>WTiling</STRONG></DT>
-<DD><A NAME="335"></A> is the class for tilings
+<DD><A NAME="334"></A> is the class for tilings
     of frames.
   
 </DD>
 <DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="336"></A> (or, more specifically, classes
+<DD><A NAME="335"></A> (or, more specifically, classes
     that inherit it) encode the WTiling tree structure.
 </DD>
 </DL>
@@ -256,26 +255,26 @@ Classes implemented by the <SPAN  CLASS="textit">mod_query</SPAN> module:
 <P>
 <DL>
 <DT><STRONG>WInput</STRONG></DT>
-<DD><A NAME="338"></A> is a virtual base class for the
+<DD><A NAME="337"></A> is a virtual base class for the
     two classes below.
   
 </DD>
 <DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="339"></A> is the class for the ''queries'',
+<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
+    screens. Queries are the functional equivalent of ``mini buffers'' in
     many text editors.
   
 </DD>
 <DT><STRONG>WMessage</STRONG></DT>
-<DD><A NAME="340"></A> implements the boxes for 
+<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
+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.
@@ -292,7 +291,7 @@ binding callbacks in the move and resize mode.
 <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="281"></A> for an object is always a 
+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.
@@ -302,7 +301,7 @@ Figure <A HREF="#fig:parentship">2</A>.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="292"></A>
+<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>
@@ -323,7 +322,7 @@ Most common parent-child relations</CAPTION>
 
 <P>
 WRegions have very little control over their children as a parent.
-The manager<A NAME="296"></A> WRegion has much more control over its
+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
@@ -341,7 +340,7 @@ but all have a parent-a screen if not anything else.
 
 <P>
 
-<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="304"></A>
+<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>
@@ -405,7 +404,7 @@ consideration:
 <P>
 <BR><HR><H4>Footnotes</H4>
 <DL>
-<DT><A NAME="foot212">... design</A><A
+<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
 
index 0309e19e39ec3072217a2c6ac64b8e89aff4c0e4..63c9852e7ad8949d78479cf109b2f3d2a604a06e 100644 (file)
@@ -64,20 +64,20 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <P>
 First, to get things clear, what are considered objects here are C
-structures containing a properly initialized <A NAME="427"></A>
+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="429"></A> class type info structure and
-a list of so called ''watches''. The WObjDescr structure simply
+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'').
+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="430"></A> structure) may be used to create safe references to
+<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
index 1ae2bf72847ad5555eb1dc8152b683c0bd1d9bde..41c85218ebd289de936185050f6991fa87f7c6c7 100644 (file)
@@ -126,11 +126,11 @@ C side of Ion and Lua:
 <TD ALIGN="LEFT">&nbsp;</TD>
 </TR>
 <TR><TD ALIGN="RIGHT">t</TD>
-<TD ALIGN="LEFT">ExtlTab<A NAME="520"></A></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="521"></A></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>
@@ -195,7 +195,7 @@ initialisation and deinitialisation code.
 
 <P>
 You've seen the terms level 1 and 2 call handler mentioned above. 
-<A NAME="490"></A>
+<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
@@ -230,10 +230,10 @@ supported by the generated L2 call handlers).
 
 <P>
 The functions
-<TT>extl_call</TT><A NAME="514"></A>,
-<TT>extl_call_named</TT><A NAME="515"></A>,
-<TT>extl_dofile</TT><A NAME="516"></A> and
-<TT>extl_dostring</TT><A NAME="517"></A>
+<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
@@ -249,7 +249,7 @@ 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="518"></A>.
+<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
@@ -263,7 +263,7 @@ calls to all exported functions.
 
 <P>
 Configuration files should be read as before with the function
-<TT>read_config_for</TT><A NAME="519"></A>
+<TT>read_config_for</TT><A NAME="518"></A>
 except that the list of known options is no longer present.
 
 <P>
index d3aba2e7d96c6cc553064f83c0e67646e0071b54..45b1c2964cb30faca198b2e78deb86f0465f0e8e 100644 (file)
@@ -83,10 +83,9 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 <P>
 To keep Ion's code as simple as possible yet safe, there are restrictions
 when the WObj
-<TT>destroy_obj</TT><A NAME="618"></A>
+<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>defer_destroy</TT><A NAME="619"></A>
+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. 
 
@@ -103,8 +102,7 @@ following cases:
       when the function created a frame to manage some other object but for
       some reason failed to reparent the object to this frame.
 </LI>
-<LI>In a deferred action handler set with
-      <TT>defer_action</TT><A NAME="620"></A>.
+<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>
@@ -116,7 +114,7 @@ following cases:
 <P>
 If there are no serious side effects from deferring destroying the
 object or you're unsure whether it is safe to destroy the object
-immediately, use <TT>defer_destroy</TT>.
+immediately, use <TT>mainloop_defer_destroy</TT>.
 
 <P>
 
@@ -145,7 +143,7 @@ parameters to functions.
 <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
+<TD ALIGN="LEFT">The called function may modify the string but the ``owner'' of
        the string is case-dependant.</TD>
 </TR>
 </TABLE>
index 8c20249f1366417f51316185712aae3b86207980..61cff1acbf8c0c3b5052d7563886de32462fa429 100644 (file)
@@ -78,7 +78,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 </H1>
 
 <P>
-If you want to submit patches to Ion, you MUST follow my coding 
+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
@@ -94,7 +94,7 @@ things to take note of.
 <P>
 
 <UL>
-<LI>Indentations of 4 with <SPAN  CLASS="textit">tab size=4</SPAN>. 
+<LI>Indentations of 4 with spaces.
 
 <P>
 </LI>
index 6e12241b32f2584b8dcdbb947906606919c1935d..d14a7c0d055a53f96d0e67a834ed34f65629909b 100644 (file)
@@ -58,77 +58,77 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 Index</A>
 </H2><HR><DL>
 <DD><STRONG>call handler</STRONG>
- : <A HREF="node4.html#490"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>defer_action</TT></STRONG>
- : <A HREF="node5.html#620"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defer_destroy</TT></STRONG>
- : <A HREF="node5.html#619"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#618"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#514"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <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#515"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <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#516"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <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#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <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#518"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
 <DD><STRONG>ExtlFn</STRONG>
- : <A HREF="node4.html#521"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>ExtlTab</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#296"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#324"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#323"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>parent</STRONG>
- : <A HREF="node2.html#281"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#519"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <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#242"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#244"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node2.html#243"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<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#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WEdln</STRONG>
- : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#338"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WFrame</STRONG>
- : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WGroup</STRONG>
- : <A HREF="node2.html#331"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WGroupCW</STRONG>
- : <A HREF="node2.html#333"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupWS</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#338"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#337"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WMessage</STRONG>
- : <A HREF="node2.html#340"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WObj</STRONG>
- : <A HREF="node3.html#427"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN></A>
 <DD><STRONG>WObjDescr</STRONG>
- : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#428"><SPAN CLASS="arabic">2</SPAN></A>
 <DD><STRONG>WRegion</STRONG>
- : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <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#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>WSplit</STRONG>
- : <A HREF="node2.html#336"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WTiling</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#430"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN></A>
 <DD><STRONG>WWindow</STRONG>
- : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG>Xinerama</STRONG>
- : <A HREF="node2.html#245"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#248"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 
 </DL>
 
index fd8126b7759406ba932aeb04b4e8fbe7f1ac0228..288d58959e47592cac2074d11aae092819814f40 100644 (file)
@@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney.
 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-03-18
+The translation was initiated by tuomov on 2007-05-06
 <BR><HR>
 
 </BODY>
index 0e172d364180b4c8224e436dd9c548c86e236cad..134aeed93725223d06fae5103b20b52415a9bd5e 100644 (file)
@@ -17,8 +17,7 @@
 % URL settings
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\urlstyle{rm}
-\newcommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}}
+\urlstyle{tt}
 
 % listings package
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -47,6 +46,7 @@
 %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!}
 
@@ -60,6 +60,7 @@
     
 \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}}
 
diff --git a/doc/miscref.tex b/doc/miscref.tex
new file mode 100644 (file)
index 0000000..44b0818
--- /dev/null
@@ -0,0 +1,44 @@
+
+\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.
index 5a5b04f54ad7de29a862d98e21d4699364f523e5..b9de1475cc0920da336ed23aff8375e616a0b76d 100644 (file)
@@ -5,7 +5,7 @@
 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
+naturally expressed as such ``objects''. Therefore Ion implements
 a rather primitive OO system for these screen objects and some
 other things. 
 
@@ -21,7 +21,7 @@ basic relations.
 
 For simplicity we consider only the essential-for-basic-configuration
 Ioncore, \file{mod\_tiling} and \file{mod\_query} classes. 
-See Appendix \ref{app:fullhierarchy} for the full class hierachy visible
+See Appendix \ref{app:fullhierarchy} for the full class hierarchy visible
 to Lua side.
 
 \subsection{Class hierarchy}
@@ -73,7 +73,7 @@ The core classes:
     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''
+    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}.
 
@@ -85,27 +85,26 @@ The core classes:
     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}.
-    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 hacks such as 
+    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.)
+    one root window when Xinerama is used.) 
     
-  \item[\type{WMPlex}] is a base class for all regions that''multiplex'' 
-    other regions. This means that of the regions managed by the multiplexer,
-    only one can be displayed at a time. Classes that inhereit \type{WMPlex}
-    include screens and frames.
-    
-  \item[\type{WScreen}]\indextype{WScreen} is the class for objects
-    corresponding to physical screens. Screens may share a root
-    window when the Xinerama extension is used as explained above.
-
   \item[\type{WFrame}]\indextype{WFrame} is the class for frames.
-    While most Ion's objects have no graphical presentation, frames basically
-    add to \type{WMPlex}es the decorations around client windows 
-    (borders, tabs).
+    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 
@@ -130,16 +129,16 @@ 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'',
+  \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
+    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
+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.
index ccc440d5581edee1ac528e90260c1ead5da29028..a224aa524c00e6fdaa96091d108375b1ae7c2638 100644 (file)
@@ -1,14 +1,14 @@
 \section{Object system implementation}
 
 First, to get things clear, what are considered objects here are C
-structures containing a properly initialized \type\indextype{WObj}
+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
+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'').
+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
index c5db5f808e6d1b5c88b43399336002939508adb2..8a0a6c39cbaa40376a8e8883543c78b46ea97132 100644 (file)
@@ -33,14 +33,11 @@ should be loaded. Currently Ion provides the following modules:
       keyboard-operated in-frame menus.
     \item[\file{mod\_statusbar}] Module that implements a statusbar that
       can be adaptively embedded in each workspace's layout.
-    \item[\file{mod\_dock}] Module for docking Window Maker dockapps.
+    \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\_mgmtmode}] Support module for implementing ''management
-      modes'' with a XOR-frame similar to move/resize mode around selected
-      region.
     \item[\file{mod\_sm}] Session management support module.
       \emph{Loaded automatically when needed!}
 \end{description}
@@ -48,10 +45,10 @@ should be loaded. Currently Ion provides the following modules:
 So-called drawing engines are also implemented as a modules,
 but they are not discussed here; see chapter \ref{chap:gr}.
 
-The stock configuration for the 'ion3' executable loads all of the modules
-mentioned above except \file{mod\_dock} and file{mod\_mgmtmode}.
-The stock configuration for the 'pwm3' executable (which differs from the 
-'ion3' executable in a few configuration details, such as Xinerama usage)
+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.
 
 
index e1fe6b2f5a4f02605701a061b93e7507000e27b5..82e70ebab75f9ae9b1f78b643d2acf0979b7782c 100644 (file)
@@ -1,14 +1,15 @@
 
 \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 \code{\%foo} or \code{\%foo_bar} to be 
-inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} to
-load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side 
+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
-'\code{foo}'.
+\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.
@@ -16,11 +17,11 @@ Additionally the script should provide a 'template' for the meter to
 facilitate expected width calculation by \file{mod\_statusbar}, and
 may provide a 'hint' for colour-coding the value. The interpretation
 of hints depends on the graphical style in use, and currently the
-stock styles support the \code{normal}, \code{important} and 
-\code{critical} hints.
+stock styles support the \codestr{normal}, \codestr{important} and 
+\codestr{critical} hints.
 
 
-In our example of the 'foo monitor', at script init we might broadcast
+In our example of the 'foo monitor', at script initialisation we might broadcast
 the template as follows:
 
 \begin{verbatim}
index 69fe9459fa57604da8fbe20feac9e743a725b5c5..9cf86d1559bd8e3c56425f7de4cb141db76e9eac 100644 (file)
@@ -4,20 +4,20 @@
 
 This chapter documents some additional features of the Ion configuration
 and scripting interface that can be used for more advanced scripting than
-the basic configuration exlained in chapter \ref{chap:config}.
+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
+There are two types of them; normal and ``alternative'' hooks. Normal
 hooks do not return anything, but alt-hooks should return a boolean
-indicating whether it handled its assigned task succesfully. In the case
+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 (succesfull) result with the handler as parameter. Similarly
+on the (successful) result with the handler as parameter. Similarly
 handlers are unregistered with \fnref{WHook.remove}. For example:
 
 \begin{verbatim}
@@ -31,7 +31,7 @@ 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 
+Note that many of the hooks are called in ``protected mode'' and can not 
 use any functions that modify Ion's internal state. TODO: More detailed 
 documentation when this is final.
 
@@ -39,7 +39,7 @@ documentation when this is final.
 
 \subsection{Direct object references}
 
-All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+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
index 6a940a12f0d1afe944fa68861ec7b5f46f68663d..16aa8f4b77d365c50864b531d6b737bc7c51089a 100644 (file)
@@ -14,10 +14,8 @@ ETC =        cfg_ion.lua cfg_ioncore.lua cfg_kludges.lua cfg_defaults.lua \
        look_brownsteel.lua look_clean.lua look_dusky.lua \
        look_greyviolet.lua look_ios.lua look_cleanviolet.lua \
        look_simpleblue.lua look_cleanios.lua look_newviolet.lua \
-        lookcommon_clean.lua lookcommon_clean_stdisp.lua \
-        lookcommon_clean_tab.lua lookcommon_clean_frame.lua \
-        lookcommon_emboss.lua lookcommon_emboss_stdisp.lua \
-        lookcommon_emboss_tab.lua lookcommon_emboss_frame.lua
+        look_greenlight.lua \
+        lookcommon_clean.lua lookcommon_emboss.lua
 
 ######################################
 
index d1255e5807368c8f85be51113240e38b8fa02e38..790cc46fa2178ba8843a5aad4829944ed133dfaa 100644 (file)
@@ -58,3 +58,19 @@ dopath("cfg_defaults")
 --dopath("mod_dock")
 --dopath("mod_sp")
 
+
+--
+-- Common customisations
+--
+
+-- Uncommenting the following lines should get you plain-old-menus instead
+-- of query-menus.
+
+--defbindings("WScreen", {
+--    kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"),
+--})
+--
+--defbindings("WMPlex.toplevel", {
+--    kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+--})
+
index 4cfe2a336132b8cabc1942b8ee224cf3529aebc3..be393c9b1a75664e0b6a4f79493d999da77d9b4a 100644 (file)
@@ -179,8 +179,8 @@ defbindings("WMPlex.toplevel", {
     kpress(META.."G", "mod_query.query_gotoclient(_)"),
     
     bdoc("Display context menu."),
-    --kpress(META.."M", "mod_menu.menu(_, _chld, 'ctxmenu')"),
-    kpress(META.."M", "mod_query.query_menu(_, _chld, 'ctxmenu', 'Context menu:')"),
+    --kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+    kpress(META.."M", "mod_query.query_menu(_, _sub, 'ctxmenu', 'Context menu:')"),
 })
 
 
@@ -197,7 +197,7 @@ defbindings("WFrame", {
     }),
     
     bdoc("Display context menu."),
-    mpress("Button3", "mod_menu.pmenu(_, _chld, 'ctxmenu')"),
+    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
     
     bdoc("Begin move/resize mode."),
     kpress(META.."R", "WFrame.begin_kbresize(_)"),
@@ -222,13 +222,13 @@ defbindings("WFrame", {
 -- Frames for transient windows ignore this bindmap
 
 defbindings("WFrame.toplevel", {
-    bdoc("Tag current object within the frame."),
-    kpress(META.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"),
-    
     bdoc("Query for a client window to attach."),
     kpress(META.."A", "mod_query.query_attachclient(_)"),
     
     submap(META.."K", {
+        -- Display tab numbers when modifiers are released
+        submap_wait("ioncore.tabnum.show(_)"),
+        
         bdoc("Switch to n:th object within the frame."),
         kpress("1", "WFrame.switch_nth(_, 0)"),
         kpress("2", "WFrame.switch_nth(_, 1)"),
index 974ac088faf4512e794c400ffb58d6355c82375e..ce0f39c1f22ecd4011ec606fbac4ae0afb8768d2 100644 (file)
@@ -9,13 +9,6 @@ defwinprop{
     acrobatic = true
 }
 
--- Galeon's find dialog does not always have its transient_for hint 
--- set when the window is being mapped.
-defwinprop{
-    class = "galeon_browser",
-    instance = "dialog_find",
-    transient_mode = "current",
-}
 
 defwinprop{
     class = "Xpdf",
@@ -24,6 +17,16 @@ defwinprop{
 }
 
 
+-- Put all dockapps in the statusbar's systray, also adding the missing
+-- size hints necessary for this to work.
+defwinprop{
+    is_dockapp = true,
+    statusbar = "systray",
+    max_size = { w = 64, h = 64},
+    min_size = { w = 64, h = 64},
+}
+
+
 -- You might want to enable these if you really must use XMMS. 
 --[[
 defwinprop{
index 5aa488e2a2046c4ec1d29605aad91a6ac0e60aee..68346d4df5e4bf360c37e4f7238b609292c804e9 100644 (file)
@@ -17,20 +17,7 @@ de.defstyle("*", {
     text_align = "center",
 })
 
-de.defstyle("frame", {
-    based_on = "*",
-    shadow_colour = "#404040",
-    highlight_colour = "#707070",
-    padding_colour = "#505050",
-    background_colour = "#000000",
-    foreground_colour = "#ffffff",
-    padding_pixels = 1,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-})
-
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "#304050",
@@ -59,9 +46,7 @@ de.defstyle("tab", {
     text_align = "center",
 })
 
-
 de.defstyle("input", {
-    based_on = "*",
     shadow_colour = "#404040",
     highlight_colour = "#707070",
     background_colour = "#000000",
@@ -81,7 +66,6 @@ de.defstyle("input", {
 })
 
 de.defstyle("input-menu", {
-    based_on = "*",
     de.substyle("active", {
         shadow_colour = "#304050",
         highlight_colour = "#708090",
index a95cbf3873397e84bcd1a79a91624c6ee9d0b6c5..033655fbdf0c14455d8a0da62c3297477646f7e4 100644 (file)
@@ -18,7 +18,6 @@ de.defstyle("*", {
 })
 
 de.defstyle("tab", {
-    based_on = "*",
     font = "-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
     de.substyle("active-selected", {
         shadow_colour = "white",
@@ -48,15 +47,7 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input", {
-    based_on = "*",
-    shadow_colour = "grey",
-    highlight_colour = "grey",
-    background_colour = "#545d75",
     foreground_colour = "white",
-    padding_pixels = 1,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-    border_style = "elevated",
     de.substyle("*-cursor", {
         background_colour = "white",
         foreground_colour = "#545d75",
@@ -71,8 +62,8 @@ de.defstyle("input", {
 dopath("lookcommon_clean")
 
 de.defstyle("tab-menuentry-big", {
-    based_on = "tab-menuentry",
     padding_pixels = 7,
+    font = "-misc-fixed-medium-r-*-*-18-*-*-*-*-*-*-*",
 })
 
 gr.refresh()
index 8af15483d915444d8ce95f8a4e61b7df53dc4ce4..e1173b7965f408847056155b23da71d93014ebd7 100644 (file)
@@ -19,7 +19,6 @@ de.defstyle("*", {
 })
 
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "#f0f066",
@@ -49,7 +48,6 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input-edln", {
-    based_on = "*",
     de.substyle("*-cursor", {
         background_colour = "#000000",
         foreground_colour = "#d8d8d8",
index d52efacdfb32e1bd0079d76cad8b2c0a85278bb2..542fb7eee66f604bffa343c68850e1835d2f9ee8 100644 (file)
@@ -30,7 +30,6 @@ de.defstyle("*", {
 
 
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     
     de.substyle("active-selected", {
@@ -52,7 +51,6 @@ de.defstyle("tab", {
 
 
 de.defstyle("input", {
-    based_on = "*",
     text_align = "left",
     spacing = 1,
     -- Greyish violet background
index 4387e9d8ab548b030b43bc70b0354fa98768425e..aaa76f69c4d6db821029aa29ef95b2e389c7dc63 100644 (file)
@@ -17,20 +17,7 @@ de.defstyle("*", {
     text_align = "center",
 })
 
-de.defstyle("frame", {
-    based_on = "*",
-    shadow_colour = "#404040",
-    highlight_colour = "#707070",
-    padding_colour = "#505050",
-    background_colour = "#000000",
-    foreground_colour = "#ffffff",
-    padding_pixels = 2,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-})
-
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "#452727",
@@ -60,7 +47,6 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input", {
-    based_on = "*",
     shadow_colour = "#404040",
     highlight_colour = "#707070",
     background_colour = "#000000",
@@ -77,7 +63,6 @@ de.defstyle("input", {
 })
 
 de.defstyle("input-menu", {
-    based_on = "*",
     de.substyle("active", {
         shadow_colour = "#452727",
         highlight_colour = "#866868",
diff --git a/etc/look_greenlight.lua b/etc/look_greenlight.lua
new file mode 100644 (file)
index 0000000..d797b74
--- /dev/null
@@ -0,0 +1,73 @@
+--
+-- look_greenlight for Ion's default drawing engine. 
+-- 
+
+if not gr.select_engine("de") then
+    return
+end
+
+-- Clear existing styles from memory.
+de.reset()
+
+-- Base style
+de.defstyle("*", {
+    highlight_colour = "#666666",
+    shadow_colour = "#666666",
+    background_colour = "#333333",
+    foreground_colour = "#cccccc",
+    
+    shadow_pixels = 1,
+    highlight_pixels = 1,
+    padding_pixels = 1,
+    spacing = 0,
+    border_style = "elevated",
+    border_sides = "tb",
+    
+    font = "-*-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*",
+    text_align = "center",
+})
+
+
+de.defstyle("frame", {
+    background_colour = "#000000",
+    transparent_background = false,
+})
+
+
+de.defstyle("tab", {
+    font = "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*",
+    spacing = 1,
+    
+    de.substyle("active-selected", {
+        highlight_colour = "#8ac267",
+        shadow_colour = "#8ac267",
+        background_colour = "#354743",
+    }),
+
+    de.substyle("inactive-selected", {
+        highlight_colour = "#6aa247",
+        shadow_colour = "#6aa247",
+    }),
+})
+
+
+de.defstyle("input", {
+    text_align = "left",
+    spacing = 1,
+    
+    de.substyle("*-selection", {
+        background_colour = "#354743",
+    }),
+
+    de.substyle("*-cursor", {
+        background_colour = "#8ac267",
+        foreground_colour = "#333333",
+    }),
+})
+
+
+dopath("lookcommon_clean")
+
+    
+-- Refresh objects' brushes.
+gr.refresh()
index 43dafee90116a4f9935e1e01eacf5591d9ab83fd..38bdd63dfd79e187e479e34b5b00c6b006cdaf1b 100644 (file)
@@ -17,20 +17,7 @@ de.defstyle("*", {
     text_align = "center",
 })
 
-de.defstyle("frame", {
-    based_on = "*",
-    shadow_colour = "#777777",
-    highlight_colour = "#eeeeee",
-    padding_colour = "#aaaaaa",
-    background_colour = "#000000",
-    foreground_colour = "#ffffff",
-    padding_pixels = 2,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-})
-
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "#333366",
@@ -60,21 +47,12 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input", {
-    based_on = "*",
-    shadow_colour = "#777777",
-    highlight_colour = "#eeeeee",
-    background_colour = "#aaaaaa",
-    foreground_colour = "#000000",
-    padding_pixels = 1,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-    border_style = "elevated",
     de.substyle("*-cursor", {
         background_colour = "#000000",
         foreground_colour = "#aaaaaa",
     }),
     de.substyle("*-selection", {
-        background_colour = "#aaaaaa",
+        background_colour = "#666699",
         foreground_colour = "black",
     }),
 })
index 85afceb1d2f4187c14ffc97da9f1d31ef9e1a355..8427773080e09772ad537d84f0120a918b394cfc 100644 (file)
@@ -17,26 +17,7 @@ de.defstyle("*", {
     text_align = "center",
 })
 
-de.defstyle("frame", {
-    based_on = "*",
-    shadow_colour = "#606060",
-    highlight_colour = "#ffffff",
-    padding_colour = "#d8d8d8",
-    background_colour = "#000000",
-    foreground_colour = "#000000",
-    padding_pixels = 2,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-    de.substyle("active", {
-        shadow_colour = "#606060",
-        highlight_colour = "#ffffff",
-        background_colour = "#d8d8d8",
-        foreground_colour = "#000000",
-    }),
-})
-
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "#f09000",
@@ -66,15 +47,6 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input", {
-    based_on = "*",
-    shadow_colour = "#606060",
-    highlight_colour = "#ffffff",
-    background_colour = "#d8d8d8",
-    foreground_colour = "#000000",
-    padding_pixels = 1,
-    highlight_pixels = 1,
-    shadow_pixels = 1,
-    border_style = "elevated",
     de.substyle("*-cursor", {
         background_colour = "#000000",
         foreground_colour = "#d8d8d8",
@@ -87,5 +59,17 @@ de.defstyle("input", {
 
 dopath("lookcommon_emboss")
 
+de.defstyle("frame-tiled", {
+    spacing = 0,
+})
+
+de.defstyle("frame-tiled-alt", {
+    spacing = 0,
+})
+
+de.defstyle("tab-frame-tiled", {
+    spacing = 0,
+})
+
 gr.refresh()
 
index 76e2d5ada1a70696a7659ec109c470f126f01748..5647d5e70ea8f640f9d008587f8a85150b444583 100644 (file)
@@ -28,7 +28,6 @@ de.defstyle("*", {
 
 
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     
     de.substyle("active-selected", {
@@ -48,7 +47,6 @@ de.defstyle("tab", {
 
 
 de.defstyle("input", {
-    based_on = "*",
     text_align = "left",
     highlight_colour = "#eeeeff",
     shadow_colour = "#eeeeff",
@@ -66,7 +64,6 @@ de.defstyle("input", {
 
 
 de.defstyle("input-menu", {
-    based_on = "input",
     highlight_pixels = 0,
     shadow_pixels = 0,
     padding_pixels = 0,
@@ -74,40 +71,20 @@ de.defstyle("input-menu", {
 
 
 de.defstyle("frame", {
-    based_on = "*",
-    background_colour = "#000000",
-    transparent_background = false,
     shadow_pixels = 1,
     highlight_pixels = 1,
     padding_pixels = 0,
     border_sides = "all",
-    de.substyle("quasiactive", {
-        -- Something detached from the frame is active
-        padding_colour = "#901010",
-    }),
 })
 
-de.defstyle("frame-tiled", {
-    based_on = "frame",
-    shadow_pixels = 0,
-    highlight_pixels = 0,
-    padding_pixels = 1,
-})
-
-de.defstyle("frame-tiled-alt", {
-    based_on = "frame-tiled",
+de.defstyle("frame-transient", {
     bar = "none",
+    padding_pixels = 1,
 })
 
-de.defstyle("frame-floating", {
-    based_on = "frame",
-    bar = "shaped",
-    padding_pixels = 0,
-})
 
+dopath("lookcommon_clean")
 
-dopath("lookcommon_clean_stdisp")
-dopath("lookcommon_clean_tab")
     
 -- Refresh objects' brushes.
 gr.refresh()
index 1bce224d1a6611ea680fbab65c0e56265b36f678..3b1cb6a67f62cc8136937381b439b1be8ac2ac56 100644 (file)
@@ -18,7 +18,6 @@ de.defstyle("*", {
 })
 
 de.defstyle("frame", {
-    based_on = "*",
     shadow_colour = "black",
     highlight_colour = "black",
     padding_colour = "black",
@@ -36,7 +35,6 @@ de.defstyle("frame", {
 })
 
 de.defstyle("tab", {
-    based_on = "*",
     font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
     de.substyle("active-selected", {
         shadow_colour = "black",
@@ -66,7 +64,6 @@ de.defstyle("tab", {
 })
 
 de.defstyle("input", {
-    based_on = "*",
     shadow_colour = "black",
     highlight_colour = "black",
     background_colour = "#3f3f3f",
@@ -86,7 +83,6 @@ de.defstyle("input", {
 })
 
 de.defstyle("input-menu", {
-    based_on = "input",
     padding_pixels=0,
 })
 
index 43399d963721913ef0454ef10cf1f861b757aaee..49bf70af24fb4b10fb18429c5fb7316b657c8f87 100644 (file)
@@ -1,5 +1,93 @@
--- Settings common to the "clean" styles.
+-- Common settings for the "clean" styles
 
-dopath("lookcommon_clean_stdisp")
-dopath("lookcommon_clean_tab")
-dopath("lookcommon_clean_frame")
+de.defstyle("frame", {
+    background_colour = "#000000",
+    de.substyle("quasiactive", {
+        -- Something detached from the frame is active
+        padding_colour = "#901010",
+    }),
+    de.substyle("userattr1", {
+        -- For user scripts
+        padding_colour = "#009010",
+    }),
+})
+
+de.defstyle("frame-tiled", {
+    shadow_pixels = 0,
+    highlight_pixels = 0,
+    padding_pixels = 1,
+    spacing = 1,
+})
+
+de.defstyle("frame-tiled-alt", {
+    bar = "none",
+})
+
+de.defstyle("frame-floating", {
+    bar = "shaped",
+    padding_pixels = 0,
+})
+
+
+de.defstyle("actnotify", {
+    shadow_colour = "#c04040",
+    highlight_colour = "#c04040",
+    background_colour = "#901010",
+    foreground_colour = "#eeeeee",
+})
+
+de.defstyle("tab", {
+    de.substyle("*-*-*-unselected-activity", {
+        shadow_colour = "#c04040",
+        highlight_colour = "#c04040",
+        background_colour = "#901010",
+        foreground_colour = "#eeeeee",
+    }),
+    
+    de.substyle("*-*-*-selected-activity", {
+        shadow_colour = "#c04040",
+        highlight_colour = "#c04040",
+        background_colour = "#b03030",
+        foreground_colour = "#ffffff",
+    }),
+    
+    de.substyle("*-*-*-tabnumber", {
+        background_colour = "black",
+        foreground_colour = "green",
+    }),
+})
+
+de.defstyle("tab-frame", {
+    spacing = 1,
+})
+
+de.defstyle("tab-frame-floating", {
+    spacing = 0,
+})
+
+de.defstyle("tab-menuentry", {
+    text_align = "left",
+})
+
+de.defstyle("tab-menuentry-big", {
+    font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
+    padding_pixels = 7,
+})
+
+
+de.defstyle("stdisp", {
+    shadow_pixels = 0,
+    highlight_pixels = 0,
+    text_align = "left",
+    background_colour = "#000000",
+    foreground_colour = "grey",
+    font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
+    
+    de.substyle("important", {
+        foreground_colour = "green",
+    }),
+
+    de.substyle("critical", {
+        foreground_colour = "red",
+    }),
+})
diff --git a/etc/lookcommon_clean_frame.lua b/etc/lookcommon_clean_frame.lua
deleted file mode 100644 (file)
index b118558..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
--- Common frame settings for the "clean" styles
-
-de.defstyle("frame", {
-    based_on = "*",
-    background_colour = "#000000",
-    transparent_background = false,
-    de.substyle("quasiactive", {
-        -- Something detached from the frame is active
-        padding_colour = "#901010",
-    }),
-})
-
-de.defstyle("frame-tiled", {
-    based_on = "frame",
-    shadow_pixels = 0,
-    highlight_pixels = 0,
-    padding_pixels = 1,
-    spacing = 1,
-})
-
-de.defstyle("frame-tiled-alt", {
-    based_on = "frame-tiled",
-    bar = "none",
-})
-
-de.defstyle("frame-floating", {
-    based_on = "frame",
-    bar = "shaped",
-    padding_pixels = 0,
-})
diff --git a/etc/lookcommon_clean_stdisp.lua b/etc/lookcommon_clean_stdisp.lua
deleted file mode 100644 (file)
index 73abd0d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
--- Common stdisp configuration for the "clean styles"
-
-de.defstyle("stdisp", {
-    based_on = "*",
-    shadow_pixels = 0,
-    highlight_pixels = 0,
-    text_align = "left",
-    background_colour = "#000000",
-    foreground_colour = "grey",
-    font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
-    
-    de.substyle("important", {
-        foreground_colour = "green",
-    }),
-
-    de.substyle("critical", {
-        foreground_colour = "red",
-    }),
-})
diff --git a/etc/lookcommon_clean_tab.lua b/etc/lookcommon_clean_tab.lua
deleted file mode 100644 (file)
index e6a619d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
--- Common tab configuration (mostly activity stuff) for the "clean styles"
-
-de.defstyle("actnotify", {
-    based_on = "*",
-    shadow_colour = "#c04040",
-    highlight_colour = "#c04040",
-    background_colour = "#901010",
-    foreground_colour = "#eeeeee",
-})
-
-de.defstyle("tab-frame", {
-    based_on = "tab",
-    -- TODO: some kind of amend option. It should not be necessary to 
-    -- duplicate this definition for both tab-frame and tab-menuentry,
-    -- or for each style, nor use more complex hacks to communicate
-    -- this stuff otherwise.
-    de.substyle("*-*-*-unselected-activity", {
-        shadow_colour = "#c04040",
-        highlight_colour = "#c04040",
-        background_colour = "#901010",
-        foreground_colour = "#eeeeee",
-    }),
-    
-    de.substyle("*-*-*-selected-activity", {
-        shadow_colour = "#c04040",
-        highlight_colour = "#c04040",
-        background_colour = "#b03030",
-        foreground_colour = "#ffffff",
-    }),
-})
-
-de.defstyle("tab-frame-tiled", {
-    based_on = "tab-frame",
-    spacing = 1,
-})
-
-de.defstyle("tab-menuentry", {
-    based_on = "tab",
-    text_align = "left",
-    
-    de.substyle("*-*-*-unselected-activity", {
-        shadow_colour = "#c04040",
-        highlight_colour = "#c04040",
-        background_colour = "#901010",
-        foreground_colour = "#eeeeee",
-    }),
-    
-    de.substyle("*-*-*-selected-activity", {
-        shadow_colour = "#c04040",
-        highlight_colour = "#c04040",
-        background_colour = "#b03030",
-        foreground_colour = "#ffffff",
-    }),
-})
-
-de.defstyle("tab-menuentry-big", {
-    based_on = "tab-menuentry",
-    font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
-    padding_pixels = 7,
-})
index b32289a05847ad1f595199800ca15e6acf0b8e1f..b15de6a0dc423fcd169681de556cedde1d28cc85 100644 (file)
@@ -1,5 +1,107 @@
--- Settings common to "emboss" styles.
+-- Common settings for the "emboss" styles
 
-dopath("lookcommon_emboss_stdisp")
-dopath("lookcommon_emboss_tab")
-dopath("lookcommon_emboss_frame")
+de.defstyle("frame", {
+    background_colour = "#000000",
+    -- The special "inherit" value causes setting 'background_colour'
+    -- above not to set padding_colour, but this colour being inherited.
+    padding_colour = "inherit",
+    de.substyle("quasiactive", {
+        -- Something detached from the frame is active
+        padding_colour = "#901010",
+    }),
+    de.substyle("userattr1", {
+        -- For user scripts
+        padding_colour = "#009010",
+    }),
+    border_style = "ridge",
+    padding_pixels = 2,
+    highlight_pixels = 1,
+    shadow_pixels = 1,
+    spacing = 1,
+})
+
+de.defstyle("frame-tiled", {
+    border_style = "inlaid",
+    padding_pixels = 1,
+})
+
+de.defstyle("frame-tiled-alt", {
+    bar = "none",
+})
+
+de.defstyle("frame-floating", {
+    bar = "shaped",
+    spacing = 0,
+})
+
+de.defstyle("frame-transient", {
+    bar = "none",
+    spacing = 0,
+})
+
+de.defstyle("actnotify", {
+    shadow_colour = "#600808",
+    highlight_colour = "#c04040",
+    background_colour = "#b03030",
+    foreground_colour = "#ffffff",
+})
+
+de.defstyle("tab", {
+    de.substyle("*-*-*-unselected-activity", {
+        shadow_colour = "#600808",
+        highlight_colour = "#c04040",
+        background_colour = "#901010",
+        foreground_colour = "#eeeeee",
+    }),
+    
+    de.substyle("*-*-*-selected-activity", {
+        shadow_colour = "#600808",
+        highlight_colour = "#c04040",
+        background_colour = "#b03030",
+        foreground_colour = "#ffffff",
+    }),
+    
+    de.substyle("*-*-*-tabnumber", {
+        background_colour = "black",
+        foreground_colour = "green",
+    }),
+})
+
+
+de.defstyle("tab-frame", {
+    spacing = 1,
+})
+
+de.defstyle("tab-frame-floating", {
+    spacing = 0,
+})
+
+de.defstyle("tab-frame-transient", {
+    spacing = 0,
+})
+
+de.defstyle("tab-menuentry", {
+    text_align = "left",
+    highlight_pixels = 0,
+    shadow_pixels = 0,
+})
+
+de.defstyle("tab-menuentry-big", {
+    font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
+    padding_pixels = 7,
+})
+
+
+de.defstyle("stdisp", {
+    shadow_pixels = 0,
+    highlight_pixels = 0,
+    text_align = "left",
+
+    de.substyle("important", {
+        foreground_colour = "green",
+    }),
+
+    de.substyle("critical", {
+        foreground_colour = "red",
+    }),
+})
diff --git a/etc/lookcommon_emboss_frame.lua b/etc/lookcommon_emboss_frame.lua
deleted file mode 100644 (file)
index 41e1e95..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-de.defstyle("frame-tiled", {
-    based_on = "frame",
-    border_style = "inlaid",
-    padding_pixels = 1,
-    spacing = 1,
-})
-
-de.defstyle("frame-floating", {
-    based_on = "frame",
-    border_style = "ridge",
-    bar = "shaped"
-})
-
-de.defstyle("frame-tiled-alt", {
-    based_on = "frame-tiled",
-    bar = "none",
-})
diff --git a/etc/lookcommon_emboss_stdisp.lua b/etc/lookcommon_emboss_stdisp.lua
deleted file mode 100644 (file)
index b6a0ed2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
--- Common stdisp settings for the "emboss" styles
-
-de.defstyle("stdisp", {
-    based_on = "*",
-    shadow_pixels = 0,
-    highlight_pixels = 0,
-    text_align = "left",
-
-    de.substyle("important", {
-        foreground_colour = "green",
-    }),
-
-    de.substyle("critical", {
-        foreground_colour = "red",
-    }),
-})
diff --git a/etc/lookcommon_emboss_tab.lua b/etc/lookcommon_emboss_tab.lua
deleted file mode 100644 (file)
index 614ba82..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
--- Common tab settings for the "emboss" styles
-
-de.defstyle("actnotify", {
-    based_on = "*",
-    shadow_colour = "#600808",
-    highlight_colour = "#c04040",
-    background_colour = "#b03030",
-    foreground_colour = "#ffffff",
-})
-
-de.defstyle("tab-frame", {
-    based_on = "tab",
-    -- TODO: some kind of amend option. It should not be necessary to 
-    -- duplicate this definition for both tab-frame and tab-menuentry,
-    -- or for each style, nor use more complex hacks to communicate
-    -- this stuff otherwise.
-    de.substyle("*-*-*-unselected-activity", {
-        shadow_colour = "#600808",
-        highlight_colour = "#c04040",
-        background_colour = "#901010",
-        foreground_colour = "#eeeeee",
-    }),
-    
-    de.substyle("*-*-*-selected-activity", {
-        shadow_colour = "#600808",
-        highlight_colour = "#c04040",
-        background_colour = "#b03030",
-        foreground_colour = "#ffffff",
-    }),
-})
-
-de.defstyle("tab-frame-tiled", {
-    based_on = "tab-frame",
-    spacing = 1,
-})
-
-de.defstyle("tab-menuentry", {
-    based_on = "tab",
-    text_align = "left",
-    highlight_pixels = 0,
-    shadow_pixels = 0,
-    
-    de.substyle("*-*-*-unselected-activity", {
-        shadow_colour = "#600808",
-        highlight_colour = "#c04040",
-        background_colour = "#901010",
-        foreground_colour = "#eeeeee",
-    }),
-    
-    de.substyle("*-*-*-selected-activity", {
-        shadow_colour = "#600808",
-        highlight_colour = "#c04040",
-        background_colour = "#b03030",
-        foreground_colour = "#ffffff",
-    }),
-})
-
-de.defstyle("tab-menuentry-big", {
-    based_on = "tab-menuentry",
-    font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
-    padding_pixels = 7,
-})
index 05c81ed341171efa18fe4affe733dc9fec03afd6..09adb2058833bee3df28569e250871f5d1ad4937 100644 (file)
@@ -1,5 +1,5 @@
 
 Context:
 
-[TAG ion-3ds-20070318
-Tuomo Valkonen <tuomov@iki.fi>**20070318203122
+[TAG ion-3rc-20070506
+Tuomo Valkonen <tuomov@iki.fi>**20070506144318
index 7c53d312895a5451790de005ca2f305f362c9f0b..9dc0c936f040e52af2442d34db21c3816291ab0f 100644 (file)
--- a/ion/ion.c
+++ b/ion/ion.c
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
index ae41fa50c6f0e3d89ac8e1f20e11d65d7fcabfbd..ccf7c36808439d17a0707f33bc4f5a3f83ad8ee9 100644 (file)
@@ -29,7 +29,7 @@ SOURCES=binding.c conf-bindings.c cursor.c event.c exec.c focus.c         \
 LUA_SOURCES=\
        ioncore_ext.lua ioncore_luaext.lua ioncore_bindings.lua \
        ioncore_winprops.lua ioncore_misc.lua ioncore_efbb.lua \
-       ioncore_wd.lua ioncore_menudb.lua
+       ioncore_wd.lua ioncore_menudb.lua ioncore_tabnum.lua
 
 ifeq ($(PRELOAD_MODULES),1)
 CFLAGS += -DCF_PRELOAD_MODULES
index 60c051973adb125a0e1ce50db0035ba0ebcfbb19..25e2a5aba4587f4c91b9ac1e095d325bafbe9ee2 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/setparam.h>
@@ -96,8 +93,8 @@ bool region_set_activity(WRegion *reg, int sp)
 
 
 /*EXTL_DOC
- * Set activity flag of \var{reg}. The \var{how} parameter most be
- * one of (set/unset/toggle).
+ * Set activity flag of \var{reg}. The \var{how} parameter must be
+ * one of \codestr{set}, \codestr{unset} or \codestr{toggle}.
  */
 EXTL_EXPORT_AS(WRegion, set_activity)
 bool region_set_activity_extl(WRegion *reg, const char *how)
@@ -137,7 +134,7 @@ bool ioncore_activity_i(ExtlFn iterfn)
 
 
 /*EXTL_DOC
- * Return first regio non activity list.
+ * Returns first region on activity list.
  */
 EXTL_SAFE
 EXTL_EXPORT
index a718f7c1ac5e0483049df9670c35d98cb2e079e5..519778667f49c985166c6d46f8b3d4ec196ab51c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_ACTIVITY_H
index a1dc7addf23200034454ea5281bcffaccefb91d8..5d81222a97663e6a1e05eba06b183cb0b818c02b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index c4a2d964d6ce0c3d8e72f04d99c69619817b5607..ec518ae397a724a621225f7871588c28dcd06f3a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_ATTACH_H
index d5c85a4fca897ae7404d2d05c49d1ce86881daf5..77e863dd877199ebd7a030fc3bafac67defd802a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index 6b0df42c34455f43a8c9c385fdf6b9eda12c12e1..780c79330cb03020df6a17fd61743aafbee7c0ad 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_BASICPHOLDER_H
index 7b80d111776d7572a29d9d8afc7784b2dd17badd..740e67baa6cf09dc862e0cebf60ef3a67449c478 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -486,6 +483,11 @@ static WBinding *do_bindmap_lookup_binding(WBindmap *bindmap,
     
     binding=search_binding(bindmap, &tmp);
 
+    if(BINDING_IS_PSEUDO(act)){
+        /* No use trying anything else */
+        return binding;
+    }
+    
     if(binding==NULL){
         tmp.state=AnyModifier;
         binding=search_binding(bindmap, &tmp);
index a776a64f92dc57f3ae2a588dc4734e9a5f6c4df3..32cc2bebf8a447fac8f4cb213a64406cf44c2609 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_BINDING_H
 #include <libextl/extl.h>
 
 
-#define BINDING_KEYPRESS        0
-#define BINDING_BUTTONPRESS     1
-#define BINDING_BUTTONMOTION    2
-#define BINDING_BUTTONCLICK     3
-#define BINDING_BUTTONDBLCLICK  4
+enum{
+    BINDING_KEYPRESS,
+    BINDING_BUTTONPRESS,
+    BINDING_BUTTONMOTION,
+    BINDING_BUTTONCLICK,
+    BINDING_BUTTONDBLCLICK,
+    BINDING_SUBMAP_ENTER,
+    BINDING_SUBMAP_RELEASEMOD
+    /*BINDING_SUBMAP_LEAVE*/
+};
 
+#define BINDING_IS_PSEUDO(A) \
+    ((A)==BINDING_SUBMAP_ENTER || (A)==BINDING_SUBMAP_RELEASEMOD)
+    
 #define BINDMAP_INIT        {0, NULL, NULL, NULL, NULL}
 
 #define FOR_ALL_BINDINGS(B, NODE, MAP) \
index c3be60f243dad4cea9db7db61b1ed51240373077..5948c0224fedda8d2dd33aa95f5d017d3053fc9d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/rb.h>
index f9e05791793e354c302de44c790dae2f2ab6e62a..41e2f5817d0bb4279cee7381567e1ec09ca1c7cb 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/map.h>
index 3836bc77930cef9d39b67b534a86c6756985d398..b1bce1b7a6d6b152f067439f3a40d7c59707a51f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_CLASSES_H
index 4a5b4dacfd40ae08492058395d0d826df1b6c6dc..35164de70388ada767bc3a32a7711a96b255fbcb 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -323,8 +320,6 @@ static bool clientwin_init(WClientWin *cwin, WWindow *par, Window win,
     
     set_sane_gravity(cwin->win);
 
-    cwin->transient_for=None;
-    
     cwin->n_cmapwins=0;
     cwin->cmap=attr->colormap;
     cwin->cmaps=NULL;
@@ -481,11 +476,30 @@ again:
         
         xwindow_unmanaged_selectinput(win, 0);
         
-        win=hints->icon_window;
+        /* Copy WM_CLASS as _ION_DOCKAPP_HACK */
+        {
+            char **p=NULL;
+            int n=0;
+            
+            p=xwindow_get_text_property(win, XA_WM_CLASS, &n);
+            
+            if(p!=NULL){
+                xwindow_set_text_property(hints->icon_window, 
+                                          ioncore_g.atom_dockapp_hack,
+                                          (const char **)p, n);
+                XFreeStringList(p);
+            }else{
+                const char *pdummy[2]={"unknowndockapp", "UnknownDockapp"};
+                xwindow_set_text_property(hints->icon_window, 
+                                          ioncore_g.atom_dockapp_hack,
+                                          pdummy, 2);
+            }
+        }
         
         /* It is a dockapp, do everything again from the beginning, now
          * with the icon window.
          */
+        win=hints->icon_window;
         param.dockapp=TRUE;
         goto again;
     }
@@ -754,8 +768,8 @@ static bool send_clientmsg(Window win, Atom a, Time stmp)
 
 
 /*EXTL_DOC
- * Attempt to kill (with XKillWindow) the client that owns the X
- * window correspoding to \var{cwin}.
+ * Attempt to kill (with \code{XKillWindow}) the client that owns 
+ * the X window correspoding to \var{cwin}.
  */
 EXTL_EXPORT_MEMBER
 void clientwin_kill(WClientWin *cwin)
@@ -1041,12 +1055,27 @@ EXTL_SAFE
 EXTL_EXPORT_MEMBER
 ExtlTab clientwin_get_ident(WClientWin *cwin)
 {
-    char **p=NULL, *wrole=NULL;
+    char **p=NULL, **p2=NULL, *wrole=NULL;
     int n=0, n2=0, n3=0, tmp=0;
+    Window tforwin=None;
     ExtlTab tab;
+    bool dockapp_hack=FALSE;
     
     p=xwindow_get_text_property(cwin->win, XA_WM_CLASS, &n);
-    wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role, &n2);
+    
+    p2=xwindow_get_text_property(cwin->win, ioncore_g.atom_dockapp_hack, &n2);
+    
+    dockapp_hack=(n2>0);
+    
+    if(p==NULL){
+        /* Some dockapps do actually have WM_CLASS, so use it. */
+        p=p2;
+        n=n2;
+        p2=NULL;
+    }
+    
+    wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role, 
+                                      &n3);
     
     tab=extl_create_table();
     if(n>=2 && p[1]!=NULL)
@@ -1056,8 +1085,18 @@ ExtlTab clientwin_get_ident(WClientWin *cwin)
     if(wrole!=NULL)
         extl_table_sets_s(tab, "role", wrole);
     
+    if(XGetTransientForHint(ioncore_g.dpy, cwin->win, &tforwin) 
+       && tforwin!=None){
+        extl_table_sets_b(tab, "is_transient", TRUE);
+    }
+    
+    if(dockapp_hack)
+        extl_table_sets_b(tab, "is_dockapp", TRUE);
+    
     if(p!=NULL)
         XFreeStringList(p);
+    if(p2!=NULL)
+        XFreeStringList(p2);
     if(wrole!=NULL)
         free(wrole);
     
@@ -1085,9 +1124,9 @@ static bool check_fs_cfgrq(WClientWin *cwin, XConfigureRequestEvent *ev)
             
             if(!region_fullscreen_scr(grp, scr, sw))
                 cwin->flags&=~CLIENTWIN_FS_RQ;
+                
+            return TRUE;
         }
-        
-        return TRUE;
     }
 
     return FALSE;
@@ -1260,8 +1299,8 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab)
     WClientWin *cwin=NULL;
     XWindowAttributes attr;
     WRectangle rg;
-    bool got_chkc;
-
+    bool got_chkc=FALSE;
+    
     if(!extl_table_gets_d(tab, "windowid", &wind) ||
        !extl_table_gets_i(tab, "checkcode", &chkc)){
         return NULL;
@@ -1294,14 +1333,7 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab)
         warn(TR("Saved client window does not want to be managed."));
         return NULL;
     }
-
-    /*
-    attr.x=fp->g.x;
-    attr.y=fp->g.y;
-    attr.width=fp->g.w;
-    attr.height=fp->g.h;
-     */
-
+    
     cwin=create_clientwin(par, win, &attr);
     
     if(cwin==NULL)
index 855bc9e2b3023a2fa1e4510236688048251cd6af..d81b11a987173f3bd91108cff5bbf1987082dd9e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_CLIENTWIN_H
@@ -54,8 +51,6 @@ DECLCLASS(WClientWin){
     
     int orig_bw;
 
-    Window transient_for;
-    
     Colormap cmap;
     Colormap *cmaps;
     Window *cmapwins;
index 564336da11a000c0bdcfaf010269c8b216d57cc1..ea3fedd20d508fd9e80515cb2ec06d1b8f39e92d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/rb.h>
index 143f1ec2646baaa80e382517532bc4d634ce1ffd..881d6923153e8e59357082e1c9d8a7922bdd5824 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_COLORMAP_H
index 61bd5df16ab897abc7be800d9d4e778ae98d328e..091b9c45583a815d19406d0047d71ceb653f9fee 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_COMMON_H
index 56d679e6dd54458a4e4b305bb203e0f6191f3bc4..c449a87cdbf740f3e4a69e1b80cca6dd9810d8ab 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -199,12 +196,13 @@ static bool do_submap(WBindmap *bindmap, const char *str,
                       ExtlTab subtab, uint action, uint mod, uint ksb)
 {
     WBinding binding, *bnd;
-    uint kcb;
+    uint kcb=0;
 
     if(action!=BINDING_KEYPRESS)
         return FALSE;
     
     kcb=XKeysymToKeycode(ioncore_g.dpy, ksb);
+    
     bnd=bindmap_lookup_binding(bindmap, action, mod, kcb);
     
     if(bnd!=NULL && bnd->submap!=NULL && bnd->state==mod)
@@ -239,6 +237,9 @@ static StringIntMap action_map[]={
     {"mclick", BINDING_BUTTONCLICK},
     {"mdblclick", BINDING_BUTTONDBLCLICK},
     {"mdrag", BINDING_BUTTONMOTION},
+    {"submap_enter", BINDING_SUBMAP_ENTER},
+    {"submap_wait", BINDING_SUBMAP_RELEASEMOD},
+    /*{"submap_leave", BINDING_SUBMAP_LEAVE},*/
     {NULL, 0}
 };
 
@@ -271,14 +272,16 @@ static bool do_entry(WBindmap *bindmap, ExtlTab tab,
             goto fail;
         }
     }
+    
+    if(!BINDING_IS_PSEUDO(action)){
+        if(!extl_table_gets_s(tab, "kcb", &ksb_str))
+            goto fail;
 
-    if(!extl_table_gets_s(tab, "kcb", &ksb_str))
-        goto fail;
-
-    if(!ioncore_parse_keybut(ksb_str, &mod, &ksb,
-                             (action!=BINDING_KEYPRESS && action!=-1), 
-                             init_any)){
-        goto fail;
+        if(!ioncore_parse_keybut(ksb_str, &mod, &ksb,
+                                 (action!=BINDING_KEYPRESS && action!=-1), 
+                                 init_any)){
+            goto fail;
+        }
     }
     
     if(extl_table_gets_t(tab, "submap", &subtab)){
index e86c87194875aaa260440a9af285a3228b65e014..7186cc4df36f621ee1ceb94eeca345d99e1d8f74 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_CONF_BINDINGS_H
index b8545e2bf283bd77460aba5d6817b357eb049128..eb464cb83a55080e1a0746f3c90650252e2b4268 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
@@ -61,7 +58,8 @@ static ExtlFn get_layout_fn;
  *                        for hidden workspaces with activity? \\
  *  \var{frame_default_index} & (string) Specifies where to add new regions
  *                        on the mutually exclusive list of a frame. One of
- *                        ''last'', ''next'' (for after current), ''next-act''
+ *                        \codestr{last}, \codestr{next}, (for after current),
+ *                        or \codestr{next-act}
  *                        (for after current and anything with activity right
  *                        after it). \\
  *  \var{dblclick_delay} & (integer) Delay between clicks of a double click.\\
@@ -74,9 +72,11 @@ static ExtlFn get_layout_fn;
  *  \var{kbresize_maxacc} & (floating point) See below. \\
  *  \var{framed_transients} & (boolean) Put transients in nested frames. \\
  *  \var{float_placement_method} & (string) How to place floating frames.
- *                          One of ''udlr'' (up-down, then left-right), 
- *                          ''lrud'' (left-right, then up-down) or ''random''. \\
- *  \var{mousefocus} & String: ''disable'' or ''sloppy''. \\
+ *                          One of \codestr{udlr} (up-down, then left-right), 
+ *                          \codestr{lrud} (left-right, then up-down), or 
+ *                          \codestr{random}. \\
+ *  \var{mousefocus} & (string) Mouse focus mode: 
+ *                     \codestr{disable} or \codestr{sloppy}. \\
  *  \var{unsqueeze} & (boolean) Auto-unsqueeze transients/menus/queries/etc. \\
  *  \var{autoraise} & (boolean) Autoraise regions in groups on goto. \\
  * \end{tabularx}
@@ -209,7 +209,8 @@ ExtlTab ioncore_get_layout(const char *layout)
     
 
 /*EXTL_DOC
- * Get important directories (userdir, sessiondir, searchpath).
+ * Get important directories (the fields \var{userdir}, 
+ * \var{sessiondir}, \var{searchpath} in the returned table).
  */
 EXTL_SAFE
 EXTL_EXPORT
@@ -224,7 +225,8 @@ ExtlTab ioncore_get_paths(ExtlTab tab)
 
 
 /*EXTL_DOC
- * Set important directories (sessiondir, searchpath).
+ * Set important directories (the fields \var{sessiondir}, \var{searchpath}
+ * of \var{tab}).
  */
 EXTL_EXPORT
 bool ioncore_set_paths(ExtlTab tab)
index 696852da7c009a803e9bdbf83f35dae8029e0a0a..6f82163dd660d63baa17eedd1dc5a3c4c2e70162 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_CONF_H
index 6973a165b2b1898e677d93d0db9c265cf180dcbf..884dd5bb42dc0b965f3601e5958e3e145e09c13c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "common.h"
index 8d03f7917af3c011a8bb8065b2f3ff120c4893c4..5c9c6e54ffa95a2bc027709abbdb904755bd76cb 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_CURSOR_H
index 8493b9afbca73dc82922b053aafef49d8d8ad9d6..72c74060e4d6d1278b4866147c5b7e2b36e55fa3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
@@ -41,7 +38,8 @@ static void get_relative_geom(WRectangle *g, WRegion *reg, WRegion *mgr)
 }
 
 
-bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode)
+static bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode,
+                              uint framelevel)
 {
     WGroupAttachParams ap=GROUPATTACHPARAMS_INIT;
     WRegionAttachData data;
@@ -71,6 +69,9 @@ bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode)
         
         ap.geom_weak_set=TRUE;
         ap.geom_weak=0;
+
+        ap.level_set=TRUE;
+        ap.level=framelevel+1;
         
         get_relative_geom(&fpa.inner_geom, reg, (WRegion*)grp);
 
@@ -84,8 +85,8 @@ bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode)
             ap.szplcy=st->szplcy;
             ap.szplcy_set=TRUE;
             
-            ap.level=maxof(st->level, STACKING_LEVEL_NORMAL);
             ap.level_set=TRUE;
+            ap.level=maxof(st->level, STACKING_LEVEL_NORMAL);
         }
         
         ap.geom_set=TRUE;
@@ -123,14 +124,19 @@ static WRegion *check_mplex(WRegion *reg, WFrameMode *mode)
 }
 
 
-static WGroup *find_group(WRegion *reg)
+static WGroup *find_group(WRegion *reg, uint *level)
 {
     WRegion *mgr=REGION_MANAGER(reg);
     
     while(mgr!=NULL){
+        reg=mgr;
         mgr=REGION_MANAGER(mgr);
-        if(OBJ_IS(mgr, WGroup))
+        if(OBJ_IS(mgr, WGroup)){
+            WStacking *st=ioncore_find_stacking((WRegion*)reg);
+            if(st!=NULL)
+                *level=st->level;
             break;
+        }
     }
     
     return (WGroup*)mgr;
@@ -143,10 +149,11 @@ bool ioncore_detach(WRegion *reg, int sp)
     WFrameMode mode;
     WGroup *grp;
     bool set, nset;
+    uint level=STACKING_LEVEL_NORMAL;
     
     reg=region_groupleader_of(reg);
     
-    grp=find_group(check_mplex(reg, &mode));
+    grp=find_group(check_mplex(reg, &mode), &level);
     
     /* reg is only considered detached if there's no higher-level group
      * to attach to, thus causing 'toggle' to cycle.
@@ -158,7 +165,7 @@ bool ioncore_detach(WRegion *reg, int sp)
         return set;
 
     if(!set){
-        return ioncore_do_detach(reg, grp, mode);
+        return ioncore_do_detach(reg, grp, mode, level);
     }else{
         WPHolder *ph=region_get_return(reg);
         
@@ -177,11 +184,12 @@ bool ioncore_detach(WRegion *reg, int sp)
 
 /*EXTL_DOC
  * Detach or reattach \var{reg}, depending on whether \var{how}
- * is 'set'/'unset'/'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
+ * 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.
  */
@@ -197,24 +205,27 @@ bool ioncore_detach_extl(WRegion *reg, const char *how)
 
 void do_unsqueeze(WRegion *reg)
 {
-    WSizeHints hints;
+    WSizeHints h;
+    WRegion *mgr=REGION_MANAGER(reg);
     
-    if(REGION_MANAGER_CHK(reg, WScreen)!=NULL)
+    if(OBJ_IS(reg, WScreen))
         return;
     
-    region_size_hints(reg, &hints);
+    region_size_hints(reg, &h);
 
-    if(!hints.min_set)
+    if(!h.min_set)
         return;
         
-    if(hints.min_width<=REGION_GEOM(reg).w &&
-       hints.min_height<=REGION_GEOM(reg).h){
+    if(h.min_width<=REGION_GEOM(reg).w && 
+       h.min_height<=REGION_GEOM(reg).h){
         return;
     }
     
-    if(!ioncore_detach(reg, SETPARAM_SET))
-        return;
+    ioncore_detach(reg, SETPARAM_SET);
         
+    if(REGION_MANAGER(reg)==mgr)
+        return;
+    
     do_unsqueeze(reg);
 }
 
index 237d887b2b913947522f00e119fb362a17750a02..f407a08dcb466659e821773ecde6e4f93218ecc7 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_DETACH_H
index 6d1a4913ad8fcd3680554091974249ccfb7d2bfe..03d69553ac21ea22869d2a53edc15c15250513a9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 /* This file contains dummy implementations of multibyte/widechar routines
index 260d6b01e509c6c0dbb0d2d8021a7f61c3be8632..217fe1b7df5c59909a6adcc63511cec010ee0dea 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <X11/Xmd.h>
index b81edf1d38e507704de0d2e3812214c8bb813e79..d83f50883207d6ea4fd46ab3b5f3d22c2fc28225 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_EVENT_H
index 0a9a57a05bc4a1ca648cbaf5527b4ae8005190c8..bba225ca48a5f2427708fc46cd58a9c43f703b1c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
index 322079132e499285ff20e617ffa50700966449b4..67d4e3021b2e15291349518d7ce10cde7638a204 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_EVENTH_H
index 06838a65bc2ccbd0542dd17fad40fe769332ed0c..65683dc87080bb58aab95629a4e07cf00853f5fe 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <limits.h>
index b76f01e5a650a01451318fd309032ac2d6525ce0..2661b5026fbd6b30f4ef44062de4ef7f8ebb0168 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_EXEC_H
index 9fc7af9467f094ff3d6eac4012f048744915d360..b0a2bb86f5c04cf33820e14dd70e91b0a7bdddf4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 28fbb95472a4c19e10c21642734d5eb548d28ea2..9e4cd5327647f7062d1a6c4b421df4f05c07846b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_EXTLCONV_H
index a13038a79fe178588380ea719c2908b7c1187da6..50c2acbd1818535a6581da7524a95d755c140ccc 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 
index 3f6a64d0089ed8b6a10b81ff277a143e4d364ae0..2fae298df47e3084ef37735b85d4efa25356d4e3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 760030e8346bcd9cf451ebaca3871beecb823360..4c8db435560a93c6f58fadc16a2c152e5b125631 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FLOAT_PLACEMENT_H
index b2341ab403b5cd99a65220b8c88e73a894473cf1..573dcebb0203d334cc2a2dcdf455d44c36e8da5f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libmainloop/hooks.h>
@@ -166,10 +163,8 @@ void region_set_await_focus(WRegion *reg)
 }
 
 
-static bool region_is_await(WRegion *reg)
+static bool region_is_parent(WRegion *reg, WRegion *aw)
 {
-    WRegion *aw=(WRegion*)await_watch.obj;
-    
     while(aw!=NULL){
         if(aw==reg)
             return TRUE;
@@ -180,6 +175,18 @@ static bool region_is_await(WRegion *reg)
 }
 
 
+static bool region_is_await(WRegion *reg)
+{
+    return region_is_parent(reg, (WRegion*)await_watch.obj);
+}
+
+
+static bool region_is_focusnext(WRegion *reg)
+{
+    return region_is_parent(reg, ioncore_g.focus_next);
+}
+
+
 /* Only keep await status if focus event is to an ancestor of the await 
  * region.
  */
@@ -299,6 +306,18 @@ bool region_is_active(WRegion *reg)
 }
 
 
+static bool region_manager_is_focusnext(WRegion *reg)
+{
+    if(reg==NULL || ioncore_g.focus_next==NULL)
+        return FALSE;
+        
+    if(reg==ioncore_g.focus_next)
+        return TRUE;
+        
+    return region_manager_is_focusnext(REGION_MANAGER(reg));
+}
+
+
 bool region_may_control_focus(WRegion *reg)
 {
     if(OBJ_IS_BEING_DESTROYED(reg))
@@ -306,8 +325,11 @@ bool region_may_control_focus(WRegion *reg)
 
     if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg))
         return TRUE;
-    
-    if(region_is_await(reg))
+        
+    if(region_is_await(reg) || region_is_focusnext(reg))
+        return TRUE;
+        
+    if(region_manager_is_focusnext(reg))
         return TRUE;
 
     return FALSE;
index 683d8aebba704b75ab14f74f0d46aa691e506227..9f16415fcbd8cbd9ccbb448469c680b95ea8ed3e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FOCUS_H
index 5be2e6ba63567c673749939fe18bd7faf8015450..0b3411a85b1e4e44407f89efe0a74faf909e667b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -321,18 +318,7 @@ void frame_recalc_bar(WFrame *frame)
     FRAME_MX_FOR_ALL(sub, frame, tmp){
         textw=init_title(frame, i);
         if(textw>0){
-            if(frame->flags&FRAME_SHOW_NUMBERS){
-                char *s=NULL;
-                libtu_asprintf(&s, "[%d]", i+1);
-                if(s!=NULL){
-                    title=grbrush_make_label(frame->bar_brush, s, textw);
-                    free(s);
-                }else{
-                    title=NULL;
-                }
-            }else{
-                title=region_make_label(sub, textw, frame->bar_brush);
-            }
+            title=region_make_label(sub, textw, frame->bar_brush);
             frame->titles[i].text=title;
         }
         i++;
@@ -340,19 +326,6 @@ void frame_recalc_bar(WFrame *frame)
 }
 
 
-static void set_common_attrs(const WFrame *frame, GrBrush *brush)
-{
-    ensure_create_attrs();
-    
-    grbrush_set_attr(brush, REGION_IS_ACTIVE(frame) 
-                            ? GR_ATTR(active) 
-                            : GR_ATTR(inactive));
-    grbrush_set_attr(brush, frame->quasiactive_count>0 
-                            ? GR_ATTR(quasiactive)
-                            : GR_ATTR(not_quasiactive));
-}
-
-                      
 void frame_draw_bar(const WFrame *frame, bool complete)
 {
     WRectangle geom;
@@ -367,7 +340,7 @@ void frame_draw_bar(const WFrame *frame, bool complete)
 
     grbrush_begin(frame->bar_brush, &geom, GRBRUSH_AMEND);
     
-    set_common_attrs(frame, frame->bar_brush);
+    grbrush_init_attr(frame->bar_brush, &frame->baseattr);
     
     grbrush_draw_textboxes(frame->bar_brush, &geom, frame->titles_n, 
                            frame->titles, complete);
@@ -386,7 +359,7 @@ void frame_draw(const WFrame *frame, bool complete)
     
     grbrush_begin(frame->brush, &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK));
     
-    set_common_attrs(frame, frame->brush);
+    grbrush_init_attr(frame->brush, &frame->baseattr);
     
     grbrush_draw_border(frame->brush, &geom);
     
@@ -564,14 +537,52 @@ bool frame_set_background(WFrame *frame, bool set_always)
 
 void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab)
 {
+    gr_stylespec_append(spec, &frame->baseattr);
     gr_stylespec_append(spec, &frame->titles[tab].attr);
+}
+
+
+/*}}}*/
+
+
+/*{{{ Activated/inactivated */
+
+
+void frame_inactivated(WFrame *frame)
+{
+    ensure_create_attrs();
+    
+    gr_stylespec_set(&frame->baseattr, GR_ATTR(inactive));
+    gr_stylespec_unset(&frame->baseattr, GR_ATTR(active));
+
+    window_draw((WWindow*)frame, FALSE);
+}
+
+
+void frame_activated(WFrame *frame)
+{
+    ensure_create_attrs();
+    
+    gr_stylespec_set(&frame->baseattr, GR_ATTR(active));
+    gr_stylespec_unset(&frame->baseattr, GR_ATTR(inactive));
+    
+    window_draw((WWindow*)frame, FALSE);
+}
+
+
+void frame_quasiactivity_change(WFrame *frame)
+{
+    bool is=(frame->quasiact_source!=NULL);
     
-    gr_stylespec_set(spec, REGION_IS_ACTIVE(frame) 
-                           ? GR_ATTR(active) 
-                           : GR_ATTR(inactive));
-    gr_stylespec_set(spec, frame->quasiactive_count>0 
-                           ? GR_ATTR(quasiactive)
-                           : GR_ATTR(not_quasiactive));
+    ensure_create_attrs();
+    
+    if(is){
+        gr_stylespec_set(&frame->baseattr, GR_ATTR(quasiactive));
+        gr_stylespec_unset(&frame->baseattr, GR_ATTR(not_quasiactive));
+    }else{
+        gr_stylespec_set(&frame->baseattr, GR_ATTR(not_quasiactive));
+        gr_stylespec_unset(&frame->baseattr, GR_ATTR(quasiactive));
+    }
 }
 
 
index b0134f5597ae1ba4a565354884926534b1181d15..e286bc3fdb078c7fad2f78b942eb19bdacce8e4f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FRAME_DRAW_H
@@ -39,4 +36,8 @@ extern void frame_update_attr(WFrame *frame, int i, WRegion *reg);
 
 extern void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab);
 
+extern void frame_inactivated(WFrame *frame);
+extern void frame_activated(WFrame *frame);
+extern void frame_quasiactivity_change(WFrame *frame);
+
 #endif /* ION_IONCORE_FRAME_DRAW_H */
index 09f1c0aa43f2d25dc0a22419437ff3cf2cfd1503..494a7b2a3f5b54082afce1a400bbfb94e778666f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -336,7 +333,7 @@ static void p_tabdrag_end(WFrame *frame, XButtonEvent *ev)
 /*EXTL_DOC
  * Start dragging the tab that the user pressed on with the pointing device.
  * This function should only be used by binding it to \emph{mpress} or
- * \emph{mdrag} action with area ''tab''.
+ * \emph{mdrag} action with area \codestr{tab}.
  */
 EXTL_EXPORT_MEMBER
 void frame_p_tabdrag(WFrame *frame)
index c7163a106a5eb55e7eaead1551f843bd217c5ed7..90ba94e2fcf735c154277ad737c1fc07c91e42f4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FRAME_POINTER_H
index f0e786e77cdc1560e4dd5b92de6bac8a0e0d8efd..bcecf23c557d6ea607c629731c22e9f8e60322ec 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -84,6 +81,9 @@ bool frame_init(WFrame *frame, WWindow *parent, const WFitParams *fp,
     frame->mode=mode;
     frame->tab_min_w=0;
     frame->bar_max_width_q=1.0;
+    frame->quasiact_source=NULL;
+    
+    gr_stylespec_init(&frame->baseattr);
     
     if(!mplex_init((WMPlex*)frame, parent, fp))
         return FALSE;
@@ -117,6 +117,7 @@ void frame_deinit(WFrame *frame)
 {
     frame_free_titles(frame);
     frame_release_brushes(frame);
+    gr_stylespec_unalloc(&frame->baseattr);
     mplex_deinit((WMPlex*)frame);
 }
 
@@ -511,51 +512,56 @@ void frame_size_hints(WFrame *frame, WSizeHints *hints_ret)
 /*{{{ Focus  */
 
 
-void frame_inactivated(WFrame *frame)
-{
-    window_draw((WWindow*)frame, FALSE);
-}
-
-
-void frame_activated(WFrame *frame)
+static void frame_quasiactivation(WFrame *frame, Obj *src, bool act)
 {
-    window_draw((WWindow*)frame, FALSE);
-}
-
-
-void frame_quasiactivation(WFrame *frame, WRegion *reg, bool act)
-{
-    bool was, is;
-    
-    was=(frame->quasiactive_count>0);
+    if(frame->quasiact_source==src || act){
+        bool was, is;
+        
+        was=(frame->quasiact_source!=NULL);
     
-    frame->quasiactive_count=maxof(0, frame->quasiactive_count 
-                                       + (act ? 1 : -1));
-                                       
-    is=(frame->quasiactive_count>0);
+        frame->quasiact_source=(act ? src : NULL);
     
-    if(was!=is && !REGION_IS_ACTIVE(frame))
-        window_draw((WWindow*)frame, FALSE);
+        is=(frame->quasiact_source!=NULL);
+        
+        if(was!=is){
+            frame_quasiactivity_change(frame);
+            if(!REGION_IS_ACTIVE(frame))
+                window_draw((WWindow*)frame, FALSE);
+        }
+    }
 }
 
 
 static bool actinact(WRegion *reg, bool act)
 {
     WPHolder *returnph=region_get_return(reg);
-    WFrame *frame;
+    WFrame *frame=NULL;
+    Obj *src=NULL;
+    WRegion *tgt;
     
     if(returnph==NULL || pholder_stale(returnph))
         return FALSE;
     
-    frame=OBJ_CAST(pholder_target(returnph), WFrame);
+    tgt=pholder_target(returnph);
+
+    frame=OBJ_CAST(tgt, WFrame);
     
     if(frame!=NULL){
-        /* Ok, reg has return placeholder set to a frame: 
-         * do quasiactivation/inactivation 
+        src=(Obj*)returnph;
+    }else{
+        /* Show quasiactivation for stuff detached from
+         * groups contained in the frame as well.
          */
-        frame_quasiactivation(frame, reg, act);
+        WGroup *grp=OBJ_CAST(tgt, WGroup);
+        if(grp!=NULL){
+            frame=REGION_MANAGER_CHK(grp, WFrame);
+            src=(Obj*)grp;
+        }
     }
     
+    if(frame!=NULL)
+        frame_quasiactivation(frame, src, act);
+    
     return TRUE;
 }
 
@@ -671,9 +677,10 @@ static WFramedPHolder *frame_make_recreate_pholder(WFrame *frame)
     
     ph=region_make_return_pholder((WRegion*)frame);
     
-    if(ph==NULL)
+    if(ph==NULL){
         return NULL;
-        
+    }
+    
     fparam.mode=frame->mode;
     
     fph=create_framedpholder(ph, &fparam);
@@ -724,6 +731,13 @@ static void frame_modify_pholders(WFrame *frame)
 }
 
 
+bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info)
+{
+    frame_modify_pholders(frame);
+    return mplex_rescue_clientwins(&frame->mplex, info);
+}
+
+    
 /*}}}*/
 
 
@@ -774,7 +788,8 @@ bool frame_set_shaded(WFrame *frame, int sp)
 
 /*EXTL_DOC
  * Set shading state according to the parameter \var{how} 
- * (set/unset/toggle). Resulting state is returned, which may not be
+ * (\codestr{set}, \codestr{unset}, or \codestr{toggle}). 
+ * Resulting state is returned, which may not be
  * what was requested.
  */
 EXTL_EXPORT_AS(WFrame, set_shaded)
@@ -795,39 +810,51 @@ bool frame_is_shaded(WFrame *frame)
 }
 
 
-bool frame_set_numbers(WFrame *frame, int sp)
+/* EXTL_DOC
+ * Is the attribute \var{attr} set?
+ */
+bool frame_is_grattr(WFrame *frame, const char *attr)
 {
-    bool set=frame->flags&FRAME_SHOW_NUMBERS;
-    bool nset=libtu_do_setparam(sp, set);
-    
-    if(XOR(nset, set)){
-        frame->flags^=FRAME_SHOW_NUMBERS;
-        frame_recalc_bar(frame);
-        frame_draw_bar(frame, TRUE);
-    }
-    
-    return frame->flags&FRAME_SHOW_NUMBERS;
+    GrAttr a=stringstore_alloc(attr);
+    bool set=gr_stylespec_isset(&frame->baseattr, a);
+    stringstore_free(a);
+    return set;
 }
 
 
-/*EXTL_DOC
- * Control whether tabs show numbers (set/unset/toggle). 
- * Resulting state is returned, which may not be what was 
- * requested.
- */
-EXTL_EXPORT_AS(WFrame, set_numbers)
-bool frame_set_numbers_extl(WFrame *frame, const char *how)
+bool frame_set_grattr(WFrame *frame, GrAttr a, int sp)
 {
-    return frame_set_numbers(frame, libtu_string_to_setparam(how));
+    bool set=gr_stylespec_isset(&frame->baseattr, a);
+    bool nset=libtu_do_setparam(sp, set);
+    
+    if(XOR(set, nset)){
+        if(nset)
+            gr_stylespec_set(&frame->baseattr, a);
+        else
+            gr_stylespec_unset(&frame->baseattr, a);
+        window_draw((WWindow*)frame, TRUE);
+    }
+    
+    return nset;
 }
 
 
 /*EXTL_DOC
- * Does \var{frame} show numbers for tabs?
+ * Set extra drawing engine attributes for the frame.
+ * The parameter \var{attr} is the attribute, and \var{how} is
+ * one of \codestr{set}, \codestr{unset}, or \codestr{toggle}.
  */
-bool frame_is_numbers(WFrame *frame)
+EXTL_EXPORT_AS(WFrame, set_grattr)
+bool frame_set_grattr_extl(WFrame *frame, const char *attr, const char *how)
 {
-    return frame->flags&FRAME_SHOW_NUMBERS;
+    if(attr!=NULL){
+        GrAttr a=stringstore_alloc(attr);
+        bool ret=frame_set_grattr(frame, a, libtu_string_to_setparam(how));
+        stringstore_free(a);
+        return ret;
+    }else{
+        return FALSE;
+    }
 }
 
 
@@ -867,6 +894,14 @@ static void frame_managed_changed(WFrame *frame, int mode, bool sw,
 {
     bool need_draw=TRUE;
     
+    if(mode==MPLEX_CHANGE_REMOVE && (Obj*)reg==frame->quasiact_source){
+        /* Reset indirect quasiactivation through group that
+         * is being removed.
+         */
+        frame->quasiact_source=NULL;
+        frame_quasiactivity_change(frame);
+    }
+    
     if(mode!=MPLEX_CHANGE_SWITCHONLY)
         frame_initialise_titles(frame);
     else
@@ -907,6 +942,32 @@ int frame_default_index(WFrame *frame)
 /*}}}*/
 
 
+/*{{{ prepare_manage_transient */
+
+
+WPHolder *frame_prepare_manage_transient(WFrame *frame,
+                                         const WClientWin *transient,
+                                         const WManageParams *param,
+                                         int unused)
+{
+    /* Transient manager searches should not cross tiled frames
+     * unless explicitly floated.
+     */
+    if(IS_FLOATING_MODE(frame) ||
+       extl_table_is_bool_set(transient->proptab, "float")){
+        return region_prepare_manage_transient_default((WRegion*)frame,
+                                                       transient,
+                                                       param,
+                                                       unused);
+    }else{
+         return NULL;
+    }
+}
+
+
+/*}}}*/
+
+
 /*{{{ Save/load */
 
 
@@ -1016,6 +1077,12 @@ static DynFunTab frame_dynfuntab[]={
 
     {(DynFun*)mplex_default_index,
      (DynFun*)frame_default_index},
+     
+    {(DynFun*)region_prepare_manage_transient,
+     (DynFun*)frame_prepare_manage_transient},
+     
+    {(DynFun*)region_rescue_clientwins,
+     (DynFun*)frame_rescue_clientwins},
     
     END_DYNFUNTAB
 };
index 7aa50140702ca2cff9f617666f2c42f1d29b4e36..c8827a53791dcdc90679e91928156d77488af634 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FRAME_H
@@ -36,7 +33,6 @@
 /*#define FRAME_SZH_USEMINMAX 0x1000 */
 /*#define FRAME_FWD_CWIN_RQGEOM 0x2000 */
 
-#define FRAME_SHOW_NUMBERS 0x4000
 
 typedef enum{
     FRAME_MODE_UNKNOWN,
@@ -64,10 +60,11 @@ DECLCLASS(WFrame){
     int saved_x, saved_y;
     
     int tab_dragged_idx;
-    uint quasiactive_count;
+    void *quasiact_source;
     
     GrBrush *brush;
     GrBrush *bar_brush;
+    GrStyleSpec baseattr;
     GrTransparency tr_mode;
     GrTextElem *titles;
     int titles_n;
@@ -121,6 +118,13 @@ extern bool frame_managed_rqdispose(WFrame *frame, WRegion *reg);
 
 extern void ioncore_frame_quasiactivation_notify(WRegion *reg, WRegionNotify how);
 
+extern WPHolder *frame_prepare_manage_transient(WFrame *frame,
+                                                const WClientWin *transient,
+                                                const WManageParams *param,
+                                                int unused);
+
+extern bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info);
+
 /* Save/load */
 extern ExtlTab frame_get_configuration(WFrame *frame);
 extern WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab);
index 6ef378bf3fd0d4b299ed79db1809b778a463c60b..de437a23c6921ae10cbd132f93697f7f0691ffc4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index dfbbe5044c8b4f1e9c43b88bed1bb9509658ffa8..49becc2389cc9ed567940cf634f394107eddb12f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FRAMEDPHOLDER_H
index 9dabf485d4c4e92be0372081841a5dd7c89c7386..b614abe561054b318a4f5d82235e28c129a402ba 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FRAMEP_H
index a49d4f5eee31372dfdb2d27d2bc329ada5b297bc..12de1184e9c7f4af9c2af6a6981e42b9682b4fc9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/setparam.h>
@@ -159,8 +156,9 @@ WScreen *clientwin_fullscreen_chkrq(WClientWin *cwin, int w, int h)
 
 /*EXTL_DOC
  * Set client window \var{reg} full screen state according to the 
- * parameter \var{how} (set/unset/toggle). Resulting state is returned,
- * which may not be what was requested.
+ * parameter \var{how} (one of \codestr{set}, \codestr{unset}, or 
+ * \codestr{toggle}). Resulting state is returned, which may not be
+ * what was requested.
  */
 EXTL_EXPORT_AS(WGroup, set_fullscreen)
 bool group_set_fullscreen_extl(WGroup *grp, const char *how)
index 2436a980c5268a9e48869d45dfaacc65464291de..fe58fc0a4e591736765d74ddb4315de661521f24 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_FULLSCREEN_H
index 7ac78419c0c699063946ff9ca13b66f2206cad49..c6ae9a72a69ea83fff4a63adee375545d810746b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GLOBAL_H
@@ -67,7 +64,8 @@ DECLSTRUCT(WGlobal){
     Atom atom_checkcode;
     Atom atom_selection;
     Atom atom_mwm_hints;
-
+    Atom atom_dockapp_hack;
+    
     WRootWin *rootwins;
     WScreen *screens;
     WRegion *focus_next;
index 52cf3846a1a6aab5f074f3c97254398e7e595ac5..1e90e38535fbe565bfc41d27b96ecab146b01613 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GR_UTIL_H
index f86479287fd6ef2c84e50ece3ef2384b77657ff8..835c7ca2ad5b87f34ee32080a68a02df7f33d26a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -98,7 +95,7 @@ static bool gr_do_select_engine(const char *engine)
 
 
 /*EXTL_DOC
- * Future requests for ''brushes'' are to be forwarded to the drawing engine
+ * Future requests for ``brushes'' are to be forwarded to the drawing engine
  * \var{engine}. 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
@@ -299,7 +296,7 @@ void gr_stylespec_init(GrStyleSpec *spec)
 }
 
 
-static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge)
+static bool gr_stylespec_find_(const GrStyleSpec *spec, GrAttr a, int *idx_ge)
 {
     bool found=FALSE;
     uint i;
@@ -315,6 +312,15 @@ static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge)
     return found;
 }
 
+
+bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a)
+{
+    int idx_ge;
+    
+    return gr_stylespec_find_(spec, a, &idx_ge);
+}
+
+
 bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score)
 {
     static const uint sz=sizeof(GrAttrScore);
@@ -632,7 +638,7 @@ void grbrush_unset_attr(GrBrush *brush, GrAttr attr)
 
 
 /*EXTL_DOC
- * Read drawing engine configuration file \file{draw.lua}.
+ * Read drawing engine configuration file \file{look.lua}.
  */
 EXTL_EXPORT_AS(gr, read_config)
 void gr_read_config()
index 2d552985c5fc09dec39bc174333307fe829b7eb9..b42c6632ff6a3d46dc25c935bc12828e78829739 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GR_H
@@ -110,6 +107,7 @@ extern uint gr_stylespec_score2(const GrStyleSpec *spec, const GrStyleSpec *attr
 
 extern void gr_stylespec_init(GrStyleSpec *spec);
 extern bool gr_stylespec_set(GrStyleSpec *spec, GrAttr a);
+extern bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a);
 extern void gr_stylespec_unset(GrStyleSpec *spec, GrAttr a);
 extern bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score);
 extern bool gr_stylespec_append(GrStyleSpec *dst, const GrStyleSpec *src);
index aad2dfdf9b69057812a09c490fae8e37a05f98af..5af822cca10fcaa95406642c3230dd79a9121d2d 100644 (file)
@@ -4,10 +4,10 @@
  * Copyright (c) Lukas Schroeder 2002,
  *               Tuomo Valkonen 2003-2007.
  *
- * 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.
+ * See the included file LICENSE for details.
+ * 
+ * Alternatively, you may apply the Clarified Artistic License to this file,
+ * since Lukas' contributions were originally under that.
  */
 
 #include <stdlib.h>
@@ -119,6 +119,7 @@ void ioncore_grab_establish(WRegion *reg, GrabHandler *func,
         current_grab->cursor=IONCORE_CURSOR_DEFAULT;
         current_grab->confine_to=None; /*region_root_of(reg);*/
         current_grab->sqid=last_sqid++;
+        watch_init(&current_grab->watch);
         do_grab_install(current_grab);
     }
 }
index ecdf2568ab85144db3d0ea71cc0d17d076d40ef3..d579984e3011109b85ae16aaafb5329da605e395 100644 (file)
@@ -4,10 +4,10 @@
  * Copyright (c) Lukas Schroeder 2002,
  *               Tuomo Valkonen 2003-2007.
  *
- * 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.
+ * See the included file LICENSE for details.
+ *
+ * Alternatively, you may apply the Clarified Artistic License to this file,
+ * since Lukas' contributions were originally under that.
  */
 
 #ifndef ION_IONCORE_GRAB_H
index 8181af80bd96bc60f5294dd69277445da479417b..544cd15bfe3d126896c0768a8cf66c473afcb906 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -72,9 +69,9 @@ static WPHolder *groupcw_transient_pholder(WGroupCW *cwg,
 
 
 WPHolder *groupcw_prepare_manage(WGroupCW *cwg, const WClientWin *cwin,
-                                 const WManageParams *param, int redir)
+                                 const WManageParams *param, int priority)
 {
-    if(redir==MANAGE_REDIR_STRICT_YES)
+    if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP))
         return NULL;
     
     /* Only catch windows with transient mode set to current here. */
index b8616a7d7890b9c7d0544f236e0b72d19cc3cf54..37d96e29fe35a6ec65ceb665df532a9b992a970d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GROUPCW_H
index 48ee838cb4a5a7dccdd00b83ae175ebf2f82847c..647cef05e451da3f35cbdd6e9782ae85a444dff4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -173,34 +170,12 @@ bool groupws_attach_framed_extl(WGroupWS *ws, WRegion *reg, ExtlTab t)
 static WPHolder *groupws_do_prepare_manage(WGroupWS *ws, 
                                            const WClientWin *cwin,
                                            const WManageParams *param, 
-                                           int redir, int geom_weak)
+                                           int geom_weak)
 {
     WGroupAttachParams ap=GROUPATTACHPARAMS_INIT;
     WFramedParam fp=FRAMEDPARAM_INIT;
     WPHolder *ph;
     
-    if(redir==MANAGE_REDIR_PREFER_YES){
-        WRegion *r=(ws->grp.current_managed!=NULL 
-                    ? ws->grp.current_managed->reg 
-                    : NULL);
-        WGroupIterTmp tmp;
-        WPHolder *ph=NULL;
-        
-        if(r!=NULL)
-            ph=region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_YES);
-        
-        if(ph==NULL){
-            FOR_ALL_MANAGED_BY_GROUP(&ws->grp, r, tmp){
-                ph=region_prepare_manage(r, cwin, param, 
-                                         MANAGE_REDIR_PREFER_YES);
-                if(ph!=NULL)
-                    break;
-            }
-        }
-    }
-    
-    if(redir==MANAGE_REDIR_STRICT_YES)
-        return NULL;
 
     fp.inner_geom_gravity_set=TRUE;
     fp.inner_geom=param->geom;
@@ -223,8 +198,10 @@ static WPHolder *groupws_do_prepare_manage(WGroupWS *ws,
 
 WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin,
                                  const WManageParams *param,
-                                 int redir)
+                                 int priority)
 {
+    int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_GROUP);
+    int bpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_GROUP);
     WRegion *b=(ws->grp.bottom!=NULL ? ws->grp.bottom->reg : NULL);
     WPHolder *ph=NULL;
     bool act_b=(ws->grp.bottom==ws->grp.current_managed);
@@ -249,13 +226,23 @@ WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin,
                 : act_b);
     
     if(b!=NULL && use_bottom)
-        ph=region_prepare_manage(b, cwin, param, redir);
+        ph=region_prepare_manage(b, cwin, param, bpriority);
+    
+    if(ph==NULL){
+        /* Check current */
+        WRegion *r=(ws->grp.current_managed!=NULL 
+                    ? ws->grp.current_managed->reg 
+                    : NULL);
+        
+        if(r!=NULL && r!=b)
+            ph=region_prepare_manage(r, cwin, param, cpriority);
+    }
+    
+    if(ph==NULL && MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP))
+        ph=groupws_do_prepare_manage(ws, cwin, param, weak);
     
-    if(ph==NULL)
-        ph=groupws_do_prepare_manage(ws, cwin, param, redir, weak);
-
     if(ph==NULL && b!=NULL && !use_bottom)
-        ph=region_prepare_manage(b, cwin, param, redir);
+        ph=region_prepare_manage(b, cwin, param, cpriority);
     
     return ph;
 }
index 1fee2235b432fe57cd11e6bc9a7359d56611bd3b..e5a2613f07e77de1c4c0eed1a669e95d238a2524 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GROUPWS_H
index 61a32358b73031ff4fe40c1d8bbbd8e51e159556..9c67348fe2a26442a696def5b14523ec2c55bfd7 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -499,7 +496,7 @@ static void group_do_set_bottom(WGroup *grp, WStacking *st)
 
 
 /*EXTL_DOC
- * Sets the 'bottom' of \var{ws}. The region \var{reg} must already
+ * Sets the `bottom' of \var{ws}. The region \var{reg} must already
  * be managed by \var{ws}, unless \code{nil}.
  */
 EXTL_EXPORT_MEMBER
@@ -521,7 +518,7 @@ bool group_set_bottom(WGroup *ws, WRegion *reg)
 
 
 /*EXTL_DOC
- * Returns the 'bottom' of \var{ws}.
+ * Returns the `bottom' of \var{ws}.
  */
 EXTL_SAFE
 EXTL_EXPORT_MEMBER
@@ -571,7 +568,7 @@ WStacking *group_do_add_managed_default(WGroup *ws, WRegion *reg, int level,
     frame=OBJ_CAST(reg, WFrame);
     if(frame!=NULL){
         WFrameMode m=frame_mode(frame);
-        if(m!=FRAME_MODE_FLOATING && m!=FRAME_MODE_TRANSIENT)
+        if(m==FRAME_MODE_TILED || m==FRAME_MODE_TILED_ALT)
             frame_set_mode(frame, FRAME_MODE_FLOATING);
     }
 
@@ -742,6 +739,12 @@ static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par)
     par->geom_set=0;
     par->bottom=0;
     
+    if(extl_table_is_bool_set(tab, "bottom")){
+        par->level=STACKING_LEVEL_BOTTOM;
+        par->level_set=1;
+        par->bottom=1;
+    }
+    
     if(extl_table_gets_i(tab, "level", &tmp)){
         if(tmp>=0){
             par->level_set=STACKING_LEVEL_NORMAL;
@@ -749,12 +752,6 @@ static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par)
         }
     }
     
-    if(extl_table_is_bool_set(tab, "bottom")){
-        par->level=STACKING_LEVEL_BOTTOM;
-        par->level_set=1;
-        par->bottom=1;
-    }
-    
     if(!par->level_set && extl_table_is_bool_set(tab, "modal")){
         par->level=STACKING_LEVEL_MODAL1;
         par->level_set=1;
@@ -822,12 +819,12 @@ WRegion *group_attach(WGroup *ws, WRegion *reg, ExtlTab param)
  * 
  * \begin{tabularx}{\linewidth}{lX}
  *  \tabhead{Field & Description}
- *  \var{type} & Class name (a string) of the object to be created. Mandatory. \\
- *  \var{name} & Name of the object to be created (a string). Optional. \\
- *  \var{switchto} & Should the region be switched to (boolean)? Optional. \\
- *  \var{level} & Stacking level; default is 1. \\
- *  \var{modal} & Make object modal; ignored if level is set. \\
- *  \var{sizepolicy} & Size policy. \\
+ *  \var{type} & (string) Class of the object to be created. Mandatory. \\
+ *  \var{name} & (string) Name of the object to be created. \\
+ *  \var{switchto} & (boolean) Should the region be switched to? \\
+ *  \var{level} & (integer) Stacking level; default is 1. \\
+ *  \var{modal} & (boolean) Make object modal; ignored if level is set. \\
+ *  \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\
  * \end{tabularx}
  * 
  * In addition parameters to the region to be created are passed in this 
@@ -1006,12 +1003,6 @@ static WStacking *prv(WGroup *ws, WStacking *st, bool wrap)
 typedef WStacking *NxtFn(WGroup *ws, WStacking *st, bool wrap);
 
 
-static bool mapped_filt(WStacking *st, void *unused)
-{
-    return (st->reg!=NULL && REGION_IS_MAPPED(st->reg));
-}
-
-
 static bool focusable(WGroup *ws, WStacking *st, uint min_level)
 {
     return (st->reg!=NULL
@@ -1030,7 +1021,7 @@ static WStacking *do_get_next(WGroup *ws, WStacking *sti,
     stacking=group_get_stacking(ws);
     
     if(stacking!=NULL)
-        min_level=stacking_min_level(stacking, mapped_filt, NULL);
+        min_level=stacking_min_level_mapped(stacking);
 
     st=sti;
     while(1){
@@ -1290,7 +1281,8 @@ static ExtlTab group_get_configuration(WGroup *ws)
         subtab=region_get_configuration(st->reg);
 
         if(subtab!=extl_table_none()){
-            extl_table_sets_i(subtab, "sizepolicy", st->szplcy);
+            extl_table_sets_s(subtab, "sizepolicy", 
+                              sizepolicy2string(st->szplcy));
             extl_table_sets_i(subtab, "level", st->level);
         
             tmpg=REGION_GEOM(st->reg);
index d9a37ea90e133cfbae22794e8ae603a04ca32c8a..d4f2d26abf0924d45a4d14bc6a2ef18ec34a0f40 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GROUP_H
index 4112372de8618ca63731ffef46091f0f6841e085..cce1a16cc4dd75bbd672c2ca995dce769a428f88 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index 3fb9edddabea0c06d0e189e29eb86896b070b0e8..d0edf684d663cd3b99c28e4a17770d75f5a8d14f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GROUPEDPHOLDER_H
index aa6f5cfaead48e3614adc68d9401a5f7f068bb9f..3c2ed30d244334d13a44a2e0a6f227ced3225e5e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index cb0ab198df23867d701b1aee17d88c10f9a07f51..86974ad3b39a4b4c32e600dfeb3d51e71ffa3c76 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_GROUPPHOLDER_H
index f3c2da9b2eed396d3c1e36ead232b89aeaceb8a6..d23823ea4981384f10096b0e370ebadbda0d16a9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 799c128d3b54d0763117bf3562020ffa4104f2c4..26f2ef97d8d69d992e8793f57a50c0c5be19c43e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_INFOWIN_H
index 49da6c715f4dc04d7f3c80fd8e1a416c31bfff41..097801d342f2f9c1136c504f423f0846887eb841 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
@@ -58,6 +55,7 @@
 #include "llist.h"
 #include "exec.h"
 #include "screen-notify.h"
+#include "key.h"
 
 
 #include "../version.h"
@@ -273,6 +271,7 @@ static bool init_hooks()
     INIT_HOOK_(clientwin_mapped_hook);
     INIT_HOOK_(clientwin_unmapped_hook);
     INIT_HOOK_(clientwin_property_change_hook);
+    INIT_HOOK_(ioncore_submap_ungrab_hook);
     
     INIT_HOOK_(region_notify_hook);
     ADD_HOOK_(region_notify_hook, ioncore_frame_quasiactivation_notify);
@@ -504,6 +503,7 @@ static bool ioncore_init_x(const char *display, int stflags)
     ioncore_g.atom_wm_window_role=XInternAtom(dpy, "WM_WINDOW_ROLE", False);
     ioncore_g.atom_checkcode=XInternAtom(dpy, "_ION_CWIN_RESTART_CHECKCODE", False);
     ioncore_g.atom_selection=XInternAtom(dpy, "_ION_SELECTION_STRING", False);
+    ioncore_g.atom_dockapp_hack=XInternAtom(dpy, "_ION_DOCKAPP_HACK", False);
     ioncore_g.atom_mwm_hints=XInternAtom(dpy, "_MOTIF_WM_HINTS", False);
 
     ioncore_init_xim();
index ace4908835b2e2f431abf00ee48c8d4bcfc06f21..d443631a8de2482676deac9d2c55ad4902e63da9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_IONCORE_H
index ec03dddd2f6fd141cf526adb90bd27eb8208a4ef..aa52c74ff5ac436ae413132fe238a7e8fb434edf 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local ioncore=_G.ioncore
@@ -140,6 +137,24 @@ function ioncore.kpress_wait(keyspec, cmd, guard)
     return putcmd(cmd, guard, {action = "kpress_wait", kcb = keyspec})
 end
 
+--DOC
+-- Submap enter event for bindings.
+function ioncore.submap_enter(cmd, guard)
+    return putcmd(cmd, guard, {action = "submap_enter"})
+end
+
+--DOC
+-- Submap modifier release event for bindings.
+function ioncore.submap_wait(cmd, guard)
+    return putcmd(cmd, guard, {action = "submap_wait"})
+end
+
+-- DOC
+-- Submap leave event for bindings.
+--function ioncore.submap_leave(cmd, guard)
+--    return putcmd(cmd, guard, {action = "submap_leave"})
+--end
+
 local function mact(act_, kcb_, cmd, guard)
     local st, en, kcb2_, area_=string.find(kcb_, "([^@]*)@(.*)")
     return putcmd(cmd, guard, {
index af1134cfe51061a9e9d2b959aa83b5b3452d1d27..982f2d6c5d455f2f7d52f7488e6e1ed63c4af580 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 warn(TR([[
index 2255bdd37af2aa25f0de3fa8704348fa705930cb..dde9195d991e2c63ef7d3cd399729387b950244e 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 -- This is a slight abuse of the package.loaded variable perhaps, but
@@ -28,6 +25,7 @@ dopath('ioncore_winprops')
 dopath('ioncore_misc')
 dopath('ioncore_wd')
 dopath('ioncore_menudb')
+dopath('ioncore_tabnum')
 
 -- Modifier setup compatibility kludge
 local oldindex
@@ -57,6 +55,8 @@ setmetatable(_G, newmeta)
 -- Export some important functions into global namespace.
 export(ioncore, 
        "submap",
+       "submap_enter",
+       "submap_wait",
        "kpress",
        "kpress_wait",
        "mpress",
index b36159397f510c4114c798075c32e4333c26563e..c8e94f4ae989116436d86c5ee13add11c5426461 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 
index 42860548298e9712d6f302b8560e3d6bab1c7052..0248b14751cc75f233907bb6730cba3c49bec9e3 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local ioncore=_G.ioncore
@@ -405,12 +402,16 @@ local function sortmenu(m)
 end
 
 
-function menus.ctxmenu(reg, sub_or_chld)
+function menus.ctxmenu(reg, sub)
     local m, r, s
     
+    if obj_is(sub, "WGroup") then
+        sub=(sub:bottom() or sub)
+    end
+    
     -- First, stuff between reg (inclusive) and sub_or_chld (inclusive)
     -- at the top level in the menu.
-    r=(sub_or_chld or reg)
+    r=(sub or reg)
     while r and s~=reg do
         local mm=get_ctxmenu(r, s)
         m=((m and table.icat(mm, m)) or mm)
index 4637279d798fa7c108b32a97a6c4ae58927b3f53..17817659ff5a3af12f153570f443c37acdce2d54 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local group_tmpl = { type="WGroupWS" }
diff --git a/ioncore/ioncore_tabnum.lua b/ioncore/ioncore_tabnum.lua
new file mode 100644 (file)
index 0000000..e9161b8
--- /dev/null
@@ -0,0 +1,49 @@
+--
+-- ion/share/ioncore_tabnum.lua -- Ioncore tab numbering support
+-- 
+-- Copyright (c) Tuomo Valkonen 2007.
+--
+-- See the included file LICENSE for details.
+--
+
+ioncore.tabnum={}
+
+local framestate={}
+
+local function do_show(frame)
+    frame:set_grattr('numbered', 'set')
+    framestate[frame]='set'
+end
+
+--DOC
+-- Show tab numbers on \var{frame}, clearing them when submap
+-- grab is released the next time. If \var{delay} is given, in
+-- milliseconds, the numbers are not actually displayed until this
+-- time has passed.
+function ioncore.tabnum.show(frame, delay)
+    if delay and delay>0 then
+        local tmr=ioncore.create_timer()
+        framestate[frame]=tmr
+        tmr:set(delay, function() do_show(frame) end)
+    else
+        do_show(frame)
+    end
+end
+
+--DOC
+-- Clear all tab numbers set by \fnref{ioncore.tabnum.show}.
+function ioncore.tabnum.clear()
+    local st=framestate
+    framestate={}
+    
+    for f, s in pairs(st) do
+        if s=='set' then
+            f:set_grattr('numbered', 'unset')
+        elseif obj_is(s, "WTimer") then
+            s:reset()
+        end
+    end
+end
+
+ioncore.get_hook("ioncore_submap_ungrab_hook")
+    :add(ioncore.tabnum.clear)
index 8b1f6cedb49b1fab5da2a5541f04ed78b7071c81..cdb7a36ed815d316df295080ed52629b1377c24d 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local savefile="saved_wd"
index c241d63b378a6247c7edec07ff5b9cdf78b80e67..6a6ca51eb6b1478d93c07c78889f1de6308be905 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local ioncore=_G.ioncore
@@ -56,7 +53,7 @@ function ioncore.getwinprop(cwin)
                 props={}
                 pcall(function() props=winprops[c][r][i] or {} end)
                 for idx, prop in ipairs_r(props) do
-                    if prop:match(cwin) then
+                    if prop:match(cwin, id) then
                         if prop.oneshot then
                             table.remove(props, idx)
                         end
@@ -82,7 +79,7 @@ local function ensure_winproptab(class, role, instance)
     end
 end    
 
-local function do_add_winprop(class, role, instance, name, prop)
+local function do_add_winprop(class, role, instance, prop)
     ensure_winproptab(class, role, instance)
     table.insert(winprops[class][role][instance], prop)
 end
@@ -90,10 +87,25 @@ end
 
 --DOC
 -- The basic name-based winprop matching criteria.
-function ioncore.match_winprop_name(prop, cwin)
-    if not prop.name then
-        return true
-    else
+function ioncore.match_winprop_dflt(prop, cwin, id)
+    local function chkf(p, i)
+        if p==nil then
+            return true
+        else
+            return (p==(i and true)) 
+                           -- hack for nil
+        end
+    end
+    
+    if not chkf(prop.is_transient, id.is_transient) then
+        return false
+    end
+    
+    if not chkf(prop.is_dockapp, id.is_dockapp) then
+        return false
+    end
+    
+    if prop.name then
         local nm=cwin:name()
         if nm then
             local st, en=string.find(nm, prop.name)
@@ -102,6 +114,8 @@ function ioncore.match_winprop_name(prop, cwin)
             return false
         end
     end
+    
+    return true
 end
 
 
@@ -123,9 +137,9 @@ function ioncore.defwinprop(list)
     end
     
     if not list2.match then
-        list2.match=ioncore.match_winprop_name
+        list2.match=ioncore.match_winprop_dflt
     end
     
-    do_add_winprop(class, role, instance, name, list2)
+    do_add_winprop(class, role, instance, list2)
 end
 
index b4dbc7b058002d186c1d8f7d82e9dd76aa394948..0a4e951f74a6e83c6e5e6a0cd5909a6b5c143636 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <math.h>
index 637cf63a0194408c20e7f8e8ea117af4b0852b2c..b4ac87a1108fad7e10861c36a3de689c8bf29c3e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_KBRESIZE_H
index 57ada801f313f85d8f3515f6611e638876e62a2c..4134ab77f2abdd158181472e9ff471d38613b5cb 100644 (file)
@@ -3,14 +3,15 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <ctype.h>
+
 #include <libtu/objp.h>
+#include <libextl/extl.h>
+#include <libmainloop/defer.h>
+
 #include "common.h"
 #include "key.h"
 #include "binding.h"
@@ -19,7 +20,6 @@
 #include "cursor.h"
 #include "grab.h"
 #include "regbind.h"
-#include <libextl/extl.h>
 #include "strings.h"
 #include "xwindow.h"
 
@@ -97,9 +97,7 @@ void clientwin_quote_next(WClientWin *cwin)
 
 static bool waitrelease_handler(WRegion *reg, XEvent *ev)
 {
-    if(!ioncore_unmod(ev->xkey.state, ev->xkey.keycode))
-        return TRUE;
-    return FALSE;
+    return (ioncore_unmod(ev->xkey.state, ev->xkey.keycode)==0);
 }
 
 
@@ -120,29 +118,63 @@ static void waitrelease(WRegion *reg)
 }
 
 
-static void free_subs(WSubmapState *p)
+static void free_sub(WSubmapState *p)
 {
-    WSubmapState *next;
+    /*extl_unref_fn(p->leave);
+    watch_reset(&p->leave_reg);
+    */
     
-    while(p!=NULL){
-        next=p->next;
-        free(p);
-        p=next;
+    free(p);
+}
+
+
+void region_free_submapstat(WRegion *reg)
+{
+    while(reg->submapstat!=NULL){
+        WSubmapState *p=reg->submapstat;
+        reg->submapstat=p->next;
+        free_sub(p);
     }
 }
 
 
+WHook *ioncore_submap_ungrab_hook=NULL;
+
+
+static void call_submap_ungrab_hook()
+{
+    hook_call_v(ioncore_submap_ungrab_hook); 
+}
+
+
 static void clear_subs(WRegion *reg)
 {
-    while(reg->submapstat!=NULL){
-        WSubmapState *tmp=reg->submapstat;
-        reg->submapstat=tmp->next;
-        free(tmp);
+    region_free_submapstat(reg);
+    mainloop_defer_action(NULL, (WDeferredAction*)call_submap_ungrab_hook);
+/*
+    while(reg!=NULL && reg->submapstat!=NULL){
+        WSubmapState *p=reg->submapstat;
+        reg->submapstat=p->next;
+        
+        if(p->leave!=extl_fn_none() && p->leave_reg.obj!=NULL){
+            Watch regw=WATCH_INIT;
+                
+            watch_setup(&regw, (Obj*)reg, NULL);
+                
+            extl_call(p->leave, "o", NULL, p->leave_reg.obj);
+            
+            reg=(WRegion*)regw.obj;
+            
+            watch_reset(&regw);
+        }
+        
+        free_sub(p);
     }
+*/
 }
 
 
-static bool add_sub(WRegion *reg, uint key, uint state)
+static WSubmapState *add_sub(WRegion *reg, uint key, uint state)
 {
     WSubmapState **p;
     WSubmapState *s;
@@ -159,14 +191,16 @@ static bool add_sub(WRegion *reg, uint key, uint state)
     s=ALLOC(WSubmapState);
     
     if(s==NULL)
-        return FALSE;
+        return NULL;
     
     s->key=key;
     s->state=state;
+    /*s->leave=extl_fn_none();
+    watch_init(&s->leave_reg);*/
     
     *p=s;
     
-    return TRUE;
+    return s;
 
 }
 
@@ -189,88 +223,159 @@ bool ioncore_current_key(uint *kcb, uint *state, bool *sub)
 }
 
 
-/* Return value TRUE = grab needed */
-static bool do_key(WRegion *reg, XKeyEvent *ev)
+enum{GRAB_NONE, GRAB_SUBMAP, GRAB_WAITRELEASE};
+
+
+static WBinding *lookup_binding_(WRegion *reg, 
+                                 int act, uint state, uint kcb, 
+                                 WSubmapState *st,
+                                 WRegion **binding_owner, WRegion **subreg)
 {
-    WBinding *binding=NULL;
-    WRegion *oreg=NULL, *binding_owner=NULL, *subreg=NULL;
-    bool grabbed;
+    WBinding *binding;
     
-    oreg=reg;
-    grabbed=(oreg->flags&REGION_BINDINGS_ARE_GRABBED);
+    *subreg=NULL;
     
-    if(grabbed){
-        /* Find the deepest nested active window grabbing this key. */
-        while(reg->active_sub!=NULL)
-            reg=reg->active_sub;
+    do{
+        binding=region_lookup_keybinding(reg, act, state, kcb, st,
+                                         binding_owner);
         
-        do{
-            binding=region_lookup_keybinding(reg, ev, oreg->submapstat, 
-                                             &binding_owner);
+        if(binding!=NULL)
+            break;
             
-            if(binding!=NULL)
-                break;
-            if(OBJ_IS(reg, WRootWin))
-                break;
-            
-            subreg=reg;
-            reg=REGION_PARENT_REG(reg);
-        }while(reg!=NULL);
+        if(OBJ_IS(reg, WRootWin))
+            break;
+        
+        *subreg=reg;
+        reg=REGION_PARENT_REG(reg);
+    }while(reg!=NULL);
+    
+    return binding;
+}
+
+static WBinding *lookup_binding(WRegion *oreg, 
+                                int act, uint state, uint kcb, 
+                                WRegion **binding_owner, WRegion **subreg)
+{
+    WRegion *reg=oreg;
+        
+    /* Find the deepest nested active window grabbing this key. */
+    while(reg->active_sub!=NULL)
+        reg=reg->active_sub;
+        
+    return lookup_binding_(reg, act, state, kcb, oreg->submapstat, 
+                           binding_owner, subreg);
+}
+
+
+static void do_call_binding(WBinding *binding, WRegion *reg, WRegion *subreg)
+{
+    WRegion *mgd=region_managed_within(reg, subreg);
+
+    /* TODO: having to pass both mgd and subreg for some handlers
+     * to work is ugly and complex.
+     */
+    extl_call(binding->func, "ooo", NULL, reg, mgd, subreg);
+}
+
+
+static int do_key(WRegion *oreg, XKeyEvent *ev)
+{
+    WBinding *binding=NULL;
+    WRegion *binding_owner=NULL, *subreg=NULL;
+    bool grabbed=(oreg->flags&REGION_BINDINGS_ARE_GRABBED);
+    int ret=GRAB_NONE;
+    
+    if(grabbed){
+        binding=lookup_binding(oreg, BINDING_KEYPRESS, ev->state, ev->keycode,
+                               &binding_owner, &subreg);
     }else{
-        binding=region_lookup_keybinding(oreg, ev, oreg->submapstat, 
+        binding=region_lookup_keybinding(oreg, BINDING_KEYPRESS, 
+                                         ev->state, ev->keycode, 
+                                         oreg->submapstat, 
                                          &binding_owner);
     }
     
     if(binding!=NULL){
+        bool subs=(oreg->submapstat!=NULL);
+        WBinding *call=NULL;
+        
         if(binding->submap!=NULL){
-            if(add_sub(oreg, ev->keycode, ev->state))
-                return grabbed;
-            else
-                clear_subs(oreg);
-        }else if(binding_owner!=NULL){
-            WRegion *mgd=region_managed_within(binding_owner, subreg);
-            bool subs=(oreg->submapstat!=NULL);
-            
-            clear_subs(oreg);
+            WSubmapState *s=add_sub(oreg, ev->keycode, ev->state);
+            if(s!=NULL){
+                /*WRegion *own2, *subreg2;
+                
+                call=lookup_binding(binding_owner, BINDING_SUBMAP_LEAVE, 0, 0,
+                                    oreg->submapstat, &own2, &subreg2);
+                                    
+                if(call!=NULL){
+                    s->leave=extl_ref_fn(call->func);
+                    watch_setup(&s->leave_reg, (Obj*)own2, NULL);
+                }*/
+                
+                call=lookup_binding_(binding_owner, BINDING_SUBMAP_ENTER, 0, 0,
+                                     oreg->submapstat, 
+                                     &binding_owner, &subreg);
+                
+                ret=(grabbed ? GRAB_SUBMAP : GRAB_NONE);
+            }
+        }else{
+            call=binding;
             
             if(grabbed)
                 XUngrabKeyboard(ioncore_g.dpy, CurrentTime);
             
+            if(ev->state!=0 && !subs && binding->wait)
+                ret=GRAB_WAITRELEASE;
+        }
+        
+        if(call!=NULL){
             current_kcb=ev->keycode;
             current_state=ev->state;
             current_submap=subs;
             
-            /* TODO: having to pass both mgd and subreg for some handlers
-             * to work is ugly and complex.
-             */
-            extl_call(binding->func, "ooo", NULL, binding_owner, mgd, subreg);
+            do_call_binding(call, binding_owner, subreg);
             
             current_kcb=0;
-            
-            if(ev->state!=0 && !subs && binding->wait)
-                waitrelease(oreg);
         }
-    }else if(oreg->submapstat!=NULL){
-        clear_subs(oreg);
-    }else if(OBJ_IS(oreg, WWindow)){
+    }else if(oreg->submapstat==NULL && OBJ_IS(oreg, WWindow)){
         insstr((WWindow*)oreg, ev);
     }
     
-    return FALSE;
+    return ret;
 }
 
 
 static bool submapgrab_handler(WRegion* reg, XEvent *xev)
 {
     XKeyEvent *ev=&xev->xkey;
-    if(ev->type!=KeyPress)
+    if(ev->type!=KeyPress){
+        if(ioncore_unmod(ev->state, ev->keycode)==0){
+            WBinding *binding;
+            WRegion *binding_owner, *subreg;
+            
+            binding=lookup_binding(reg, 
+                                   BINDING_SUBMAP_RELEASEMOD, 0, 0,
+                                   &binding_owner, &subreg);
+            
+            if(binding!=NULL)
+                do_call_binding(binding, binding_owner, subreg);
+        }
         return FALSE;
+    }
+
     if(ioncore_ismod(ev->keycode))
         return FALSE;
-    return !do_key(reg, ev);
+    if(do_key(reg, ev)!=GRAB_SUBMAP){
+        clear_subs(reg);
+        return TRUE;
+    }else{
+        return FALSE;
+    }
 }
 
 
+
+
 static void submapgrab(WRegion *reg)
 {
     ioncore_grab_establish(reg, submapgrab_handler, clear_subs, 0);
@@ -283,7 +388,25 @@ void ioncore_do_handle_keypress(XKeyEvent *ev)
     WRegion *reg=(WRegion*)XWINDOW_REGION_OF(ev->window);
     
     if(reg!=NULL){
-        if(do_key(reg, ev))
-            submapgrab(reg);
+        Watch w=WATCH_INIT;
+        int grab;
+        
+        /* reg might be destroyed by binding handlers */
+        watch_setup(&w, (Obj*)reg, NULL);
+        
+        grab=do_key(reg, ev);
+        
+        reg=(WRegion*)w.obj;
+        
+        if(reg!=NULL){
+            if(grab==GRAB_SUBMAP)
+                submapgrab(reg);
+            else if(grab==GRAB_WAITRELEASE)
+                waitrelease(reg);
+            else if(grab==GRAB_NONE && reg->submapstat!=NULL)
+                clear_subs(reg);
+        }
+        
+        watch_reset(&w);
     }
 }
index 35d8d5520b69442b975b887e9c013432362c881c..059ca5d7d8b083933e7c493d066a8c31757dca2b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_KEY_H
@@ -14,6 +11,7 @@
 
 #include <X11/keysym.h>
 
+#include <libmainloop/hooks.h>
 #include "common.h"
 #include "clientwin.h"
 
@@ -21,4 +19,8 @@ extern void ioncore_do_handle_keypress(XKeyEvent *ev);
 extern void clientwin_quote_next(WClientWin *cwin);
 extern bool ioncore_current_key(uint *kcb, uint *state, bool *sub);
 
+extern void region_free_submapstat(WRegion *reg);
+
+extern WHook *ioncore_submap_ungrab_hook;
+
 #endif /* ION_IONCORE_KEY_H */
index 657a9e3e2e9be85a97e4890a65b9f887b465a487..ecee912d7372edd276683b83ee55570ac250b2ba 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "common.h"
index 32ac441c735466c699e4b3f17515989c888396b9..ebe71f8746dd58e70b6bd43132722fa25da92eaa 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  * 
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_LLIST_H
index 2eb6f38b8f97e02bb2cfb54402cc6c417867338a..bcc8a5388a394de0b3919b747e6eba04ae160461 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
@@ -74,8 +71,8 @@ static WPHolder *try_target(WClientWin *cwin, const WManageParams *param,
         
     if(r==NULL)
         return NULL;
-            
-    return region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_NO);
+    
+    return region_prepare_manage(r, cwin, param, MANAGE_PRIORITY_NONE);
 }
 
 
@@ -118,7 +115,7 @@ static bool handle_target_winprops(WClientWin *cwin, const WManageParams *param,
                 
                 if(ph==NULL){
                     ph=region_prepare_manage(reg, cwin, param, 
-                                             MANAGE_REDIR_PREFER_YES);
+                                             MANAGE_PRIORITY_NONE);
                     
                     if(ph==NULL)
                         destroy_obj((Obj*)reg);
@@ -159,7 +156,7 @@ static bool try_fullscreen(WClientWin *cwin, WScreen *dflt,
     
     if(fs_scr!=NULL){
         WPHolder *fs_ph=region_prepare_manage((WRegion*)fs_scr, cwin, param,
-                                              MANAGE_REDIR_STRICT_NO);
+                                              MANAGE_PRIORITY_NOREDIR);
         
         if(fs_ph!=NULL){
             int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
@@ -208,8 +205,8 @@ bool clientwin_do_manage_default(WClientWin *cwin,
     if(ph==NULL){
         /* Find a placeholder for non-fullscreen state */
         ph=region_prepare_manage((WRegion*)scr, cwin, param,
-                                 MANAGE_REDIR_PREFER_YES);
-
+                                 MANAGE_PRIORITY_NONE);
+        
         if(try_fullscreen(cwin, scr, param)){
             if(pholder_target(ph)!=(WRegion*)region_screen_of((WRegion*)cwin)){
                 WRegion *grp=region_groupleader_of((WRegion*)cwin);
@@ -245,29 +242,25 @@ bool clientwin_do_manage_default(WClientWin *cwin,
 
 
 WPHolder *region_prepare_manage(WRegion *reg, const WClientWin *cwin,
-                                const WManageParams *param, int redir)
+                                const WManageParams *param, int priority)
 {
     WPHolder *ret=NULL;
     CALL_DYN_RET(ret, WPHolder*, region_prepare_manage, reg, 
-                 (reg, cwin, param, redir));
+                 (reg, cwin, param, priority));
     return ret;
 }
 
 
 WPHolder *region_prepare_manage_default(WRegion *reg, const WClientWin *cwin,
-                                        const WManageParams *param, int redir)
+                                        const WManageParams *param, int priority)
 {
-    WRegion *curr;
-    
-    if(redir==MANAGE_REDIR_STRICT_NO)
-        return NULL;
-    
-    curr=region_current(reg);
+    int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NONE);
+    WRegion *curr=region_current(reg);
     
     if(curr==NULL)
         return NULL;
         
-    return region_prepare_manage(curr, cwin, param, MANAGE_REDIR_PREFER_YES);
+    return region_prepare_manage(curr, cwin, param, cpriority);
 }
 
 
@@ -298,10 +291,10 @@ WPHolder *region_prepare_manage_transient_default(WRegion *reg,
 
 
 bool region_manage_clientwin(WRegion *reg, WClientWin *cwin,
-                             const WManageParams *par, int redir)
+                             const WManageParams *par, int priority)
 {
     bool ret;
-    WPHolder *ph=region_prepare_manage(reg, cwin, par, redir);
+    WPHolder *ph=region_prepare_manage(reg, cwin, par, priority);
     int swf=(par->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
     
     if(ph==NULL)
index 45ddf6a6179ec9b894761fb5c43b44cf59ddf0d6..d0faed21956fbe354597497a1eb14d2efe509ca6 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_MANAGE_H
@@ -28,12 +25,29 @@ INTRSTRUCT(WManageParams);
   {FALSE, FALSE, FALSE, FALSE, FALSE, ForgetGravity, {0, 0, 0, 0}, NULL}
 
 enum{
-    MANAGE_REDIR_PREFER_YES,
-    MANAGE_REDIR_PREFER_NO,
-    MANAGE_REDIR_STRICT_YES,
-    MANAGE_REDIR_STRICT_NO
+    MANAGE_PRIORITY_NONE,
+    MANAGE_PRIORITY_LOW,
+    MANAGE_PRIORITY_NORMAL,
+    MANAGE_PRIORITY_GROUP,
+    MANAGE_PRIORITY_NO,
+    /* Special */
+    MANAGE_PRIORITY_NOREDIR
 };
 
+#define MANAGE_PRIORITY_OK(PRIORITY, OUR)                        \
+    ((PRIORITY) <= (OUR) || (PRIORITY)==MANAGE_PRIORITY_NOREDIR)
+
+#define MANAGE_PRIORITY_SUB(PRIORITY, OUR)      \
+    ((PRIORITY)==MANAGE_PRIORITY_NOREDIR        \
+     ? MANAGE_PRIORITY_NO                       \
+     : (PRIORITY) < (OUR) ? (OUR) : (PRIORITY))
+
+#define MANAGE_PRIORITY_SUBX(PRIORITY, OUR)                    \
+    ((PRIORITY)==MANAGE_PRIORITY_NOREDIR || (OUR) < (PRIORITY) \
+     ? MANAGE_PRIORITY_NO                                      \
+     : MANAGE_PRIORITY_NONE)
+
+
 DECLSTRUCT(WManageParams){
     bool switchto;
     bool jumpto;
index 34d64c887b982efaec466dc0e2d5585f5c290222..b49f95cfb8efe37abcc595b66f467c308a71e293 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 0d00e52af31267b196224d542c2ad72550b56aac..e73e1084e3bcfcdaca19f35dd2c34bb46c615de1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_MODULES_H
index 28dc48a1a58fe92a18ba812c3afb35ea92894fc3..71943a4595ca6829fe6da5ea8b267669eb3fe320 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <limits.h>
@@ -346,7 +343,7 @@ int mplex_get_index(WMPlex *mplex, WRegion *reg)
 
 
 /*EXTL_DOC
- * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1.
+ * Move \var{r} ``right'' within objects managed by \var{mplex} on list 1.
  */
 EXTL_EXPORT_MEMBER
 void mplex_inc_index(WMPlex *mplex, WRegion *r)
@@ -359,7 +356,7 @@ void mplex_inc_index(WMPlex *mplex, WRegion *r)
 
 
 /*EXTL_DOC
- * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1.
+ * Move \var{r} ``left'' within objects managed by \var{mplex} on list 1.
  */
 EXTL_EXPORT_MEMBER
 void mplex_dec_index(WMPlex *mplex, WRegion *r)
@@ -514,84 +511,126 @@ static void mplex_managed_rqgeom(WMPlex *mplex, WRegion *sub,
 /*{{{ Focus  */
 
 
-static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try)
-{
-    WStacking *stacking=mplex_get_stacking(mplex);
-    WStacking *st=NULL;
-    
-    if(stacking==NULL)
-        return NULL;
+typedef struct{
+    WMPlex *mplex;
+    WStacking *to_try;
+    WStacking *group_st;
+    PtrList **hidelist;
+    bool try_hard;
+} FiltData;
 
-    if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg)))
-        to_try=NULL;
-
-    st=stacking_find_to_focus_mapped(stacking, to_try, NULL);
-    
-    if(st!=NULL)
-        return st;
-    else if(mplex->mx_current!=NULL)
-        return mplex->mx_current->st;
-    else
-        return NULL;
-}
 
-
-static WStacking *maybe_focusable(WRegion *reg)
+static WRegion *manager_within(WMPlex *mplex, WStacking *st)
 {
-    if(reg==NULL || !REGION_IS_MAPPED(reg))
-        return NULL;
-
-    return ioncore_find_stacking(reg);
+    return region_managed_within((WRegion*)mplex, st->reg);
 }
 
 
-static WStacking *stacking_within(WMPlex *mplex, WRegion *reg)
+static WStacking *stacking_within(WMPlex *mplex, WStacking *st)
 {
-    while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex)
-        reg=REGION_MANAGER(reg);
+    WRegion *reg=manager_within(mplex, st);
     
-    return maybe_focusable(reg);
+    return (reg==NULL 
+            ? NULL
+            : (reg==st->reg
+               ? st
+               : ioncore_find_stacking(reg)));
 }
 
 
-static WStacking *mplex_to_focus(WMPlex *mplex)
+/* Mutually exclusive regions can't be pseudomodal */
+#define IS_PSEUDOMODAL(ST) ((ST)->lnode==NULL && (ST)->pseudomodal)
+
+
+static bool mapped_pseudomodal_include_filt(WStacking *st, void *data_)
 {
-    WStacking *to_try=NULL;
-    WRegion *reg=NULL;
+    FiltData *data=(FiltData*)data_;
+    WStacking *stw;
     
-    to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex));
+    if(st->reg==NULL || !REGION_IS_MAPPED(st->reg))
+        return FALSE;
+        
+    if(!data->hidelist
+       || (data->to_try==NULL && data->group_st==NULL) 
+       || st->level<STACKING_LEVEL_MODAL1){
+        return TRUE;
+    }
     
-    if(to_try==NULL){
-        /* Search focus history */
-        for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){
-            to_try=stacking_within(mplex, reg);
-            if(to_try!=NULL)
-                break;
-        }
+    /* Ok, modal node in the way. Let's see if it is pseudomodal
+     * and can be hidden.
+     */
+    
+    stw=stacking_within(data->mplex, st);
+    
+    /* This should not happen */
+    if(stw==NULL || stw->reg==NULL)
+        return FALSE;
+    
+    /* The node is within the same group, so it can not be hidden. 
+     * Latter case should not happen.
+     */
+    if(stw==data->group_st || stw==data->to_try)
+        return TRUE;
+    
+    if(IS_PSEUDOMODAL(stw)){
+        /* Don't insert multiple times. */
+        return !ptrlist_reinsert_first(data->hidelist, stw);
     }
+        
+    return TRUE;
+}
+
+
+static bool mgr_pseudomodal_approve_filt(WStacking *st, void *data_)
+{
+    FiltData *data=(FiltData*)data_;
     
-    return mplex_do_to_focus(mplex, to_try);
+    return (data->group_st==NULL || st==data->group_st ||
+            manager_within(data->mplex, st)==data->group_st->reg);
 }
 
 
-static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node,
-                                       WStacking *to_try)
+WStacking *mplex_find_to_focus(WMPlex *mplex,
+                               WStacking *to_try,
+                               WStacking *group_st,
+                               PtrList **hidelist)
 {
+    WStackingFilter *fi=mapped_pseudomodal_include_filt;
+    WStackingFilter *fa=mgr_pseudomodal_approve_filt;
     WStacking *stacking=mplex_get_stacking(mplex);
-    WStacking *st=NULL;
+    FiltData data;
+    WStacking *st;
     
     if(stacking==NULL)
         return NULL;
-
+    
     if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg)))
         to_try=NULL;
     
-    return stacking_find_to_focus_mapped(stacking, to_try, node->reg);
+    data.mplex=mplex;
+    data.to_try=to_try;
+    data.group_st=group_st;
+    data.hidelist=hidelist;
+    
+    st=stacking_find_to_focus(stacking, to_try, fi, fa, &data);
+    
+    if(st==NULL && hidelist!=NULL)
+        ptrlist_clear(hidelist);
+    
+    return st;
+}
+
+
+static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try,
+                                    PtrList **hidelist)
+{
+    return mplex_find_to_focus(mplex, to_try, NULL, hidelist);
 }
 
 
-static WStacking *mplex_to_focus_on(WMPlex *mplex, WStacking *node,
-                                    WStacking *to_try)
+static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node,
+                                       WStacking *to_try, 
+                                       PtrList **hidelist)
 {
     WGroup *grp=OBJ_CAST(node->reg, WGroup);
     WStacking *st;
@@ -599,17 +638,71 @@ static WStacking *mplex_to_focus_on(WMPlex *mplex, WStacking *node,
     if(grp!=NULL){
         if(to_try==NULL)
             to_try=grp->current_managed;
-        st=mplex_do_to_focus_on(mplex, node, to_try);
+        st=mplex_find_to_focus(mplex, to_try, node, hidelist);
         if(st!=NULL || to_try!=NULL)
             return st;
+        if(hidelist!=NULL)
+            ptrlist_clear(hidelist);
         /* We don't know whether something is blocking focus here,
          * or if there was nothing to focus (as node->reg itself
          * isn't on the stacking list).
          */
     }
     
-    st=mplex_do_to_focus(mplex, node);
-    return (st==node ? st : NULL);
+    st=mplex_do_to_focus(mplex, node, hidelist);
+    
+    if(st==node)
+        return st;
+        
+    if(hidelist!=NULL)
+        ptrlist_clear(hidelist);
+    
+    return NULL;
+}
+
+
+static WStacking *maybe_focusable(WRegion *reg)
+{
+    if(reg==NULL || !REGION_IS_MAPPED(reg))
+        return NULL;
+
+    return ioncore_find_stacking(reg);
+}
+
+
+static WStacking *has_stacking_within(WMPlex *mplex, WRegion *reg)
+{
+    while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex)
+        reg=REGION_MANAGER(reg);
+                
+    return maybe_focusable(reg);
+}
+
+
+static WStacking *mplex_to_focus(WMPlex *mplex)
+{
+    WStacking *to_try=NULL;
+    WRegion *reg=NULL;
+    WStacking *st;
+    
+    to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex));
+    
+    if(to_try==NULL){
+        /* Search focus history */
+        for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){
+            to_try=has_stacking_within(mplex, reg);
+            if(to_try!=NULL)
+                break;
+        }
+    }
+    
+    st=mplex_do_to_focus(mplex, to_try, NULL);
+    
+    return (st!=NULL 
+            ? st 
+            : (mplex->mx_current!=NULL
+               ? mplex->mx_current->st
+               : NULL));
 }
 
 
@@ -726,7 +819,7 @@ static bool mplex_refocus(WMPlex *mplex, WStacking *node, bool warp)
     bool ret=TRUE;
     
     if(node!=NULL){
-        foc=mplex_to_focus_on(mplex, node, NULL);
+        foc=mplex_do_to_focus_on(mplex, node, NULL, NULL);
         ret=(foc!=NULL);
     }
         
@@ -746,24 +839,33 @@ bool mplex_do_prepare_focus(WMPlex *mplex, WStacking *node,
                             WStacking *sub, int flags, 
                             WPrepareFocusResult *res)
 {
+    bool ew=(flags&REGION_GOTO_ENTERWINDOW);
+    PtrList *hidelist=NULL;
+    PtrList **hidelistp=(ew ? NULL : &hidelist);
     WStacking *foc;
     
     if(sub==NULL && node==NULL)
         return FALSE;
     
     /* Display the node in any case */
-    if(node!=NULL && !(flags&REGION_GOTO_ENTERWINDOW))
+    if(node!=NULL && !ew)
         mplex_do_node_display(mplex, node, TRUE);
     
     if(!region_prepare_focus((WRegion*)mplex, flags, res))
         return FALSE;
 
     if(node!=NULL)
-        foc=mplex_to_focus_on(mplex, node, sub);
+        foc=mplex_do_to_focus_on(mplex, node, sub, hidelistp);
     else
-        foc=mplex_do_to_focus(mplex, sub);
+        foc=mplex_do_to_focus(mplex, sub, hidelistp);
 
     if(foc!=NULL){
+        while(hidelist!=NULL){
+            WStacking *st=(WStacking*)ptrlist_take_first(&hidelist);
+            st->hidden=TRUE;
+            region_unmap(st->reg);
+        }
+        
         if(ioncore_g.autoraise && 
            !(flags&REGION_GOTO_ENTERWINDOW) &&
            foc->level>STACKING_LEVEL_BOTTOM){
@@ -883,7 +985,8 @@ bool mplex_set_hidden(WMPlex *mplex, WRegion *reg, int sp)
 
 /*EXTL_DOC
  * Set the visibility of the region \var{reg} on \var{mplex}
- * as specified with the parameter \var{how} (set/unset/toggle).
+ * as specified with the parameter \var{how} 
+ * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}).
  * The resulting state is returned.
  */
 EXTL_EXPORT_AS(WMPlex, set_hidden)
@@ -1108,16 +1211,13 @@ bool mplex_do_attach_final(WMPlex *mplex, WRegion *reg, WMPlexPHolder *ph)
                : SIZEPOLICY_FULL_EXACT));
 
     modal=(param->flags&MPLEX_ATTACH_LEVEL
-           ? param->level>=STACKING_LEVEL_MODAL1
-           : param->flags&MPLEX_ATTACH_MODAL);
+           && param->level>=STACKING_LEVEL_MODAL1);
     
     level=(param->flags&MPLEX_ATTACH_LEVEL
            ? param->level
-           : (param->flags&MPLEX_ATTACH_MODAL
-              ? STACKING_LEVEL_MODAL1
-              : (param->flags&MPLEX_ATTACH_UNNUMBERED
-                 ? STACKING_LEVEL_NORMAL
-                 : STACKING_LEVEL_BOTTOM)));
+           : (param->flags&MPLEX_ATTACH_UNNUMBERED
+              ? STACKING_LEVEL_NORMAL
+              : STACKING_LEVEL_BOTTOM));
     
     hidden=(param->flags&MPLEX_ATTACH_HIDDEN
             && (param->flags&MPLEX_ATTACH_UNNUMBERED
@@ -1160,6 +1260,7 @@ bool mplex_do_attach_final(WMPlex *mplex, WRegion *reg, WMPlexPHolder *ph)
     node->hidden=TRUE;
     node->szplcy=szplcy;
     node->level=level;
+    node->pseudomodal=(param->flags&MPLEX_ATTACH_PSEUDOMODAL ? 1 : 0);
     
     if(lnode!=NULL){
         llist_link_after(&(mplex->mx_list), 
@@ -1283,17 +1384,20 @@ static void get_params(WMPlex *mplex, ExtlTab tab, int mask,
 {
     int layer=1;
     int tmp;
+    char *tmpstr;
     int ok=~mask;
     
-    if(extl_table_gets_i(tab, "level", &tmp)){
-        if(tmp>=0 && ok&MPLEX_ATTACH_LEVEL){
-            par->flags|=MPLEX_ATTACH_LEVEL;
-            par->level=tmp;
+    if(ok&MPLEX_ATTACH_LEVEL){
+        if(extl_table_gets_i(tab, "level", &tmp)){
+            if(tmp>=0){
+                par->flags|=MPLEX_ATTACH_LEVEL;
+                par->level=tmp;
+            }
         }
-    }
     
-    if(extl_table_is_bool_set(tab, "modal"))
-        par->flags|=MPLEX_ATTACH_MODAL&ok;
+        if(extl_table_is_bool_set(tab, "modal"))
+            par->level=maxof(par->level, STACKING_LEVEL_MODAL1);
+    }
 
     if(extl_table_is_bool_set(tab, "unnumbered"))
         par->flags|=MPLEX_ATTACH_UNNUMBERED&ok;
@@ -1303,12 +1407,23 @@ static void get_params(WMPlex *mplex, ExtlTab tab, int mask,
 
     if(extl_table_is_bool_set(tab, "hidden"))
         par->flags|=MPLEX_ATTACH_HIDDEN&ok;
+        
+    if(extl_table_is_bool_set(tab, "pseudomodal"))
+        par->flags|=MPLEX_ATTACH_PSEUDOMODAL&ok;
 
     if(extl_table_gets_i(tab, "index", &(par->index)))
         par->flags|=MPLEX_ATTACH_INDEX&ok;
 
-    if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
-        if(ok&MPLEX_ATTACH_SIZEPOLICY){
+    if(ok&MPLEX_ATTACH_SIZEPOLICY){
+        if(extl_table_gets_s(tab, "sizepolicy", &tmpstr)){
+            WSizePolicy tmpp;
+            if(string2sizepolicy(tmpstr, &tmpp)){
+                par->flags|=MPLEX_ATTACH_SIZEPOLICY;
+                par->szplcy=tmpp;
+            }
+            free(tmpstr);
+        }else if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
+            /* Backwards compat. numeric version */
             par->flags|=MPLEX_ATTACH_SIZEPOLICY;
             par->szplcy=tmp;
         }
@@ -1374,7 +1489,11 @@ WRegion *mplex_attach_new_(WMPlex *mplex, WMPlexAttachParams *par,
  *  \var{hidden} & (boolean) Attach hidden, if not prevented
  *                  by e.g. the mutually exclusive list being empty.
  *                  This option overrides \var{switchto}. \\
- *  \var{sizepolicy} & (integer) Size policy. \\
+ *  \var{pseudomodal} & (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. \\
+ *  \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\
  *  \var{geom} & (table) Geometry specification. \\
  * \end{tabularx}
  * 
@@ -1410,33 +1529,32 @@ static bool mplex_handle_drop(WMPlex *mplex, int x, int y,
 
 
 WPHolder *mplex_prepare_manage(WMPlex *mplex, const WClientWin *cwin,
-                               const WManageParams *param, int redir)
+                               const WManageParams *param, int priority)
 {
+    int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NORMAL);
     WMPlexAttachParams ap;
     WPHolder *ph=NULL;
     WMPlexPHolder *mph;
     WLListNode *after;
     
-    if(redir==MANAGE_REDIR_STRICT_YES || redir==MANAGE_REDIR_PREFER_YES){
+    /* Check current */ {
         WStacking *cur=mplex_current_node(mplex);
         
         if(cur!=NULL){
-            ph=region_prepare_manage(cur->reg, cwin, param,
-                                     MANAGE_REDIR_PREFER_YES);
+            ph=region_prepare_manage(cur->reg, cwin, param, cpriority);
             if(ph!=NULL)
                 return ph;
         }
         
         if(mplex->mx_current!=NULL && mplex->mx_current->st!=cur){
             ph=region_prepare_manage(mplex->mx_current->st->reg, 
-                                     cwin, param, 
-                                     MANAGE_REDIR_PREFER_YES);
+                                     cwin, param, cpriority);
             if(ph!=NULL)
                 return ph;
         }
     }
     
-    if(redir==MANAGE_REDIR_STRICT_YES)
+    if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_NORMAL))
         return NULL;
     
     ap.flags=((param->switchto ? MPLEX_ATTACH_SWITCHTO : 0)
@@ -1655,12 +1773,13 @@ static bool do_attach_stdisp(WRegion *mplex, WRegion *reg, void *unused)
  * \begin{tabularx}{\linewidth}{lX}
  *   \tabhead{Field & Description}
  *   \var{pos} & The corner of the screen to place the status display
- *               in. One of \code{tl}, \code{tr}, \var{bl} or \var{br}. \\
- *   \var{action} & If this field is set to \code{keep}, \var{corner}
+ *               in: one of \codestr{tl}, \codestr{tr}, \codestr{bl} 
+ *               or \codestr{br}. \\
+ *   \var{action} & If this field is set to \codestr{keep}, \var{corner}
  *                  and \var{orientation} are changed for the existing
- *                  status display. If this field is set to \var{remove},
+ *                  status display. If this field is set to \codestr{remove},
  *                  the existing status display is removed. If this
- *                  field is not set or is set to \code{replace}, a 
+ *                  field is not set or is set to \codestr{replace}, a 
  *                  new status display is created and the old, if any,
  *                  removed. \\
  * \end{tabularx}
@@ -1891,13 +2010,16 @@ static void save_node(WMPlex *mplex, ExtlTab subs, int *n,
     if(st!=extl_table_none()){
         if(mplex->mx_current!=NULL && node==mplex->mx_current->st)
             extl_table_sets_b(st, "switchto", TRUE);
-        extl_table_sets_i(st, "sizepolicy", node->szplcy);
+        extl_table_sets_s(st, "sizepolicy", 
+                          sizepolicy2string(node->szplcy));
         extl_table_sets_i(st, "level", node->level);
         g=extl_table_from_rectangle(&REGION_GEOM(node->reg));
         extl_table_sets_t(st, "geom", g);
         extl_unref_table(g);
         if(STACKING_IS_HIDDEN(node))
             extl_table_sets_b(st, "hidden", TRUE);
+        if(STACKING_IS_PSEUDOMODAL(node))
+            extl_table_sets_b(st, "pseudomodal", TRUE);
         if(unnumbered)
             extl_table_sets_b(st, "unnumbered", TRUE);
         
index 21e4a81371976e8c350f37a79ab9363ea9636e9c..08289f0fda6fdde30f65f8b3e09dd7e9a05fc716 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  * 
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_MPLEX_H
@@ -33,7 +30,7 @@
 #define MPLEX_ATTACH_SWITCHTO     0x0001 /* switch to region */
 #define MPLEX_ATTACH_UNNUMBERED   0x0002 /* do not put on mut.ex list */
 #define MPLEX_ATTACH_HIDDEN       0x0004 /* should be hidden */
-#define MPLEX_ATTACH_MODAL        0x0008 /* shortcut.. */
+#define MPLEX_ATTACH_PSEUDOMODAL  0x0004 /* pseudomodal (if modal) */
 #define MPLEX_ATTACH_LEVEL        0x0010 /* level field set */
 #define MPLEX_ATTACH_GEOM         0x0020 /* geometry field is set */
 #define MPLEX_ATTACH_SIZEPOLICY   0x0040 /* size policy field is set */
index 478ac2dd61e2152b5eb3a3cf88bed0af81fbb680..623b60ac45a353d452574f35ff52b89b85874deb 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index 5a9892232beb69083f9af39a40294a63e97bb892..be4931707c7dd27d63fa381941d30144191137bb 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_MPLEXPHOLDER_H
index 2c2269c24d565fa48266009f56a1c928bd1e16ac..a2bb33d84efd2e6ce24560adb90fd460c89023aa 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "common.h"
index 09571f31d0b7dfbb6917a94e61ee59fea5715d68..9a64eb33bc1c49b4b26a0aab84bfd9241b92b070 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_MWMHINTS_H
index 5f3c386d8eab7337fd9b5be31c63b8aba9f014aa..b7a8668a1f682199cecc6db0c80944aae8e21f0d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 
@@ -449,7 +446,7 @@ bool clientwin_register(WClientWin *cwin)
 
 /*EXTL_DOC
  * Set the name of \var{reg} to \var{p}. If the name is already in use,
- * an instance number suffix \code{<n>} will be attempted. If \var{p} has
+ * an instance number suffix \codestr{<n>} will be attempted. If \var{p} has
  * such a suffix, it will be modified, otherwise such a suffix will be
  * added. Setting \var{p} to nil will cause current name to be removed.
  */
@@ -466,7 +463,7 @@ bool region_set_name(WRegion *reg, const char *p)
 /*EXTL_DOC
  * Similar to \fnref{WRegion.set_name} except if the name is already in use,
  * other instance numbers will not be attempted. The string \var{p} should
- * not contain a \code{<n>} suffix or this function will fail.
+ * not contain a \codestr{<n>} suffix or this function will fail.
  */
 EXTL_EXPORT_MEMBER
 bool region_set_name_exact(WRegion *reg, const char *p)
index 57dd5aae8dc4812b43ff0f658979fb93a467452c..b35bc60a0d6e8bb92a73e7d30e72d3b8920b5890 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_NAMES_H
index 71090386bd9364df7999969e88fe6559b5c168d7..3ce27d39e0202f739cc29270308fdacd84e2d66f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2006-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -230,8 +227,9 @@ static WRegion *release(WRegionNaviData *data, WRegion *res)
 
 /*EXTL_DOC
  * Find region next from \var{reg} in direction \var{dirstr}
- * (up/down/left/right/next/prev/any). The table \var{param} may
- * contain the boolean field \var{nowrap}, instructing not to wrap 
+ * (\codestr{up}, \codestr{down}, \codestr{left}, \codestr{right}, 
+ * \codestr{next}, \codestr{prev}, or \codestr{any}). The table \var{param}
+ * may contain the boolean field \var{nowrap}, instructing not to wrap 
  * around, and the \type{WRegion}s \var{no_ascend} and \var{no_descend},
  * and boolean functions \var{ascend_filter} and \var{descend_filter} 
  * on \var{WRegion} pairs (\var{to}, \var{from}), are used to decide when
@@ -264,9 +262,8 @@ WRegion *ioncore_navi_next(WRegion *reg, const char *dirstr, ExtlTab param)
 
 
 /*EXTL_DOC
- * Find first region within \var{reg} in direction \var{dirstr}
- * (up/down/left/right/beg/end/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}.
+ * Find first region within \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}.
  */
 EXTL_EXPORT
 WRegion *ioncore_navi_first(WRegion *reg, const char *dirstr, ExtlTab param)
@@ -296,11 +293,10 @@ static WRegion *do_goto(WRegion *res)
 
 
 /*EXTL_DOC
- * Go to region next from \var{reg} in direction \var{dirstr}
- * (up/down/left/right/next/prev/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}. Additionally this function supports
- * the boolean \var{nofront} field, for not bringing the object to
- * front.
+ * Go to region next from \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}.
+ * Additionally this function supports the boolean \var{nofront}
+ * field, for not bringing the object to front.
  */
 EXTL_EXPORT
 WRegion *ioncore_goto_next(WRegion *reg, const char *dirstr, ExtlTab param)
@@ -310,11 +306,10 @@ WRegion *ioncore_goto_next(WRegion *reg, const char *dirstr, ExtlTab param)
 
 
 /*EXTL_DOC
- * Go to first region within \var{reg} in direction \var{dirstr}
- * (up/down/left/right/beg/end/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}. Additionally this function supports
- * the boolean \var{nofront} field, for not bringing the object to
- * front.
+ * Go to first region within \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}. 
+ * Additionally this function supports the boolean \var{nofront} field,
+ * for not bringing the object to front.
  */
 EXTL_EXPORT
 WRegion *ioncore_goto_first(WRegion *reg, const char *dirstr, ExtlTab param)
index b1ed6a0e95dbd19c8932c20bd11c90f76ade9a9d..c86a3a4d44952d3c31f72464dd17d2f12799f84f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2006-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_NAVI_H
index 4f65cdf39cb85d7621c7ff425d7741644064b7dd..07e1deef2390ac9674d68fbe32a8854e4d94ae68 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <X11/Xatom.h>
index 312f96b3880a9cb7789b09d3472c47305c504d76..1203e2327e23227460fbd7756802f25979b163c4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_NETWM_H
index 018de2ba3d1aae2011b52425b75b4ee4c141a285..f5f9aae4e1da034ae0c7b9cff63d6265decb7f61 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index 4ccc65447c56947f1250d6c31f8f2f57ae4ae3b8..b2b4986a1e365d75dca1ff7642c3dec75f73a5bd 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2005-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_PHOLDER_H
index f1dc9e763c8a4bd5b900568c4f42f6526b0b93f5..63a408e8b36c9c6c3f91af8528cfded674c2c365 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "common.h"
index 7b73cdb411f9fd2f8948ff1a06488889f5b602f2..cd1a62bc3deb5dd4b680649ccf5c83404f743de3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_POINTER_H
index 5b16ba459a2280ff87f72b392ca1a484e6fcfeb1..fb121d955d0996f1db22ef415caa44a570dfd908 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "presize.h"
index a4800333bde455c5327b1d37b59b632d151a968a..79133ed555b409aeeabba16501498cd4a1d78df6 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_PRESIZE_H
index 798dbf5e32cc0ef2746eaa72083dd9ea531636df..57214d2a53b83d1af4c155c443f100e71bf9d60e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <X11/Xmd.h>
@@ -218,13 +215,8 @@ void xwindow_set_text_property(Window win, Atom a, const char **ptr, int n)
     if(!ioncore_g.use_mb){
         st=XStringListToTextProperty((char **)&ptr, n, &prop);
     }else{
-#ifdef X_HAVE_UTF8_STRING        
-        st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n,
-                                     XUTF8StringStyle, &prop);
-#else        
         st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n,
                                      XTextStyle, &prop);
-#endif        
         st=!st;
     }
     
@@ -340,7 +332,7 @@ static bool get_mode(const char *mode, int *m)
 
 /*EXTL_DOC
  * Modify a window property. The \var{mode} is one of
- * \code{"replace"}, \code{"prepend"} or \code{"append"}, and format
+ * \codestr{replace}, \codestr{prepend} or \codestr{append}, and format
  * is either 8, 16 or 32. Also see \fnref{ioncore.x_get_window_property}
  * and the \code{XChangeProperty}(3) manual page.
  */
@@ -382,8 +374,7 @@ void ioncore_x_delete_property(int win, int atom)
 
 
 /*EXTL_DOC
- * Get a text property for a window (\code{STRING}, \code{COMPOUND_TEXT},
- * or \code{UTF8_STRING} property converted). The fields in the returned
+ * 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 \code{XGetTextProperty}(3) manual page for more information.
  */
index cb9252ea0178aa559b21b32a47cfd45cac3bea1e..aeb81827b460b5333ad1b20b849535f15152da63 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_PROPERTY_H
index 50dcc09e3986f4bdd4344857a953e764adb0311c..3096cd9496506bbab4c5286a80743d6e35fa678f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/minmax.h>
index 701d2b22be5d343da6dd00ed69456ea3fd48c873..fa0a2b2a7ce8c789e02c3508079fb78282accd10 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_RECTANGLE_H
index 0b2f371d5912009df44ba98b629075bc0b200582..68ef792cc12dded46d414d87ce282d2e6f472928 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -199,7 +196,8 @@ void region_remove_bindings(WRegion *reg)
 }
 
 
-WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev,
+WBinding *region_lookup_keybinding(WRegion *reg, 
+                                   int act, uint state, uint kcb, 
                                    const WSubmapState *sc,
                                    WRegion **binding_owner_ret)
 {
@@ -233,7 +231,7 @@ WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev,
             continue;
         }
 
-        binding=bindmap_lookup_binding(bindmap, BINDING_KEYPRESS, ev->state, ev->keycode);
+        binding=bindmap_lookup_binding(bindmap, act, state, kcb);
         
         if(binding!=NULL)
             break;
index ad1fe6d968718a83bc1e4710cf506876e926869e..adf78ff279497f7cde2d3b89cb1634ac0bc7e3c9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_REGBIND_H
@@ -21,6 +18,8 @@
 DECLSTRUCT(WSubmapState){
     uint key, state;
     WSubmapState *next;
+    /* ExtlFn leave; */
+    /* Watch leave_reg; */
 };
 
 
@@ -29,7 +28,8 @@ extern void region_remove_bindmap(WRegion *reg, WBindmap *bindmap);
 
 extern void region_remove_bindings(WRegion *reg);
 
-extern WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev,
+extern WBinding *region_lookup_keybinding(WRegion *reg, 
+                                          int act, uint state, uint kcb, 
                                           const WSubmapState *sc,
                                           WRegion **binding_owner_ret);
 extern WBinding *region_lookup_binding(WRegion *reg, int act, uint state,
index 981588043ee16d8c8465918b7e0db9e9ae941f9a..41fc8d6968e5bf6090ace7cc2a7306f29cba7082 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 0a75a985a635da97d5e005d91137e087700e4490..6e5ffb55b7c67eaea791d3a9b1eedd9e4d219c3f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_REGINFO_H
index 157ab7d59da60ca14ad5a56e430898d3d0d5ef8d..f012d23459da387138e8530f06a5e6e65e53ca0d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_REGION_ITER_H
index 10f7c28f851bfdff14bc8e888341a6c7d06d62ef..ebec9e726ed00422c8de3ab98bb3cb46b6b118e1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -27,6 +24,7 @@
 #include "activity.h"
 #include "region-iter.h"
 #include "return.h"
+#include "key.h"
 
 
 #define D2(X)
@@ -112,7 +110,9 @@ void region_deinit(WRegion *reg)
         D(warn("Region to be focused next destroyed[1]."));
         ioncore_g.focus_next=NULL;
     }
-
+    
+    assert(reg->submapstat==NULL);
+    /*region_free_submapstat(reg);*/
     region_detach_manager(reg);
     region_unset_return(reg);
     region_unset_parent(reg);
@@ -235,7 +235,7 @@ void region_managed_remove(WRegion *mgr, WRegion *reg)
 
 
 /*EXTL_DOC
- * Return the object, if any, that is considered ''currently active''
+ * Return the object, if any, that is considered ``currently active''
  * within the objects managed by \var{mplex}.
  */
 EXTL_SAFE
@@ -382,8 +382,8 @@ static void region_rqclose_default(WRegion *reg, bool relocate)
  * the client supports the \code{WM_DELETE} protocol (see also
  * \fnref{WClientWin.kill}). The region will not be destroyed when
  * this function returns. To find out if and when it is destroyed,
- * use the "deinit" notification. If \var{relocate} is not set, and
- * \var{reg} manages other regions, it will not be closed. Otherwise
+ * use the \codestr{deinit} notification. If \var{relocate} is not set, 
+ * and \var{reg} manages other regions, it will not be closed. Otherwise
  * the managed regions will be attempted to be relocated.
  */
 EXTL_EXPORT_MEMBER
@@ -742,7 +742,7 @@ bool region_rqorder(WRegion *reg, WRegionOrder order)
 
 /*EXTL_DOC
  * Request ordering. Currently supported values for \var{ord}
- * are 'front' and 'back'.
+ * are \codestr{front} and \codestr{back}.
  */
 EXTL_EXPORT_AS(WRegion, rqorder)
 bool region_rqorder_extl(WRegion *reg, const char *ord)
index 33baf48e3d115e37ea23c6dae0be502e06f53617..82483aded0320788f5085c5c4fa9c0b57c6a7032 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_REGION_H
index ec94cdade243f3bcfe8c9844741fb29fa7ab3bb3..22950ee9250beccba5c1f227fc69ff672bcab5f4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdio.h>
index c56b96406c318f5e4a771a5ed32449a23d25041f..2c69ed94dcb09fb45f29f03535fb991e2daf079a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_RESIZE_H
index 444f548c416462bbdf504df857b7b5f01bdca86b..092483c7fd999b556f494041dbf24397a682e4e2 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/rb.h>
index 6870f18ea9eb9bb83a016b085fc5db3ffe41bee7..0d20b929608fa33c3a6c08ee875686e36c5b32be 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_RETURN_H
index a1db7203c4c821961108d5af9ee307e3c3b39614..f9b6905f29787db44c07e361812ecc8430825f69 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <unistd.h>
index 74e50bda9330e930702d4edcaa4d50984747106c..8e8bf7dc3427b10a45892e87ed87a8b83ca1086c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_ROOTWIN_H
index b179ccf9ca3926e5334f5090e990f368408d53b1..db8a12f47b55dcb9e9ee043690836ec042aaa750 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index bc2ad6c4fe810154a6e57bc68e7acfc82be53ac6..d15992e402ba8204e2bb78b6af37be3117ee2e67 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SAVELOAD_H
index e65208af3a356ffc279b4ccf2cfd4b3bda234912..add918de8dda362a2053d546333cacf9e829790a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -377,11 +374,10 @@ void screen_managed_notify(WScreen *scr, WRegion *reg, WRegionNotify how)
 void ioncore_screen_activity_notify(WRegion *reg, WRegionNotify how)
 {
     if(how==ioncore_g.notifies.activity){
-        WScreen *scr=region_screen_of(reg);
-        
-        screen_update_infowin(scr);
-        screen_update_notifywin(scr);
-
+        screen_update_notifywin(region_screen_of(reg));
+    }else if(how==ioncore_g.notifies.name){
+        if(region_is_activity(reg))
+            screen_update_notifywin(region_screen_of(reg));
     }
 }
 
index d5f27cd2c948ef5aaeb2213f1f921ce6ddb869d6..a7b37b861e32e9dfdd139d2add675d3a637a1a8d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SCREEN_NOTIFY_H
index 00d675f2f576683323f35ff92ccd3f703f9a4c39..8d59d12cec267735d527655fd4578d74d3b46c07 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 8c1b9b5963ed98f0c492d3096302e280800f7eb3..743a13434f058df2d005cad36486f061ec7cc2c0 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SCREEN_H
index 3941436e80f6f571bf5eaa45d077d714b279f31b..95bf2250fb84da167dc372fbb129774f46b36e21 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <X11/Xmd.h>
index 7710e0835d68fb1b47ee5e7ee8cb51f9905e1148..fc2437af48eb5dba3c7b4348f4874eae7b7dd14c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SELECTION_H
index ee5560f875270e38cef891f16f224c2c54df06c9..0dc07021aba782335a95d72b9a8b64c940df90f8 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -70,11 +67,11 @@ static void correct_aspect(int max_w, int max_h, const WSizeHints *hints,
 void sizehints_correct(const WSizeHints *hints, int *wp, int *hp, 
                        bool min, bool override_no_constrain)
 {
-    int w=*wp, wa;
-    int h=*hp, ha;
+    int w=*wp, tw, bw=(hints->base_set ? hints->base_width : 0);
+    int h=*hp, th, bh=(hints->base_set ? hints->base_height : 0);
     int bs=0;
     
-    if(min){
+    if(min && hints->min_set){
         w=maxof(w, hints->min_width);
         h=maxof(h, hints->min_height);
     }
@@ -84,30 +81,27 @@ void sizehints_correct(const WSizeHints *hints, int *wp, int *hp,
         *hp=h;
         return;
     }
-
-    wa=w-hints->base_width;
-    ha=h-hints->base_height;
     
-    if(wa>=0 && ha>=0){
-        correct_aspect(wa, ha, hints, &wa, &ha);
-        w=wa+hints->base_width;
-        h=ha+hints->base_height;
+    tw=w-bw;
+    th=h-bh;
+    
+    if(tw>=0 && th>=0)
+        correct_aspect(tw, th, hints, &tw, &th);
+    
+    if(hints->inc_set){
+        if(tw>0)
+            tw=(tw/hints->width_inc)*hints->width_inc;
+        if(th>0)
+            th=(th/hints->height_inc)*hints->height_inc;
     }
     
+    w=tw+bw;
+    h=th+bh;
+    
     if(hints->max_set){
         w=minof(w, hints->max_width);
         h=minof(h, hints->max_height);
     }
-
-    if(hints->inc_set){
-        /* base size should be set to 0 if none given by user program */
-        bs=(hints->base_set ? hints->base_width : 0);
-        if(w>bs)
-            w=((w-bs)/hints->width_inc)*hints->width_inc+bs;
-        bs=(hints->base_set ? hints->base_height : 0);
-        if(h>bs)
-            h=((h-bs)/hints->height_inc)*hints->height_inc+bs;
-    }
     
     *wp=w;
     *hp=h;
@@ -132,22 +126,17 @@ void xsizehints_sanity_adjust(XSizeHints *hints)
         }
     }
 
-    if(hints->min_width<0)
-        hints->min_width=0;
-    if(hints->min_height<0)
-        hints->min_height=0;
+    hints->min_width=maxof(hints->min_width, 0);
+    hints->min_height=maxof(hints->min_height, 0);
 
     if(!(hints->flags&PBaseSize) || hints->base_width<0)
-        hints->base_width=0;
+        hints->base_width=hints->min_width;
     if(!(hints->flags&PBaseSize) || hints->base_height<0)
-        hints->base_height=0;
-
+        hints->base_height=hints->min_height;
     
     if(hints->flags&PMaxSize){
-        if(hints->max_width<hints->min_width)
-            hints->max_width=hints->min_width;
-        if(hints->max_height<hints->min_height)
-            hints->max_height=hints->min_height;
+        hints->max_width=maxof(hints->max_width, hints->min_width);
+        hints->max_height=maxof(hints->max_height, hints->min_height);
     }
     
     hints->flags|=(PBaseSize|PMinSize);
index 4ddfb4172c2ea29793fbba12a3c8ee5caf2c4010..55f3f296fe9155c57d791364712893bc1c467b2e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SIZEHINT_H
index 7101da8b2632024ba6b340951e0d625458798f33..a99b7a3bc6243a33256a7351f134d9e79fec0d19 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/minmax.h>
@@ -283,14 +280,8 @@ void sizepolicy(WSizePolicy *szplcy, WRegion *reg,
 }
 
 
-struct szplcy_spec {
-    const char *spec;
-    int szplcy;
-};
-
-
 /* translation table for sizepolicy specifications */
-static struct szplcy_spec szplcy_specs[] = {
+static StringIntMap szplcy_specs[] = {
     {"default",         SIZEPOLICY_DEFAULT},
     {"full",            SIZEPOLICY_FULL_EXACT},
     {"full_bounds",     SIZEPOLICY_FULL_BOUNDS},
@@ -324,17 +315,21 @@ static struct szplcy_spec szplcy_specs[] = {
 
 bool string2sizepolicy(const char *szplcy, WSizePolicy *value)
 {
-    const struct szplcy_spec *sp;
+    int tmp;
     
-    *value=SIZEPOLICY_DEFAULT;
-
-    for(sp=szplcy_specs; sp->spec; ++sp){
-       if(strcasecmp(szplcy,sp->spec)==0){
-           *value=sp->szplcy;
-           return TRUE;
-        }
-    }
+    tmp=stringintmap_value(szplcy_specs, szplcy, -1);
     
-    return FALSE;
+    if(tmp==-1){
+        *value=SIZEPOLICY_DEFAULT;
+        return FALSE;
+    }else{
+        *value=tmp;
+        return TRUE;
+    }
 }
 
+
+const char *sizepolicy2string(WSizePolicy szplcy)
+{
+    return stringintmap_key(szplcy_specs, szplcy, NULL);
+}
index 602652ded4ea3e0ae78e93b2a1afa5ea1bda5337..a0aa1e312d90313edb915f101dc77d04b84a0f67 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_SIZEPOLICY_H
@@ -72,7 +69,7 @@ extern void sizepolicy(WSizePolicy *szplcy, WRegion *reg,
                        WFitParams *fp);
 
 
-bool string2sizepolicy(const char *szplcy, WSizePolicy *value);
-
+extern bool string2sizepolicy(const char *szplcy, WSizePolicy *value);
+extern const char *sizepolicy2string(WSizePolicy szplcy);
 
 #endif /* ION_IONCORE_SIZEPOLICY_H */
index 9d77ac9489ecd981f68acbfe9e9204a060a0eb2a..9c0be9f02686f37db8d94e6a1ff1c84c8f04469e 100644 (file)
@@ -3,13 +3,11 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007.
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/rb.h>
+#include <libtu/minmax.h>
 
 #include "common.h"
 #include "region.h"
@@ -32,6 +30,7 @@ WStacking *create_stacking()
         st->szplcy=SIZEPOLICY_DEFAULT;
         st->hidden=FALSE;
         st->lnode=NULL;
+        st->pseudomodal=FALSE;
     }
     
     return st;
@@ -521,8 +520,8 @@ uint stacking_min_level(WStacking *stacking,
                         WStackingFilter *include_filt, 
                         void *filt_data)
 {
+    uint min_level=STACKING_LEVEL_BOTTOM;
     WStacking *st=NULL;
-    uint min_level=0;
     
     if(stacking==NULL)
         return STACKING_LEVEL_BOTTOM;
@@ -546,35 +545,39 @@ uint stacking_min_level(WStacking *stacking,
 }
 
 
-WStacking *stacking_find_to_focus(WStacking *stacking, WStacking *to_try,
+WStacking *stacking_find_to_focus(WStacking *stacking, 
+                                  WStacking *to_try,
                                   WStackingFilter *include_filt, 
                                   WStackingFilter *approve_filt, 
                                   void *filt_data)
 {
+    uint min_level=STACKING_LEVEL_BOTTOM;
     WStacking *st=NULL;
-    uint min_level=0;
     
     if(stacking==NULL)
         return NULL;
     
-    min_level=stacking_min_level(stacking, include_filt, filt_data);
-    
-    if(to_try!=NULL && to_try->level>=min_level)
-        return to_try;
-    
     st=stacking;
     do{
         st=st->prev;
         
-        if(st->level<min_level)
-            break;
+        if(st->reg==NULL)
+            continue;
         
-        if(st->reg!=NULL 
-           && !(st->reg->flags&REGION_SKIP_FOCUS)
-           && cf(include_filt, filt_data, st)
-           && cf(approve_filt, filt_data, st)){
-            return st;
+        if(st!=to_try && (st->reg->flags&REGION_SKIP_FOCUS ||
+                          !cf(include_filt, filt_data, st))){
+            /* skip */
+            continue;
         }
+        
+        if(st->level<min_level)
+            break; /* no luck */
+            
+        if(st==to_try || cf(approve_filt, filt_data, st))
+            return st;
+            
+        if(st->level>=STACKING_LEVEL_MODAL1)
+            min_level=maxof(min_level, st->level);
     }while(st!=stacking);
     
     return NULL;
index 2810bdaa40617ba307091a782e93aa1f3728d5ec..e325269b839e6d633a810ffe512100051c0cc1bc 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007.
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_STACKING_H
@@ -22,8 +19,8 @@
 #define STACKING_LEVEL_ON_TOP 2
 #define STACKING_LEVEL_MODAL1 1024
 
-
 #define STACKING_IS_HIDDEN(ST) ((ST)->hidden)
+#define STACKING_IS_PSEUDOMODAL(ST) ((ST)->pseudomodal)
 
 
 DECLSTRUCT(WStacking){
@@ -37,6 +34,7 @@ DECLSTRUCT(WStacking){
     /* flags */
     uint to_unweave:2;
     uint hidden:1;
+    uint pseudomodal:1;
     
     /* WMPlex stuff */
     WLListNode *lnode;
index 37487fd0216f17872c034ff889eca140110d924f..eb7e408b8962191fa972eea8711a4166b93e49be 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/output.h>
index df30189b0ca6e9c07a81746ad94f7c328649b10e..e285085ab320e1b3ecc298d7f94306a749bc1977 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_STRINGS_H
index f01385d301c8d1f507fe64eca491136cf0de1e1c..6f1e02980307b35bc1ca029b5b13205520c845d9 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objlist.h>
@@ -46,7 +43,8 @@ bool region_set_tagged(WRegion *reg, int sp)
 
 /*EXTL_DOC
  * Change tagging state of \var{reg} as defined by \var{how}
- * (set/unset/toggle). Resulting state is returned.
+ * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}).
+ * The resulting state is returned.
  */
 EXTL_EXPORT_AS(WRegion, set_tagged)
 bool region_set_tagged_extl(WRegion *reg, const char *how)
@@ -84,7 +82,7 @@ void ioncore_tagged_clear()
 
 
 /*EXTL_DOC
- * Returns first tagged object, untagging it as well if \var{untag}is set.
+ * Returns first tagged object, untagging it as well if \var{untag} is set.
  */
 EXTL_SAFE
 EXTL_EXPORT
index 6f30292af93131864055d732538afd800c05480b..43a9b1f96618f14224b4ea87f93274b98f1c69fe 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_TAGS_H
index 0b122008e70a7a98231065fa74f9b1ff5ee288d2..3de0eefed3f17c1b7934f58e56f65cd6a132799f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index e4de5bbacb652c98a7fc9bf453f7dbd0287cf8f2..b6054858d29bf38473eff2d30a79f8763aa2bf6c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_WINDOW_H
index 21339d633bfb547fa4afd9e86b86071c22f09bb9..2fe2238e8d7a914e18d0fdcc8e522040b1667bc1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <ctype.h>
index f745442b8ff162b942c459026a021c646a935208..1e935ac40c2cb8b5f6b6af21f4bc903b376fc7e0 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_XIC_H
index 9d4cea79e1ceec6ce446abc77350088acd96b079..b9cd1aa9482590f8fb0d9ce53b7ec82d32d8c0ff 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 6379ddf9c07946864c64b05e768bd221b2f4c937..2e37fc6e27526f87671a60087feac571d383e9c7 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_IONCORE_XWINDOW_H
index 66bf973626d833d44c04f4759de45b1660b7b8cf..24226a22e0948c3798c16e70327aeab95ab1ce3b 100644 (file)
@@ -1,6 +1,23 @@
 
 Context:
 
+[Use S if not copy
+Tuomo Valkonen <tuomov@iki.fi>**20070506140705] 
+
+[Added extl_table_iter
+Tuomo Valkonen <tuomov@iki.fi>**20070430164248] 
+
+[Added ExtlAny
+Tuomo Valkonen <tuomov@iki.fi>**20070430162426] 
+
+[Cleanup/reorganisation
+Tuomo Valkonen <tuomov@iki.fi>**20070430144940] 
+
+[Don't put functions into documentation index
+Tuomo Valkonen <tuomov@iki.fi>**20070408124504
+ (The function list should suffice.)
+] 
+
 [Improved mechanisms for unregistration of functions.
 Tuomo Valkonen <tuomov@iki.fi>**20070226150118
  Makes for a bit smaller memory footprint.
index bbb672d84ae74961cdf4a8dd4ec11e234c424b86..a23ab1fbc3d14cba6f35ba7e8d14a09b0b0ed538 100644 (file)
@@ -69,6 +69,7 @@ desc2human={
     ["o"]="object",
     ["s"]="string",
     ["S"]="string",
+    ["a"]="any value",
 }
 
 -- }}}
@@ -619,12 +620,14 @@ function write_fndoc(h, fn, info)
         fn=info.exported_name
     end
     
+    --[[
     if info.class~="global" then
         fprintf(h, "\\index{%s@%s!", texfriendly(info.class), 
                 texfriendly_typeormod(info.class));
         fprintf(h, "%s@\\code{%s}}\n", texfriendly(fn), fn)
     end
     fprintf(h, "\\index{%s@\\code{%s}}\n", texfriendly(fn), fn)
+    ]]
     
     if info.class~="global" then
         fprintf(h, "\\hyperlabel{fn:%s.%s}", info.class, fn)
index a2cc2b92759133a4d31fb7f87225a79bc52a3f69..b58545d74937fe32808c0f391a819b58f8cacef5 100644 (file)
@@ -637,7 +637,7 @@ void extl_deinit()
 /*}}}*/
 
 
-/*{{{ Stack get/push -- all unsafe */
+/*{{{ Stack get/push -- all unsafe */
 
 
 static bool extl_stack_get(lua_State *st, int pos, char type, 
@@ -649,11 +649,18 @@ static bool extl_stack_get(lua_State *st, int pos, char type,
           
     if(wasdeadobject!=NULL)
         *wasdeadobject=FALSE;
+
+    if(type=='b'){
+        if(valret)
+            *((bool*)valret)=lua_toboolean(st, pos);
+        return TRUE;
+    }
     
-    if(type=='i' || type=='d'){
-        if(lua_type(st, pos)!=LUA_TNUMBER)
+    switch(lua_type(st, pos)){
+    case LUA_TNUMBER:
+        if(type!='i' && type!='d' && type!='a')
             return FALSE;
-        
+            
         d=lua_tonumber(st, pos);
         
         if(type=='i'){
@@ -661,21 +668,23 @@ static bool extl_stack_get(lua_State *st, int pos, char type,
                 return FALSE;
             if(valret)
                 *((int*)valret)=d;
+        }else if(type=='a'){
+            if(valret){
+                ((ExtlAny*)valret)->type='d';
+                ((ExtlAny*)valret)->value.d=d;
+            }
         }else{
             if(valret)
                 *((double*)valret)=d;
         }
         return TRUE;
-    }
-    
-    if(type=='b'){
-        if(valret)
-            *((bool*)valret)=lua_toboolean(st, pos);
-        return TRUE;
-    }
-
-    if(lua_type(st, pos)==LUA_TNIL || lua_type(st, pos)==LUA_TNONE){
-        if(type=='t' || type=='f'){
+        
+    case LUA_TNIL:
+    case LUA_TNONE:
+        if(type=='a'){
+            if(valret)
+                ((ExtlAny*)valret)->type='v';
+        }else if(type=='t' || type=='f'){
             if(valret)
                 *((int*)valret)=LUA_NOREF;
         }else if(type=='s' || type=='S'){
@@ -688,10 +697,9 @@ static bool extl_stack_get(lua_State *st, int pos, char type,
             return FALSE;
         }
         return TRUE;
-    }
     
-    if(type=='s' || type=='S'){
-        if(lua_type(st, pos)!=LUA_TSTRING)
+    case LUA_TSTRING:
+        if(type!='s' && type!='S' && type!='a')
             return FALSE;
         if(valret){
             str=lua_tostring(st, pos);
@@ -700,95 +708,141 @@ static bool extl_stack_get(lua_State *st, int pos, char type,
                 if(str==NULL)
                     return FALSE;
             }
-            *((const char**)valret)=str;
+            if(type=='a'){
+                ((ExtlAny*)valret)->type=(copystring ? 's' : 'S');
+                ((ExtlAny*)valret)->value.s=str;
+            }else{
+                *((const char**)valret)=str;
+            }
         }
         return TRUE;
-    }
     
-    if(type=='f'){
-        if(!lua_isfunction(st, pos))
+    case LUA_TFUNCTION:
+        if(type!='f' && type!='a')
             return FALSE;
         if(valret){
             lua_pushvalue(st, pos);
-            *((int*)valret)=lua_ref(st, 1);
+            if(type=='a'){
+                ((ExtlAny*)valret)->type='f';
+                ((ExtlAny*)valret)->value.f=lua_ref(st, 1);
+            }else{
+                *((int*)valret)=lua_ref(st, 1);
+            }
         }
         return TRUE;
-    }
-
-    if(type=='t'){
-        if(!lua_istable(st, pos))
+    
+    case LUA_TTABLE:
+        if(type!='t' && type!='a')
             return FALSE;
         if(valret){
             lua_pushvalue(st, pos);
-            *((int*)valret)=lua_ref(st, 1);
+            if(type=='a'){
+                ((ExtlAny*)valret)->type='t';
+                ((ExtlAny*)valret)->value.f=lua_ref(st, 1);
+            }else{
+                *((int*)valret)=lua_ref(st, 1);
+            }
         }
         return TRUE;
-    }
-
-    if(type=='o'){
-        bool invalid=FALSE, dead=FALSE;
-        Obj *obj=extl_get_obj(st, pos, &invalid, &dead);
-        if(wasdeadobject!=NULL)
-            *wasdeadobject=dead;
-        if(valret){
-            *((Obj**)valret)=obj;
-            D(fprintf(stderr, "Got obj %p, ", obj);
-              fprintf(stderr, "%s\n", OBJ_TYPESTR(obj)));
+    
+    case LUA_TUSERDATA:
+        if(type=='o'|| type=='a'){
+            bool invalid=FALSE, dead=FALSE;
+            Obj *obj=extl_get_obj(st, pos, &invalid, &dead);
+            if(wasdeadobject!=NULL)
+                *wasdeadobject=dead;
+            if(valret){
+                if(type=='a'){
+                    ((ExtlAny*)valret)->type='o';
+                    ((ExtlAny*)valret)->value.o=obj;
+                }else{
+                    *((Obj**)valret)=obj;
+                }
+            }
+            return !invalid;
         }
-        return !invalid;
     }
     
     return FALSE;
 }
 
 
-static void extl_stack_push(lua_State *st, char spec, void *ptr)
+static void extl_to_any(ExtlAny *a, char type, void *ptr)
 {
-    if(spec=='i'){
-        lua_pushnumber(st, *(int*)ptr);
-    }else if(spec=='d'){
-        lua_pushnumber(st, *(double*)ptr);
-    }else if(spec=='b'){
-        lua_pushboolean(st, *(bool*)ptr);
-    }else if(spec=='o'){
-        extl_push_obj(st, *(Obj**)ptr);
-    }else if(spec=='s' || spec=='S'){
-        lua_pushstring(st, *(char**)ptr);
-    }else if(spec=='t' || spec=='f'){
-        lua_rawgeti(st, LUA_REGISTRYINDEX, *(int*)ptr);
-    }else{
-        lua_pushnil(st);
+    if(type=='a'){
+        *a=*(ExtlAny*)ptr;
+        return;
+    }
+    
+    a->type=type;
+    
+    switch(type){
+    case 'i': a->value.i=*(int*)ptr; break;
+    case 'd': a->value.d=*(double*)ptr; break;
+    case 'b': a->value.b=*(bool*)ptr; break;
+    case 'o': a->value.o=*(Obj**)ptr; break;
+    case 's': 
+    case 'S': a->value.s=*(char**)ptr; break;
+    case 't': a->value.t=*(ExtlTab*)ptr; break;
+    case 'f': a->value.f=*(ExtlFn*)ptr; break;
     }
 }
 
 
-static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp)
+static void extl_to_any_vararg(ExtlAny *a, char type, va_list *argsp)
 {
-    switch(spec){
-    case 'i':
-        lua_pushnumber(st, (double)va_arg(*argsp, int));
-        break;
-    case 'd':
-        lua_pushnumber(st, va_arg(*argsp, double));
-        break;
-    case 'b':
-        lua_pushboolean(st, va_arg(*argsp, bool));
-        break;
-    case 'o':
-        extl_push_obj(st, va_arg(*argsp, Obj*));
-        break;
-    case 'S':
-    case 's':
-        lua_pushstring(st, va_arg(*argsp, char*));
-        break;
-    case 'f':
-    case 't':
-        lua_rawgeti(st, LUA_REGISTRYINDEX, va_arg(*argsp, int));
-        break;
-    default:
-        return FALSE;
+    if(type=='a'){
+        *a=va_arg(*argsp, ExtlAny); 
+        return;
     }
     
+    a->type=type;
+    
+    switch(type){
+    case 'i': a->value.i=va_arg(*argsp, int); break;
+    case 'd': a->value.d=va_arg(*argsp, double); break;
+    case 'b': a->value.b=va_arg(*argsp, bool); break;
+    case 'o': a->value.o=va_arg(*argsp, Obj*); break;
+    case 's': 
+    case 'S': a->value.s=va_arg(*argsp, char*); break;
+    case 't': a->value.t=va_arg(*argsp, ExtlTab); break;
+    case 'f': a->value.f=va_arg(*argsp, ExtlFn); break;
+    }
+}
+
+
+static void extl_stack_pusha(lua_State *st, ExtlAny *a)
+{
+    switch(a->type){
+    case 'i': lua_pushnumber(st, a->value.i); break;
+    case 'd': lua_pushnumber(st, a->value.d); break;
+    case 'b': lua_pushboolean(st, a->value.b); break;
+    case 'o': extl_push_obj(st, a->value.o); break;
+    case 's': 
+    case 'S': lua_pushstring(st, a->value.s); break;
+    case 't': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.t); break;
+    case 'f': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.f); break;
+    default: lua_pushnil(st); 
+    }
+}
+
+
+static void extl_stack_push(lua_State *st, char spec, void *ptr)
+{
+    ExtlAny a;
+    
+    extl_to_any(&a, spec, ptr);
+    extl_stack_pusha(st, &a);
+}
+
+
+static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp)
+{
+    ExtlAny a;
+    
+    extl_to_any_vararg(&a, spec, argsp);
+    extl_stack_pusha(st, &a);
+    
     return TRUE;
 }
 
@@ -802,21 +856,29 @@ static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp)
 enum{STRINGS_NONE, STRINGS_NONCONST, STRINGS_ALL};
 
 
-static void extl_free(void *ptr, char spec, int strings)
+static void extl_any_free(ExtlAny *a, int strings)
 {
-    if(((spec=='s' && strings!=STRINGS_NONE) ||
-        (spec=='S' && strings==STRINGS_ALL)) && *(char**)ptr!=NULL){
-        if(*(char**)ptr!=NULL)
-            free(*(char**)ptr);
-        *(char**)ptr=NULL;
-    }else if(spec=='t'){
-        extl_unref_table(*(ExtlTab*)ptr);
-    }else if(spec=='f'){
-        extl_unref_fn(*(ExtlFn*)ptr);
+    if((a->type=='s' && strings!=STRINGS_NONE) ||
+       (a->type=='S' && strings==STRINGS_ALL)){
+        if(a->value.s!=NULL)
+            free((char*)a->value.s);
+    }else if(a->type=='t'){
+        extl_unref_table(a->value.t);
+    }else if(a->type=='f'){
+        extl_unref_fn(a->value.f);
     }
 }
 
 
+static void extl_free(void *ptr, char spec, int strings)
+{
+    ExtlAny a;
+    
+    extl_to_any(&a, spec, ptr);
+    extl_any_free(&a, strings);
+}
+
+
 /*}}}*/
 
 
@@ -1019,6 +1081,11 @@ static bool extl_table_do_gets(ExtlTab ref, const char *entry,
     return extl_table_get(ref, 's', type, entry, valret);
 }
 
+bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret)
+{
+    return extl_table_do_gets(ref, entry, 'a', (void*)ret);
+}
+
 bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret)
 {
     return extl_table_do_gets(ref, entry, 'o', (void*)ret);
@@ -1060,6 +1127,11 @@ static bool extl_table_do_geti(ExtlTab ref, int entry, char type, void *valret)
     return extl_table_get(ref, 'i', type, entry, valret);
 }
 
+bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret)
+{
+    return extl_table_do_geti(ref, entry, 'a', (void*)ret);
+}
+
 bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret)
 {
     return extl_table_do_geti(ref, entry, 'o', (void*)ret);
@@ -1165,6 +1237,10 @@ bool extl_table_set(ExtlTab ref, char itype, char type, ...)
     return retval;
 }
 
+bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *val)
+{
+    return extl_table_set(ref, 's', 'a', entry, val);
+}
 
 bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val)
 {
@@ -1202,6 +1278,11 @@ bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val)
 }
 
 
+bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *val)
+{
+    return extl_table_set(ref, 'i', 'a', entry, val);
+}
+
 bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val)
 {
     return extl_table_set(ref, 'i', 'o', entry, val);
@@ -1290,6 +1371,58 @@ bool extl_table_cleari(ExtlTab ref, int entry)
 
 
                    
+/*}}}*/
+
+
+/*{{{ Table iteration */
+
+
+typedef struct{
+    ExtlTab ref;
+    ExtlIterFn *fn;
+    void *d;
+} IterP;
+
+
+int extl_table_iter_do(lua_State *st, IterP *par)
+{
+    lua_rawgeti(st, LUA_REGISTRYINDEX, par->ref);
+    
+    lua_pushnil(st);
+    
+    while(lua_next(st, -2)!=0){
+        ExtlAny k, v;
+        
+        if(extl_stack_get(st, -2, 'a', FALSE, NULL, &k)){
+            bool ret=TRUE;
+            if(extl_stack_get(st, -1, 'a', FALSE, NULL, &v)){
+                ret=par->fn(k, v, par->d);
+                extl_any_free(&v, STRINGS_NONE);
+            }
+            extl_any_free(&k, STRINGS_NONE);
+            if(!ret)
+                return 0;
+        }
+        
+        lua_pop(st, 1);
+    }
+    
+    return 0;
+}
+
+
+void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d)
+{
+    IterP par;
+    
+    par.ref=ref;
+    par.fn=fn;
+    par.d=d;
+    
+    extl_cpcall(l_st, (ExtlCPCallFn*)extl_table_iter_do, &par);
+}
+
+
 /*}}}*/
 
 
index f31cc97583c79d3a91382a9a74280a9b22c74821..f0160887df1d164bfbc9c01f4dc6f900a8aeea68 100644 (file)
@@ -28,6 +28,7 @@
  * t: table
  * f: function (c or lua)
  * v: void
+ * a: ExtlAny
  */
 
 typedef int ExtlTab;
@@ -43,6 +44,11 @@ typedef union{
     ExtlTab t;
 } ExtlL2Param;
 
+typedef struct{
+    char type;
+    ExtlL2Param value;
+} ExtlAny;
+
 typedef bool ExtlL2CallHandler(void (*fn)(), ExtlL2Param *in,
                                ExtlL2Param *out);
 
@@ -88,6 +94,7 @@ extern bool extl_table_get_vararg(ExtlTab ref, char itype, char type,
                                   va_list *args);
 extern bool extl_table_get(ExtlTab ref, char itype, char type, ...);
 
+extern bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret);
 extern bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret);
 extern bool extl_table_gets_i(ExtlTab ref, const char *entry, int *ret);
 extern bool extl_table_gets_d(ExtlTab ref, const char *entry, double *ret);
@@ -97,6 +104,7 @@ extern bool extl_table_gets_f(ExtlTab ref, const char *entry, ExtlFn *ret);
 extern bool extl_table_gets_t(ExtlTab ref, const char *entry, ExtlTab *ret);
 
 extern int extl_table_get_n(ExtlTab ref);
+extern bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret);
 extern bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret);
 extern bool extl_table_geti_i(ExtlTab ref, int entry, int *ret);
 extern bool extl_table_geti_d(ExtlTab ref, int entry, double *ret);
@@ -110,6 +118,7 @@ extern bool extl_table_set_vararg(ExtlTab ref, char itype, char type,
                                   va_list *args);
 extern bool extl_table_set(ExtlTab ref, char itype, char type, ...);
 
+extern bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *ret);
 extern bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val);
 extern bool extl_table_sets_i(ExtlTab ref, const char *entry, int val);
 extern bool extl_table_sets_d(ExtlTab ref, const char *entry, double val);
@@ -118,6 +127,7 @@ extern bool extl_table_sets_s(ExtlTab ref, const char *entry, const char *val);
 extern bool extl_table_sets_f(ExtlTab ref, const char *entry, ExtlFn val);
 extern bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val);
 
+extern bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *ret);
 extern bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val);
 extern bool extl_table_seti_i(ExtlTab ref, int entry, int val);
 extern bool extl_table_seti_d(ExtlTab ref, int entry, double val);
@@ -134,6 +144,12 @@ extern bool extl_table_clear(ExtlTab ref, char itype, ...);
 extern bool extl_table_clears(ExtlTab ref, const char *entry);
 extern bool extl_table_cleari(ExtlTab ref, int entry);
 
+/* Table/iterate */
+
+typedef bool ExtlIterFn(ExtlAny k, ExtlAny v, void *d);
+
+extern void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d);
+
 /* Call */
 
 extern void extl_protect(ExtlSafelist *sl);
index c8d56163761dfd43ddb2549d14e8a9e0c0b571e7..3153955fac7573bc7077160518cf0311377cbf7b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 /* This file contains routines for deferred execution of potentially
@@ -117,7 +114,8 @@ bool mainloop_defer_action_on_list(Obj *obj, WDeferredAction *action,
     d->action=action;
     d->list=list;
     d->fn=extl_fn_none();
-    
+    watch_init(&(d->watch));
+
     if(obj!=NULL)
         watch_setup(&(d->watch), obj, defer_watch_handler);
     
@@ -156,7 +154,6 @@ bool mainloop_defer_extl_on_list(ExtlFn fn, WDeferred **list)
     d->action=NULL;
     d->list=list;
     d->fn=extl_ref_fn(fn);
-    
     watch_init(&(d->watch));
     
     LINK_ITEM(*list, d, next, prev);
@@ -186,8 +183,11 @@ static void do_execute(WDeferred *d)
     free_defer(d);
     
     if(a!=NULL){
-        if(obj!=NULL)
-            a(obj);
+        /* The deferral should not be on the list, if there
+         * was an object, and it got destroyed.
+         */
+        /*if(obj!=NULL)*/
+        a(obj);
     }else if(fn!=extl_fn_none()){
         extl_call(fn, NULL, NULL);
         extl_unref_fn(fn);
index ee7d400744af7b67b781e44a408ec1bb5e4f18bc..90f77a2e29cfb5d979360e36657d559402b4ffa2 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_LIBMAINLOOP_DEFER_H
index 6038e36a48517dd9723ed7baad10934f54d9e33c..fd6ef6bc37f2d53f6dddeacb15ba1b9c12c52850 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <limits.h>
index 796e453d90a4788571e7521e07d4e471a2b662c5..d9a87e7aca2272e8d3656509c8480b84109f4a92 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_LIBMAINLOOP_EXEC_H
index 9b873a5def40ff28d68b3b30548f2c2c3f6398a7..d2d212737f057e77f903ab3728ea64e3c9ddc7c0 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/types.h>
index 11487de27210ce230e465f92ce84572ef6288bad..b9b33184262ab705faf9ff583beaf69e50e819b3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_LIBMAINLOOP_HOOKS_H
index ba54cc92f3dba61f80bf0e479bdaa845ff2febb6..ff6cc20b800c1ca1f612831972c2390988fc2dd6 100644 (file)
@@ -8,4 +8,5 @@ MAINLOOP_SOURCES_ = select.c defer.c signal.c hooks.c exec.c
 
 MAINLOOP_SOURCES = $(patsubst %,$(MAINLOOP_DIR)/%, $(MAINLOOP_SOURCES_))
 
+MKEXPORTS_EXTRA_DEPS += $(MAINLOOP_SOURCES)
 MKEXPORTS_EXTRAS += -reexport mainloop $(MAINLOOP_SOURCES)
index 28762222b609eb90a0272693577cbb1a95318993..e66d35ca3d195e11ddf208d38e0e69bf5fc0de40 100644 (file)
@@ -3,10 +3,7 @@
  * 
  * Partly based on a contributed code.
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/types.h>
index 465f1340058d8b63dc6489a0a7f4bda5dc9caf19..91204ccf0dbdddc4ff8894bb31dc825507e36dc7 100644 (file)
@@ -3,10 +3,7 @@
  * 
  * Based on a contributed readfds code.
  * 
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_LIBMAINLOOP_SELECT_H
index fea01ba6ccabebb43ff9ded99c57707db64bef84..e87e15463bc82485523a11f6558e59481516a183 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <unistd.h>
index 7e8682e33c7b2d455e9756c6102b3a37a19ac6de..b05e20e940090d4e421c886e67495acdb85ca70a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_LIBMAINLOOP_SIGNAL_H
index 694c1e04e391055bfda7422446274726e2835502..e8507009514322cbf519e442e6b15cc22fb3e4cf 100644 (file)
@@ -1,6 +1,12 @@
 
 Context:
 
+[Some list code improvements
+Tuomo Valkonen <tuomov@iki.fi>**20070506140559] 
+
+[Oops, fixed comparison function order.
+Tuomo Valkonen <tuomov@iki.fi>**20070424170047] 
+
 [Renamed `prog_execname` `libtu_progname` and added `libtu_progbasename`.
 Tuomo Valkonen <tuomov@iki.fi>**20070310230536] 
 
index 643f3fa30e59a303b02a3580e7b5252e414a0aeb..9d5062f4100e86b90d10bc6e0c09b337b95bc256 100644 (file)
@@ -136,6 +136,12 @@ static ObjList *objlist_find_node(ObjList *objlist, Obj *obj)
 }
 
 
+bool objlist_contains(ObjList *objlist, Obj *obj)
+{
+    return (objlist_find_node(objlist, obj)!=NULL);
+}
+
+
 bool objlist_insert_last(ObjList **objlist, Obj *obj)
 {
     ObjList *node=reuse(objlist);
@@ -177,7 +183,7 @@ bool objlist_reinsert_last(ObjList **objlist, Obj *obj)
     node=objlist_find_node(*objlist, obj);
     
     if(node==NULL)
-        return FALSE;
+        return objlist_insert_last(objlist, obj);
     
     UNLINK_ITEM(*objlist, node, next, prev);
     LINK_ITEM_LAST(*objlist, node, next, prev);
@@ -195,7 +201,7 @@ bool objlist_reinsert_first(ObjList **objlist, Obj *obj)
     node=objlist_find_node(*objlist, obj);
     
     if(node==NULL)
-        return FALSE;
+        return objlist_insert_first(objlist, obj);
     
     UNLINK_ITEM(*objlist, node, next, prev);
     LINK_ITEM_FIRST(*objlist, node, next, prev);
index 678706f44a70cc5b2208641c4c37da51bd65f067..62533cb558f7e336fd7323e9882bfd4a71a9ed83 100644 (file)
@@ -48,6 +48,7 @@ extern bool objlist_insert_first(ObjList **objlist, Obj *obj);
 extern bool objlist_reinsert_last(ObjList **objlist, Obj *obj);
 extern bool objlist_reinsert_first(ObjList **objlist, Obj *obj);
 extern bool objlist_remove(ObjList **objlist, Obj *obj);
+extern bool objlist_contains(ObjList *objlist, Obj *obj);
 extern void objlist_clear(ObjList **objlist);
 extern void objlist_iter_init(ObjListIterTmp *state, ObjList *objlist);
 extern Obj *objlist_iter(ObjListIterTmp *state);
index 1ea6726eafe04ddddb89b0a570e9bd419a6ee8cd..f86d9a4bc33fe1ad74d3207c3e1b4f46ca97e8cc 100644 (file)
@@ -53,6 +53,12 @@ static PtrList *ptrlist_find_node(PtrList *ptrlist, void *ptr)
 }
 
 
+bool ptrlist_contains(PtrList *ptrlist, void *ptr)
+{
+    return (ptrlist_find_node(ptrlist, ptr)!=NULL);
+}
+
+
 bool ptrlist_insert_last(PtrList **ptrlist, void *ptr)
 {
     PtrList *node=mknode(ptr);
@@ -84,7 +90,7 @@ bool ptrlist_reinsert_last(PtrList **ptrlist, void *ptr)
     PtrList *node=ptrlist_find_node(*ptrlist, ptr);
     
     if(node==NULL)
-        return FALSE;
+        return ptrlist_insert_last(ptrlist, ptr);
     
     UNLINK_ITEM(*ptrlist, node, next, prev);
     LINK_ITEM_LAST(*ptrlist, node, next, prev);
@@ -98,7 +104,7 @@ bool ptrlist_reinsert_first(PtrList **ptrlist, void *ptr)
     PtrList *node=ptrlist_find_node(*ptrlist, ptr);
     
     if(node==NULL)
-        return FALSE;
+        return ptrlist_insert_first(ptrlist, ptr);
     
     UNLINK_ITEM(*ptrlist, node, next, prev);
     LINK_ITEM_FIRST(*ptrlist, node, next, prev);
index cadec02cab99d61f3b0ce37e7a4a27efccfb8ff6..70da547af77b8e67ec882d8e6294d99524aa2d32 100644 (file)
@@ -46,6 +46,7 @@ extern bool ptrlist_insert_first(PtrList **ptrlist, void *ptr);
 extern bool ptrlist_reinsert_last(PtrList **ptrlist, void *ptr);
 extern bool ptrlist_reinsert_first(PtrList **ptrlist, void *ptr);
 extern bool ptrlist_remove(PtrList **ptrlist, void *ptr);
+extern bool ptrlist_contains(PtrList *ptrlist, void *ptr);
 extern void ptrlist_clear(PtrList **ptrlist);
 extern void ptrlist_iter_init(PtrListIterTmp *state, PtrList *ptrlist);
 extern void *ptrlist_iter(PtrListIterTmp *state);
index e47c902050a0051b23fc574aa6e83e8d024043e4..3c5b7a1ec238d615fb8e71f8786b71c9bf765a8b 100644 (file)
@@ -40,7 +40,7 @@ static int cmp(const void *d_, const char *nodekey)
     
     return (res!=0 
             ? res 
-            : (nodekey[d->len]=='\0' ? 0 : 1));
+            : (nodekey[d->len]=='\0' ? 0 : -1));
 }
 
 
index c35c5a98a65355cbdbda0121c9a62c681ea14ae7..ed81982d2545595b1e7336f0ce01213c12466b6e 100644 (file)
@@ -8,7 +8,7 @@ include $(TOPDIR)/build/system-inc.mk
 
 ######################################
 
-TRANSLATIONS=fi cs de
+TRANSLATIONS=fi cs
 
 WELCOME_TARGETS=\
        welcome.txt \
@@ -31,7 +31,8 @@ CONFIGS=../etc/cfg_ioncore.lua \
 # TODO: PWM configuration file is undocumented
 PWM_CONFIGS=\
        ../etc/cfg_ioncore.lua \
-       ../etc/cfg_menu.lua
+       ../etc/cfg_menu.lua \
+       ../pwm/cfg_pwm.lua
 
 ######################################
 
index 81efb95fb42b457e772e40d08f40348527280da2..4d9044fb31d4a5c91757fd83af3748c8f68a17dd 100644 (file)
@@ -7,7 +7,7 @@ Ion - spr
 .SH "POPIS"
 
 Ion je dla¾dicový správce oken se zálo¾kami navr¾ený pro klávesnicové u¾ivatele.
+
 .SH "VOLBY"
 .TP
 .B \-display poèítaè:displej.obrazovka
@@ -35,12 +35,12 @@ Zobraz
 Zobrazí verzi
 .TP
 .B \-about
-Zobrazí informace o programu (verze, copyright)
+Zobrazí informace o programu (verze, autor, copyright)
 
 .SH Základní pojetí
 
 Tato sekce pøiná¹í pøehled typù objektù, které se objevují na X displeji
-spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro 
+spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro
 pochopení, proè jsou rùzná klávesová pøiøazení dostupná jen u nìkterých
 objektù. Podrobnìj¹í popis nutný pro psaní vlastních pøizpùsobení naleznete
 na webových stránkách Ionu.
@@ -79,19 +79,19 @@ definuje toto p
 
 BINDINGS:WScreen
 
-.SS Pøiøazení pro práci s nejvy¹¹ími rámy a obrazovkami a jejich potomky
-
-BINDINGS:WMPlex.toplevel
-
-.SS Pøiøazení pro práci s rámy a obrazovkami a jejich potomky
+.SS Pøiøazení pro práci s rámy a obrazovkami
 
 BINDINGS:WMPlex
 
-.SS Pøiøazení pro práci se v¹emi rámy (vèetnì doèasných) a jejich potomky
+.SS Pøiøazení pro práci se v¹emi rámy
 
 BINDINGS:WFrame
 
-.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a jejich potomky
+.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a obrazovkami
+
+BINDINGS:WMPlex.toplevel
+
+.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými)
 
 BINDINGS:WFrame.toplevel
 
@@ -104,11 +104,10 @@ BINDINGS:WFrame.floating
 BINDINGS:WTiling
 .\" BINDINGS:WFrame.tiled
 
-.SS Pøiøazení pro kientská okna
+.SS Pøiøazení pro klientská okna
 
 BINDINGS:WClientWin
-
-BINDINGS:WGroupWS
+BINDINGS:WGroupCW
 
 .SS Pøiøazení pro pøesun/zmìnu velikosti
 
diff --git a/man/ion3.de.in b/man/ion3.de.in
deleted file mode 100644 (file)
index fa60e7b..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-.TH ION 1
-.SH NAME
-Ion - ein X11 Fenster Manager
-.SH ÜBERSICHT
-.B ion3
-.I "[optionen]"
-.SH "BESCHREIBUNG"
-
-Ion ist ein tabellarisch aufgebauter Fenster Manager, entwickelt für 
-Benutzer welche auf die Tastatur spezialisiert sind.  
-.SH "OPTIONEN"
-.TP
-.B \-display host:display.screen
-X Anzeige zum darstellen
-.TP
-.B \-conffile Konfigurationsdatei
-Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll
-.TP
-.B \-searchdir Verzeichnis
-Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden
-.TP
-.B \-oneroot
-Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den 
-voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display'
-Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden
-.TP
-.B \-session sitzungs_name
-Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und
-andere Sicherungsdateien abgelegt werden (~/.ion3/sitzungs_name wenn die Option
-gesetzt wurde).
-.TP
-.B \-help
-Zeigt die Hilfe für die Kommandozeilenoptionen
-.TP
-.B \-version
-Zeigt die Version
-.TP
-.B \-about
-Zeigt Informationen über den Autor, die Version und das Copyright
-
-.SH BASIS KONZEPTE
-
-Diese Kapitel ist ein Überblick über die Objekttypen welche auf der X Anzeige
-durch Ion behandelt werden. Die Beziehungen sind auf die Standardeinstellungen
-ausgerichtet. Diese Informationen hier sind nötig um die Operationen und
-Möglichkeiten der unterschiedlichen Tastenkombinationen zu verstehen. Siehe
-dazu auch die weiteren Erklärungen unten. Für detailliertere Erklärungen,
-welche zum schreiben eigener Konfigurationsdateien benötigt werden, siehe die
-zusätzlichen Dokumentationen auf der Ion Webseite
-
-Die obersten Objekte welche benutzt werden können sind \fBScreens\fP.
-Sie sind mit physikalischen Sceeens zu vergleichen. Screens enthalten 
-\fBArbeitsbereiche\fP und \fBClient Fenster\fP gepackt in einem Vollbildmodus.
-Diese Objekte sind \fBgebündelt\fP, mit dem Hintergrund, dass nur einer auf
-einmal angezeigt werden kann.   
-
-Derzeit unterstützt Ion zwei Arten von Arbeitsbereichen; \fBgeteilt\fP in den
-traditionellen Ion-Style und den herkömlichen \fBfliessenden\fP Arbeitsbereich
-des PWM. Arbeitsbereiche sind keine sichtbaren Objekte sondern eher eine
-Sammlung von gleichzeitig erkennbaren \fBFrames\fP.
-
-Ähnlich wie Screens, bündeln Frames andere Objekte, in diesem Fall sind dies
-meist Client Fenster. Die meiste Zeit, sind Frames das einzige von Ion was auf
-dem Screen zu sehen ist. Frames können Rahmen haben und sie haben einen 
-\fBReiter\fP für jedes in ihnen gebündelte Objekt.
-
-\fBAnfragen\fP sind Textboxen die am unteren Rand eines Frames oder Screens
-erscheinen. Sie können nach Texteingaben zum ausführen einer Aktion verlangen.
-Diese sind abhängig von den an sie gebundenen Aktionen. Die meisten Anfragen
-unterstützen Autovervollständigung.    
-
-.SH BINDUNGEN
-
-Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben.
-(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86
-ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP).
-Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden
-(\fBMETA_L\fP, \fBMETA_R\fP).  Benutze \fIxmodmap(1x)\fP um die Belegung
-herauszufinden. 
-
-Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten
-gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen
-definiert sind. 
-
-.SS Global verfügbare Bindungen
-
-BINDINGS:WScreen
-
-.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern
-
-BINDINGS:WMPlex
-
-.SS Bindungsoperationen auf Frames und ihren Kindern 
-
-BINDINGS:WFrame
-
-.SS Bindungen zum Bewegungs-/Veränderungsmodus 
-
-BINDINGS:WMoveresMode
-
-.SS Bindungen zum teilen der Arbeitsfläche [mod_ionws]
-
-BINDINGS:WTiling
-.\" BINDINGS:WFrame.tiled
-
-.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws]
-
-BINDINGS:WGroupWS
-
-BINDINGS:WFrame.floating
-
-.SS Bindungen für Message- und Anfrageboxen [mod_query]
-
-BINDINGS:WInput
-
-.SS Bindungen zum Editieren in Anfragen [mod_query]
-
-Diese Bindungen sind vergleichbar mit denen des \fIjoe(1)\fP Texteditors.
-Auschneiden, Kopieren und Einfügen arbeiten nach konventionellen
-Gesichtspunkten. Etwas überarbeitet aber die gleichen Tasten. 
-
-BINDINGS:WEdln
-
-.SS Bindungen für die Menüs [mod_menu]
-
-BINDINGS:WMenu
-
-
-.SH DATEIEN und VERZEICHNISSE
-.TP
-.B ETCDIR/cfg_ion.lua
-Voreingestellte Hauptkonfigurationsdateien
-.TP
-.B ETCDIR/cfg_*.lua
-Andere Konfigurationsdateien
-.TP
-.B ETCDIR/look_*.lua
-Farbschemata Konfigurationsdateien
-.TP
-.B ~/.ion3/
-Benutzerkonfigurationsdateien
-.TP
-.B ~/.ion3/cfg_ion.lua
-Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die
-systemweiten Konfigurationen) 
-
-.SH SIEHE AUCH
-Die Ion Homepage, \fIhttp://iki.fi/tuomov/ion/\fP
-.PP
-Das Dokument "Ion: Configuring and extending with Lua" kann auf der Ion Webseite
-gefunden werden.
-
-.PP
-.I DOCDIR/
-.PP
-\fIX(7x)\fP, \fIpwm3(1)\fP, \fIjoe(1)\fP
-
-.SH AUTOR
-Ion wurde von Tuomo Valkonen <tuomov at iki.fi> geschrieben
index 82fca519000e459546e265febf3434e108f787f7..896a4d505d0bac77d7397508653faa734edddbee 100644 (file)
@@ -35,11 +35,11 @@ N
 Näytä Ionin versio.
 .TP
 .B \-about
-Näytä tietoja Ionista (versio, tekijänoikeudet).
+Näytä tietoja Ionista (versio, tekijä, lisenssi).
 
 .SH PERUSKÄSITTEET
 
-Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBolioihin\fP,
+Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBkappaleisiin\fP,
 joita ilmenee Ionin hallitsemalla X-näytöllä, ja niiden suhteisiin 
 tavallisessa kokoonpanossa. Sinun tarvitse ymmärtää nämä suhteet 
 tietääksesi milloin mitkäkin alempana kuvattavat näppäinsidonnat 
@@ -47,20 +47,20 @@ ovat k
 tehdäksesi omat asetustiedostot, katso Ionin seittisivulta saatavaa 
 yksityiskohtaisempaa dokumentaatiota.
 
-Ylimmän tason olioita, joilla on merkitystä tässä yhteydessä, 
+Ylimmän tason kappaleista, joilla on merkitystä tässä yhteydessä, 
 kutsutaan \fBnäytöiksi\fP. Ne vastaavat fyysisiä näyttöjä. Näytöt
 sisältävät \fBtyöpöytiä\fP (jotka ovat itse eräänlaisia \fBryhmiä\fP)
-ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä oliot ovat 
+ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä kappaleet ovat 
 \fBlomitettu\fP siten, että vain yksi voi näkyä kerrallaan.
 
 Työpöydät voivat vuorostaan sisältää \fBlaatoituksia\fP sekä
 kelluvia/irroitettuja \fBkehyksiä\fP. Laatoitukset taasen sisältävät
 \fBkehyksiä\fP laatoitettuna täyttämään koko näytön, sekä mahdollisesti
 tilapalkin tai telakan (dock). Näyttöjen tapaan kehykset lomittavat 
-muita olioita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP. 
+muita kappaleita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP. 
 Kehykset ovat suurimman osan ajasta ainut asia, minkä näet Ionista. Niillä
 voi olla reunakoristukset, ja lisäksi kehyksissä on \fBvälilehti\fP 
-jokaiselle lomitetulle oliolle.
+jokaiselle lomitetulle kappaleelle.
 
 \fBKyselyt\fP ovat näyttöjen tai kehysten alaosiin imestyviä laatikoita,
 jotka odottavat sinulta tekstin syöttöä jonkin siitä riippuvan toiminnon
@@ -82,11 +82,7 @@ jonka asetustiedosto m
 
 BINDINGS:WScreen
 
-.SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat
-
-BINDINGS:WMPlex.toplevel
-
-.SS Näytöillä tai (kaikissa) kehyksissä toimivat sidonnat
+.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat
 
 BINDINGS:WMPlex
 
@@ -94,7 +90,11 @@ BINDINGS:WMPlex
 
 BINDINGS:WFrame
 
-.SS Ylimmän tason kehyksissä (ei ns. transient-dialogi) toimivat sidonnat
+.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
+
+BINDINGS:WMPlex.toplevel
+
+.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
 
 BINDINGS:WFrame.toplevel
 
@@ -110,7 +110,6 @@ BINDINGS:WTiling
 .SS Asiakasikkunoiden sidonnat
 
 BINDINGS:WClientWin
-
 BINDINGS:WGroupCW
 
 .SS Siirto- ja koonmuutostilan sidonnat
index b9ab3f1a939cf93f18235176d43e0d1eb1dbc8cc..304498d8845b3241ee86ee17647d6b4a841dca30 100644 (file)
@@ -35,7 +35,7 @@ Show help on command line options
 Show version
 .TP
 .B \-about
-Show about text (version, copyright)
+Show about text (version, author, license)
 
 .SH BASIC CONCEPTS
 
@@ -79,19 +79,19 @@ the module that whose configuration file defines these bindings.
 
 BINDINGS:WScreen
 
-.SS Bindings operating on top-level frames and screens and their children
-
-BINDINGS:WMPlex.toplevel
-
-.SS Bindings operating on frames and screens and their children
+.SS Bindings operating on all frames and screens
 
 BINDINGS:WMPlex
 
-.SS Bindings operating on all frames (including transient) and their children
+.SS Bindings operating on all frames
 
 BINDINGS:WFrame
 
-.SS Bindings operating on top-level (non-transient) frames and their children
+.SS Bindings operating on top-level (non-transient) frames and screens
+
+BINDINGS:WMPlex.toplevel
+
+.SS Bindings operating on top-level (non-transient) frames
 
 BINDINGS:WFrame.toplevel
 
@@ -107,7 +107,6 @@ BINDINGS:WTiling
 .SS Bindings for client windows
 
 BINDINGS:WClientWin
-
 BINDINGS:WGroupCW
 
 .SS Move/resize mode bindings
index 548a16fc3d9961ee3688c222405c2bde9e42a8ab..5b6f443b15ae1ebbab84f417b058ae79bbfcbf75 100644 (file)
@@ -37,15 +37,15 @@ Zobraz
 Zobrazí verzi
 .TP
 .B \-about
-Zobrazí informace o programu (verze, copyright)
+Zobrazí informace o programu (verze, autor, copyright)
 
 .SH PØIØAZENÍ
 
-Toto jsou implicitní pøiøazení klávesových zkratek. Pøiøazení modifikátoru
+Toto jsou výchozí pøiøazení klávesových zkratek. Pøiøazení modifikátoru
 (\fBMod1\fP) závisí na systému. Na PCèkách s XFree86 bude nejspí¹ navázán
 na levou klávesu Alt (\fBAlt_L\fP). Na Sunech je obvykle namapován na klávesy
 s diamanty (\fBMeta_L\fP, \fBMeta_R\fP). Konkrétní pøiøazení zjistíte
-programem \fIxmodmap(1x)\fP.
+programem \fIxmodmap(1)\fP.
 
 Øetìzec v hranatých závorkách urèuje modul, jeho¾ konfiguraèní soubor
 definuje toto pøiøazení.
@@ -54,23 +54,31 @@ definuje toto p
 
 BINDINGS:WScreen
 
-.".SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky
+.SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky
 
 BINDINGS:WMPlex
 
 .SS Pøiøazení pro práci s rámy a jejich potomky
 
 BINDINGS:WFrame
+BINDINGS:WFrame.floating
 
-.SS Pøiøazení pro pøesun/zmìnu velikosti
+.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy a obrazovkami
 
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
 
-.SS Pøiøazení pro plovoucí pracovní plochy [mod_floatws]
+.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy
 
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
 
-BINDINGS:WFrame.floating
+.SS Pøiøazení pro práci s klientskými okny
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Pøiøazení pro pøesun/zmìnu velikosti
+
+BINDINGS:WMoveresMode
 
 .SS Pøiøazení pro menu [mod_menu]
 
diff --git a/man/pwm3.de.in b/man/pwm3.de.in
deleted file mode 100644 (file)
index 5f6138d..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-.TH PWM 1
-.SH NAME
-PWM - ein X11 Fenster Manager
-.SH ÜBERSICHT
-.B pwm3
-.I "[optionen]"
-.SH "BESCHREIBUNG"
-
-Der originale PWM war der erste Fenster Manager, welcher einen tabellenartigen 
-Aufbau seiner Objekte unterstützte. Diese Version des PWM basiert auf dem
-Quellcode von Ion und unterscheidet sich zu diesem nur durch Unterschiede in den
-Konfigurationsdateien, den Pfaden und einigen wenigen zusätzliche Optionen. 
-
-.SH "OPTIONEN"
-.TP
-.B \-display host:display.screen
-X Anzeige zum darstellen
-.TP
-.B \-conffile Konfigurationsdatei
-Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll
-.TP
-.B \-searchdir dir
-Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden
-.TP
-.B \-oneroot
-Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den 
-voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display'
-Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden
-.TP
-.B \-sessionname sitzungs_name
-Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und
-andere Sicherungsdateien abgelegt werden (~/.pwm3/sitzungs_name wenn die Option
-gesetzt wurde).
-.TP
-.B \-help
-Zeigt die Hilfe für die Kommandozeilenoptionen
-.TP
-.B \-version
-Zeigt die Version
-.TP
-.B \-about
-Zeigt Informationen über den Autor, die Version und das Copyright
-
-.SH BINDUNGEN
-Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben.
-(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86
-ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP).
-Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden
-(\fBMETA_L\fP, \fBMETA_R\fP).  Benutze \fIxmodmap(1x)\fP um die Belegung
-herauszufinden. 
-
-Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten
-gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen
-definiert sind. 
-
-.SS Global verfügbare Bindungen
-
-BINDINGS:WScreen
-
-.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern
-
-BINDINGS:WMPlex
-
-.SS Bindungsoperationen auf Frames und ihren Kindern 
-
-BINDINGS:WFrame
-
-.SS Bindungen zum Bewegungs-/Veränderungsmodus 
-
-BINDINGS:WMoveresMode
-
-.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws]
-
-BINDINGS:WGroupWS
-
-BINDINGS:WFrame.floating
-
-.SS Bindungen für die Menüs [mod_menu]
-
-BINDINGS:WMenu
-
-
-.SH DATEIEN und VERZEICHNISSE
-.TP
-.B ETCDIR/cfg_pwm.lua
-Voreingestellte Hauptkonfigurationsdateien
-.TP
-.B ETCDIR/cfg_*.lua
-Andere Konfigurationsdateien
-.TP
-.B ETCDIR/look_*.lua
-Farbschemata Konfigurationsdateien
-.TP
-.B ~/.pwm3/
-Benutzerkonfigurationsdateien
-.TP
-.B ~/.pwm3/cfg_pwm.lua
-Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die
-systemweiten Konfigurationen)
-
-.SH SIEHE AUCH
-
-Weitere Informationen siehe \fIion3(1)\fP.
-
-.SH AUTOR
-PWM und Ion wurde von Tuomo Valkonen <tuomov at iki.fi> geschrieben
index 40c140fe5312be3a05e5b5afa619a96bda8d33b2..b8d64657548920e3c48a6f08d54e9a9e4c34c21e 100644 (file)
@@ -36,7 +36,7 @@ N
 Näytä Ionin versio.
 .TP
 .B \-about
-Näytä tietoja PWM:sta (versio, tekijänoikeudet).
+Näytä tietoja PWM:sta (versio, tekijä, lisenssi).
 
 .SH SIDONNAT
 
@@ -53,23 +53,31 @@ jonka asetustiedosto m
 
 BINDINGS:WScreen
 
-.\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat
+.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat
 
 BINDINGS:WMPlex
 
-.SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat
+.SS Kaikissa kehyksissä toimivat sidonnat
 
 BINDINGS:WFrame
+BINDINGS:WFrame.floating
 
-.SS Siirto ja koonmuutostilan sidonnat
+.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
 
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
 
-.SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws]
+.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
 
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
 
-BINDINGS:WFrame.floating
+.SS Asiakasikkunoiden sidonnat
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Siirto- ja koonmuutostilan sidonnat
+
+BINDINGS:WMoveresMode
 
 .SS Valikoiden sidonnat [mod_menu]
 
index e38625b5eb2be2281dcd92a13c29a206e6824789..8ea21b9a3b348018f9fd20af9373245bef0eb66b 100644 (file)
@@ -38,7 +38,7 @@ Show help on command line options
 Show version
 .TP
 .B \-about
-Show about text (version, copyright)
+Show about text (version, author, license)
 
 .SH BINDINGS
 
@@ -54,23 +54,31 @@ the module that whose configuration file defines these bindings.
 
 BINDINGS:WScreen
 
-.".SS Bindings operating on both frames and screens and their children
+.SS Bindings operating on all frames and screens and their children
 
 BINDINGS:WMPlex
 
-.SS Bindings operating on frames and their children
+.SS Bindings operating on all frames and their children
 
 BINDINGS:WFrame
+BINDINGS:WFrame.floating
 
-.SS Move/resize mode bindings
+.SS Bindings operating on top-level (non-transient) frames as well as screens
 
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
 
-.SS Bindings for floating workspaces and frames [mod_floatws]
+.SS Bindings operating on top-level (non-transient) frames
 
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
 
-BINDINGS:WFrame.floating
+.SS Bindings for client windows
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Move/resize mode bindings
+
+BINDINGS:WMoveresMode
 
 .SS Bindings for menus [mod_menu]
 
diff --git a/man/welcome.de.head b/man/welcome.de.head
deleted file mode 100644 (file)
index 519e364..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Willkommen bei Ion!
-
-Wenn Sie nie zuvor Ion benutzt haben, empfehlen wir Ihnen unbedingt das 
-Ion Handbuch zu studieren, bevor Sie weiter fortfahren. Obwohl es 
-unten aufgeführt ist, können Sie später wieder darauf zurückgreifen, indem 
-Sie <F1> drücken und dann <Enter>, oder, indem Sie 'man ion3' in einem 
-Terminal ausführen. All das setzt voraus, dass Sie Ion in einem 
-Standardspeicherplatz installiert haben, damit die System Kommandos die 
-Handbuchseite finden können. 
-
-Wenn Sie zu wild darauf sind, Ion auszuprobieren und gegen alle 
-Empfehlungen das Lesen des Handbuches überspringen wollen, so sollten Sie
-zumindestens wissen, dass mit drücken der <F2> - Taste ein Terminal  
-gestartet werden kann, und dass man auf das Hauptmenü mit <F12> zugreifen kann. 
-
-Wenn Sie sich bereit fühlen, individuelle Konfigurationsdateien zu 
-schreiben (was jederzeit möglich ist), so schauen sich bitte in das 
-Konfigurationshandbuch, welches auf der Ion Webseite zu finden ist. 
-(Link siehe Ende des Benutzerhandbuches) Ausserdem kann es nuetzlich sein, 
-sich erst ein wenig mit Ion vertraut zu machen bevor man sich eingehend 
-damit befasst. Damit Sie die Grundkonzepte erfassen koennen, die notwendig 
-sind, um die nötigen Konfigurationsdateien zu verstehen.
index ca418524729eba96cb7ee8387d9abe9c768840ae..dabe0757cc25ecb54ee1aa2fcd7f11b1f27cc858 100644 (file)
@@ -1437,9 +1437,9 @@ static WPHolder *dock_managed_get_pholder(WDock *dock, WRegion *mgd)
 
 static WPHolder *dock_prepare_manage(WDock *dock, const WClientWin *cwin,
                                      const WManageParams *param UNUSED,
-                                     int redir)
+                                     int priority)
 {
-    if(redir==MANAGE_REDIR_STRICT_YES)
+    if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW))
         return NULL;
 
     return (WPHolder*)create_basicpholder((WRegion*)dock,
@@ -1583,7 +1583,7 @@ static bool clientwin_do_manage_hook(WClientWin *cwin, const WManageParams *para
     }
 
     return region_manage_clientwin((WRegion*)dock, cwin, param,
-                                   MANAGE_REDIR_PREFER_NO);
+                                   MANAGE_PRIORITY_NONE);
 }
 
 
index 05e801f56b417acea18cb76ed52842f908c05a3e..9192a95917d41fcdab3a559db6ff05babc2888ed 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libextl/extl.h>
@@ -17,6 +14,7 @@
 #include <ioncore/binding.h>
 #include <ioncore/conf-bindings.h>
 #include <ioncore/key.h>
+#include <ioncore/stacking.h>
 #include "menu.h"
 #include "mkmenu.h"
 
@@ -93,9 +91,11 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab,
     extl_table_gets_i(param, "initial", &(fnp.initial));
 
     par.flags=(MPLEX_ATTACH_SWITCHTO|
+               MPLEX_ATTACH_LEVEL|
                MPLEX_ATTACH_UNNUMBERED|
                MPLEX_ATTACH_SIZEPOLICY);
     par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+    par.level=STACKING_LEVEL_MODAL1+1;
 
     menu=(WMenu*)mplex_do_attach_new(mplex, &par,
                                      (WRegionCreateFn*)create_menu,
index 601e11e9ca00b94dec06c227f96b4a22b6387ae1..6daa80f2f3970ecd7cceccd13f805152a95ce00d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libextl/readconfig.h>
index e779d1581dac9a63929188243a1a9fe5603d0174..883cefbbf5c90beab1874c9658d158bc930b4164 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_MENU_MAIN_H
index df3a2b0280d54a68b8e3221b9b9aa3fb003e8e2a..c87dc590ccb99f5693f52d19c545dad9c828f5a1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 8d856e0c509986e24a8a955bed34f4303fdf05a5..7ad247cd9ad915ef1e02a39fd42ae2fddf6caff3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_MENU_MENU_H
index 0c27f73168f9ba87244cecf40cefdbd8800f20b1..041e6662a56fdc98b2a657273e626918ad43d2f8 100644 (file)
@@ -3,15 +3,13 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <limits.h>
 #include <ioncore/common.h>
 #include <ioncore/pointer.h>
+#include <ioncore/stacking.h>
 #include <ioncore/grab.h>
 #include <libextl/extl.h>
 #include "menu.h"
@@ -49,11 +47,12 @@ WMenu *mod_menu_do_menu(WMPlex *mplex, ExtlFn handler, ExtlTab tab,
     fnp.refg.h=0;
     
     par.flags=(MPLEX_ATTACH_SWITCHTO|
-               MPLEX_ATTACH_MODAL|
+               MPLEX_ATTACH_LEVEL|
                MPLEX_ATTACH_UNNUMBERED|
                MPLEX_ATTACH_SIZEPOLICY);
     par.szplcy=SIZEPOLICY_FULL_BOUNDS;
-        
+    par.level=STACKING_LEVEL_MODAL1+1;
+    
     return (WMenu*)mplex_do_attach_new(mplex, &par,
                                        (WRegionCreateFn*)create_menu,
                                        (void*)&fnp); 
index 610047f925c510acccf4bf437a1f6c3571a0f2b4..7a961c8a2aa1a8c28a02e1f64d3bce7b39ea4172 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_MENU_MKMENU_H
index 705a66ef0fcd2d6fef2adbf1ca8423c34299476b..368115bcfd16f9f13c2d910470230abe9e4ae356 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 -- This is a slight abuse of the package.loaded variable perhaps, but
diff --git a/mod_mgmtmode/Makefile b/mod_mgmtmode/Makefile
deleted file mode 100644 (file)
index 2d0b769..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-##
-## Management mode module Makefile
-##
-
-# System-specific configuration is in system.mk
-TOPDIR=..
-include $(TOPDIR)/build/system-inc.mk
-
-######################################
-
-INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
-CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
-
-SOURCES=main.c mgmtmode.c
-
-MAKE_EXPORTS=mod_mgmtmode
-
-MODULE=mod_mgmtmode
-
-######################################
-
-include $(TOPDIR)/build/rules.mk
-
-######################################
-
-_install: module_install
diff --git a/mod_mgmtmode/main.c b/mod_mgmtmode/main.c
deleted file mode 100644 (file)
index ef62c52..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ion/mod_mgmtmode/main.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2007. 
- *
- * 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/readconfig.h>
-#include <ioncore/saveload.h>
-#include <ioncore/bindmaps.h>
-
-#include "exports.h"
-
-/*{{{ Module information */
-
-
-#include "../version.h"
-
-char mod_mgmtmode_ion_api_version[]=ION_API_VERSION;
-
-
-/*}}}*/
-
-
-/*{{{ Bindmaps */
-
-
-WBindmap *mod_mgmtmode_bindmap=NULL;
-
-
-/*}}}*/
-
-
-/*{{{ Init & deinit */
-
-
-void mod_mgmtmode_deinit()
-{
-    if(mod_mgmtmode_bindmap!=NULL){
-        ioncore_free_bindmap("WMgmtMode", mod_mgmtmode_bindmap);
-        mod_mgmtmode_bindmap=NULL;
-    }
-
-    mod_mgmtmode_unregister_exports();
-}
-
-
-bool mod_mgmtmode_init()
-{
-    mod_mgmtmode_bindmap=ioncore_alloc_bindmap("WMgmtMode", NULL);
-    
-    if(mod_mgmtmode_bindmap==NULL)
-        return FALSE;
-
-    if(!mod_mgmtmode_register_exports()){
-        mod_mgmtmode_deinit();
-        return FALSE;
-    }
-
-    extl_read_config("cfg_mgmtmode", NULL, TRUE);
-    
-    return TRUE;
-}
-
-
-/*}}}*/
-
diff --git a/mod_mgmtmode/main.h b/mod_mgmtmode/main.h
deleted file mode 100644 (file)
index 5c9fde4..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * ion/mod_mgmtmode/main.h
- *
- * Copyright (c) Tuomo Valkonen 2004-2007. 
- *
- * 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.
- */
-
-#ifndef ION_MOD_MGMTMODE_MAIN_H
-#define ION_MOD_MGMTMODE_MAIN_H
-
-#include <ioncore/binding.h>
-
-extern bool mod_mgmtmode_init();
-extern void mod_mgmtmode_deinit();
-
-extern WBindmap *mod_mgmtmode_bindmap;
-
-#endif /* ION_MOD_MGMTMODE_MAIN_H */
diff --git a/mod_mgmtmode/mgmtmode.c b/mod_mgmtmode/mgmtmode.c
deleted file mode 100644 (file)
index 4b86aa4..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * ion/mod_mgmtmode/mgmtmode.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2007. 
- *
- * 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 <math.h>
-#include <sys/time.h>
-#include <time.h>
-#include <limits.h>
-
-#include <libtu/objp.h>
-#include <ioncore/common.h>
-#include <ioncore/global.h>
-#include <ioncore/region.h>
-#include <ioncore/rootwin.h>
-#include <ioncore/binding.h>
-#include <ioncore/grab.h>
-#include "mgmtmode.h"
-#include "main.h"
-
-
-static WMgmtMode *mgmt_mode=NULL;
-
-
-static void cancel_mgmt(WRegion *reg);
-
-
-/*{{{ WMgmtMode */
-
-
-static bool mgmtmode_init(WMgmtMode *mode, WRegion *reg)
-{
-    watch_init(&(mode->selw));
-    watch_setup(&(mode->selw), (Obj*)reg, NULL);
-    return TRUE;
-}
-
-
-static WMgmtMode *create_mgmtmode(WRegion *reg)
-{
-    CREATEOBJ_IMPL(WMgmtMode, mgmtmode, (p, reg));
-}
-
-
-static void mgmtmode_deinit(WMgmtMode *mode)
-{
-    if(mgmt_mode==mode)
-       mgmt_mode=NULL;
-    
-    watch_reset(&(mode->selw));
-}
-
-
-/*EXTL_DOC
- * Select management mode target.
- */
-EXTL_EXPORT_MEMBER
-void mgmtmode_select(WMgmtMode *mode, WRegion *reg)
-{
-    watch_setup(&(mode->selw), (Obj*)reg, NULL);
-}
-
-
-/*EXTL_DOC
- * Return management mode target.
- */
-EXTL_SAFE
-EXTL_EXPORT_MEMBER
-WRegion *mgmtmode_selected(WMgmtMode *mode)
-{
-    return (WRegion*)(mode->selw.obj);
-}
-
-
-/*EXTL_DOC
- * End management mode.
- */
-EXTL_EXPORT_MEMBER
-void mgmtmode_finish(WMgmtMode *mode)
-{
-    if(mgmt_mode==mode)
-        cancel_mgmt(NULL);
-}
-    
-
-EXTL_EXPORT
-IMPLCLASS(WMgmtMode, Obj, mgmtmode_deinit, NULL);
-
-
-/*}}}*/
-
-
-/*{{{ Rubberband */
-
-
-static void draw_rubberbox(WRootWin *rw, const WRectangle *rect)
-{
-    XPoint fpts[5];
-    
-    fpts[0].x=rect->x;
-    fpts[0].y=rect->y;
-    fpts[1].x=rect->x+rect->w;
-    fpts[1].y=rect->y;
-    fpts[2].x=rect->x+rect->w;
-    fpts[2].y=rect->y+rect->h;
-    fpts[3].x=rect->x;
-    fpts[3].y=rect->y+rect->h;
-    fpts[4].x=rect->x;
-    fpts[4].y=rect->y;
-    
-    XDrawLines(ioncore_g.dpy, WROOTWIN_ROOT(rw), rw->xor_gc, fpts, 5, 
-               CoordModeOrigin);
-}
-
-
-static void mgmtmode_draw(WMgmtMode *mode)
-{
-    WRegion *reg=mgmtmode_selected(mode);
-    
-    if(reg!=NULL){
-        WRootWin *rw=region_rootwin_of(reg);
-        WRectangle g=REGION_GEOM(reg);
-        int rx=0, ry=0;
-        
-        region_rootpos(reg, &rx, &ry);
-        
-        g.x=rx;
-        g.y=ry;
-        
-        draw_rubberbox(rw, &g);
-    }
-}
-
-
-static void mgmtmode_erase(WMgmtMode *mode)
-{
-    mgmtmode_draw(mode);
-}
-
-
-/*}}}*/
-
-
-/*{{{ The mode */
-
-
-static bool mgmt_handler(WRegion *reg, XEvent *xev)
-{
-    XKeyEvent *ev=&xev->xkey;
-    WBinding *binding=NULL;
-    WMgmtMode *mode;
-    
-    if(ev->type==KeyRelease)
-        return FALSE;
-    
-    if(reg==NULL)
-        return FALSE;
-    
-    mode=mgmt_mode;
-    
-    if(mode==NULL)
-        return FALSE;
-    
-    binding=bindmap_lookup_binding(mod_mgmtmode_bindmap, 
-                                   BINDING_KEYPRESS,
-                                   ev->state, ev->keycode);
-    
-    if(!binding)
-        return FALSE;
-    
-    if(binding!=NULL){
-        mgmtmode_erase(mode);
-        extl_call(binding->func, "o", NULL, mode);
-        if(mgmt_mode!=NULL)
-            mgmtmode_draw(mgmt_mode);
-    }
-    
-    return (mgmt_mode==NULL);
-}
-
-
-static void cancel_mgmt(WRegion *reg)
-{
-    if(mgmt_mode!=NULL){
-        mgmtmode_erase(mgmt_mode);
-        destroy_obj((Obj*)mgmt_mode);
-    }
-    ioncore_grab_remove(mgmt_handler);
-}
-
-
-/*EXTL_DOC
- * Begin management mode.
- */
-EXTL_EXPORT
-WMgmtMode *mod_mgmtmode_begin(WRegion *reg)
-{
-    if(mgmt_mode!=NULL)
-        return NULL;
-    
-    mgmt_mode=create_mgmtmode(reg);
-
-    if(mgmt_mode==NULL)
-        return NULL;
-    
-    ioncore_grab_establish((WRegion*)region_rootwin_of(reg), 
-                           mgmt_handler,
-                           (GrabKilledHandler*)cancel_mgmt, 0);
-    
-    mgmtmode_draw(mgmt_mode);
-    
-    return mgmt_mode;
-}
-
-
-/*}}}*/
diff --git a/mod_mgmtmode/mgmtmode.h b/mod_mgmtmode/mgmtmode.h
deleted file mode 100644 (file)
index daf7eae..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * ion/mod_mgmtmode/mgmtmode.h
- *
- * Copyright (c) Tuomo Valkonen 2004-2007. 
- *
- * 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.
- */
-
-#ifndef ION_MOD_MGMTMODE_MGMTMODE_H
-#define ION_MOD_MGMTMODE_MGMTMODE_H
-
-#include <ioncore/common.h>
-#include <libextl/extl.h>
-
-INTRCLASS(WMgmtMode);
-
-DECLCLASS(WMgmtMode){
-    Obj obj;
-    Watch selw;
-};
-
-
-extern WMgmtMode *mod_mgmtmode_begin(WRegion *reg);
-
-extern void mgmtmode_select(WMgmtMode *mode, WRegion *reg);
-extern WRegion *mgmtmode_selected(WMgmtMode *mode);
-
-extern void mgmtmode_finish(WMgmtMode *mode);
-
-#endif /* ION_MOD_MGMTMODE_MGMTMODE_H */
index 87cd93424ace14cf189bcfa6a034a71932dd2d4b..a6580373d9e18620ff49a8f9bd7e7682b7940e17 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index d9c9773e88109de10677d85ee94ff045fec99547..3386b18bfb16aced4dfc2646da56557dbbbe612a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_COMPLETE_H
index 911dee734174b03f4ba70071230015088b64af78..ca28b38c3a251b115d6ce93eda84b391dab1db9b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index ea00f6f63c3139b4da3b7c0b4452ff7be9c36117..2d46535ee2d9d6474d8911a970e7bdcb3f340820 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_EDLN_H
index 5122948e8b2fe5006e23402392cc74841f49ee5e..32eb49769b6c04ff3d70a01c8108623a5eed294b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 
@@ -14,6 +11,7 @@
 #include <ioncore/global.h>
 #include <ioncore/focus.h>
 #include <ioncore/frame.h>
+#include <ioncore/stacking.h>
 #include <libtu/objp.h>
 #include "wmessage.h"
 #include "fwarn.h"
@@ -56,10 +54,11 @@ WMessage *mod_query_do_message(WMPlex *mplex, const char *p)
         return NULL;
     
     par.flags=(MPLEX_ATTACH_SWITCHTO|
-               MPLEX_ATTACH_MODAL|
+               MPLEX_ATTACH_LEVEL|
                MPLEX_ATTACH_UNNUMBERED|
                MPLEX_ATTACH_SIZEPOLICY);
     par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+    par.level=STACKING_LEVEL_MODAL1+1;
 
     return (WMessage*)mplex_do_attach_new(mplex, &par,
                                           (WRegionCreateFn*)create_wmsg,
index 9aed2566556e299809e823a99d6376f63d7173ef..9355286ccda2a8f31a9ea3e91ebfa4a162d0afca 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_FWARN_H
index 168f6066aa7b6b04d341ffe243295b04fd342e79..0501da73f5a2ac18d3062fe061fce98ba4d4190b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index f27be88387bbb40c68f716ffbd81528d1e2ace56..ad98f905496f77348e5ff0a55e55a39006d87c8c 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_HISTORY_H
index 57a23c53ee26b07db2292bd8dc84bd51b2f135dd..2cf1f25458597b089977c57f0baa922e276b00bd 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libmainloop/defer.h>
index 3dbde2e7706b0dfa1da1f9f22a726e21219061cb..3a39b176311c46810deb4cbf34e8f2a617a18608 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_INPUT_H
index d91960fad6319d351d7cdb33ebf8d6e61d411208..5366a1dbde78a27e6f2b32ad82162da9b0852f28 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_INPUTP_H
index 271d17e53a0be6411a440288ecc6b3f707bed0be..fbac450ba73ab5d7a308f1e26f9ad52b100dcb1e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index b4d10f06dca7b0612377ab6a0ec37d5f8063e33e..c8a669fba5d18ba5d06f9a7b7ddbb53b8e39d315 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_LISTING_H
index aeef9ae942f90e873ba61508739673c744dee15f..a360378f15a19ada01ff25bd461dc23706048d44 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libextl/readconfig.h>
index 0a3f34feb728ebcf14ce62dc83440fc025cd3ef7..2fd127f983082693a2cb7540e2280c7eaa3f777a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_MAIN_H
index 1bd3e231534896d69b8c857c1ba13a6a4de07e4f..b5bdd71ada47e108a6ae080ca9469bb281fd1301 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 -- 
--- 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.
+-- See the included file LICENSE for details.
 --
 
 
@@ -514,9 +511,9 @@ end
 
 
 --DOC
--- 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 \fnref{ioncore.complete_clientwin}.
+-- This query asks for the name of a client window and switches
+-- focus to the one entered. It uses the completion function
+-- \fnref{ioncore.complete_clientwin}.
 function mod_query.query_gotoclient(mplex)
     mod_query.query(mplex, TR("Go to window:"), nil,
                     mod_query.gotoclient_handler,
@@ -525,9 +522,9 @@ function mod_query.query_gotoclient(mplex)
 end
 
 --DOC
--- This query asks for the name of a client window and switches
--- focus to the one entered. It uses the completion function
--- \fnref{ioncore.complete_clientwin}.
+-- 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 \fnref{ioncore.complete_clientwin}.
 function mod_query.query_attachclient(mplex)
     mod_query.query(mplex, TR("Attach window:"), nil,
                     mod_query.attachclient_handler, 
index 8c60cb1d67785207d4fbf96c4c97aaf1e751e3b9..dcf4d2a7e5120faaafbde08b3b83607e0752014c 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 -- 
--- 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.
+-- See the included file LICENSE for details.
 --
 
 local function ws_chdir(mplex, params)
index 9418af5e11d5b8518fa93795a5c46b02a3c2b6b4..7585b02b70419ecbc30e46a64cbec9d93c920140 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libextl/extl.h>
@@ -16,6 +13,7 @@
 #include <ioncore/binding.h>
 #include <ioncore/regbind.h>
 #include <ioncore/bindmaps.h>
+#include <ioncore/stacking.h>
 #include <ioncore/key.h>
 #include "query.h"
 #include "wedln.h"
@@ -45,10 +43,11 @@ WEdln *mod_query_do_query(WMPlex *mplex, const char *prompt, const char *dflt,
     fnp.completor=completor;
     
     par.flags=(MPLEX_ATTACH_SWITCHTO|
-               MPLEX_ATTACH_MODAL|
+               MPLEX_ATTACH_LEVEL|
                MPLEX_ATTACH_UNNUMBERED|
                MPLEX_ATTACH_SIZEPOLICY);
     par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+    par.level=STACKING_LEVEL_MODAL1+1;
 
     wedln=(WEdln*)mplex_do_attach_new(mplex, &par,
                                       (WRegionCreateFn*)create_wedln,
index 3c67b3c0c8586cb72277d4471868514eee57e0a1..bc23d2b4874f3d6f26c0ae0d759afd62d79e4df0 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_QUERY_H
index fa5f0e4bd05b39f4db1ab3274ade136d05168817..ebb76dc94b45718efde3cce95f3e4e61458d50b0 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include "wedln.h"
index 470b05b8bee51b2e665b05ba8e63b2d8bcbcc68c..da29aa9522b46bdb8856cb9079d244664e1e21bc 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -787,11 +784,12 @@ bool wedln_prev_completion(WEdln *wedln)
 /*EXTL_DOC
  * 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 \var{cycle} is set to ``next'' or ``prev'',
- * respectively. The \var{mode} may be ``history'' or ``normal''. If it is 
+ * auto-show-completions mode and \var{cycle} is set to \codestr{next} or 
+ * \codestr{prev}, respectively. 
+ * The \var{mode} may be \codestr{history} or \codestr{normal}. If it is 
  * not set, the previous mode is used. Normally next entry is not cycled to
  * despite the setting of \var{cycle} if mode switch occurs. To override
- * this, use ``next-always'' and ``prev-always'' for \var{cycle}.
+ * this, use \codestr{next-always} and \codestr{prev-always} for \var{cycle}.
  */
 EXTL_EXPORT_MEMBER
 void wedln_complete(WEdln *wedln, const char *cycle, const char *mode)
index e966b41790c2428e2deac9691a9bc54541e597f9..9a72864b7ad0e8cec596cca6b60830a22d5fbfc4 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_WEDLN_H
index e7c5d3d70cda4ad81553dffd0ab103ca200c4b7a..f3dda0f077ae75500d97cdcfe3cb7791d1459ed1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index be1bfca0da04b9b29435fe9114d93e7cc849e849..6e936a864785e5294b675a44d6cb1a4db22684bf 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_QUERY_WMESSAGE_H
index 16bd2d2e2a6d12a1e98c72a66535005f324d6580..03de1c693b985e874b9f2f771a7db3bc13d2596d 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2004-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
index c9f13b43bcd2c2c34626c270cad817ba60ea9b86..e30d8c89dc53b0cccbd1198617206c3dcdf955fd 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2004-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
 #include <ioncore/saveload.h>
 #include <ioncore/screen.h>
 #include <ioncore/mplex.h>
+#include <ioncore/stacking.h>
 #include <ioncore/ioncore.h>
 #include <ioncore/global.h>
 #include <ioncore/framep.h>
 #include <ioncore/frame.h>
 #include <ioncore/names.h>
+#include <ioncore/group.h>
+#include <ioncore/group-ws.h>
 
 #include "main.h"
 #include "exports.h"
@@ -43,6 +43,7 @@ char mod_sp_ion_api_version[]=ION_API_VERSION;
 
 
 #define SP_NAME  "*scratchpad*"
+#define SPWS_NAME  "*scratchws*"
 
 
 /*}}}*/
@@ -58,34 +59,69 @@ static WRegion *create_frame_scratchpad(WWindow *parent, const WFitParams *fp,
 }
 
 
-static WFrame *create(WMPlex *mplex, int flags)
+static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp, 
+                                 void *unused)
 {
-    WFrame *sp;
+    WRegion *reg;
+    WRegionAttachData data;
+    WGroupAttachParams par;
+    WGroupWS *ws;
+    
+    ws=create_groupws(parent, fp);
+    
+    if(ws==NULL)
+        return NULL;
+        
+    region_set_name((WRegion*)ws, SPWS_NAME);
+    
+    data.type=REGION_ATTACH_NEW;
+    data.u.n.fn=create_frame_scratchpad;
+    data.u.n.param=NULL;
+    
+    par.szplcy_set=TRUE;
+    par.szplcy=SIZEPOLICY_FREE_GLUE;
+    
+    par.geom_set=TRUE;
+    par.geom.w=minof(fp->g.w, CF_SCRATCHPAD_DEFAULT_W);
+    par.geom.h=minof(fp->g.h, CF_SCRATCHPAD_DEFAULT_H);
+    par.geom.x=(fp->g.w-par.geom.w)/2;
+    par.geom.y=(fp->g.h-par.geom.h)/2;
+    
+    par.level_set=TRUE;
+    par.level=STACKING_LEVEL_MODAL1;
+    
+    par.bottom=TRUE;
+    
+    reg=group_do_attach(&ws->grp, &par, &data);
+
+    if(reg==NULL){
+        destroy_obj((Obj*)ws);
+        return NULL;
+    }
+     
+    region_set_name((WRegion*)reg, SP_NAME);
+    
+    return (WRegion*)ws;
+}
+
+
+static WRegion *create(WMPlex *mplex, int flags)
+{
+    WRegion *sp;
     WMPlexAttachParams par;
-    int sw=REGION_GEOM(mplex).w, sh=REGION_GEOM(mplex).h;
 
     par.flags=(flags
                |MPLEX_ATTACH_UNNUMBERED
-               |MPLEX_ATTACH_MODAL
                |MPLEX_ATTACH_SIZEPOLICY
-               |MPLEX_ATTACH_GEOM);
-    par.szplcy=SIZEPOLICY_FREE_GLUE;
-    
-    par.geom.w=minof(sw, CF_SCRATCHPAD_DEFAULT_W);
-    par.geom.h=minof(sh, CF_SCRATCHPAD_DEFAULT_H);
-    par.geom.x=(sw-par.geom.w)/2;
-    par.geom.y=(sh-par.geom.h)/2;
+               |MPLEX_ATTACH_PSEUDOMODAL);
+    par.szplcy=SIZEPOLICY_FULL_EXACT;
 
-    sp=(WFrame*)mplex_do_attach_new((WMPlex*)mplex, &par,
-                                    create_frame_scratchpad,
-                                    NULL);
+    sp=mplex_do_attach_new((WMPlex*)mplex, &par,
+                           create_scratchws,
+                           NULL);
     
-
-    if(sp==NULL){
+    if(sp==NULL)
         warn(TR("Unable to create scratchpad."));
-    }
-    
-    region_set_name((WRegion*)sp, SP_NAME);
     
     return sp;
 }
@@ -99,16 +135,19 @@ static bool is_scratchpad(WRegion *reg)
     if(nm==NULL)
         return FALSE;
     
-    if(inst_off<0)
-        return (strcmp(nm, SP_NAME)==0);
-    else
-        return (strncmp(nm, SP_NAME, inst_off)==0);
+    return (inst_off<0
+            ? (strcmp(nm, SP_NAME)==0 || 
+               strcmp(nm, SPWS_NAME)==0)
+            : (strncmp(nm, SP_NAME, inst_off)==0 ||
+               strncmp(nm, SPWS_NAME, inst_off)==0));
 }
 
 
 /*EXTL_DOC
  * Change displayed status of some scratchpad on \var{mplex} if one is 
- * found. The parameter \var{how} is one of (set/unset/toggle).
+ * found. The parameter \var{how} is one of 
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
+ * The resulting status is returned.
  */
 EXTL_EXPORT
 bool mod_sp_set_shown_on(WMPlex *mplex, const char *how)
@@ -137,7 +176,9 @@ bool mod_sp_set_shown_on(WMPlex *mplex, const char *how)
 
 /*EXTL_DOC
  * Toggle displayed status of \var{sp}.
- * The parameter \var{how} is one of (set/unset/toggle).
+ * The parameter \var{how} is one of 
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
+ * The resulting status is returned.
  */
 EXTL_EXPORT
 bool mod_sp_set_shown(WFrame *sp, const char *how)
index 45b85e0d3b3ce4a5505565d89722406d6224bd6c..c08030f3ca380f04e38f51ab2d8847548a14050e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 2004-2007.
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_SP_MAIN_H
index 19ba93a25582f74b92ee1ca2b3406a1654922f24..639295f7b08c18d68a6fe3ea668e2377bf8646f1 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 0724973b31a68eb6084a283e95048a5cb448e22c..2cda82bff6cd5a06f10896d2d9d06e3d4da52ca3 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_STATUSBAR_DRAW_H
index bf0e1d0034c101fe1ef823d7a2dc24976945a6b8..b6a0e7310f29b11a2bc9f4163cd2d26f26e53e52 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <sys/time.h>
@@ -254,7 +251,7 @@ static bool clientwin_do_manage_hook(WClientWin *cwin, const WManageParams *para
         return FALSE;
 
     return region_manage_clientwin((WRegion*)sb, cwin, param,
-                                   MANAGE_REDIR_PREFER_NO);
+                                   MANAGE_PRIORITY_NONE);
 }
 
     
index fa4dbfdd62bd79ac0fec99b4d1ac7c1586483e8b..806adc99fc320129834cacdd64f2b1d41236904e 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_STATUSBAR_MAIN_H
index 3164927046c790397deacc3d6fb25437c282ff1f..81db1a4f435e58ed1eef335b8476ebadc74a062c 100644 (file)
@@ -3,10 +3,7 @@
 -- 
 -- Copyright (c) Tuomo Valkonen 2004-2007.
 --
--- 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.
+-- See the included file LICENSE for details.
 --
 
 -- This is a slight abuse of the package.loaded variable perhaps, but
@@ -238,7 +235,9 @@ end
 
 
 --DOC
--- Load modules and launch ion-statusd with configuration table \var{cfg}.
+-- Load modules and launch \file{ion-statusd} with configuration 
+-- table \var{cfg}. The options for each \file{ion-statusd} monitor
+-- script should be contained in the corresponding sub-table of \var{cfg}.
 function mod_statusbar.launch_statusd(cfg)
     if statusd_pid>0 then
         return
@@ -292,7 +291,23 @@ end
 -- Initialisation and default settings {{{
 
 --DOC
--- Create a statusbar.
+-- Create a statusbar. The possible parameters in the
+-- table \var{param} are:
+--
+-- \begin{tabularx}{\linewidth}{llX}
+--   Variable & Type & Description \\
+--   \var{template} & string & The template; see
+--                             Section \ref{sec:statusbar}. \\
+--   \var{pos} & string & Position: \code{"tl"}, \code{"tr"}, 
+--                        \code{"bl"} or \code{"br"}
+--                        (for the obvious combinations of 
+--                        top/left/bottom/right). \\
+--   \var{screen} & integer & Screen number to create the statusbar on. \\
+--   \var{fullsize} & boolean & If set, the statusbar will waste
+--                              space instead of adapting to layout. \\
+--   \var{systray} & boolaen & Swallow (KDE protocol) systray icons. \\
+-- \end{tabularx}
+--
 function mod_statusbar.create(param)
     local scr=ioncore.find_screen_id(param.screen or 0)
     if not scr then
index 261560c12889e4783d8cd1854cb723d591e74c1b..e4adc770a9d6c4707d123754023915e66acb3a2b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -553,9 +550,9 @@ static WRegion *statusbar_attach_ph(WStatusBar *sb, int flags,
 static WPHolder *statusbar_prepare_manage(WStatusBar *sb, 
                                           const WClientWin *cwin,
                                           const WManageParams *param,
-                                          int redir)
+                                          int priority)
 {
-    if(redir==MANAGE_REDIR_STRICT_YES)
+    if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW))
         return NULL;
     
     return (WPHolder*)create_basicpholder((WRegion*)sb, 
@@ -664,7 +661,7 @@ WPHolder *statusbar_prepare_manage_transient(WStatusBar *sb,
     
     if(mgr!=NULL)
         return region_prepare_manage(mgr, cwin, param, 
-                                     MANAGE_REDIR_PREFER_NO);
+                                     MANAGE_PRIORITY_NONE);
     else
         return NULL;
 }
@@ -1038,7 +1035,8 @@ bool statusbar_set_systray(WStatusBar *sb, int sp)
 
 /*EXTL_DOC
  * Enable or disable use of \var{sb} as systray.
- * The parameter \var{how} can be one of (set/unset/toggle). 
+ * The parameter \var{how} can be one of 
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
  * Resulting state is returned.
  */
 EXTL_EXPORT_AS(WStatusBar, set_systray)
@@ -1051,7 +1049,7 @@ bool statusbar_set_systray_extl(WStatusBar *sb, const char *how)
 /*EXTL_DOC
  * Is \var{sb} used as a systray?
  */
-EXTL_EXPORT_MEMBER
+EXTL_EXPORT_AS(WStatusBar, is_systray)
 bool statusbar_is_systray_extl(WStatusBar *sb)
 {
     return sb->systray_enabled;
index 8392f166a589d231f8410020aa29022abc997ce4..8c1cec0f7377013a04a43cddd89f62a74333cc6b 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_STATUSBAR_STATUSBAR_H
index 47878700806c2fd6a3e6f87860436dfa40df6024..36c5e2627a3c02e5503aad33c27808e57b2dcf31 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/map.h>
index 08bb4464a15cce955918cf4733814048de9b8944..ade0cf5653069fab916c21245bc74c9c65442e2f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_MAIN_H
index 6ec45e440bf91c166e3f4728615a6b703c691835..75570e04406aa0d7c393148474856f4c967bf6d2 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/objp.h>
index 480e02d052fe8fc7d1cce81deba8e17cf806fc54..4321d3c26d8b11cd1a58ad0e2757f074fe4f9f5f 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index fe06f3efca66afa4e8a3f983d31c639e45cf1ad8..8aa8b7cd490445e3735c93df47cd8a153e05d31a 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_PANEWS_PANEHANDLE_H
index 07de5f47d7db138837dec53db8c83732c41cecdd..7e45806830e4c285415ab32e31eb05a3a0582055 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <ioncore/common.h>
@@ -72,16 +69,14 @@ static bool placement_mrsh_extl(ExtlFn fn, WTilingPlacementParams *param)
 
 
 WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin,
-                               const WManageParams *mp, int redir)
+                                const WManageParams *mp, int priority)
 {
+    int cpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_NORMAL);
     WRegion *target=NULL;
     WTilingPlacementParams param;
     WPHolder *ph;
     bool ret;
-
-    if(redir==MANAGE_REDIR_STRICT_NO)
-        return NULL;
-
+    
     param.ws=ws;
     param.reg=(WRegion*)cwin;
     param.mp=mp;
@@ -95,7 +90,7 @@ WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin,
         
         target=(WRegion*)param.res_frame;
         
-        ph=region_prepare_manage(target, cwin, mp, redir);
+        ph=region_prepare_manage(target, cwin, mp, cpriority);
         if(ph!=NULL)
             return ph;
     }
@@ -108,6 +103,6 @@ WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin,
         return NULL;
     }
     
-    return region_prepare_manage(target, cwin, mp, redir);
+    return region_prepare_manage(target, cwin, mp, cpriority);
 }
 
index a61f892d7e76eb36fa958fd8794e4e853ea141ec..f9d9338e1ee93cfda1b0da3208313c0b77ede785 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_PLACEMENT_H
index 352ba412147bb8f27da9bfe8c20536354cd9facb..ac6175cc363b2f9c1b382681bd7835f67cc4fc01 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <libtu/minmax.h>
index 4f6ca592742f9478269b2ec21dcaf3ec60913f7c..b2b915948f15dbdebad8c7f99c1159e201b0adcf 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_SPLIT_STDISP_H
index 381bbb3ea4e2d499c9b066a9bd278792a6475884..d05cc587153731cb46dd95a212756a4ac003c041 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <limits.h>
@@ -1341,6 +1338,11 @@ WSplit *split_current_todir(WSplit *node, WPrimn hprimn, WPrimn vprimn,
 }
 
 
+/* Note: both hprimn and vprimn are inverted when descending.  Therefore
+ * one should be either PRIMN_NONE or PRIMN_ANY for sensible geometric 
+ * navigation. (Both are PRIMN_TL or PRIMN_BR for pseudo-linear 
+ * next/previous navigation.)
+ */
 WSplit *splitsplit_nextto(WSplitSplit *node, WSplit *child,
                           WPrimn hprimn, WPrimn vprimn, 
                           WSplitFilter *filter)
@@ -1348,26 +1350,21 @@ WSplit *splitsplit_nextto(WSplitSplit *node, WSplit *child,
     WPrimn primn=(node->dir==SPLIT_HORIZONTAL ? hprimn : vprimn);
     WSplit *split=NULL, *nnode=NULL;
     
-    if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY)){
+    if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY))
         split=node->br;
-        primn=PRIMN_TL;
-    }else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY)){
+    else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY))
         split=node->tl;
-        primn=PRIMN_BR;
-    }
     
     if(split!=NULL){
-        if(node->dir==SPLIT_HORIZONTAL){
-            hprimn=primn;
-            vprimn=primn_none2any(vprimn);
-        }else{
-            vprimn=primn;
-            hprimn=primn_none2any(vprimn);
-        }
-        
-        nnode=split_current_todir(split, hprimn, vprimn, filter);
+        nnode=split_current_todir(split, 
+                                  primn_none2any(primn_invert(hprimn)),
+                                  primn_none2any(primn_invert(vprimn)),
+                                  filter);
     }
-   
+    
+    if(nnode==NULL)
+        nnode=split_nextto((WSplit*)node, hprimn, vprimn, filter);
+        
     return nnode;
 }
 
@@ -1818,8 +1815,8 @@ WSplit *splitsplit_br(WSplitSplit *split)
 }
 
 /*EXTL_DOC
- * Returns the direction of \var{split}; either ''vertical'' or
- * ''horizontal''.
+ * Returns the direction of \var{split}; either \codestr{vertical} or
+ * \codestr{horizontal}.
  */
 EXTL_SAFE
 EXTL_EXPORT_MEMBER
index 10a0e5fb7730c2e0d8455a5d25e47b509c5a3b1b..332b92c7e040c5135c2cdcb03b1847155b15c502 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_SPLIT_H
index ff71afd4631cf538ccf1fcecb782edcfc9ea808b..d746061e14ad858d637d8999c484fc08e7e5ba29 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
index 8d51b595991f9910a5e2788f7c612e3f370f6dee..270aed08822f4047b99214f8d2c2fd8d2fd933a6 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_SPLITFLOAT_H
index bbefef74855029cbab2a722fed77d5e87d29b6dc..6fec3723b095675a06c429a934a2ce056375f7a6 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <string.h>
@@ -262,25 +259,6 @@ Window tiling_xwindow(const WTiling *ws)
 }
 
 
-WPHolder *tiling_prepare_manage_transient(WTiling *ws,
-                                          const WClientWin *transient,
-                                          const WManageParams *param,
-                                          int unused)
-{
-    /* Transient manager searches should not cross tilings unless
-     * explicitly floated.
-     */
-    if(extl_table_is_bool_set(transient->proptab, "float")){
-        return region_prepare_manage_transient_default((WRegion*)ws,
-                                                       transient,
-                                                       param,
-                                                       unused);
-    }else{
-         return NULL;
-    }
-}
-    
-
 /*}}}*/
 
 
@@ -1021,9 +999,10 @@ static WFrame *tiling_do_split(WTiling *ws, WSplit *node,
 
 
 /*EXTL_DOC
- * Create a new frame on \var{ws} above/below/left of/right of
- * \var{node} as indicated by \var{dirstr}. If \var{dirstr} is 
- * prefixed with ''floating:'' a floating split is created.
+ * Create a new frame on \var{ws} \codestr{above}, \codestr{below}
+ * \codestr{left} of, or \codestr{right} of \var{node} as indicated
+ *  by \var{dirstr}. If \var{dirstr} is  prefixed with 
+ * \codestr{floating:} a floating split is created.
  */
 EXTL_EXPORT_MEMBER
 WFrame *tiling_split(WTiling *ws, WSplit *node, const char *dirstr)
@@ -1049,11 +1028,12 @@ WFrame *tiling_split_top(WTiling *ws, const char *dirstr)
 
 /*EXTL_DOC
  * Split \var{frame} creating a new frame to direction \var{dirstr}
- * (one of ''left'', ''right'', ''top'' or ''bottom'') of \var{frame}.
+ * (one of \codestr{left}, \codestr{right}, \codestr{top} or 
+ * \codestr{bottom}) of \var{frame}.
  * If \var{attach_current} is set, the region currently displayed in
  * \var{frame}, if any, is moved to thenew frame.
- * If \var{dirstr} is prefixed with ''floating:'' a floating split is
- * created.
+ * If \var{dirstr} is prefixed with \codestr{floating:}, a floating
+ * split is created.
  */
 EXTL_EXPORT_MEMBER
 WFrame *tiling_split_at(WTiling *ws, WFrame *frame, const char *dirstr, 
@@ -1177,7 +1157,8 @@ WSplit *tiling_split_tree(WTiling *ws)
 
 /*EXTL_DOC
  * Return the most previously active region next to \var{reg} in
- * direction \var{dirstr} (left/right/up/down). The region \var{reg}
+ * direction \var{dirstr} (\codestr{left}, \codestr{right}, \codestr{up},
+ * or \codestr{down}). The region \var{reg}
  * must be managed by \var{ws}. If \var{any} is not set, the status display
  * is not considered.
  */
@@ -1198,8 +1179,8 @@ WRegion *tiling_nextto(WTiling *ws, WRegion *reg, const char *dirstr,
 /*EXTL_DOC
  * Return the most previously active region on \var{ws} with no
  * other regions next to it in  direction \var{dirstr} 
- * (left/right/up/down). If \var{any} is not set, the status 
- * display is not considered.
+ * (\codestr{left}, \codestr{right}, \codestr{up}, or \codestr{down}). 
+ * If \var{any} is not set, the status display is not considered.
  */
 EXTL_SAFE
 EXTL_EXPORT_MEMBER
@@ -1375,8 +1356,8 @@ WSplitSplit *tiling_set_floating(WTiling *ws, WSplitSplit *split, int sp)
 
 /*EXTL_DOC
  * Toggle floating of a split's sides at \var{split} as indicated by the 
- * parameter \var{how} (set/unset/toggle). A split of the appropriate is 
- * returned, if there was a change.
+ * parameter \var{how} (\codestr{set}, \codestr{unset}, or \codestr{toggle}).
+ * A split of the appropriate is returned, if there was a change.
  */
 EXTL_EXPORT_AS(WTiling, set_floating)
 WSplitSplit *tiling_set_floating_extl(WTiling *ws, WSplitSplit *split, 
@@ -1390,9 +1371,10 @@ WSplitSplit *tiling_set_floating_extl(WTiling *ws, WSplitSplit *split,
 
 /*EXTL_DOC
  * Toggle floating of the sides of a split containin \var{reg} as indicated 
- * by the parameters \var{how} (set/unset/toggle) and \var{dirstr}
- * (left/right/up/down/any). The new status is returned (and \code{false}
- * also on error).
+ * by the parameters \var{how} (\codestr{set}, \codestr{unset}, or 
+ * \codestr{toggle}) and \var{dirstr} (\codestr{left}, \codestr{right}, 
+ * \codestr{up}, or \codestr{down}). The new status is returned 
+ * (and \code{false} also on error).
  */
 EXTL_EXPORT_AS(WTiling, set_floating_at)
 bool tiling_set_floating_at_extl(WTiling *ws, WRegion *reg, const char *how,
@@ -1771,9 +1753,6 @@ static DynFunTab tiling_dynfuntab[]={
     {(DynFun*)region_xwindow,
      (DynFun*)tiling_xwindow},
     
-    {(DynFun*)region_prepare_manage_transient,
-     (DynFun*)tiling_prepare_manage_transient},
-     
     END_DYNFUNTAB
 };
 
index 31abe91527ef53d634ed6972eb08f3acb8eee918..26737ab77fa9933d44cec53778c0264376e443f2 100644 (file)
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #ifndef ION_MOD_TILING_TILING_H
index 433998778b675f2ca58c6b911f8868738661efe0..b36b752efa8e96ecc9466bd7ff4dfbd2e9c9e5b6 100644 (file)
@@ -3,8 +3,8 @@
 ##
 
 MODULE_LIST = mod_tiling mod_query mod_menu \
-             mod_dock mod_sp mod_sm de \
-             mod_mgmtmode mod_statusbar
+             mod_dock mod_sp mod_sm mod_statusbar \
+             de
 
 # Modules to -dlpreload into pwm if statically linking.
 
index 23397381d2b27277af5936816afc511fe775e860..2db7db1d0d2e37877ca6becd7ed8afbeb439bbaa 100644 (file)
@@ -13,7 +13,7 @@ MSGMERGE = msgmerge
 MSGCAT = msgcat
 LXGETTEXT = lua-xgettext
 
-TRANSLATIONS := fi cs de ru
+TRANSLATIONS := fi cs
 MO_FILES := $(patsubst %,%.mo, $(TRANSLATIONS))
 PO_FILES := $(patsubst %,%.po, $(TRANSLATIONS))
 
@@ -89,8 +89,3 @@ update_fi: pot
 update_cs: pot
        $(MSGMERGE) -U cs.po $(POTFILE)
 
-update_ru: pot
-       $(MSGMERGE) -U ru.po $(POTFILE)
-
-update_de: pot
-       $(MSGMERGE) -U de.po $(POTFILE)
index 41235cf8fc740fb786d0daab44105e607581075a..8debea9997d11e754f14ca69993b6cc53bc55d34 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,7 +1,7 @@
 #
 # Czech language translations for Ion3.
 #
-# Copyright (c) Miroslav Kure 2004,2005,2006.
+# Copyright (c) Miroslav Kure 2004,2005,2006,2007.
 #
 # This file is distributed under the same license as the Ion3 package.
 #
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ion3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-12 12:07+0100\n"
-"PO-Revision-Date: 2006-11-12 12:16+0100\n"
+"POT-Creation-Date: 2007-04-22 15:41+0200\n"
+"PO-Revision-Date: 2007-04-22 15:42+0200\n"
 "Last-Translator: Miroslav Kure <kurem at debian.cz>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -92,7 +92,7 @@ msgid "Time request from X server failed."
 msgstr "Èasový po¾adavek od X serveru selhal."
 
 #
-#: ../ioncore/exec.c:177
+#: ../ioncore/exec.c:186
 msgid "Not saving state: running under session manager."
 msgstr "Neukládám stav: bì¾ím pod správcem sezení."
 
@@ -147,36 +147,32 @@ msgstr "Nebyl zad
 msgid "Invalid arguments."
 msgstr "Neplatné argumenty."
 
-#: ../ioncore/screen.c:298
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:481
-msgid "Only workspace may not be destroyed."
-msgstr "Poslední pracovní plocha nemù¾e být zru¹ena."
+#: ../ioncore/screen.c:385
+msgid "Only workspace may not be destroyed/detached."
+msgstr "Jediná pracovní plocha nemù¾e být zru¹ena."
 
-#: ../ioncore/screen.c:489
+#: ../ioncore/screen.c:396
 msgid "Screens may not be destroyed."
 msgstr "Obrazovky nesmí být znièeny."
 
-#: ../ioncore/screen.c:525
+#: ../ioncore/screen.c:432
 msgid "Invalid offset."
 msgstr "Neplatné odsazení"
 
-#: ../ioncore/screen.c:568
+#: ../ioncore/screen.c:471
 #, c-format
 msgid "Unable to create a workspace on screen %d."
 msgstr "Nemohu vytvoøit pracovní plochu na obrazovce %d."
 
-#: ../ioncore/sizehint.c:151
+#: ../ioncore/sizehint.c:157
 msgid "Invalid client-supplied width/height increment."
 msgstr "Klient zadal neplatný pøírùstek ¹íøky/vý¹ky."
 
-#: ../ioncore/sizehint.c:159
+#: ../ioncore/sizehint.c:165
 msgid "Invalid client-supplied aspect-ratio."
 msgstr "Klient zadal neplatný pomìr stran."
 
-#: ../ioncore/ioncore.c:74
+#: ../ioncore/ioncore.c:78
 msgid ""
 "This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU Lesser General Public\n"
@@ -196,16 +192,16 @@ msgstr ""
 "JAKÉKOLIV ZÁRUKY. Pro více podrobností se podívejte do licence GNU\n"
 "Lesser General Public License.\n"
 
-#: ../ioncore/ioncore.c:155
+#: ../ioncore/ioncore.c:159
 msgid "No encoding given in LC_CTYPE."
 msgstr "V LC_CTYPE není zadáno kódování."
 
-#: ../ioncore/ioncore.c:437
+#: ../ioncore/ioncore.c:470
 #, c-format
 msgid "Could not connect to X display '%s'"
 msgstr "Nemohu se pøipojit na X displej \"%s\""
 
-#: ../ioncore/ioncore.c:489
+#: ../ioncore/ioncore.c:522
 msgid "Could not find a screen to manage."
 msgstr "Nemohu najít obrazovku, kterou bych mohl spravovat."
 
@@ -225,12 +221,12 @@ msgstr "Vstupn
 msgid "Failed to create input context."
 msgstr "Selhalo vytvoøení vstupního kontextu."
 
-#: ../ioncore/clientwin.c:411
+#: ../ioncore/clientwin.c:379
 #, c-format
 msgid "The transient_for hint for \"%s\" points to itself."
 msgstr "Nápovìda transient_for pro \"%s\" ukazuje sama na sebe."
 
-#: ../ioncore/clientwin.c:415
+#: ../ioncore/clientwin.c:383
 #, c-format
 msgid ""
 "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
@@ -239,36 +235,36 @@ msgstr ""
 "Klientské okno \"%s\" má poru¹enou nápovìdu transient_for. (Schizofrenie "
 "více rodièù \"Extended WM hints\"?)"
 
-#: ../ioncore/clientwin.c:420
+#: ../ioncore/clientwin.c:388
 #, c-format
 msgid "The transient_for window for \"%s\" is not on the same screen."
 msgstr "Okno transient_for pro \"%s\" není na stejné obrazovce."
 
-#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527
-#: ../ioncore/clientwin.c:1300
+#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496
+#: ../ioncore/clientwin.c:1292
 #, c-format
 msgid "Window %#x disappeared."
 msgstr "Okno %#x zmizelo."
 
-#: ../ioncore/clientwin.c:547
+#: ../ioncore/clientwin.c:516
 msgid "Unable to find a matching root window!"
 msgstr "Nemohu najít odpovídající koøenové okno!"
 
-#: ../ioncore/clientwin.c:582
+#: ../ioncore/clientwin.c:555
 #, c-format
 msgid "Unable to manage client window %#x."
 msgstr "Nemohu spravovat klientské okno %#x."
 
-#: ../ioncore/clientwin.c:633
+#: ../ioncore/clientwin.c:604
 msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
 msgstr "Zmìny vlastnosti WM_TRANSIENT_FOR nejsou podporovány."
 
 #
-#: ../ioncore/clientwin.c:809
+#: ../ioncore/clientwin.c:776
 msgid "Client does not support the WM_DELETE protocol."
 msgstr "Klient nepodporuje protokol WM_DELETE."
 
-#: ../ioncore/clientwin.c:1306
+#: ../ioncore/clientwin.c:1298
 msgid "Saved client window does not want to be managed."
 msgstr "Ulo¾ené klientské okno nechce být spravováno."
 
@@ -277,74 +273,65 @@ msgstr "Ulo
 msgid "Unable to store colourmap watch info."
 msgstr "Nemohu ulo¾it informace o barevné mapì."
 
-#: ../ioncore/region.c:46
+#: ../ioncore/region.c:47
 msgid "Creating region with negative width or height!"
 msgstr "Vytváøím oblast se zápornou ¹íøkou nebo vý¹kou!"
 
-#: ../ioncore/region.c:94
+#: ../ioncore/region.c:95
 #, c-format
 msgid "Destroying object \"%s\" with client windows as children."
 msgstr "Nièím objekt \"%s\" spoleènì s klientskými okny jako dìtmi."
 
-#: ../ioncore/region.c:395
+#: ../ioncore/region.c:434
+#, c-format
+msgid "Can not destroy %s: contains client windows."
+msgstr "Nemohu znièit %s: obsahuje klientská okna."
+
+#: ../ioncore/region.c:435
+msgid "(unknown)"
+msgstr "(neznámý)"
+
+#: ../ioncore/region.c:498
 msgid "Failed to rescue some client windows - not closing."
 msgstr "Záchrana nìkterých klientských oken selhala - nezavírám."
 
-#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46
-msgid "Unable to reparent."
-msgstr "Nemohu zmìnit rodièe."
-
-#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282
+#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280
 #, c-format
 msgid "Attempt to make region %s manage its ancestor %s."
 msgstr "Pokus, aby oblast %s spravovala svého pøedka %s."
 
-#: ../ioncore/manage.c:77
+#: ../ioncore/attach.c:83
+msgid "Unable to reparent."
+msgstr "Nemohu zmìnit rodièe."
+
+#: ../ioncore/attach.c:92
+msgid "Unexpected attach error: trying to recover by attaching to screen."
+msgstr "Neoèekávaná chyba pøipojení: zkou¹ím obnovit pøipojením k obrazovce."
+
+#: ../ioncore/attach.c:111
+msgid "Failed recovery."
+msgstr "Obnovení selhalo."
+
+#: ../ioncore/manage.c:193
 msgid "Unable to find a screen for a new client window."
 msgstr "Nemohu najít obrazovku pro nové klientské okno."
 
-#: ../ioncore/rootwin.c:223
+#: ../ioncore/rootwin.c:218
 #, c-format
 msgid "Unable to redirect root window events for screen %d."
 msgstr "Nemohu pøesmìrovat události koøenového okna na obrazovce %d."
 
-#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky."
-
-#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351
-msgid "Xinerama sanity check failed; zero size detected."
-msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost."
-
-#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken."
-
-#: ../ioncore/rootwin.c:393
-msgid "Error retrieving Xinerama information."
-msgstr "Chyba pøi získávání informaci z Xineramy."
-
-#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Nemohu nastavit obrazovku Xineramy %d."
-
-#: ../ioncore/rootwin.c:464
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "Nemohu nastavit X obrazovku %d."
-
-#: ../ioncore/names.c:90
+#: ../ioncore/names.c:91
 #, c-format
 msgid "Corrupt instance number %s."
 msgstr "Poru¹ená instance èíslo %s."
 
-#: ../ioncore/saveload.c:125
+#: ../ioncore/saveload.c:98
 #, c-format
 msgid "Unknown class \"%s\", cannot create region."
 msgstr "Neznámá tøída \"%s\", nemohu vytvoøit oblast."
 
-#: ../ioncore/saveload.c:205
+#: ../ioncore/saveload.c:202
 #, c-format
 msgid ""
 "There were errors loading layout. Backing up current layout savefile as\n"
@@ -362,46 +349,46 @@ msgstr ""
 "Pøedtím nezapomeòte opravit konfiguraèní soubory, které zpùsobily tyto\n"
 "problémy. (Mo¾ná chybìjící modul?)"
 
-#: ../ioncore/saveload.c:248
+#: ../ioncore/saveload.c:253
 msgid "Unable to get file for layout backup."
 msgstr "Nemohu získat soubor pro zálohu rozlo¾ení."
 
-#: ../ioncore/saveload.c:252
+#: ../ioncore/saveload.c:257
 #, c-format
 msgid "Backup file %s already exists."
 msgstr "Zálo¾ní soubor %s ji¾ existuje."
 
-#: ../ioncore/saveload.c:258
+#: ../ioncore/saveload.c:263
 msgid "Failed backup."
 msgstr "Selhala záloha."
 
 #
-#: ../ioncore/saveload.c:263
+#: ../ioncore/saveload.c:268
 msgid "Unable to initialise layout on any screen."
 msgstr "Na ¾ádné obrazovce nemohu inicializovat rozlo¾ení."
 
-#: ../ioncore/saveload.c:283
+#: ../ioncore/saveload.c:295
 #, c-format
 msgid "Unable to get configuration for screen %d."
 msgstr "Nemohu získat nastavení pro obrazovku %d."
 
-#: ../ioncore/saveload.c:296
+#: ../ioncore/saveload.c:308
 msgid "Unable to save layout."
 msgstr "Nemohu ulo¾it rozlo¾ení."
 
-#: ../ioncore/conf.c:143
+#: ../ioncore/conf.c:235
 msgid "User directory can not be set."
 msgstr "U¾ivatelský adresáø nemù¾e být nastaven."
 
-#: ../ioncore/conf.c:217
+#: ../ioncore/conf.c:309
 msgid "Some bindmaps were empty, loading ioncore_efbb."
 msgstr "Nìkteré tabulky kláves jsou prázdné, nahrávám ioncore_efbb."
 
-#: ../ioncore/fullscreen.c:98
+#: ../ioncore/fullscreen.c:49
 msgid "Failed to enter full screen mode."
 msgstr "Selhal pøechod do celoobrazovkového re¾imu."
 
-#: ../ioncore/fullscreen.c:120
+#: ../ioncore/fullscreen.c:83
 msgid ""
 "Failed to return from full screen mode; remaining manager or parent from "
 "previous location refused to manage us."
@@ -409,44 +396,40 @@ msgstr ""
 "Návrat z celoobrazovkového re¾imu se nezdaøil; zbývající správce nebo rodiè "
 "z pøedchozího umístìní nás nechce spravovat."
 
-#: ../ioncore/mplex.c:172
-msgid "Refusing to destroy - not empty."
-msgstr "Odmítám zru¹it - není prázdné."
-
 #
-#: ../ioncore/mplex.c:1678
+#: ../ioncore/mplex.c:1685
 msgid "Invalid position setting."
 msgstr "Neplatné nastavení pozice."
 
 #
-#: ../ioncore/mplex.c:1718
+#: ../ioncore/mplex.c:1725
 msgid "Invalid action setting."
 msgstr "Neplatné nastavení akce."
 
-#: ../ioncore/gr.c:119
+#: ../ioncore/gr.c:120
 #, c-format
 msgid "Drawing engine %s is not registered!"
 msgstr "Vykreslovací jednotka %s není registrována!"
 
-#: ../ioncore/gr.c:138
+#: ../ioncore/gr.c:139
 #, c-format
 msgid "Unable to find brush for style '%s'."
 msgstr "Nemohu najít ¹tìtec pro styl \"%s\"."
 
-#: ../ioncore/gr.c:408
+#: ../ioncore/gr.c:646
 msgid "No drawing engines loaded, trying \"de\"."
 msgstr "Nebyly nahrány ¾ádné vykreslovací jednotky, zkou¹ím \"%s\"."
 
-#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96
+#: ../ioncore/frame-draw.c:314
+msgid "<empty frame>"
+msgstr "<prázdný rám>"
+
+#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92
 #, c-format
 msgid "Error reparenting %s."
 msgstr "Chyba zmìny rodièe %s."
 
-#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668
-msgid "Workspace not empty - refusing to destroy."
-msgstr "Pracovní plocha není prázdná - odmítám zru¹it."
-
-#: ../ioncore/group.c:680
+#: ../ioncore/group.c:711
 msgid "'bottom' already set."
 msgstr "'bottom' je ji¾ nastaven."
 
@@ -458,100 +441,109 @@ msgstr "Neplatn
 msgid "Invalid direction parameter."
 msgstr "Neplatný parametr smìru."
 
-#: ../ioncore/group-ws.c:67
+#: ../ioncore/group-ws.c:51
 #, c-format
 msgid "Unknown placement method \"%s\"."
 msgstr "Neznámý zpùsob umístìní \"%s\"."
 
+#: ../ioncore/detach.c:176
+msgid "Failed to reattach."
+msgstr "Znovupøipojení selhalo."
+
+#: ../ioncore/screen-notify.c:190
+msgid "act: "
+msgstr "akt: "
+
 #
-#: ../mod_tiling/tiling.c:77
+#: ../mod_tiling/tiling.c:73
 msgid "Split not on workspace."
 msgstr "Rozdìlení není na pracovní plo¹e."
 
-#: ../mod_tiling/tiling.c:373
+#: ../mod_tiling/tiling.c:348
 msgid "Unable to create a node for status display."
 msgstr "Nemohu vytvoøit uzel pro stavový øádek."
 
-#: ../mod_tiling/tiling.c:386
+#: ../mod_tiling/tiling.c:361
 msgid "Unable to create new split for status display."
 msgstr "Nemohu vytvoøit nové rozdìlení pro stavový øádek."
 
-#: ../mod_tiling/tiling.c:937
+#: ../mod_tiling/tiling.c:710
+msgid "Tiling in useless state."
+msgstr "Dl¾dice v neu¾iteèném stavu."
+
+#: ../mod_tiling/tiling.c:924
 msgid "Invalid direction"
 msgstr "Neplatný smìr"
 
 #
-#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018
+#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018
 msgid "Invalid node."
 msgstr "Neplatný uzel."
 
 #
-#: ../mod_tiling/tiling.c:989
+#: ../mod_tiling/tiling.c:976
 msgid "Unable to split."
 msgstr "Nemohu rozdìlit."
 
-#: ../mod_tiling/tiling.c:1092
-msgid "Nil frame."
-msgstr "Prázdný rám."
-
-#: ../mod_tiling/tiling.c:1097
-msgid "The frame is not managed by the workspace."
-msgstr "Rám není spravován pracovní plochou."
+#: ../mod_tiling/tiling.c:1090
+msgid ""
+"Unable to unsplit: Could not move client windows elsewhere within the tiling."
+msgstr "Nemohu slouèit: Nemohu pøesunout klientské okno nìkam do dla¾dic."
 
-#: ../mod_tiling/tiling.c:1196
+#: ../mod_tiling/tiling.c:1207
 msgid "Nil parameter."
 msgstr "Prázdný parametr."
 
-#: ../mod_tiling/tiling.c:1201
+#: ../mod_tiling/tiling.c:1212
 msgid "Manager doesn't match."
 msgstr "Správce se neshoduje."
 
-#: ../mod_tiling/tiling.c:1238
+#: ../mod_tiling/tiling.c:1249
 msgid "The status display is not a valid parameter for this routine."
 msgstr "Stavový displej není v této rutinì platným parametrem."
 
-#: ../mod_tiling/tiling.c:1329
+#: ../mod_tiling/tiling.c:1340
 msgid "Refusing to float split directly containing the status display."
 msgstr "Odmítám rozdìlit pøímo prvek obsahující stavový displej."
 
-#: ../mod_tiling/tiling.c:1392
+#: ../mod_tiling/tiling.c:1403
 msgid "No suitable split here."
 msgstr "®ádné vhodné rozdìlení."
 
 #
-#: ../mod_tiling/tiling.c:1428
+#: ../mod_tiling/tiling.c:1439
 msgid "Could not get split tree."
 msgstr "Nemohu získat strom rozdìlení"
 
-#: ../mod_tiling/tiling.c:1449
+#: ../mod_tiling/tiling.c:1460
 msgid "Workspace already has a status display node."
 msgstr "Pracovní plocha ji¾ obsahuje stavový displej."
 
 #
-#: ../mod_tiling/tiling.c:1487
+#: ../mod_tiling/tiling.c:1498
 msgid "Missing region parameters."
 msgstr "Chybìjící parametry oblasti."
 
-#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780
+#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780
 msgid "Invalid direction."
 msgstr "Neplatný smìr."
 
 #
-#: ../mod_tiling/tiling.c:1606
+#: ../mod_tiling/tiling.c:1617
 msgid "No split type given."
 msgstr "Nebyl zadán typ rozdìlení."
 
-#: ../mod_tiling/tiling.c:1619
+#: ../mod_tiling/tiling.c:1630
 msgid "Unknown split type."
 msgstr "Neznámý typ rozdìlení."
 
 #
 #
-#: ../mod_tiling/tiling.c:1659
+#: ../mod_tiling/tiling.c:1670
 msgid "The workspace is empty."
 msgstr "Pracovní plocha je prázdná."
 
-#: ../mod_tiling/placement.c:106
+#: ../mod_tiling/placement.c:104
 #, c-format
 msgid ""
 "Ooops... could not find a region to attach client window to on workspace %s."
@@ -569,15 +561,15 @@ msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
 msgstr "REGION_RQGEOM_TRYONLY není stavovým displejem podporován."
 
 #
-#: ../mod_tiling/split.c:1082
+#: ../mod_tiling/split.c:1083
 msgid "Splitting the status display is not allowed."
 msgstr "Rozdìlení stavového displeje není povoleno."
 
-#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903
+#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903
 msgid "Unable to split: not enough free space."
 msgstr "Nelze rozdìlit: nedostatek volného místa."
 
-#: ../mod_tiling/split.c:1864
+#: ../mod_tiling/split.c:1865
 #, c-format
 msgid "Unable to get configuration for %s."
 msgstr "Nemohu získat nastavení pro %s."
@@ -590,33 +582,33 @@ msgstr "Stavov
 msgid "Status display badly located in split tree."
 msgstr "Stavový øádek je ve stromu rozdìlení umístìn na ¹patném místì."
 
-#: ../mod_tiling/ops.c:28
-msgid "Already detached"
-msgstr "Ji¾ je odpojen"
-
-#: ../mod_tiling/ops.c:142
+#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120
 msgid "Not member of a group"
 msgstr "Není èlenem skupiny"
 
-#: ../mod_tiling/ops.c:147
+#: ../mod_tiling/ops.c:77
 msgid "Manager group already has bottom"
-msgstr "Øídící skupina ji¾ je na dnì"
+msgstr "Øídící skupina ji¾ má dno"
+
+#: ../mod_tiling/ops.c:154
+msgid "Unable to move a region from tiling to group."
+msgstr "Nemohu pøesunout regiion z dlá¾dìní do skupiny."
 
-#: ../mod_query/wedln.c:777
+#: ../mod_query/wedln.c:813
 msgid "history"
 msgstr "historie"
 
-#: ../mod_query/fwarn.c:34
+#: ../mod_query/fwarn.c:35
 msgid "Error:\n"
 msgstr "Chyba:\n"
 
 #
-#: ../mod_menu/menu.c:537
+#: ../mod_menu/menu.c:601
 msgid "Empty menu."
 msgstr "Prázdné menu."
 
 #
-#: ../mod_sm/sm.c:110
+#: ../mod_sm/sm.c:111
 msgid "Failed to set session directory."
 msgstr "Selhalo nastavení adresáøe s relací."
 
@@ -646,7 +638,7 @@ msgstr "Spr
 msgid "Unable to connect to the session manager."
 msgstr "Nemohu se pøipojit ke správci sezení."
 
-#: ../mod_sp/main.c:85
+#: ../mod_sp/main.c:126
 msgid "Unable to create scratchpad."
 msgstr "Nemohu vytvoøit poznámkový blok."
 
@@ -654,53 +646,54 @@ msgstr "Nemohu vytvo
 msgid "reading a pipe"
 msgstr "ètu rouru"
 
-#: ../mod_statusbar/main.c:97
-msgid "ion-statusd launch timeout."
-msgstr "Èas spou¹tìní ion-statusd vypr¹el."
-
-#: ../mod_statusbar/main.c:160
+#: ../mod_statusbar/main.c:159
 msgid "ion-statusd timed out."
 msgstr "Èas ion-statusd vypr¹el."
 
-#: ../mod_statusbar/statusbar.c:1046
+#: ../mod_statusbar/statusbar.c:1081
 #, c-format
 msgid "[ %date || load: %load ] %filler%systray"
 msgstr "[ %date || vytí¾ení: %load ] %filler%systray"
 
-#: ../de/init.c:42
+#: ../de/init.c:68
 #, c-format
 msgid "Border attribute %s sanity check failed."
 msgstr "Selhala kontrola atributu okraje %s."
 
-#: ../de/init.c:65
+#: ../de/init.c:91
 #, c-format
 msgid "Unknown border style \"%s\"."
 msgstr "Neznámý styl okraje \"%s\"."
 
-#: ../de/init.c:97
+#: ../de/init.c:111
+#, c-format
+msgid "Unknown border side configuration \"%s\"."
+msgstr "Neznámé nastavení okraje \"%s\"."
+
+#: ../de/init.c:144
 #, c-format
 msgid "Unable to allocate colour \"%s\"."
 msgstr "Nemohu alokovat barvu \"%s\"."
 
-#: ../de/init.c:160
+#: ../de/init.c:210
 #, c-format
 msgid "Corrupt substyle table %d."
 msgstr "Poru¹ená tabulka stylù %d."
 
-#: ../de/init.c:193
+#: ../de/init.c:243
 #, c-format
 msgid "Unknown text alignment \"%s\"."
 msgstr "Neznámý textový prvek \"%s\"."
 
-#: ../de/init.c:263
+#: ../de/init.c:319
 #, c-format
 msgid "'based_on' for %s points back to the style itself."
 msgstr "Èást 'based_on' stylu %s ukazuje sama na sebe."
 
-#: ../de/init.c:266
+#: ../de/init.c:322
 #, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "Neznámý základní styl \"%s\"."
+msgid "Unknown base style. \"%s\""
+msgstr "Neznámý základní styl. \"%s\""
 
 #: ../de/font.c:47
 #, c-format
@@ -722,8 +715,8 @@ msgstr "Nahr
 
 #: ../de/style.c:315
 #, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "Styl %s se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!"
+msgid "Style is still in use [%d] but the module is being unloaded!"
+msgstr "Styl se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!"
 
 #: ../ion/ion.c:42 ../pwm/pwm.c:42
 msgid "X display to use"
@@ -738,52 +731,44 @@ msgid "Add directory to search path"
 msgstr "Pøidá adresáø do prohledávané cesty"
 
 #: ../ion/ion.c:51 ../pwm/pwm.c:51
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr "Spravuje pouze implicitní koøenové okno/obrazovku bez Xineramy"
-
-#: ../ion/ion.c:55
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)"
+msgid "Manage default screen only"
+msgstr "Spravuje pouze výchozí obrazovku"
 
-#: ../ion/ion.c:58 ../pwm/pwm.c:58
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Ignorováno: program je sestaven bez podpory Xineramy"
-
-#: ../ion/ion.c:62 ../pwm/pwm.c:62
+#: ../ion/ion.c:54 ../pwm/pwm.c:54
 msgid "Name of session (affects savefiles)"
 msgstr "Jméno sezení (ovlivní místo ulo¾ení)"
 
-#: ../ion/ion.c:65 ../pwm/pwm.c:65
+#: ../ion/ion.c:57 ../pwm/pwm.c:57
 msgid "Session manager client ID"
 msgstr "Klientské ID správce sezení"
 
-#: ../ion/ion.c:68 ../pwm/pwm.c:68
+#: ../ion/ion.c:60 ../pwm/pwm.c:60
 msgid "Do not create startup error log and display it with xmessage."
 msgstr ""
 "Nevytváøet záznam o chybách pøi startu a nezobrazovat jej pomocí xmessage."
 
-#: ../ion/ion.c:72 ../pwm/pwm.c:72
+#: ../ion/ion.c:64 ../pwm/pwm.c:64
 msgid "Show this help"
 msgstr "Zobrazí tuto nápovìdu"
 
-#: ../ion/ion.c:75 ../pwm/pwm.c:75
+#: ../ion/ion.c:67 ../pwm/pwm.c:67
 msgid "Show program version"
 msgstr "Zobrazí verzi programu"
 
-#: ../ion/ion.c:78 ../pwm/pwm.c:78
+#: ../ion/ion.c:70 ../pwm/pwm.c:70
 msgid "Show about text"
 msgstr "Zobrazí nìco o programu"
 
-#: ../ion/ion.c:93
+#: ../ion/ion.c:85
 msgid "Could not get user configuration file directory."
 msgstr "Nemohu získat u¾ivatelùv adresáø s nastavením."
 
-#: ../ion/ion.c:107
+#: ../ion/ion.c:99
 #, c-format
 msgid "%s/welcome.txt"
 msgstr "%s/welcome.cs.txt"
 
-#: ../ion/ion.c:140 ../pwm/pwm.c:87
+#: ../ion/ion.c:132 ../pwm/pwm.c:79
 #, c-format
 msgid ""
 "Usage: %s [options]\n"
@@ -792,28 +777,20 @@ msgstr ""
 "Pou¾ití: %s [volby]\n"
 "\n"
 
-#: ../ion/ion.c:200 ../pwm/pwm.c:150
-msgid "Invalid parameter to -xinerama."
-msgstr "Neplatný parametr pro -xinerama."
-
 #
-#: ../ion/ion.c:219 ../pwm/pwm.c:169
+#: ../ion/ion.c:200 ../pwm/pwm.c:150
 msgid "Invalid command line."
 msgstr "Neplatná pøíkazová øádka."
 
-#: ../ion/ion.c:241
+#: ../ion/ion.c:222
 msgid "Ion startup error log:\n"
 msgstr "Záznam chyb pøi startu Ionu:\n"
 
-#: ../ion/ion.c:252 ../pwm/pwm.c:202
+#: ../ion/ion.c:233 ../pwm/pwm.c:183
 msgid "Refusing to start due to encountered errors."
 msgstr "Odmítám se spustit kvùli zaznamenaným chybám."
 
-#: ../pwm/pwm.c:55
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) "
-
-#: ../pwm/pwm.c:191
+#: ../pwm/pwm.c:172
 msgid "PWM startup error log:\n"
 msgstr "Záznam chyb pøi startu PWM:\n"
 
@@ -927,16 +904,16 @@ msgid ""
 msgstr "Funkce '%s' má víc parametrù, ne¾ lze zpracovat obsluhou v 1. úrovni"
 
 #
-#: ../libextl/luaextl.c:2373
+#: ../libextl/luaextl.c:2347
 msgid "Maximal serialisation depth reached."
 msgstr "Dosa¾ena maximální hloubka serializace."
 
-#: ../libextl/luaextl.c:2394
+#: ../libextl/luaextl.c:2368
 #, c-format
 msgid "Unable to serialise type %s."
 msgstr "Nemohu serializovat typ %s."
 
-#: ../libextl/luaextl.c:2425
+#: ../libextl/luaextl.c:2399
 msgid "-- This file has been generated by Ion. Do not edit.\n"
 msgstr "-- Tento soubor byl vytvoøen Ionem. Neupravujte jej.\n"
 
@@ -949,305 +926,296 @@ msgstr ""
 "Kontrola typu selhala ve druhé úrovni obsluhy volání pro parametr %d "
 "(obdr¾el %s, oèekával %s)."
 
-msgid "Grow-D"
-msgstr "Rùst dolù"
+msgid "Scroll the message or completions up/down."
+msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù."
 
-msgid "Grow-U"
-msgstr "Rùst nahoru"
+msgid "Close the query/message box, not executing bound actions."
+msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.."
 
-msgid "Grow-R"
-msgstr "Rùst vpravo"
+msgid "Close the query and execute bound action."
+msgstr "Zavøe dotaz a spustí svázanou akci."
 
-msgid "Grow-L"
-msgstr "Rùst vlevo"
+msgid "Complete from history"
+msgstr "Doplní z historie."
 
-msgid "Pos-BR"
-msgstr "Pozice PD"
+msgid "Try to complete the entered text or cycle through completions."
+msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi."
 
-msgid "Pos-BL"
-msgstr "Pozice LD"
+#
+msgid "Clear mark/cancel selection."
+msgstr "Sma¾e znaèku/zru¹í výbìr."
 
-msgid "Pos-TR"
-msgstr "Pozice PH"
+#
+msgid "Copy selection."
+msgstr "Zkopíruje výbìr."
 
-msgid "Pos-TL"
-msgstr "Pozice LH"
+#
+msgid "Cut selection."
+msgstr "Vyjme výbìr."
 
-msgid "Toggle floating dock."
-msgstr "Zapne plovoucí dok."
+#
+msgid "Set mark/begin selection."
+msgstr "Nastaví znaèku/zaèátek výbìru."
 
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Vyma¾e buffer pro dopøedné hledání v menu."
+msgid "Paste from the clipboard."
+msgstr "Vlo¾í ze schránky."
 
-msgid "Select next/previous menu entry."
-msgstr "V menu vybere dal¹í/pøedchozí polo¾ku."
+msgid "Select next/previous (matching) history entry."
+msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie."
 
-#
-#
-msgid "Activate current menu entry."
-msgstr "Aktivuje vybranou polo¾ku v menu."
+msgid "Transpose characters."
+msgstr "Transponuje znaky."
 
-msgid "Close the menu."
-msgstr "Zavøe menu."
+msgid "Delete the whole line."
+msgstr "Sma¾e celý øádek."
 
-msgid "New tiling"
-msgstr "Vytvoøit dla¾dice"
+msgid "Delete to end of line."
+msgstr "Sma¾e text do konce øádky."
 
-msgid "Detach"
-msgstr "Odpojit"
+msgid "Delete one word forward/backward."
+msgstr "Sma¾e slovo pøed/za kurzorem."
 
-msgid "Transpose"
-msgstr "Transponovat"
+msgid "Delete previous character."
+msgstr "Sma¾e pøedchozí znak."
 
-msgid "Flip"
-msgstr "Obrátit"
+msgid "Delete next character."
+msgstr "Sma¾e následující znak."
 
-msgid "Split horizontally"
-msgstr "Rozdìlit horizontálnì"
+msgid "Skip one word forward/backward."
+msgstr "Pøeskoèí slovo dopøedu/dozadu."
 
-msgid "Split vertically"
-msgstr "Rozdìlit vertikálnì"
+msgid "Go to end/beginning."
+msgstr "Skoèí na konec/zaèátek."
 
-msgid "At root"
-msgstr "Na koøenu"
+msgid "Move one character forward/backward."
+msgstr "Posune se o znak vpøed/vzad."
 
-msgid "Below"
-msgstr "Dole"
+msgid "Kill"
+msgstr "Ukonèit"
 
-msgid "Above"
-msgstr "Nahoøe"
+msgid "Attach tagged"
+msgstr "Pøipojit oznaèené"
 
-msgid "At right"
-msgstr "Vpravo"
+msgid "Rename"
+msgstr "Pøejmenovat"
 
-msgid "At left"
-msgstr "Vlevo"
+msgid "Close"
+msgstr "Zavøít"
 
-msgid "Float split"
-msgstr "Plovoucí okraj"
+msgid "De/reattach"
+msgstr "Od/pøipojit"
 
-msgid "Destroy frame"
-msgstr "Znièit rám"
+msgid "Toggle tag"
+msgstr "(Od)znaèit"
 
-msgid "Tile frame, if no tiling exists on the workspace"
-msgstr ""
-"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)."
+msgid "Window info"
+msgstr "Informace o oknì"
 
-msgid "Detach window from tiled frame"
-msgstr "Odpojí okno od dla¾dicového rámu"
+msgid "Clear tags"
+msgstr "Vyèistit znaèky"
 
-msgid "Destroy current frame."
-msgstr "Znièí aktuální rám."
+msgid "Exit"
+msgstr "Ukonèit"
 
-msgid "Split current frame horizontally."
-msgstr "Rozdìlí rám horizontálnì."
+msgid "Restart TWM"
+msgstr "Restartovat TWM"
 
-msgid "Go to frame above/below/right/left of current frame."
-msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu."
+msgid "Restart"
+msgstr "Restartovat"
 
-msgid "Split current frame vertically."
-msgstr "Rozdìlí rám vertikálnì."
+msgid "Save"
+msgstr "Ulo¾it"
 
-msgid "Failed to create statusbar."
-msgstr "Selhalo vytvoøení stavového øádku."
+msgid "Session"
+msgstr "Sezení"
 
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek."
+msgid "Styles"
+msgstr "Styly"
 
-msgid "Screen not found."
-msgstr "Obrazovka nebyla nalezna."
+msgid "About Ion"
+msgstr "O Ionu"
 
-msgid "Failed to start ion-statusd."
-msgstr "Selhalo spu¹tìní ion-statusd."
+msgid "Help"
+msgstr "Nápovìda"
 
-msgid "Errors starting ion-statusd:\n"
-msgstr "Chyba pøi startu ion-statusd:\n"
+msgid "Lock screen"
+msgstr "Zamknout obrazovku"
 
-msgid "Could not find %s"
-msgstr "Nemohu najít %s"
+msgid "Terminal"
+msgstr "Terminál"
 
-msgid "ion-statusd quit."
-msgstr "ion-statusd konèí."
+#
+msgid "Run..."
+msgstr "Spustit..."
 
-msgid "Not a directory."
-msgstr "Není adresáøem."
+#
+msgid "Move in specified direction."
+msgstr "Posune se v zadaném smìru."
 
-msgid "Invalid command"
-msgstr "Neplatný pøíkaz"
+msgid "Shrink in specified direction."
+msgstr "Zmen¹uje v zadaném smìru."
 
-msgid "Error in command string: "
-msgstr "Chyba v pøíkazu: "
+#
+msgid "Grow in specified direction."
+msgstr "Roste v zadaném smìru."
 
-msgid "Error compiling guard: %s"
-msgstr "Chyba pøi sestavení strá¾ce: %s"
+msgid "End the resize mode."
+msgstr "Ukonèí re¾im zmìny velikosti."
 
-msgid "Invalid guard %s."
-msgstr "Neplatná ochrana %s."
+msgid "Cancel the resize mode."
+msgstr "Zru¹í re¾im zmìny velikosti."
 
-msgid "Main menu:"
-msgstr "Hlavní menu:"
+msgid "Move the frame."
+msgstr "Pøesune rám."
 
-msgid "Context menu:"
-msgstr "Kontextové menu:"
+msgid "Lower the frame."
+msgstr "Pøesune rám do pozadí"
 
-msgid "Floating frame"
-msgstr "Plovoucí rám"
+#
+msgid "Raise the frame."
+msgstr "Pøesune rám do popøedí."
 
-msgid "Tiled frame"
-msgstr "Dla¾dicový rám"
+msgid "Toggle shade mode"
+msgstr "Pøepne stínový re¾im"
 
-msgid "Tiling"
-msgstr "Dla¾dice"
+msgid "Attach tagged objects to this frame."
+msgstr "Pøipojí oznaèené objekty k tomuto rámu."
 
-#
-msgid "Workspace"
-msgstr "Pracovní plocha"
+msgid "Maximize the frame horizontally/vertically."
+msgstr "Maximalizuje rám horizontálnì/vertikálnì."
 
-msgid "Screen"
-msgstr "Obrazovka"
+msgid "Move current object within the frame left/right."
+msgstr "Pøesune objekt v rámu vlevo/vpravo."
 
-msgid "Frame"
-msgstr "Rám"
+msgid "Switch to next/previous object within the frame."
+msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu."
 
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii"
+msgid "Switch to n:th object within the frame."
+msgstr "Pøepne se do n-tého objektu v rámu."
 
-msgid ""
-"Making the following minimal emergency mappings:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Vytváøím nouzové pøiøazení kláves:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-
-msgid "Unable to append to non-table menu"
-msgstr "Nelze pøidat do netabulkového menu"
-
-msgid "Cannot save selection."
-msgstr "Nemohu ulo¾it výbìr."
-
-msgid "Save look selection in %s?"
-msgstr "Ulo¾it nastavení vzhledu do %s?"
-
-msgid "Too much result data"
-msgstr "Pøíli¹ mnoho výsledkù"
-
-msgid "Could not find client window %s."
-msgstr "Nemohu najít klientské okno %s."
+#
+msgid "Query for a client window to attach."
+msgstr "Dotá¾e se na klientské okno, které má pøipojit."
 
-msgid "Cannot attach: different root windows."
-msgstr "Nemohu pøipojit: rùzná koøenová okna."
+msgid "Move objects between frames by dragging and dropping the tab."
+msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku."
 
-msgid "Unknown error"
-msgstr "Neznámá chyba"
+msgid "Resize the frame."
+msgstr "Zmìní velikost rámu."
 
-msgid "Go to window:"
-msgstr "Jít do okna:"
+msgid "Switch the frame to display the object indicated by the tab."
+msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou."
 
-msgid "Attach window:"
-msgstr "Pøipojit okno:"
+msgid "Begin move/resize mode."
+msgstr "Zahájí re¾im pøesunu/zmìny velikosti."
 
-msgid "Go to or create workspace:"
-msgstr "Vytvoøit nebo pøejít na pracovní plochu:"
+msgid "Display context menu."
+msgstr "Zobrazí kontextové menu."
 
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Ukonèit Ion/ukonèit sezení (y/n)?"
+#
+msgid "Query for a client window to go to."
+msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít."
 
-msgid "Restart Ion (y/n)?"
-msgstr "Restartovat Ion (y/n)?"
+msgid "Query for workspace to go to or create a new one."
+msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit."
 
-msgid "Frame name:"
-msgstr "Název rámu:"
+msgid "Query for file to view."
+msgstr "Zeptá se na soubor, který chcete zobrazit."
 
-msgid "Workspace name:"
-msgstr "Název pracovní plochy:"
+msgid "Query for file to edit."
+msgstr "Zeptá se na soubor, který chcete upravit."
 
-msgid "Edit file:"
-msgstr "Upravit soubor:"
+msgid "Query for host to connect to with SSH."
+msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH."
 
-msgid "View file:"
-msgstr "Prohlédnout soubor:"
+msgid "Query for Lua code to execute."
+msgstr "Zeptá se na lua kód, který má vykonat."
 
-msgid "Run:"
-msgstr "Spustit:"
+msgid "Query for command line to execute."
+msgstr "Zeptá se na pøíkaz, který má spustit."
 
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Selhalo otevøení ~/.ssh/known_hosts"
+#
+msgid "Run a terminal emulator."
+msgstr "Spustí emulátor terminálu."
 
-msgid "Failed to open ~/.ssh/config"
-msgstr "Selhalo otevøení ~/.ssh/config"
+msgid "Show the Ion manual page."
+msgstr "Zobrazí manuálovou stránku Ionu."
 
-msgid "SSH to:"
-msgstr "SSH na:"
+msgid "Query for manual page to be displayed."
+msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit."
 
-msgid "Manual page (%s):"
-msgstr "Manuálová stránka (%s):"
+msgid "Toggle tag of current object."
+msgstr "Pøepne oznaèení aktuálního objektu."
 
-msgid "Lua code:"
-msgstr "Lua kód:"
+msgid "Detach (float) or reattach an object to its previous location."
+msgstr "Odpojí nebo znovu pøipojí objekt z/do pùvodního umístìní."
 
-msgid "Unknown menu %s."
-msgstr "Neznámé menu %s."
+msgid "Close current object."
+msgstr "Zavøe aktuální objekt."
 
-msgid "Missing submenu "
-msgstr "Chybìjící podmenu"
+msgid "Toggle client window group full-screen mode"
+msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu."
 
-msgid "%s:"
-msgstr "%s:"
+#
+msgid ""
+"Send next key press to the client window. Some programs may not allow this "
+"by default."
+msgstr ""
+"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to "
+"implicitnì nepovolují."
 
-msgid "No entry '%s'"
-msgstr "®ádný záznam '%s'"
+#
+msgid "Kill client owning the client window."
+msgstr "Ukonèí klienta vlastnícího klientské okno."
 
+#
 msgid ""
-"\n"
-"%sClass: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Nudge the client window. This might help with some programs' resizing "
+"problems."
 msgstr ""
-"\n"
-"%sTøída: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají "
+"problémy se zmìnou velikosti."
 
-msgid "Toggle scratchpad."
-msgstr "Zapne poznámkový blok."
+msgid "Raise focused object, if possible."
+msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru."
 
-msgid "Programs"
-msgstr "Programy"
+msgid "Backward-circulate focus."
+msgstr "Cykluje vzad."
 
-msgid "Lock screen"
-msgstr "Zamknout obrazovku"
+msgid "Forward-circulate focus."
+msgstr "Cykluje vpøed."
 
-msgid "Help"
-msgstr "Nápovìda"
+msgid "Display the window list menu."
+msgstr "Zobrazí menu se seznamem oken."
+
+msgid "Display the main menu."
+msgstr "Zobrazí hlavní menu."
 
 #
-msgid "Workspaces"
-msgstr "Pracovní plochy"
+#
+msgid "Create a new workspace of chosen default type."
+msgstr "Vytvoøí novou pracovní plochu vybraného typu."
 
-msgid "New"
-msgstr "Nový"
+#
+msgid "Go to next/previous screen on multihead setup."
+msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku."
 
-msgid "Styles"
-msgstr "Styly"
+#
+msgid "Go to n:th screen on multihead setup."
+msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku."
 
-msgid "Session"
-msgstr "Sezení"
+#
+msgid "Clear all tags."
+msgstr "Vyèistí v¹echny znaèky."
 
-msgid "Close"
-msgstr "Zavøít"
+msgid "Go to first region demanding attention or previously active one."
+msgstr ""
+"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího "
+"aktivního."
 
-msgid "List"
-msgstr "Seznam"
+#
+msgid "Switch to next/previous object within current screen."
+msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce."
 
 #
 msgid ""
@@ -1257,301 +1225,317 @@ msgstr ""
 "Pøepne se na n-tý objekt (pracovní plochu, celoobrazovkové okno) na aktuální "
 "obrazovce."
 
-#
-msgid "Switch to next/previous object within current screen."
-msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce."
+msgid "List"
+msgstr "Seznam"
 
-msgid "Go to first region demanding attention or previously active one."
-msgstr ""
-"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího "
-"aktivního."
+msgid "New"
+msgstr "Nový"
 
-#
-msgid "Clear all tags."
-msgstr "Vyèistí v¹echny znaèky."
+msgid "Dillo"
+msgstr "Dillo"
 
-#
-msgid "Go to n:th screen on multihead setup."
-msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku."
+msgid "Konqueror"
+msgstr "Konqueror"
 
-#
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku."
+msgid "Links"
+msgstr "Links"
 
-#
-#
-msgid "Create a new workspace of chosen default type."
-msgstr "Vytvoøí novou pracovní plochu vybraného typu."
+msgid "Opera"
+msgstr "Opera"
 
-msgid "Display the main menu."
-msgstr "Zobrazí hlavní menu."
+msgid "Rxvt"
+msgstr "Rxvt"
 
-msgid "Display the window list menu."
-msgstr "Zobrazí menu se seznamem oken."
+msgid "W3M"
+msgstr "W3M"
 
-msgid "Forward-circulate focus."
-msgstr "Cykluje vpøed."
+msgid "XTerm"
+msgstr "XTerm"
 
-msgid "Backward-circulate focus."
-msgstr "Cykluje vzad."
+#
+msgid "Workspaces"
+msgstr "Pracovní plochy"
 
-msgid "Raise focused object, if possible."
-msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru."
+msgid "Programs"
+msgstr "Programy"
 
-#
-msgid ""
-"Nudge the client window. This might help with some programs' resizing "
-"problems."
-msgstr ""
-"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají "
-"problémy se zmìnou velikosti."
+msgid "Show the PWM manual page."
+msgstr "Zobrazí manuálovou stránku PWM."
 
-#
-msgid "Kill client owning the client window."
-msgstr "Ukonèí klienta vlastnícího klientské okno."
+msgid "Toggle scratchpad."
+msgstr "Zapne poznámkový blok."
 
-#
 msgid ""
-"Send next key press to the client window. Some programs may not allow this "
-"by default."
+"\n"
+"%sClass: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
 msgstr ""
-"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to "
-"implicitnì nepovolují."
+"\n"
+"%sTøída: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
 
-msgid "Toggle client window group full-screen mode"
-msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu."
+msgid "No entry '%s'"
+msgstr "®ádný záznam '%s'"
 
-msgid "Close current object."
-msgstr "Zavøe aktuální objekt."
+msgid "%s:"
+msgstr "%s:"
 
-msgid "Query for manual page to be displayed."
-msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit."
+msgid "Missing submenu "
+msgstr "Chybìjící podmenu"
 
-msgid "Show the Ion manual page."
-msgstr "Zobrazí manuálovou stránku Ionu."
+msgid "Unknown menu %s."
+msgstr "Neznámé menu %s."
 
-#
-msgid "Run a terminal emulator."
-msgstr "Spustí emulátor terminálu."
+msgid "Lua code:"
+msgstr "Lua kód:"
 
-msgid "Query for command line to execute."
-msgstr "Zeptá se na pøíkaz, který má spustit."
+msgid "Manual page (%s):"
+msgstr "Manuálová stránka (%s):"
 
-msgid "Query for Lua code to execute."
-msgstr "Zeptá se na lua kód, který má vykonat."
+msgid "SSH to:"
+msgstr "SSH na:"
 
-msgid "Query for host to connect to with SSH."
-msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH."
+msgid "Failed to open ~/.ssh/config"
+msgstr "Selhalo otevøení ~/.ssh/config"
 
-msgid "Query for file to edit."
-msgstr "Zeptá se na soubor, který chcete upravit."
+msgid "Failed to open ~/.ssh/known_hosts"
+msgstr "Selhalo otevøení ~/.ssh/known_hosts"
 
-msgid "Query for file to view."
-msgstr "Zeptá se na soubor, který chcete zobrazit."
+msgid "Run:"
+msgstr "Spustit:"
 
-msgid "Query for workspace to go to or create a new one."
-msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit."
+msgid "View file:"
+msgstr "Prohlédnout soubor:"
 
-#
-msgid "Query for a client window to go to."
-msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít."
+msgid "Edit file:"
+msgstr "Upravit soubor:"
 
-#
-msgid "Query for a client window to attach."
-msgstr "Dotá¾e se na klientské okno, které má pøipojit."
+msgid "Workspace name:"
+msgstr "Název pracovní plochy:"
 
-msgid "Display context menu."
-msgstr "Zobrazí kontextové menu."
+msgid "Frame name:"
+msgstr "Název rámu:"
 
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maximalizuje rám horizontálnì/vertikálnì."
+msgid "Restart Ion (y/n)?"
+msgstr "Restartovat Ion (y/n)?"
 
-msgid "Begin move/resize mode."
-msgstr "Zahájí re¾im pøesunu/zmìny velikosti."
+msgid "Exit Ion/Shutdown session (y/n)?"
+msgstr "Ukonèit Ion/ukonèit sezení (y/n)?"
 
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou."
+msgid "Go to or create workspace:"
+msgstr "Vytvoøit nebo pøejít na pracovní plochu:"
 
-msgid "Resize the frame."
-msgstr "Zmìní velikost rámu."
+msgid "Attach window:"
+msgstr "Pøipojit okno:"
 
-msgid "Move the frame."
-msgstr "Pøesune rám."
+msgid "Go to window:"
+msgstr "Jít do okna:"
 
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku."
+msgid "New workspace layout (default):"
+msgstr "Rozlo¾ení nové pracovní plochy (default):"
+
+msgid "Unknown error"
+msgstr "Neznámá chyba"
+
+msgid "Unknown layout"
+msgstr "Neznámé rozlo¾ení."
+
+msgid "Cannot attach: different root windows."
+msgstr "Nemohu pøipojit: rùzná koøenová okna."
 
-msgid "Tag current object within the frame."
-msgstr "Oznaèí aktuální objekt v rámu."
+msgid "Could not find client window %s."
+msgstr "Nemohu najít klientské okno %s."
+
+msgid "Too much result data"
+msgstr "Pøíli¹ mnoho výsledkù"
 
-msgid "Switch to n:th object within the frame."
-msgstr "Pøepne se do n-tého objektu v rámu."
+msgid "Could not find %s"
+msgstr "Nemohu najít %s"
 
-msgid "Switch to next/previous object within the frame."
-msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu."
+msgid "Not a directory."
+msgstr "Není adresáøem."
 
-msgid "Move current object within the frame left/right."
-msgstr "Pøesune objekt v rámu vlevo/vpravo."
+msgid "Invalid command"
+msgstr "Neplatný pøíkaz"
 
-msgid "Attach tagged objects to this frame."
-msgstr "Pøipojí oznaèené objekty k tomuto rámu."
+msgid "Error in command string: "
+msgstr "Chyba v pøíkazu: "
 
-msgid "Toggle shade mode"
-msgstr "Pøepne stínový re¾im"
+msgid "Error compiling guard: %s"
+msgstr "Chyba pøi sestavení strá¾ce: %s"
 
-#
-msgid "Raise the frame."
-msgstr "Pøesune rám do popøedí."
+msgid "Invalid guard %s."
+msgstr "Neplatná ochrana %s."
 
-msgid "Lower the frame."
-msgstr "Pøesune rám do pozadí"
+msgid "Main menu:"
+msgstr "Hlavní menu:"
 
-msgid "Cancel the resize mode."
-msgstr "Zru¹í re¾im zmìny velikosti."
+msgid "Context menu:"
+msgstr "Kontextové menu:"
 
-msgid "End the resize mode."
-msgstr "Ukonèí re¾im zmìny velikosti."
+msgid "Floating frame"
+msgstr "Plovoucí rám"
 
-#
-msgid "Grow in specified direction."
-msgstr "Roste v zadaném smìru."
+msgid "Tiled frame"
+msgstr "Dla¾dicový rám"
 
-msgid "Shrink in specified direction."
-msgstr "Zmen¹uje v zadaném smìru."
+msgid "Tiling"
+msgstr "Dla¾dice"
 
 #
-msgid "Move in specified direction."
-msgstr "Posune se v zadaném smìru."
+msgid "Workspace"
+msgstr "Pracovní plocha"
 
-msgid "About Ion"
-msgstr "O Ionu"
+msgid "Screen"
+msgstr "Obrazovka"
 
-msgid "XTerm"
-msgstr "XTerm"
+msgid "Frame"
+msgstr "m"
 
-msgid "W3M"
-msgstr "W3M"
+msgid "Recursive table - unable to deepcopy"
+msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii"
 
-msgid "Rxvt"
-msgstr "Rxvt"
+msgid ""
+"Making the following minimal emergency mappings:\n"
+"  F2 -> xterm\n"
+"  F11 -> restart\n"
+"  F12 -> exit\n"
+"  Mod1+C -> close\n"
+"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
+msgstr ""
+"Vytváøím nouzové pøiøazení kláves:\n"
+"  F2 -> xterm\n"
+"  F11 -> restart\n"
+"  F12 -> exit\n"
+"  Mod1+C -> close\n"
+"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
 
-msgid "Opera"
-msgstr "Opera"
+msgid "Unable to append to non-table menu"
+msgstr "Nelze pøidat do netabulkového menu"
 
-msgid "Links"
-msgstr "Links"
+msgid "Cannot save selection."
+msgstr "Nemohu ulo¾it výbìr."
 
-msgid "Konqueror"
-msgstr "Konqueror"
+msgid "Save look selection in %s?"
+msgstr "Ulo¾it nastavení vzhledu do %s?"
 
-msgid "Dillo"
-msgstr "Dillo"
+msgid "ion-statusd quit."
+msgstr "ion-statusd konèí."
 
-#
-msgid "Run..."
-msgstr "Spustit..."
+msgid "Errors starting ion-statusd:\n"
+msgstr "Chyba pøi startu ion-statusd:\n"
 
-msgid "Save"
-msgstr "Ulo¾it"
+msgid "Failed to start ion-statusd."
+msgstr "Selhalo spu¹tìní ion-statusd."
 
-msgid "Restart"
-msgstr "Restartovat"
+msgid "Screen not found."
+msgstr "Obrazovka nebyla nalezna."
 
-msgid "Restart TWM"
-msgstr "Restartovat TWM"
+msgid "Screen already has an stdisp. Refusing to create a statusbar."
+msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek."
 
-msgid "Exit"
-msgstr "Ukonèit"
+msgid "Failed to create statusbar."
+msgstr "Selhalo vytvoøení stavového øádku."
 
-msgid "Kill"
-msgstr "Ukonèit"
+msgid "Split current frame vertically."
+msgstr "Rozpùlí rám vertikálnì."
 
-msgid "Toggle tag"
-msgstr "(Od)znaèit"
+msgid "Go to frame above/below/right/left of current frame."
+msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu."
 
-msgid "Attach tagged"
-msgstr "Pøipojit oznaèené"
+msgid "Split current frame horizontally."
+msgstr "Rozpùlí rám horizontálnì."
 
-msgid "Clear tags"
-msgstr "Vyèistit znaèky"
+msgid "Destroy current frame."
+msgstr "Znièí aktuální rám."
 
-msgid "Window info"
-msgstr "Informace o oknì"
+msgid "Tile frame, if no tiling exists on the workspace"
+msgstr ""
+"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)."
 
-#
-msgid "New workspace"
-msgstr "Nová pracovní plocha"
+msgid "Destroy frame"
+msgstr "Znièit rám"
 
-msgid "New empty workspace"
-msgstr "Nová prázdná pracovní plocha"
+msgid "Split vertically"
+msgstr "Rozpùlit vertikálnì"
 
-#
-msgid "Close workspace"
-msgstr "Zavøít pracovní plochu"
+msgid "Split horizontally"
+msgstr "Rozpùlit horizontálnì"
 
-msgid "Move one character forward/backward."
-msgstr "Posune se o znak vpøed/vzad."
+msgid "Flip"
+msgstr "Obrátit"
 
-msgid "Go to end/beginning."
-msgstr "Skoèí na konec/zaèátek."
+msgid "Transpose"
+msgstr "Transponovat"
 
-msgid "Skip one word forward/backward."
-msgstr "Pøeskoèí slovo dopøedu/dozadu."
+msgid "Untile"
+msgstr "Zru¹it dla¾dice"
 
-msgid "Delete next character."
-msgstr "Sma¾e následující znak."
+msgid "Float split"
+msgstr "Plovoucí okraj"
 
-msgid "Delete previous character."
-msgstr "Sma¾e pøedchozí znak."
+msgid "At left"
+msgstr "Vlevo"
 
-msgid "Delete one word forward/backward."
-msgstr "Sma¾e slovo pøed/za kurzorem."
+msgid "At right"
+msgstr "Vpravo"
 
-msgid "Delete to end of line."
-msgstr "Sma¾e text do konce øádky."
+msgid "Above"
+msgstr "Nahoøe"
 
-msgid "Delete the whole line."
-msgstr "Sma¾e celý øádek."
+msgid "Below"
+msgstr "Dole"
 
-msgid "Transpose characters."
-msgstr "Transponuje znaky."
+msgid "At root"
+msgstr "Na koøenu"
 
-msgid "Select next/previous (matching) history entry."
-msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie."
+msgid "New tiling"
+msgstr "Vytvoøit dla¾dice"
 
-msgid "Paste from the clipboard."
-msgstr "Vlo¾í ze schránky."
+msgid "Close the menu."
+msgstr "Zavøe menu."
 
 #
-msgid "Set mark/begin selection."
-msgstr "Nastaví znaèku/zaèátek výbìru."
-
 #
-msgid "Cut selection."
-msgstr "Vyjme výbìr."
+msgid "Activate current menu entry."
+msgstr "Aktivuje vybranou polo¾ku v menu."
 
-#
-msgid "Copy selection."
-msgstr "Zkopíruje výbìr."
+msgid "Select next/previous menu entry."
+msgstr "V menu vybere dal¹í/pøedchozí polo¾ku."
 
-#
-msgid "Clear mark/cancel selection."
-msgstr "Sma¾e znaèku/zru¹í výbìr."
+msgid "Clear the menu's typeahead find buffer."
+msgstr "Vyma¾e buffer pro dopøedné hledání v menu."
 
-msgid "Try to complete the entered text or cycle through completions."
-msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi."
+msgid "Toggle floating dock."
+msgstr "Zapne plovoucí dok."
 
-msgid "Complete from history"
-msgstr "Doplní z historie."
+msgid "Pos-TL"
+msgstr "Pozice LH"
 
-msgid "Close the query and execute bound action."
-msgstr "Zavøe dotaz a spustí svázanou akci."
+msgid "Pos-TR"
+msgstr "Pozice PH"
 
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.."
+msgid "Pos-BL"
+msgstr "Pozice LD"
 
-msgid "Scroll the message or completions up/down."
-msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù."
+msgid "Pos-BR"
+msgstr "Pozice PD"
+
+msgid "Grow-L"
+msgstr "Rùst vlevo"
+
+msgid "Grow-R"
+msgstr "Rùst vpravo"
+
+msgid "Grow-U"
+msgstr "Rùst nahoru"
+
+msgid "Grow-D"
+msgstr "Rùst dolù"
 
 msgid "press"
 msgstr "stisk"
@@ -1571,6 +1555,72 @@ msgstr "%s %s"
 msgid "%s %s at %s"
 msgstr "%s %s na %s"
 
+#~ msgid "Tag current object within the frame."
+#~ msgstr "Oznaèí aktuální objekt v rámu."
+
+#~ msgid "Xinerama sanity check failed; overlapping screens detected."
+#~ msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky."
+
+#~ msgid "Xinerama sanity check failed; zero size detected."
+#~ msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost."
+
+#~ msgid ""
+#~ "Don't know how to get Xinerama information for multiple X root windows."
+#~ msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken."
+
+#~ msgid "Error retrieving Xinerama information."
+#~ msgstr "Chyba pøi získávání informaci z Xineramy."
+
+#~ msgid "Unable to setup Xinerama screen %d."
+#~ msgstr "Nemohu nastavit obrazovku Xineramy %d."
+
+#~ msgid "Unable to setup X screen %d."
+#~ msgstr "Nemohu nastavit X obrazovku %d."
+
+#~ msgid "Refusing to destroy - not empty."
+#~ msgstr "Odmítám zru¹it - není prázdné."
+
+#~ msgid "Workspace not empty - refusing to destroy."
+#~ msgstr "Pracovní plocha není prázdná - odmítám zru¹it."
+
+#~ msgid "Nil frame."
+#~ msgstr "Prázdný rám."
+
+#~ msgid "The frame is not managed by the workspace."
+#~ msgstr "Rám není spravován pracovní plochou."
+
+#~ msgid "Already detached"
+#~ msgstr "Ji¾ je odpojen"
+
+#~ msgid "ion-statusd launch timeout."
+#~ msgstr "Èas spou¹tìní ion-statusd vypr¹el."
+
+#~ msgid "Use Xinerama screen information (default: 1/yes)"
+#~ msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)"
+
+#~ msgid "Ignored: not compiled with Xinerama support"
+#~ msgstr "Ignorováno: program je sestaven bez podpory Xineramy"
+
+#~ msgid "Invalid parameter to -xinerama."
+#~ msgstr "Neplatný parametr pro -xinerama."
+
+#~ msgid "Use Xinerama screen information (default: 0/no)"
+#~ msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) "
+
+#~ msgid "Detach window from tiled frame"
+#~ msgstr "Odpojí okno od dla¾dicového rámu"
+
+#
+#~ msgid "New workspace"
+#~ msgstr "Nová pracovní plocha"
+
+#~ msgid "New empty workspace"
+#~ msgstr "Nová prázdná pracovní plocha"
+
+#
+#~ msgid "Close workspace"
+#~ msgstr "Zavøít pracovní plochu"
+
 #~ msgid "Unable to re-initialise workspace. Destroying."
 #~ msgstr "Nemohu znovu inicializovat pracovní plochu. Nièím."
 
diff --git a/po/de.po b/po/de.po
deleted file mode 100644 (file)
index a4f05ef..0000000
--- a/po/de.po
+++ /dev/null
@@ -1,1667 +0,0 @@
-#
-# German language translations for Ion3.
-#
-# Copyright (c) Schott Robert 2005.
-#
-# This file is distributed under the same license as the Ion3 package.
-#
-
-msgid ""
-msgstr ""
-"Project-Id-Version: Ion3\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-10-11 18:33+0300\n"
-"PO-Revision-Date: 2005-02-13 23:50+0300\n"
-"Last-Translator: Schott Robert <r.schott at casepool.de>\n"
-"Language-Team: none\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../ioncore/conf-bindings.c:96
-msgid "Insane key combination."
-msgstr "Unsinnige Tastenkombination."
-
-#: ../ioncore/conf-bindings.c:100
-msgid "Could not convert keysym to keycode."
-msgstr "Konnte 'keysym' nicht in 'keycode' umwandeln."
-
-#: ../ioncore/conf-bindings.c:111
-#, c-format
-msgid "Unknown button \"%s\"."
-msgstr "Unbekannte Taste \"%s\"."
-
-#: ../ioncore/conf-bindings.c:116
-msgid "Insane button combination."
-msgstr "Unsinnige Tastenkombination."
-
-#: ../ioncore/conf-bindings.c:123 ../ioncore/conf-bindings.c:130
-msgid "Insane modifier combination."
-msgstr "Unsinnige Modifikationskombination."
-
-#: ../ioncore/conf-bindings.c:168
-#, c-format
-msgid "Can not wait on modifiers when no modifiers set in \"%s\"."
-msgstr ""
-"Kann nicht auf Modifikator warten, wenn kein Modifikator in \"%s\" gesetzt ist."
-
-#: ../ioncore/conf-bindings.c:186
-#, c-format
-msgid "Unable to add binding %s."
-msgstr "Die Bindung %s konnte nicht eingestellt werden."
-
-#: ../ioncore/conf-bindings.c:191
-#, c-format
-msgid "Unable to remove binding %s."
-msgstr "Die Bindung %s konnte nicht entfernt werden."
-
-#: ../ioncore/conf-bindings.c:230
-#, c-format
-msgid "Unable to add submap for binding %s."
-msgstr "Die 'submap' für die Bindung %s konnte nicht eingestellt werden."
-
-#
-#: ../ioncore/conf-bindings.c:260
-msgid "Binding type not set."
-msgstr "Bindungsart nicht gesetzt."
-
-#: ../ioncore/conf-bindings.c:270
-#, c-format
-msgid "Unknown binding type \"%s\"."
-msgstr "Unbekannte Bindungsart \"%s\"."
-
-#: ../ioncore/conf-bindings.c:291
-#, c-format
-msgid "Unknown area \"%s\" for binding %s."
-msgstr "Unbekannter Bereich \"%s.\" für die Bindung %s."
-
-#: ../ioncore/conf-bindings.c:332
-#, c-format
-msgid "Unable to get bindmap entry %d."
-msgstr "Der 'bindmap' Eintrag %d wurde nicht gefunden."
-
-#: ../ioncore/conf-bindings.c:374
-msgid "Unable to convert keysym to string."
-msgstr "Konnte keysym nicht in Zeichenkette umwandeln."
-
-#: ../ioncore/conf-bindings.c:388
-msgid "Unable to convert button to string."
-msgstr "Konnte Taste nicht in Zeichenkette umwandeln."
-
-#
-#: ../ioncore/event.c:78
-msgid "Time request from X server failed."
-msgstr "Zeitanfrage des X Servers fehlgeschlagen."
-
-#
-#: ../ioncore/exec.c:101
-msgid "Could not find a root window."
-msgstr "Konnte kein Wurzelfenster finden."
-
-#: ../ioncore/exec.c:134
-msgid "reading a pipe"
-msgstr "Weiterleitung wird ausgelesen"
-
-#
-#: ../ioncore/exec.c:296
-msgid "Not saving state: running under session manager."
-msgstr "Nicht gespeicherter Zustand: läuft im Sitzungsmanager."
-
-#: ../ioncore/strings.c:107 ../ioncore/strings.c:143
-msgid "Invalid multibyte string."
-msgstr "Unzulässige multibyte Zeichenkette."
-
-#: ../ioncore/strings.c:234
-#, c-format
-msgid "Error compiling regular expression: %s"
-msgstr "Fehler beim erstellen der regulären Ersetzung: %s"
-
-#: ../ioncore/modules.c:158
-msgid "Invalid module name."
-msgstr "Unzulässiger Modulname."
-
-#
-#: ../ioncore/modules.c:170
-msgid "The module is already loaded."
-msgstr "Das Modul wurde bereits geladen."
-
-#: ../ioncore/modules.c:185
-msgid ""
-"Module version information not found or version mismatch. Refusing to use."
-msgstr ""
-"Information zur Modulversion wurde nicht gefunden oder die Versionen stimmen nicht überein."
-"Benutzung wurde abgelehnt."
-
-#: ../ioncore/modules.c:196
-#, c-format
-msgid "Unable to initialise module %s."
-msgstr "Module %s konnte nicht initialisiert werden."
-
-#: ../ioncore/modules.c:220 ../../libextl/readconfig.c:368
-#, c-format
-msgid "Unable to find '%s' on search path."
-msgstr "Im Suchpfad konnte '%s' nicht gefunden werden."
-
-#: ../ioncore/modules.c:291
-msgid "Unknown module."
-msgstr "Unbekanntes Modul."
-
-#: ../ioncore/modules.c:299
-msgid "Unable to initialise module."
-msgstr "Module konnte nicht initialisiert werden."
-
-#: ../ioncore/modules.c:344
-msgid "No module to load given."
-msgstr "Kein Modul zum laden vorhanden."
-
-#: ../ioncore/screen.c:301
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:490
-msgid "Invalid offset."
-msgstr "Ungültiges offset."
-
-#: ../ioncore/screen.c:535
-msgid "Could not find a complete workspace class. Please load some modules."
-msgstr ""
-"Konnte keine komplette Workspace-Klasse finden."
-"Laden Sie bitte einige Module."
-
-#: ../ioncore/screen.c:545
-#, c-format
-msgid "Unable to create a workspace on screen %d."
-msgstr "Konnte keinen Arbeitsbereich auf dem Schirm %d erzeugen."
-
-#: ../ioncore/signal.c:291
-#, c-format
-msgid "Caught fatal signal %d. Dying without deinit."
-msgstr ""
-"Abbruch Signal %d aufgefangen. Beendet ohne deinit."
-
-#: ../ioncore/signal.c:300
-#, c-format
-msgid "Caught signal %d. Dying."
-msgstr "Signal %d wurde aufgefangen. Beendet."
-
-#: ../ioncore/sizehint.c:150
-msgid "Invalid client-supplied width/height increment."
-msgstr "Client lieferte ungültige Breiten/Höhen - Schrittweite."
-
-#: ../ioncore/sizehint.c:158
-msgid "Invalid client-supplied aspect-ratio."
-msgstr "Client lieferte ungültiges Seitenverhältnis."
-
-#: ../ioncore/ioncore.c:66
-msgid ""
-"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"
-msgstr ""
-"Dieses Programm ist freie Software; Sie können es weiter verteilen und/oder\n"
-"modifizieren solange es den Bedingungen der \"GNU Lesser General Public\"\n"
-"Lizenz entspricht. Veröffentlicht durch die \"Free Software Foundation\"; jede\n"
-"Lizenz der Version 2.1, oder (nach eigener Wahl) jede spätere Version.\n"
-"\n"
-"Dieses Programm wird mit der Hoffnung das es nützlich ist verteilt, \n"
-"aber OHNE JEGLICHE GARANTIE; ohne jede Garantie von MARKTFÄHIGKEIT oder\n"
-"EIGNUNG ZU EINEM BESTIMMTEN ZWECK. Siehe die \"GNU Lesser General Public\"\n"
-"Lizenz für detailliertere Angaben.\n"
-
-#: ../ioncore/ioncore.c:385
-#, c-format
-msgid "Could not connect to X display '%s'"
-msgstr "Konnte keine Verbindung zur X Anzeige '%s' herstellen."
-
-#: ../ioncore/ioncore.c:438
-msgid "Could not find a screen to manage."
-msgstr "Konnte keinen Bildschirm für diese Aktion finden."
-
-#: ../ioncore/xic.c:43
-msgid "Failed to open input method."
-msgstr "Öffnen der Eingabemethode ist fehlgeschlagen."
-
-#: ../ioncore/xic.c:48
-msgid "Input method doesn't support any style."
-msgstr "Die Eingabemethode unterstützt keine Art von Styles"
-
-#: ../ioncore/xic.c:63
-msgid "input method doesn't support my preedit type."
-msgstr "Die Eingabemethode unterstützt nicht meine Art von 'preedit'."
-
-#: ../ioncore/xic.c:91
-msgid "Failed to create input context."
-msgstr "Erstellen des Eingabezusammenhangs ist fehlgeschlagen. "
-
-#: ../ioncore/clientwin.c:376
-#, c-format
-msgid "The transient_for hint for \"%s\" points to itself."
-msgstr "Der 'transient_for' Tip für \"%s\" zeigt auf sich selbst."
-
-#: ../ioncore/clientwin.c:380
-#, c-format
-msgid ""
-"Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
-"multi-parent brain damage?)"
-msgstr ""
-"Client Fenster \"%s\" hat einen fehlerhaften 'transient_for'-Tip "
-"(\"Erweiterte WM Tips\" *** Gehirnschaden?)"
-
-#: ../ioncore/clientwin.c:385
-#, c-format
-msgid "The transient_for window for \"%s\" is not on the same screen."
-msgstr "Das 'transient_for'-Fenster für \"%s\" ist nicht auf dem gleichen Schirm."
-
-#: ../ioncore/clientwin.c:405 ../ioncore/clientwin.c:492
-#: ../ioncore/clientwin.c:1554
-#, c-format
-msgid "Window %#x disappeared."
-msgstr "Fenster %#x verschwunden."
-
-#: ../ioncore/clientwin.c:512
-msgid "Unable to find a matching root window!"
-msgstr "Unmöglich ein passendes Wurzelfenster zu finden."
-
-#: ../ioncore/clientwin.c:547
-#, c-format
-msgid "Unable to manage client window %#x."
-msgstr "Unmöglich die Client Fenster %#x zu bearbeiten."
-
-#: ../ioncore/clientwin.c:597
-msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
-msgstr "Änderung der 'ist WM_TRANSIENT_FOR' Eigenschaft wird nicht unterstützt."
-
-#
-#: ../ioncore/clientwin.c:874
-msgid "Client does not support the WM_DELETE protocol."
-msgstr "Client unterstützt nicht das WM_DELETE Protocol."
-
-#: ../ioncore/clientwin.c:1103 ../mod_ionws/ionws.c:76
-#: ../mod_floatws/floatws.c:103
-#, c-format
-msgid "Error reparenting %s."
-msgstr "Fehler wieder herstellen %s."
-
-#: ../ioncore/clientwin.c:1560
-msgid "Saved client window does not want to be managed."
-msgstr "Gespeichertes Client Fenster braucht nicht behandelt werden."
-
-#
-#: ../ioncore/colormap.c:96
-msgid "Unable to store colourmap watch info."
-msgstr "Unmöglich die 'colourmap' Überwachungsinformation zu speichern."
-
-#: ../ioncore/region.c:36
-msgid "Creating region with negative width or height!"
-msgstr "Gebiet mit negativer Breite oder Höhe erzeugt!"
-
-#: ../ioncore/region.c:84
-#, c-format
-msgid "Destroying object \"%s\" with client windows as children."
-msgstr "Zerstörtes Objekt \"%s\", mit Client Fenstern."
-
-#: ../ioncore/attach.c:80
-msgid "Unable to reparent."
-msgstr "Unmöglich wieder herzustellen."
-
-#: ../ioncore/attach.c:112 ../ioncore/frame-pointer.c:295
-#, c-format
-msgid "Attempt to make region %s manage its ancestor %s."
-msgstr "Versuche Bereich %s zu erstellen und seine Vorläufer %s zu behandeln."
-
-#
-#: ../ioncore/defer.c:93
-msgid "Object destroyed while deferred actions are still pending."
-msgstr "Objekt zerstört während zurückgestellte Aktionen noch bevorstehen."
-
-#: ../ioncore/manage.c:90
-msgid "Unable to find a screen for a new client window."
-msgstr "Konnte keinen Screen für ein neues Client Fenster finden."
-
-#: ../ioncore/manage.c:187
-#, c-format
-msgid "Unable to rescue \"%s\"."
-msgstr "Konnte \"%s\" nicht retten."
-
-#: ../ioncore/rootwin.c:222
-#, c-format
-msgid "Unable to redirect root window events for screen %d."
-msgstr "Die Ereignisse für das Wurzelfenster des Screens %d können  nicht umgeleitet werden."
-
-#: ../ioncore/rootwin.c:316
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Xinerama Zustandsüberprüfung fehlgeschlagen; überlappende Screens gefunden."
-
-#: ../ioncore/rootwin.c:342
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Weiß nicht wie die Xinerama Information für multiple X Wurzelfenster zu bekommen ist."
-
-#: ../ioncore/rootwin.c:378
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Konnte Xinerama Screen %d nicht einrichten."
-
-#: ../ioncore/rootwin.c:389
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "Konnte X Screen %d nicht einrichten."
-
-#: ../ioncore/names.c:90
-#, c-format
-msgid "Corrupt instance number %s."
-msgstr "Unbrauchbare Instanznummer %s."
-
-#: ../ioncore/saveload.c:55
-#, c-format
-msgid "Unknown class \"%s\", cannot create region."
-msgstr "Unbekannte Klasse \"%s\", Bereich konnte nicht erzeugt werden."
-
-#: ../ioncore/saveload.c:124
-#, c-format
-msgid ""
-"There were errors loading layout. Backing up current layout savefile as\n"
-"%s.\n"
-"If you are _not_ running under a session manager and wish to restore your\n"
-"old layout, copy this backup file over the layout savefile found in the\n"
-"same directory while Ion is not running and after having fixed your other\n"
-"configuration files that are causing this problem. (Maybe a missing\n"
-"module?)\n"
-msgstr ""
-"Fehler beim Laden des Layouts. Sichere jetzige Layoutsicherungsdatei als\n"
-"%s.\n"
-"Wenn Sie KEINEN Sitzungsmanager gestartet haben, können sie ihr altes Layout wieder herstellen.\n"
-"Kopieren sie die Sicherungsdatei über die aktuelle Layoutsicherungsdatei welche im selben Verzeichnis\n"
-"zu finden ist.\n"
-"Ion kann neu gestartet werden, nachdem alle anderen Konfigurationsdateien überprüft wurden,\n"
-"welche zu dem Problem beführt haben. (Eventuell fehlende Module?)\n"
-
-#: ../ioncore/saveload.c:167
-msgid "Unable to get file for layout backup."
-msgstr "Konnte keine Datei für die Layoutsicherung finden."
-
-#: ../ioncore/saveload.c:171
-#, c-format
-msgid "Backup file %s already exists."
-msgstr "Sicherungsdatei %s ist bereits vorhanden."
-
-#: ../ioncore/saveload.c:177
-msgid "Failed backup."
-msgstr "Sicherung fehlgeschlagen."
-
-#
-#: ../ioncore/saveload.c:182
-msgid "Unable to initialise layout on any screen."
-msgstr "Konnte für keinen Screen ein Layout initialisieren."
-
-#: ../ioncore/saveload.c:202
-#, c-format
-msgid "Unable to get configuration for screen %d."
-msgstr "Konnte für Screen %d keine Konfiguration finden."
-
-#: ../ioncore/saveload.c:215
-msgid "Unable to save layout."
-msgstr "Konnte Layout nicht sichern."
-
-#: ../ioncore/frame.c:122
-msgid "Frame is not empty."
-msgstr "Frame ist nicht leer."
-
-#: ../ioncore/conf.c:134
-msgid "User directory can not be set."
-msgstr "Benutzerverzeichnis konnte nicht gesetzt werden."
-
-#: ../ioncore/conf.c:197
-msgid "Some bindmaps were empty, loading ioncore-efbb."
-msgstr "Einige 'bindmaps' sind leer, lade 'ioncore-efbb'."
-
-#: ../ioncore/fullscreen.c:100
-msgid "Failed to enter full screen mode."
-msgstr "Vollbildmode fehlgeschlagen."
-
-#: ../ioncore/fullscreen.c:158
-msgid ""
-"WClientWin failed to return from full screen mode; remaining manager or "
-"parent from previous location refused to manage us."
-msgstr ""
-"'WClientWin' konnte nicht aus dem Vollbildmode zurückkehren;"
-"Der vorhandene Manager oder der Elternteil der vorherigen Position verhinterten das."
-
-#
-#: ../ioncore/mplex.c:1247
-msgid "Invalid position setting."
-msgstr "Ungültige Positionseinstellung."
-
-#
-#: ../ioncore/mplex.c:1280
-msgid "Invalid action setting."
-msgstr "Ungültige Aktionseinstellung."
-
-#: ../ioncore/gr.c:119
-#, c-format
-msgid "Drawing engine %s is not registered!"
-msgstr "Zeichenfunktion %s ist nicht registriert."
-
-#: ../ioncore/gr.c:138
-#, c-format
-msgid "Unable to find brush for style '%s'."
-msgstr "Konnte Pinsel für Style '%s' nicht finden."
-
-#: ../ioncore/gr.c:409
-msgid "No drawing engines loaded, trying \"de\"."
-msgstr "Keine Zeichenfunktionen geladen, versuche \"de\"."
-
-#
-#: ../ioncore/hooks.c:219
-msgid "No function given."
-msgstr "Keine Funktion gegeben."
-
-#: ../mod_ionws/ionws.c:311
-msgid "Unable to create a node for status display."
-msgstr "Konnte keinen Knoten für die Statusanzeige erstellen."
-
-#: ../mod_ionws/ionws.c:323
-msgid "Unable to create new split for status display."
-msgstr "Konnte keine neu Teilung für die Statusanzeige erzeugen."
-
-#
-#: ../mod_ionws/ionws.c:742
-msgid "Frame not managed by the workspace."
-msgstr "Frame wird nicht durch den Arbeitsbereich behandelt."
-
-#
-#: ../mod_ionws/ionws.c:747
-msgid "Invalid direction parameter."
-msgstr "Unzulässiger Richtungsparameter."
-
-#
-#: ../mod_ionws/ionws.c:765
-msgid "Unable to split."
-msgstr "Unmöglich zu Teilen."
-
-#: ../mod_ionws/ionws.c:803
-msgid "Nil frame."
-msgstr "'NIL'(leeres) Frame"
-
-#: ../mod_ionws/ionws.c:807
-msgid "The frame is not managed by the workspace."
-msgstr "Das Frame wird nicht durch den Arbeitsbereich behandelt."
-
-#: ../mod_ionws/ionws.c:812
-msgid "Frame may not be destroyed."
-msgstr "Frame darf nicht zerstört werden."
-
-#: ../mod_ionws/ionws.c:817
-msgid "Failed to rescue managed objects."
-msgstr "Rettung der 'managed objects' fehlgeschlagen."
-
-#: ../mod_ionws/ionws.c:1028
-msgid "Nil parameter."
-msgstr " 'NIL' (leer) Parameter"
-
-#: ../mod_ionws/ionws.c:1033
-msgid "Manager doesn't match."
-msgstr "Manager passt nicht."
-
-#
-#: ../mod_ionws/ionws.c:1055
-msgid "Could not get split tree."
-msgstr "Kann Teilungsbaum nicht finden."
-
-#: ../mod_ionws/ionws.c:1076
-msgid "Workspace already has a status display node."
-msgstr "Arbeitsbereich besitzt schon eine Knoten für die Statusanzeige."
-
-#
-#: ../mod_ionws/ionws.c:1126
-msgid "Missing region parameters."
-msgstr "Fehlende Bereichsparameter."
-
-#: ../mod_ionws/ionws.c:1162 ../mod_ionws/splitfloat.c:783
-msgid "Invalid direction."
-msgstr "Ungültige Richtung."
-
-#
-#: ../mod_ionws/ionws.c:1236
-msgid "No split type given."
-msgstr "Kein Teilungstyp gegeben."
-
-#: ../mod_ionws/ionws.c:1249
-msgid "Unknown split type."
-msgstr "Unbekannter Teilungstype."
-
-#
-#
-#: ../mod_ionws/ionws.c:1289
-msgid "The workspace is empty."
-msgstr "Der Arbeitsbereich ist leer."
-
-#: ../mod_ionws/placement.c:97 ../mod_panews/placement.c:299
-#, c-format
-msgid ""
-"Ooops... could not find a region to attach client window to on workspace %s."
-msgstr "Ooops ... konnte keinen Bereich finden um das Client Fenster an den Arbeitsbereich %s einzufügen."
-
-#: ../mod_ionws/split.c:906
-msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
-msgstr "'REGION_RQGEOM_TRYONLY' wird nicht unterstützt für die Statusanzeige."
-
-#
-#: ../mod_ionws/split.c:979
-msgid "Invalid node."
-msgstr "Ungültiger Knoten."
-
-#
-#: ../mod_ionws/split.c:1044
-msgid "Splitting the status display is not allowed."
-msgstr "Teilung der Statusanzeige ist nicht erlaubt."
-
-#: ../mod_ionws/split.c:1072 ../mod_ionws/splitfloat.c:896
-msgid "Unable to split: not enough free space."
-msgstr "Teilung nicht möglich: nicht genügend freier Speicher."
-
-#
-#: ../mod_ionws/split.c:1558
-msgid "Unable to move the status display out of way of transpose."
-msgstr "Es ist unmöglich die Statusanzeige so zu verschieben."
-
-#: ../mod_ionws/split.c:1722
-#, c-format
-msgid "Unable to get configuration for %s."
-msgstr "Konnte keine Konfiguration für \"%s\" finden."
-
-#: ../mod_ionws/split-stdisp.c:591 ../mod_ionws/split-stdisp.c:616
-msgid "Status display in bad split configuration."
-msgstr "Statusanzeige hat eine schlechte Teilungskonfiguration."
-
-#: ../mod_ionws/split-stdisp.c:657
-msgid "Status display badly located in split tree."
-msgstr "Statusanzeige liegt schlecht im Teilungsbaum."
-
-#: ../mod_floatws/floatws.c:351 ../mod_panews/panews.c:259
-msgid "Workspace may not be destroyed."
-msgstr "Arbeitsbereich kann nicht zerstört werden."
-
-#: ../mod_floatws/floatws.c:358
-msgid "Failed to rescue some client windows!"
-msgstr "Rettung einiger Client Fenster fehlgeschlagen."
-
-#: ../mod_floatws/floatws.c:370 ../mod_panews/panews.c:254
-msgid "Refusing to close non-empty workspace."
-msgstr "Schließen von 'nicht-leerem' Arbeitsbereich abgelehnt."
-
-#
-#: ../mod_floatws/floatws.c:462
-msgid "Failure to create a new frame."
-msgstr "Konnte kein neues Frame erzeugen."
-
-#
-#: ../mod_floatws/floatws.c:1037 ../mod_floatws/floatws.c:1115
-msgid "Region not managed by the workspace."
-msgstr "Bereich wird nicht behandelt durch diesen Arbeitsbereich."
-
-#: ../mod_floatws/floatws.c:1236
-msgid "No geometry specified."
-msgstr "Keine Geometrie angegeben."
-
-#: ../mod_floatws/placement.c:125
-#, c-format
-msgid "Unknown placement method \"%s\"."
-msgstr "Unbekannte Platzierungsmethode \"%s\"."
-
-#: ../mod_panews/panews.c:193
-msgid "Unable to re-initialise workspace. Destroying."
-msgstr "Konnte den Arbeitsbereich nicht neu initialisieren. Zerstört."
-
-#: ../mod_panews/placement.c:104 ../mod_panews/placement.c:108
-#: ../mod_panews/placement.c:175 ../mod_panews/placement.c:180
-#, c-format
-msgid "Malfunctioning placement hook; condition #%d."
-msgstr "Fehlfunktion der Platzierung; Zustand #%d."
-
-#: ../mod_query/fwarn.c:34
-msgid "Error:\n"
-msgstr "Fehler:\n"
-
-#
-#: ../mod_menu/menu.c:490
-msgid "Empty menu."
-msgstr "Leeres Menü."
-
-#
-#: ../mod_sm/sm.c:110
-msgid "Failed to set session directory."
-msgstr "Konnte Sitzungsverzeichnis nicht setzen."
-
-#: ../mod_sm/sm_session.c:85
-msgid "Too many ICE connections."
-msgstr "Zu viele 'ICE' Verbindungen."
-
-#: ../mod_sm/sm_session.c:227
-msgid "Failed to save session state"
-msgstr "Konnte Sitzungszustand nicht sichern."
-
-#: ../mod_sm/sm_session.c:246
-msgid "Failed to request save-yourself-phase2 from session manager."
-msgstr "Konnte die 'save-yourself-phase2' Anfrage des Sitzungsmanagers nicht gehandeln."
-
-#
-#: ../mod_sm/sm_session.c:295
-msgid "SESSION_MANAGER environment variable not set."
-msgstr "'SESSION_MANAGER' Umgebungsvariable nicht gesetzt."
-
-#: ../mod_sm/sm_session.c:300
-msgid "Session Manager: IceAddConnectionWatch failed."
-msgstr "Sitzungsmanager: 'IceAddConnectionWatch' fehlgeschlagen."
-
-#
-#: ../mod_sm/sm_session.c:325
-msgid "Unable to connect to the session manager."
-msgstr "Konnte keine Verbindung zu Sitzungsmanager aufbauen."
-
-#: ../mod_sp/main.c:137
-#, c-format
-msgid "Unable to create scratchpad for screen %d."
-msgstr "Konnte 'Scratchpad' (Schmirblock) für Screen %d nicht erstellen."
-
-#: ../de/init.c:41
-#, c-format
-msgid "Border attribute %s sanity check failed."
-msgstr "Überprüfung der Rahmeneigenschaft %s fehlgeschlagen."
-
-#: ../de/init.c:64
-#, c-format
-msgid "Unknown border style \"%s\"."
-msgstr "Unbekannter Rahmenstyle \"%s\"."
-
-#: ../de/init.c:96
-#, c-format
-msgid "Unable to allocate colour \"%s\"."
-msgstr "Konnte Farbe \"%s\" nicht zuweisen."
-
-#: ../de/init.c:160
-#, c-format
-msgid "Corrupt substyle table %d."
-msgstr "Zerstörte 'substyle' Tabelle %d"
-
-#: ../de/init.c:193
-#, c-format
-msgid "Unknown text alignment \"%s\"."
-msgstr "Unbekannte Textausrichtung \"%s\"."
-
-#: ../de/init.c:263
-#, c-format
-msgid "'based_on' for %s points back to the style itself."
-msgstr " 'based_on' für %s zeigt zurück auf den selben Style. "
-
-#: ../de/init.c:266
-#, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "Unbekannter Basisstyle \"%s\"."
-
-#: ../de/font.c:47
-#, c-format
-msgid ""
-"Fontset for font pattern '%s' implements context dependent drawing, which is "
-"unsupported. Expect clutter."
-msgstr ""
-"Schriftart für Schriftmuster '%s' enthält fallspezifische Abhängigkeiten zum Zeichnen"
-"Dies wird nicht unterstützt. Erwartet 'clutter'."
-
-#: ../de/font.c:58
-#, c-format
-msgid "Could not load font \"%s\", trying \"%s\""
-msgstr "Konnte Schrift \"%s\" nicht laden, versuche \"%s\"."
-
-#: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "Style %s wird derzeit benutzt [%d] aber das Modul ist nicht mehr geladen."
-
-#: ../ion/ion.c:41 ../pwm/pwm.c:41
-msgid "X display to use"
-msgstr "Benutze X Anzeige"
-
-#: ../ion/ion.c:44 ../pwm/pwm.c:44
-msgid "Configuration file"
-msgstr "Konfigurationsdatei"
-
-#: ../ion/ion.c:47 ../pwm/pwm.c:47
-msgid "Add directory to search path"
-msgstr "Addiere Verzeichnis zum Suchpfad "
-
-#: ../ion/ion.c:50 ../pwm/pwm.c:50
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr "Behandle nur das vorgegebene Wurzelfenster/nicht-Xinerama."
-#: ../ion/ion.c:54
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Benutze Xinerama Screen Information (Vorgabe: 1/ja)"
-
-#: ../ion/ion.c:57 ../pwm/pwm.c:57
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Ignoriert: keine Xinerama Unterstützung kompiliert."
-
-#: ../ion/ion.c:61 ../pwm/pwm.c:61
-msgid "Name of session (affects savefiles)"
-msgstr "Name der Sitzung (betrifft Sicherungsdateien)"
-
-#: ../ion/ion.c:64 ../pwm/pwm.c:64
-msgid "Session manager client ID"
-msgstr "Sitzungsmanager Client ID"
-
-#: ../ion/ion.c:67 ../pwm/pwm.c:67
-msgid "Do not create startup error log and display it with xmessage."
-msgstr "Erstelle keine Fehlerdateien während des Starts und zeige sie mit 'xmessage'. "
-
-#: ../ion/ion.c:71 ../pwm/pwm.c:71
-msgid "Show this help"
-msgstr "Zeige diese Hilfe"
-
-#: ../ion/ion.c:74 ../pwm/pwm.c:74
-msgid "Show program version"
-msgstr "Zeige Programmversion"
-
-#: ../ion/ion.c:77 ../pwm/pwm.c:77
-msgid "Show about text"
-msgstr "Zeige 'About' Text"
-
-#: ../ion/ion.c:92
-msgid "Could not get user configuration file directory."
-msgstr "Konnte das Verzeichnis mit den Benutzerkonfigurationsdateien nicht finden."
-
-#: ../ion/ion.c:106
-#, c-format
-msgid "%s/welcome.txt"
-msgstr "%s/welcome.de.txt"
-
-#: ../ion/ion.c:139 ../pwm/pwm.c:86
-#, c-format
-msgid ""
-"Usage: %s [options]\n"
-"\n"
-msgstr ""
-"Anwendung: %s [Optionen]\n"
-"\n"
-
-#: ../ion/ion.c:199 ../pwm/pwm.c:149
-msgid "Invalid parameter to -xinerama."
-msgstr "Ungültiger Parameter für '-xinerama'."
-
-#
-#: ../ion/ion.c:218 ../pwm/pwm.c:168
-msgid "Invalid command line."
-msgstr "Ungültige Kommandozeile."
-
-#: ../ion/ion.c:239
-msgid "Ion startup error log:\n"
-msgstr "Ion-Start Fehlerausgabe:\n"
-
-#: ../ion/ion.c:249 ../pwm/pwm.c:199
-msgid "Refusing to start due to encountered errors."
-msgstr "Start abgebrochen wegen aufgetretenen Fehlern."
-
-#: ../pwm/pwm.c:54
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Benutze Xinerama Screen Information (Vorgabe: 0/nein)"
-
-#: ../pwm/pwm.c:189
-msgid "PWM startup error log:\n"
-msgstr "PWM-Start Fehlerausgabe:\n"
-
-#: ../../libextl/readconfig.c:86
-msgid "$HOME not set"
-msgstr "Variable '$HOME' nicht gesetzt."
-
-#: ../../libextl/readconfig.c:113
-msgid "User directory not set. Unable to set session directory."
-msgstr "" 
-"Benutzerverzeichnis nicht gesetzt."
-"Konnte Sitzungsverzeichnis nicht setzen."
-
-#: ../../libextl/readconfig.c:247
-#, c-format
-msgid "Falling back to %s."
-msgstr "Yritetään tiedostoa %s."
-
-#: ../../libextl/readconfig.c:441
-#, c-format
-msgid "Unable to create session directory \"%s\"."
-msgstr "Konntedas Sitzungsverzeichnis \"%s\" nicht erstellen."
-
-#: ../../libextl/luaextl.c:113
-msgid "Lua stack full."
-msgstr "Lua Stapelverarbeitung voll."
-
-#
-#: ../../libextl/luaextl.c:139
-msgid "Unknown Lua error."
-msgstr "Unbekannter Lua Fehler."
-
-#: ../../libextl/luaextl.c:456
-msgid "Stack trace:"
-msgstr "Stapelverfolgung:"
-
-#: ../../libextl/luaextl.c:463
-#, c-format
-msgid ""
-"\n"
-"(Unable to get debug info for level %d)"
-msgstr ""
-"\n"
-"(Konnte Debuginformation für Level %d nicht finden.)"
-
-#: ../../libextl/luaextl.c:481
-msgid ""
-"\n"
-"  [Skipping unnamed C functions.]"
-msgstr ""
-"\n"
-"  [Überspringe unbenannte C Funktionen.]"
-
-#: ../../libextl/luaextl.c:532
-msgid "Internal error."
-msgstr "Interner Fehler."
-
-#: ../../libextl/luaextl.c:551
-msgid "Unable to initialize Lua."
-msgstr "Konnte Lua nicht initialisieren."
-
-#: ../../libextl/luaextl.c:1277
-msgid ""
-"Too many return values. Use a C compiler that has va_copy to support more."
-msgstr ""
-"Zu viele Rückgabewerte. Benutzen Sie einen C Compiler der 'va_copy' benutzt."
-
-#: ../../libextl/luaextl.c:1295
-#, c-format
-msgid "Invalid return value (expected '%c', got lua type \"%s\")."
-msgstr ""
-"Ungültiger Rückgabewert (erwartet '%c', bekommener Luatype \"%s\")."
-
-#: ../../libextl/luaextl.c:1330 ../../libextl/luaextl.c:1594
-msgid "Stack full."
-msgstr "Stapel voll."
-
-#: ../../libextl/luaextl.c:1570
-msgid "L1 call handler upvalues corrupt."
-msgstr "L1 Abruf 'upvalues' fehlerhaft."
-
-#: ../../libextl/luaextl.c:1575
-msgid "Called function has been unregistered."
-msgstr "Aufgerufene Funktion wurde noicht registriert."
-
-#: ../../libextl/luaextl.c:1587
-#, c-format
-msgid "Attempt to call an unsafe function \"%s\" in restricted mode."
-msgstr "Versuchte eine unsichere Funktion \"%s\" im begrenzten Modus aufzurufen."
-
-#: ../../libextl/luaextl.c:1603
-#, c-format
-msgid ""
-"Argument %d to %s is of invalid type. (Argument template is '%s', got lua "
-"type %s)."
-msgstr ""
-"Argument %d von %s hat einen ungültigen Type (Argumentvorgabe ist '%s', "
-"von Lua kam '%s'.)"
-
-#: ../../libextl/luaextl.c:1782
-#, c-format
-msgid ""
-"Function '%s' has more parameters than the level 1 call handler can handle"
-msgstr ""
-"Funktion %s hat mehr Parameter als der Level 1 Handler bearbeiten kann "
-
-#
-#: ../../libextl/luaextl.c:2199
-msgid "Maximal serialisation depth reached."
-msgstr "Maximum der Serialisierungstiefe erreicht."
-
-#: ../../libextl/luaextl.c:2220
-#, c-format
-msgid "Unable to serialise type %s."
-msgstr "Konnte den Type %s nicht serialisieren."
-
-#: ../../libextl/luaextl.c:2251
-msgid "-- This file has been generated by Ion. Do not edit.\n"
-msgstr "-- Dies Datei wurde von Ion erzeugt. Bitte nicht verändern.\n"
-
-#: ../../libextl/misc.c:17
-#, c-format
-msgid ""
-"Type checking failed in level 2 call handler for parameter %d (got %s, "
-"expected %s)."
-msgstr ""
-"Type Überprüfung im Level 2 Handler für den Parameter #%d fehlgeschlagen"
-"(gekam %s, erwartet %s)."
-
-#: ../etc/cfg_floatws.lua:34
-msgid "Lower the frame."
-msgstr "Frame in den Hintergrund."
-
-#: ../etc/cfg_bindings.lua:171
-msgid "Display frame context menu."
-msgstr "Anzeige Frame Kontexmenü"
-
-#
-#: ../etc/cfg_ionws.lua:44
-msgid "Flip at root"
-msgstr "An der Wurzel drehen"
-
-#
-#: ../etc/cfg_bindings.lua:43
-msgid "Go to n:th screen on multihead setup."
-msgstr "Gehe zu n'ten Screen bei 'multihead' Aufbau."
-
-#: ../ext_statusbar/ext_statusbar.lua:308
-msgid "Failed to create statusbar."
-msgstr "Konnte Statusbar nicht erzeugen."
-
-#: ../pwm/cfg_pwm_menus.lua:13 ../etc/cfg_menus.lua:10
-msgid "Help"
-msgstr "Hilfe"
-
-#: ../mod_query/mod_query.lua:566
-msgid "SSH to:"
-msgstr "SSH to:"
-
-#: ../etc/cfg_menus.lua:28
-msgid "Restart"
-msgstr "Neustart"
-
-#: ../mod_menu/mod_menu.lua:231
-msgid "Cannot save selection."
-msgstr "Konnte Auswahl nicht speichern."
-
-#: ../etc/cfg_bindings.lua:206
-msgid "End the resize mode."
-msgstr "Beende den Anpassungsmode."
-
-#
-#
-#: ../etc/cfg_ionws.lua:48 ../etc/cfg_ionws.lua:58
-msgid "Vertically"
-msgstr "Vertikal"
-
-#: ../ioncore/ioncore-bindings.lua:34
-msgid "Invalid guard %s."
-msgstr "Ungültiger Wächter %s."
-
-#: ../etc/cfg_bindings.lua:109
-msgid "Query for Lua code to execute."
-msgstr "Anfrage um Lua Code auszuführen."
-
-#
-#: ../etc/cfg_bindings.lua:47
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Gehe zum nächsten/vorherigen Screen bei 'multihead' Aufbau."
-
-#: ../mod_query/mod_query.lua:344
-msgid "none"
-msgstr "keine"
-
-#: ../etc/cfg_bindings.lua:219
-msgid "Shrink in specified direction."
-msgstr "Verkleinern in angegebener Richtung."
-
-#: ../etc/cfg_bindings.lua:160
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maximiere das Frame horizontal/vertikal."
-
-#: ../etc/cfg_bindings.lua:156
-msgid "Move current object within the frame left/right."
-msgstr ""
-"Bewege das aktuelle Objekt im Frame nach links/rechts."
-
-#: ../etc/cfg_ionws.lua:12
-msgid "Go to frame above/below/right/left of current frame."
-msgstr ""
-"Gehe zu Frame oben/unten/rechts/links"
-"Bezogen auf aktuelles Frame"
-
-#: ../ext_statusbar/ext_statusbar.lua:289
-msgid "Screen not found."
-msgstr "Screen nicht gefunden."
-
-#: ../etc/cfg_bindings.lua:182
-msgid "Resize the frame."
-msgstr "Anpassen des Frame."
-
-#: ../etc/cfg_bindings.lua:189
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Bewege Objekte zwischen Frames durch 'ziehen/fallen lassen' des Reiters."
-
-#: ../mod_query/mod_query.lua:99
-msgid "Could not find %s"
-msgstr "Ei löydettyä %s:ää."
-
-#: ../ext_statusbar/ext_statusbar.lua:295
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Screen hat bereits ein 'stdisp'. Erstellen der Statusbar wurde abgelehnt."
-
-#: ../etc/cfg_bindings.lua:112
-msgid "Query for host to connect to with SSH."
-msgstr "Anfrage zur Verbindung mit SSH."
-
-#
-#: ../etc/cfg_bindings.lua:229
-msgid "Move in specified direction."
-msgstr "Bewegt in festgelegte Richtung"
-
-#
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "mail"
-msgstr "Post"
-
-#: ../mod_query/mod_query.lua:807
-msgid ""
-"\n"
-"Transients:\n"
-msgstr ""
-"\n"
-"Flüchtige:\n"
-
-#: ../etc/cfg_menu.lua:21
-msgid "Select next/previous menu entry."
-msgstr "Wähle nächsten/vorherigen Menüeintrag."
-
-#: ../ioncore/ioncore-luaext.lua:30
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekursive Tabelle - unmöglich zu kopieren."
-
-#
-#: ../etc/cfg_bindings.lua:209
-msgid "Grow in specified direction."
-msgstr "Wachse in angegebener Richtung."
-
-#: ../ioncore/ioncore-bindings.lua:68
-msgid "Invalid command"
-msgstr "Ungültiges Kommando"
-
-#: ../mod_query/mod_query.lua:189 ../mod_menu/mod_menu.lua:245
-msgid "Too much result data"
-msgstr "Zu viele Ergebnisdaten"
-
-#: ../mod_query/mod_query.lua:344
-msgid "Workspace type (%s):"
-msgstr "Type des Arbeitsbereichs (%s):"
-
-#: ../etc/cfg_bindings.lua:36
-msgid "Go to previous active object."
-msgstr "Gehe zu vorherigem aktivem Objekt"
-
-#
-#: ../etc/cfg_query.lua:67
-msgid "Clear mark/cancel selection."
-msgstr "Lösche Markierung/Abbruch Auswahl."
-
-#: ../mod_query/mod_query.lua:772
-msgid "No entry '%s'"
-msgstr "Kein Eintrag '%s'."
-
-#
-#
-#: ../etc/cfg_bindings.lua:90
-msgid "Toggle fullscreen mode of current client window."
-msgstr "Schalte das aktuelle Client Fenster in den Vollbildmode."
-
-#: ../etc/cfg_bindings.lua:103
-msgid "Query for manual page to be displayed."
-msgstr "Anfrage um 'Manual' Seiten anzuzeigen."
-
-#: ../etc/cfg_bindings.lua:51
-msgid "Show the Ion manual page."
-msgstr "Zeige die Ion 'Manual' Seite."
-
-#: ../etc/cfg_bindings.lua:60
-msgid "Display the main menu."
-msgstr "Zeige das Hauptmenü."
-
-#
-#: ../etc/cfg_bindings.lua:54
-msgid "Run a terminal emulator."
-msgstr "Starte einen Terminal."
-
-#: ../etc/cfg_bindings.lua:121
-msgid "Query for workspace to go to or create a new one."
-msgstr "Anfrage um auf einen Arbeitsbereich zu wechseln oder einen neuen zu erzeugen."
-
-#: ../etc/cfg_menus.lua:38
-msgid "Kill"
-msgstr "Zerstören"
-
-#: ../pwm/cfg_pwm_menus.lua:25 ../etc/cfg_menus.lua:37
-msgid "Close"
-msgstr "Schließen"
-
-#: ../mod_query/mod_query.lua:381
-msgid "Go to or create workspace:"
-msgstr "Erzeuge einen Arbeitsbereich:"
-
-#: ../etc/cfg_query.lua:35
-msgid "Delete one word forward/backward."
-msgstr "Lösche ein Wort vorwärts/rückwärts."
-
-#: ../etc/cfg_query.lua:17
-msgid "Go to end/beginning."
-msgstr "Gehe zum Ende/Anfang."
-
-#
-#: ../etc/cfg_ionws.lua:43
-msgid "Transpose"
-msgstr "Vertauschen"
-
-#: ../etc/cfg_bindings.lua:152
-msgid "Switch to next/previous object within the frame."
-msgstr "Wechsel zum nächsten/vorherigen Objekt im Frame"
-
-#: ../mod_query/mod_query.lua:402
-msgid "Restart Ion (y/n)?"
-msgstr "Neustart Ion (y/n)?"
-
-#: ../mod_query/mod_query.lua:724
-msgid "Lua code: "
-msgstr "Lua Code:"
-
-#: ../mod_query/mod_query.lua:367
-msgid "Attach window:"
-msgstr "Fenster verknüpfen:"
-
-#: ../etc/cfg_bindings.lua:186 ../etc/cfg_floatws.lua:37
-msgid "Move the frame."
-msgstr "Gehe zu Frame."
-
-#: ../pwm/cfg_pwm_menus.lua:11 ../etc/cfg_menus.lua:8
-msgid "Programs"
-msgstr "Programme"
-
-#: ../etc/cfg_query.lua:23
-msgid "Skip one word forward/backward."
-msgstr "Überspringe ein Wort vorwärts/rückwärts."
-
-#: ../mod_query/mod_query.lua:738
-msgid "Unknown menu %s."
-msgstr "Unbekanntes Menü %s."
-
-#: ../etc/cfg_floatws.lua:12
-msgid "Backwards-circulate focus and raise the newly focused frame."
-msgstr "Rückwärts laufender Fokus und zeige fokussiertes Frame."
-
-#: ../etc/cfg_menus.lua:44
-msgid "Window info"
-msgstr "Fensterinformation"
-
-#
-#: ../etc/cfg_query.lua:58
-msgid "Set mark/begin selection."
-msgstr "Setze Markierungs/Anfangs - Auswahl."
-
-#: ../etc/cfg_menus.lua:30
-msgid "Restart TWM"
-msgstr "Neustart TWM"
-
-#: ../etc/cfg_ionws.lua:9
-msgid "Split current frame vertically."
-msgstr "Teile aktuelles Frame vertikal."
-
-#
-#
-#: ../etc/cfg_bindings.lua:57
-msgid "Create a new workspace of chosen default type."
-msgstr "Erzeuge einen neuen Arbeitsbereich mit ausgewähltem Vorgabetype."
-
-#
-#: ../etc/cfg_floatws.lua:29
-msgid "Raise the frame."
-msgstr "Bringe Frame nach vorne."
-
-#: ../etc/cfg_floatws.lua:46
-msgid "(Un)stick"
-msgstr "anheften/ablösen"
-
-#: ../mod_query/mod_query.lua:287 ../mod_query/mod_query.lua:297
-msgid "Could not find client window %s."
-msgstr "Konnte Client Fenster %s nicht finden."
-
-#: ../etc/cfg_query.lua:82
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Schließe die Anfrage/Message Box und führe keine daran gebundenen Aktionen aus."
-
-#
-#: ../etc/cfg_bindings.lua:168
-msgid "Query for a client window to attach to active frame."
-msgstr "Anfrage für ein Client Fenster um sich mit einem aktivem Frame zu verbinden "
-
-#: ../mod_query/mod_query.lua:488
-msgid "Run:"
-msgstr "Starte:"
-
-#
-#: ../etc/cfg_panews.lua:11
-msgid "Resize the area."
-msgstr "Verändere die Ansicht."
-
-#
-#: ../etc/cfg_bindings.lua:95
-msgid "Kill client owning current client window."
-msgstr "Beende aktuelles Client Fenster."
-
-#: ../mod_query/mod_query.lua:595
-msgid "Manual page (%s):"
-msgstr "Handbuch für (%s):"
-
-#
-#: ../etc/cfg_bindings.lua:124
-msgid "Query for a client window to go to."
-msgstr "Anfrage wohin ein Client Fenster geschickt werden soll."
-
-#
-#: ../etc/cfg_ionws.lua:39
-msgid "Destroy frame"
-msgstr "Zerstöre Frame"
-
-#: ../mod_query/mod_query.lua:339
-msgid "Unknown error"
-msgstr "Unbekannter Fehler"
-
-#: ../etc/cfg_bindings.lua:175 ../etc/cfg_panews.lua:8
-msgid "Begin move/resize mode."
-msgstr "Beginne Bewegungs/Veränderungs - Modus."
-
-#: ../etc/cfg_bindings.lua:136
-msgid "Tag current object within the frame."
-msgstr "Markiere aktuelles Objekt im Frame."
-
-#: ../etc/cfg_bindings.lua:140
-msgid "Switch to n:th object within the frame."
-msgstr "Wechsel zum n'ten Objekt im Frame."
-
-#: ../etc/cfg_bindings.lua:203
-msgid "Cancel the resize mode."
-msgstr "Abbruch des Veränderungsmodus."
-
-#: ../build/mkman.lua:196
-msgid "%s %s"
-msgstr "%s %s"
-
-#: ../etc/cfg_query.lua:27
-msgid "Delete next character."
-msgstr "Lösche nächsten Buchstaben."
-
-#: ../mod_query/mod_query.lua:356
-msgid "Go to window:"
-msgstr "Gehe zu Fenster:"
-
-#: ../build/mkman.lua:182
-msgid "drag"
-msgstr "ziehen"
-
-#: ../build/mkman.lua:181
-msgid "click"
-msgstr "anklicken"
-#: ../build/mkman.lua:180
-msgid "press"
-msgstr "drücken"
-
-#: ../etc/cfg_menu.lua:27
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Lösche den Menüpuffer."
-
-#: ../etc/cfg_ionws.lua:47
-msgid "Split"
-msgstr "Teilung"
-
-#
-#: ../etc/cfg_bindings.lua:98
-msgid ""
-"Send next key press to current client window. Some programs may not allow "
-"this by default."
-msgstr ""
-"Sende den nächsten Tastendruck zum aktuellen Client Fenster. "
-"Einige Programme unterstützen dies nicht in ihrer Voreinstellung."
-
-#: ../etc/cfg_menu.lua:11
-msgid "Close the menu."
-msgstr "Schließe das Menü."
-
-#: ../etc/cfg_query.lua:87
-msgid "Scroll the message or completions up/down."
-msgstr "Verschiebe die Nachricht oder Vervollständigung nach oben/unten."
-
-#: ../etc/cfg_query.lua:74
-msgid "Close the query and execute bound action."
-msgstr "Schließe die Anfrage und führe die daran gebundene Aktion aus."
-
-#
-#: ../etc/cfg_bindings.lua:31
-msgid "Switch to next/previous object within current screen."
-msgstr "Wechsel zum nächsten/vorherigen Objekt im aktuellen Screen."
-
-#: ../etc/cfg_query.lua:39
-msgid "Delete to end of line."
-msgstr "Lösche bis zum ende der Zeile."
-
-#: ../pwm/cfg_pwm_menus.lua:14 ../etc/cfg_menus.lua:11
-msgid "About Ion"
-msgstr "Über Ion"
-
-#: ../mod_query/mod_query.lua:804
-msgid ""
-"Title: %s\n"
-"Class: %s\n"
-"Role: %s\n"
-"Instance: %s\n"
-"XID: 0x%x"
-msgstr ""
-"Titel: %s\n"
-"Klasse(class): %s\n"
-"Rolle(role): %s\n"
-"Instanz(instance): %s\n"
-"XID: 0x%x"
-
-#
-#: ../etc/cfg_query.lua:61
-msgid "Cut selection."
-msgstr "Ausschneiden."
-
-#: ../etc/cfg_query.lua:53
-msgid "Paste from the clipboard."
-msgstr "Einfügen aus Clipboard."
-
-#
-#: ../etc/cfg_query.lua:45
-msgid "Select next/previous (matching) history entry."
-msgstr "Auswahl des nächsten/vorherigen (Treffers) 'History' Eintrags."
-
-#: ../etc/cfg_menus.lua:43
-msgid "Clear tags"
-msgstr "Lösche Markierungen"
-
-#: ../etc/cfg_query.lua:42
-msgid "Delete the whole line."
-msgstr "Lösche die ganze Zeile."
-
-#: ../etc/cfg_query.lua:71
-msgid "Try to complete the entered text."
-msgstr "Versuche den eingegebenen Text zu komplettieren."
-
-#: ../etc/cfg_query.lua:31
-msgid "Delete previous character."
-msgstr "Lösche vorheriges Zeichen."
-
-#: ../mod_query/mod_query.lua:299
-msgid "Cannot attach: different root windows."
-msgstr "Keine Verknüpfung: unterschiedliche Wurzelfenster."
-
-#: ../build/mkman.lua:183
-msgid "double click"
-msgstr "Doppelklick"
-
-#: ../etc/cfg_query.lua:11
-msgid "Move one character forward/backward."
-msgstr "Bewege ein Zeichen vorwärts/rückwärts."
-
-#: ../etc/cfg_menus.lua:29
-msgid "Restart PWM"
-msgstr "Neustart PWM"
-
-#: ../etc/cfg_bindings.lua:115
-msgid "Query for file to edit."
-msgstr "Anfrage um eine Datei zu bearbeiten."
-
-#
-#: ../etc/cfg_bindings.lua:39
-msgid "Clear all tags."
-msgstr "Lösche alle Markierungen."
-
-#: ../etc/cfg_bindings.lua:178
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Wechsle das Frame um das Objekt anzuzeigen welches durch den Reiter angegeben ist."
-
-#
-#
-#: ../etc/cfg_ionws.lua:50 ../etc/cfg_ionws.lua:60
-msgid "Horizontally"
-msgstr "Horizontal"
-
-#: ../pwm/cfg_pwm_menus.lua:16 ../pwm/cfg_pwm_menus.lua:24
-msgid "New"
-msgstr "Neu"
-
-#: ../mod_query/mod_query.lua:410
-msgid "Frame name:"
-msgstr "Framename:"
-
-#
-#: ../etc/cfg_bindings.lua:18
-msgid ""
-"Switch to n:th object (workspace, full screen client window) within current "
-"screen."
-msgstr ""
-"Wechsle zum n'ten Objekt (Arbeitsbereich, Vollbild Fenster) im aktuellen Arbeitsbereich."
-
-#: ../etc/cfg_bindings.lua:64
-msgid "Display the window list menu."
-msgstr "Zeige das Menü mit der Fensterliste."
-
-#: ../etc/cfg_floatws.lua:26
-msgid "Toggle shade mode"
-msgstr "Wechsle in den Schattenmodus"
-
-#: ../mod_query/mod_query.lua:393
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Beende Ion/Schließe Sitzung (y/n)?"
-
-#: ../etc/cfg_floatws.lua:15
-msgid "Raise/lower active frame."
-msgstr "vorbringen/zurücklegen des aktiven Frames"
-
-#: ../mod_menu/mod_menu.lua:235
-msgid "Save look selection in %s?"
-msgstr "Sichere Aussehen in %s?"
-
-#: ../etc/cfg_bindings.lua:82
-msgid "Close current object."
-msgstr "Schließe aktuelles Objekt."
-
-#
-#: ../etc/cfg_query.lua:64
-msgid "Copy selection."
-msgstr "Kopiere Auswahl."
-
-#: ../etc/cfg_bindings.lua:164
-msgid "Attach tagged objects to this frame."
-msgstr "Verknüpfe markierte Objekte mit diesem Frame."
-
-#: ../etc/cfg_ionws.lua:57
-msgid "Floating split"
-msgstr "Fließende Teilung"
-
-#: ../mod_query/mod_query.lua:768
-msgid "%s menu:"
-msgstr "menu: %s"
-
-#: ../ext_statusbar/ext_statusbar.lua:318
-msgid "Failed to create a timer for statusbar."
-msgstr "Erzeugen des Timers für die Statusbar fehlgeschlagen."
-
-#: ../etc/cfg_ionws.lua:52 ../etc/cfg_ionws.lua:62
-msgid "Vertically at root"
-msgstr "Vertikal an der Wurzel"
-
-#
-#
-#: ../etc/cfg_menu.lua:16
-msgid "Activate current menu entry."
-msgstr "Aktiviere aktuellen Menüeintrag."
-
-#: ../ioncore/ioncore-efbb.lua:12
-msgid ""
-"Making the following minimal emergency mappings:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Erstelle die folgenden minimalen Rettungseinstellungen:\n"
-"  F2 -> xterm\n"
-"  F11 -> Neustart\n"
-"  F12 -> Beenden\n"
-"  Mod1+C -> Schließen\n"
-"  Mod1+K P/N -> nächstes/vorheriges Frame\n"
-
-#
-#: ../etc/cfg_ionws.lua:45
-msgid "Transpose at root"
-msgstr "Vertausche an der Wurzel"
-
-#: ../pwm/cfg_pwm_menus.lua:17 ../etc/cfg_menus.lua:12
-msgid "Styles"
-msgstr "Aussehen ändern"
-
-#: ../etc/cfg_bindings.lua:106
-msgid "Query for command line to execute."
-msgstr "Anfrage um Kommandozeile auszuführen."
-
-#: ../mod_query/mod_query.lua:323
-msgid "Unable to create workspace: no screen."
-msgstr "Unmöglich Arbeitsbereich zu erzeugen: kein Screen."
-
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "load"
-msgstr "lade"
-
-#
-#: ../etc/cfg_ionws.lua:42
-msgid "Flip"
-msgstr "Umdrehen"
-
-#: ../etc/cfg_ionws.lua:41
-msgid "Flip&transpose"
-msgstr "Umdrehen und Vertauschen"
-
-#: ../pwm/cfg_pwm_menus.lua:12 ../etc/cfg_menus.lua:9
-msgid "Lock screen"
-msgstr "Sperre Screen"
-
-#: ../mod_query/mod_query.lua:449
-msgid "Edit file:"
-msgstr "Bearbeite Datei:"
-
-#: ../etc/cfg_menus.lua:19
-msgid "XTerm"
-msgstr "XTerm"
-
-#: ../build/mkman.lua:198
-msgid "%s %s at %s"
-msgstr "%s %s auf %s"
-
-#
-#: ../etc/cfg_bindings.lua:85
-msgid ""
-"Nudge current client window. This might help with some programs' resizing "
-"problems."
-msgstr ""
-"Anstupsen des aktuellen Fensters. Dies könnte helfen bei einigen Programmen "
-" (xterm) mit Darstellungsproblemen."
-
-#: ../etc/cfg_ionws.lua:22
-msgid "Destroy current frame."
-msgstr "Zerstöre aktuelles Frame."
-
-#: ../ioncore/ioncore-bindings.lua:53
-msgid "Error in command string: "
-msgstr "Fehler in Kommandozeichenkette: "
-
-#: ../etc/cfg_ionws.lua:19
-msgid "Split current frame horizontally."
-msgstr "Teile aktuelles Frame horizontal."
-
-#: ../etc/cfg_menus.lua:42
-msgid "Attach tagged"
-msgstr "Markierte Objekte verknüpfen"
-
-#: ../etc/cfg_ionws.lua:54 ../etc/cfg_ionws.lua:64
-msgid "Horizontally at root"
-msgstr "Horizontal an der Wurzel"
-
-#: ../etc/cfg_menus.lua:40
-msgid "(Un)tag"
-msgstr "Markieren"
-
-#: ../mod_query/mod_query.lua:459
-msgid "View file:"
-msgstr "Zeige Datei:"
-
-#: ../mod_query/mod_query.lua:421
-msgid "Workspace name:"
-msgstr "Name des Arbeitsbereichs:"
-
-#: ../etc/cfg_menus.lua:31
-msgid "Exit"
-msgstr "Beenden"
-
-#: ../etc/cfg_menus.lua:27
-msgid "Save"
-msgstr "Speichern"
-
-#
-#: ../pwm/cfg_pwm_menus.lua:15
-msgid "Workspaces"
-msgstr "Arbeitsbereiche"
-
-#: ../etc/cfg_menus.lua:20
-msgid "Mozilla Firefox"
-msgstr "Mozilla Firefox"
-
-#: ../ioncore/ioncore-bindings.lua:45
-msgid "Error compiling guard: %s"
-msgstr "Fehler Erstellungswächter: %s"
-
-#: ../mod_menu/mod_menu.lua:271
-msgid "Refresh list"
-msgstr "Aktualisiere Liste"
-
-#: ../etc/cfg_floatws.lua:9
-msgid "Circulate focus and raise the newly focused frame."
-msgstr "Rückwärts laufender Fokus und zeige fokussiertes Frame."
-
-#
-#: ../etc/cfg_menus.lua:21
-msgid "Run..."
-msgstr "Starte..."
-
-#: ../etc/cfg_bindings.lua:118
-msgid "Query for file to view."
-msgstr "Anfrage um Datei anzuzeigen."
-
-#: ../mod_query/mod_query.lua:511
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Konnte ~/.ssh/known_hosts nicht öffnen."
-
-#: ../pwm/cfg_pwm_menus.lua:18 ../etc/cfg_menus.lua:13
-msgid "Session"
-msgstr "Sitzung"
-
-#: ../pwm/cfg_pwm_menus.lua:27
-msgid "List"
-msgstr "Anzeige"
-
-#~ msgid "Vertically/root"
-#~ msgstr "Pystysuunnassa juuressa"
-
-#
-#
-#~ msgid "Horizontally/root"
-#~ msgstr "Vaakasuunnassa juuressa"
-
-#~ msgid "Transpose parent"
-#~ msgstr "Käännä vanhempi"
-
-#~ msgid "Flip parent"
-#~ msgstr "Peilaa vanhempi"
index 229dc4584deb42aefd0db66a750531fb26673e1e..f17a924cffcdb67472a3b9bb37f9e85223854384 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ion3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-11 17:36+0200\n"
+"POT-Creation-Date: 2007-04-22 13:13+0300\n"
 "PO-Revision-Date: 2004-07-31 23:50+0300\n"
 "Last-Translator: Tuomo Valkonen <tuomov at iki.fi>\n"
 "Language-Team: none\n"
@@ -96,7 +96,7 @@ msgid "Time request from X server failed."
 msgstr "Ajan pyyntö X-palvelimelta epäonnistui."
 
 #
-#: ../ioncore/exec.c:177
+#: ../ioncore/exec.c:186
 msgid "Not saving state: running under session manager."
 msgstr "Tilaa ei talleteta, koska olemme istunnonhallinnan alaisia."
 
@@ -152,38 +152,34 @@ msgstr "Ladattava moduulia ei ole annettu."
 msgid "Invalid arguments."
 msgstr "Virheelliset parametrit."
 
-#: ../ioncore/screen.c:298
-msgid "act: "
-msgstr "act: "
-
 #
-#: ../ioncore/screen.c:481
-msgid "Only workspace may not be destroyed."
-msgstr "Ainoata työpöytää ei voi tuhota."
+#: ../ioncore/screen.c:385
+msgid "Only workspace may not be destroyed/detached."
+msgstr "Ainoata työpöytää ei voi tuhota/irroitaa."
 
 #
-#: ../ioncore/screen.c:489
+#: ../ioncore/screen.c:396
 msgid "Screens may not be destroyed."
 msgstr "Näyttöjä ei voi tuhota."
 
-#: ../ioncore/screen.c:525
+#: ../ioncore/screen.c:432
 msgid "Invalid offset."
 msgstr "Virheellinen poikkeama."
 
-#: ../ioncore/screen.c:568
+#: ../ioncore/screen.c:471
 #, c-format
 msgid "Unable to create a workspace on screen %d."
 msgstr "Työpöydän luonti ruudulle %d epäonnistui."
 
-#: ../ioncore/sizehint.c:151
+#: ../ioncore/sizehint.c:157
 msgid "Invalid client-supplied width/height increment."
 msgstr "Asiakkaan ilmoittama pysty/vaakalisäys koolle on virheellinen."
 
-#: ../ioncore/sizehint.c:159
+#: ../ioncore/sizehint.c:165
 msgid "Invalid client-supplied aspect-ratio."
 msgstr "Asiakkaan ilmoittama sivusuhde on virheellinen."
 
-#: ../ioncore/ioncore.c:74
+#: ../ioncore/ioncore.c:78
 msgid ""
 "This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU Lesser General Public\n"
@@ -206,16 +202,16 @@ msgstr ""
 "hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.\n"
 "Katso LGPL lisenssistä lisää yksityiskohtia.\n"
 
-#: ../ioncore/ioncore.c:155
+#: ../ioncore/ioncore.c:159
 msgid "No encoding given in LC_CTYPE."
 msgstr "LC_CTYPE ei kerro enkoodausta."
 
-#: ../ioncore/ioncore.c:437
+#: ../ioncore/ioncore.c:470
 #, c-format
 msgid "Could not connect to X display '%s'"
 msgstr "Yhteydenotto X-palvelimeen '%s' epäonnistui."
 
-#: ../ioncore/ioncore.c:489
+#: ../ioncore/ioncore.c:522
 msgid "Could not find a screen to manage."
 msgstr "Yhtään hallittavissa olevaa juuri-ikkunaa ei löytynyt."
 
@@ -235,48 +231,48 @@ msgstr "Sy
 msgid "Failed to create input context."
 msgstr "Syöttökontekstin luonti epäonnistui."
 
-#: ../ioncore/clientwin.c:411
+#: ../ioncore/clientwin.c:379
 #, c-format
 msgid "The transient_for hint for \"%s\" points to itself."
 msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa itseensä."
 
-#: ../ioncore/clientwin.c:415
+#: ../ioncore/clientwin.c:383
 #, c-format
 msgid ""
 "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
 "multi-parent brain damage?)"
 msgstr "Ikkunan \"%s\" transient_for neuvo on rikki."
 
-#: ../ioncore/clientwin.c:420
+#: ../ioncore/clientwin.c:388
 #, c-format
 msgid "The transient_for window for \"%s\" is not on the same screen."
 msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa eri näytölle."
 
-#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527
-#: ../ioncore/clientwin.c:1300
+#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496
+#: ../ioncore/clientwin.c:1292
 #, c-format
 msgid "Window %#x disappeared."
 msgstr "Ikkuna %#x katosi."
 
-#: ../ioncore/clientwin.c:547
+#: ../ioncore/clientwin.c:516
 msgid "Unable to find a matching root window!"
 msgstr "Vastaavaa juuri-ikkunaa ei löytynyt."
 
-#: ../ioncore/clientwin.c:582
+#: ../ioncore/clientwin.c:555
 #, c-format
 msgid "Unable to manage client window %#x."
 msgstr "Asiakasikkunan %x hallittavaksi saattaminen epäonnistui."
 
-#: ../ioncore/clientwin.c:633
+#: ../ioncore/clientwin.c:604
 msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
 msgstr "Muutoksia WM_TRANSIENT_FOR ominaisuudessa ei tueta."
 
 #
-#: ../ioncore/clientwin.c:809
+#: ../ioncore/clientwin.c:776
 msgid "Client does not support the WM_DELETE protocol."
 msgstr "Asiakasikkuna ei tue WM_DELETE-protokollaa."
 
-#: ../ioncore/clientwin.c:1306
+#: ../ioncore/clientwin.c:1298
 msgid "Saved client window does not want to be managed."
 msgstr "Talletettu asiakasikkuna ei halua sitä hallittavan."
 
@@ -285,75 +281,66 @@ msgstr "Talletettu asiakasikkuna ei halua sit
 msgid "Unable to store colourmap watch info."
 msgstr "Värikartan valvonnan alustaminen epäonnistui."
 
-#: ../ioncore/region.c:46
+#: ../ioncore/region.c:47
 msgid "Creating region with negative width or height!"
 msgstr "Yritys luoda korkeudeltaan tai leveydeltään negatiivinen alue."
 
-#: ../ioncore/region.c:94
+#: ../ioncore/region.c:95
 #, c-format
 msgid "Destroying object \"%s\" with client windows as children."
-msgstr "Olio \"%s\", jolla on vielä asiakasikkunoita lapsena, tuhotaan."
+msgstr "Tuhotaan kappale \"%s\", jolla on vielä asiakasikkunoita."
+
+#: ../ioncore/region.c:434
+#, c-format
+msgid "Can not destroy %s: contains client windows."
+msgstr "Kappaletta %s ei voida tuhota, sillä se sisältää asiakasikkunoita."
+
+#: ../ioncore/region.c:435
+msgid "(unknown)"
+msgstr "(tuntematon)"
 
 #
-#: ../ioncore/region.c:395
+#: ../ioncore/region.c:498
 msgid "Failed to rescue some client windows - not closing."
 msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui - ei suljeta."
 
-#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46
-msgid "Unable to reparent."
-msgstr "Vanhemman vaihto epäonnistui."
-
-#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282
+#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280
 #, c-format
 msgid "Attempt to make region %s manage its ancestor %s."
 msgstr "Yritys saattaa alue %s hallitsemaan sen esivanhempaa %s."
 
-#: ../ioncore/manage.c:77
+#: ../ioncore/attach.c:83
+msgid "Unable to reparent."
+msgstr "Vanhemman vaihto epäonnistui."
+
+#: ../ioncore/attach.c:92
+msgid "Unexpected attach error: trying to recover by attaching to screen."
+msgstr "Tuntematon liitäntävirhe: yritetään toipua liittämällä näyttöön."
+
+#: ../ioncore/attach.c:111
+msgid "Failed recovery."
+msgstr "Toipuminen epäonnistui."
+
+#: ../ioncore/manage.c:193
 msgid "Unable to find a screen for a new client window."
 msgstr "Uudelle asiakasikkunalle ei löytynyt näyttöä."
 
-#: ../ioncore/rootwin.c:223
+#: ../ioncore/rootwin.c:218
 #, c-format
 msgid "Unable to redirect root window events for screen %d."
 msgstr "Juuri-ikkunan %d viestien uudelleenohjaus epäonnistui."
 
-#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
-
-#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351
-msgid "Xinerama sanity check failed; zero size detected."
-msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
-
-#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle."
-
-#: ../ioncore/rootwin.c:393
-msgid "Error retrieving Xinerama information."
-msgstr "Xinerama-tietoja ei saatu."
-
-#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui."
-
-#: ../ioncore/rootwin.c:464
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui."
-
-#: ../ioncore/names.c:90
+#: ../ioncore/names.c:91
 #, c-format
 msgid "Corrupt instance number %s."
 msgstr "Rikkinäinen instanssinumero %s."
 
-#: ../ioncore/saveload.c:125
+#: ../ioncore/saveload.c:98
 #, c-format
 msgid "Unknown class \"%s\", cannot create region."
 msgstr "Luokka \"%s\" on tuntematon. Aluetta ei voida luoda."
 
-#: ../ioncore/saveload.c:205
+#: ../ioncore/saveload.c:202
 #, c-format
 msgid ""
 "There were errors loading layout. Backing up current layout savefile as\n"
@@ -372,46 +359,46 @@ msgstr ""
 "tilanteen aiheuttavat virheet (mahdollisesti puuttuva moduuli?) muissa\n"
 "asetustiedostoissasi."
 
-#: ../ioncore/saveload.c:248
+#: ../ioncore/saveload.c:253
 msgid "Unable to get file for layout backup."
 msgstr "Sijoittelun varmuuskopiolle ei voitu muodostaa tiedostonimeä."
 
-#: ../ioncore/saveload.c:252
+#: ../ioncore/saveload.c:257
 #, c-format
 msgid "Backup file %s already exists."
 msgstr "Varmuuskopio %s on jo olemassa."
 
-#: ../ioncore/saveload.c:258
+#: ../ioncore/saveload.c:263
 msgid "Failed backup."
 msgstr "Varmuuskopionti epäonnistui."
 
 #
-#: ../ioncore/saveload.c:263
+#: ../ioncore/saveload.c:268
 msgid "Unable to initialise layout on any screen."
 msgstr "Sijoittelun alustus epäonnistui kaikilla näytöillä."
 
-#: ../ioncore/saveload.c:283
+#: ../ioncore/saveload.c:295
 #, c-format
 msgid "Unable to get configuration for screen %d."
 msgstr "Ruudun %d asetukset puuttuvat."
 
-#: ../ioncore/saveload.c:296
+#: ../ioncore/saveload.c:308
 msgid "Unable to save layout."
 msgstr "Sijoittelun talletus epäonnistui."
 
-#: ../ioncore/conf.c:143
+#: ../ioncore/conf.c:235
 msgid "User directory can not be set."
 msgstr "Käyttäjän hakemistoa ei pystytä asettamaan."
 
-#: ../ioncore/conf.c:217
+#: ../ioncore/conf.c:309
 msgid "Some bindmaps were empty, loading ioncore_efbb."
 msgstr "Jotkut sidontakartat olivat tyhjiä. Ladataan ioncore_efbb."
 
-#: ../ioncore/fullscreen.c:98
+#: ../ioncore/fullscreen.c:49
 msgid "Failed to enter full screen mode."
 msgstr "Vaihto kokoruudun tilaan epäonnistui."
 
-#: ../ioncore/fullscreen.c:120
+#: ../ioncore/fullscreen.c:83
 msgid ""
 "Failed to return from full screen mode; remaining manager or parent from "
 "previous location refused to manage us."
@@ -420,45 +407,40 @@ msgstr ""
 "tai vanhempi kieltäytyi hallitsemasta ikkunaa."
 
 #
-#: ../ioncore/mplex.c:172
-msgid "Refusing to destroy - not empty."
-msgstr "Tuhoamisesta kieltäydytään - ei tyhjä."
-
-#
-#: ../ioncore/mplex.c:1678
+#: ../ioncore/mplex.c:1685
 msgid "Invalid position setting."
 msgstr "Virheellinen paikka-asetus."
 
 #
-#: ../ioncore/mplex.c:1718
+#: ../ioncore/mplex.c:1725
 msgid "Invalid action setting."
 msgstr "Virheellinen toiminto-asetus."
 
-#: ../ioncore/gr.c:119
+#: ../ioncore/gr.c:120
 #, c-format
 msgid "Drawing engine %s is not registered!"
 msgstr "Piirtomoottoria %s ei ole rekisteröity!"
 
-#: ../ioncore/gr.c:138
+#: ../ioncore/gr.c:139
 #, c-format
 msgid "Unable to find brush for style '%s'."
 msgstr "Tyylille '%s' ei löytynyt pensseliä."
 
-#: ../ioncore/gr.c:408
+#: ../ioncore/gr.c:646
 msgid "No drawing engines loaded, trying \"de\"."
 msgstr "Yhtään piirtomoottoria ei ole ladattu. Yritetään oletusta \"de\"."
 
-#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96
+#
+#: ../ioncore/frame-draw.c:314
+msgid "<empty frame>"
+msgstr "<tyhjä kehys>"
+
+#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92
 #, c-format
 msgid "Error reparenting %s."
 msgstr "Virhe alueen %s vanhemman vaihdossa."
 
-#
-#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668
-msgid "Workspace not empty - refusing to destroy."
-msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä."
-
-#: ../ioncore/group.c:680
+#: ../ioncore/group.c:711
 msgid "'bottom' already set."
 msgstr "'pohja' on jo asetettu."
 
@@ -471,101 +453,112 @@ msgstr "Virheellinen parametri."
 msgid "Invalid direction parameter."
 msgstr "Virheellinen suunta."
 
-#: ../ioncore/group-ws.c:67
+#: ../ioncore/group-ws.c:51
 #, c-format
 msgid "Unknown placement method \"%s\"."
 msgstr "Tuntematon sijoittelumenetelmä \"%s\"."
 
+#: ../ioncore/detach.c:176
+msgid "Failed to reattach."
+msgstr "Uudelleenliittäminen epäonnistui"
+
+#: ../ioncore/screen-notify.c:190
+msgid "act: "
+msgstr "act: "
+
 #
 #
-#: ../mod_tiling/tiling.c:77
+#: ../mod_tiling/tiling.c:73
 msgid "Split not on workspace."
 msgstr "Jako ei ole tällä työpöydällä."
 
-#: ../mod_tiling/tiling.c:373
+#: ../mod_tiling/tiling.c:348
 msgid "Unable to create a node for status display."
 msgstr "Solmun luonti tilanäytölle epäonnistui."
 
-#: ../mod_tiling/tiling.c:386
+#: ../mod_tiling/tiling.c:361
 msgid "Unable to create new split for status display."
 msgstr "Uuden jaon tekeminen tilanäytölle epäonnistui."
 
-#: ../mod_tiling/tiling.c:937
+#: ../mod_tiling/tiling.c:710
+msgid "Tiling in useless state."
+msgstr "Laatoitus kelvottomassa tilassa."
+
+#: ../mod_tiling/tiling.c:924
 msgid "Invalid direction"
 msgstr "Virheellinen suunta."
 
 #
-#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018
+#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018
 msgid "Invalid node."
 msgstr "Epäkelpo solmu."
 
 #
-#: ../mod_tiling/tiling.c:989
+#: ../mod_tiling/tiling.c:976
 msgid "Unable to split."
 msgstr "Halkaisu ei ole mahdollista."
 
-#: ../mod_tiling/tiling.c:1092
-msgid "Nil frame."
-msgstr "Kehys on asettamatta."
-
-#: ../mod_tiling/tiling.c:1097
-msgid "The frame is not managed by the workspace."
-msgstr "Kehys ei ole tämän työpöydän hallinnoima."
+#: ../mod_tiling/tiling.c:1090
+msgid ""
+"Unable to unsplit: Could not move client windows elsewhere within the tiling."
+msgstr ""
+"Ei voida poistaa halkaisua: asiakasikkunoita ei voitu siirtää muualle "
+"laatoituksessa."
 
-#: ../mod_tiling/tiling.c:1196
+#: ../mod_tiling/tiling.c:1207
 msgid "Nil parameter."
 msgstr "Parametri on asettamatta."
 
-#: ../mod_tiling/tiling.c:1201
+#: ../mod_tiling/tiling.c:1212
 msgid "Manager doesn't match."
 msgstr "Hallitsija on väärä."
 
-#: ../mod_tiling/tiling.c:1238
+#: ../mod_tiling/tiling.c:1249
 msgid "The status display is not a valid parameter for this routine."
 msgstr "Tilanäyttö ei ole kelpo parametri tälle toiminnolle."
 
-#: ../mod_tiling/tiling.c:1329
+#: ../mod_tiling/tiling.c:1340
 msgid "Refusing to float split directly containing the status display."
 msgstr "Tilanäytön suoraan sisältävää jakoa ei voida kelluttaa."
 
-#: ../mod_tiling/tiling.c:1392
+#: ../mod_tiling/tiling.c:1403
 msgid "No suitable split here."
 msgstr "Ei sopivaa jakoa tässä."
 
 #
-#: ../mod_tiling/tiling.c:1428
+#: ../mod_tiling/tiling.c:1439
 msgid "Could not get split tree."
 msgstr "Halkaisupuu puuttuu."
 
-#: ../mod_tiling/tiling.c:1449
+#: ../mod_tiling/tiling.c:1460
 msgid "Workspace already has a status display node."
 msgstr "Työpöydällä on jo solmu tilanäytölle."
 
 #
-#: ../mod_tiling/tiling.c:1487
+#: ../mod_tiling/tiling.c:1498
 msgid "Missing region parameters."
 msgstr "Alueen parameterit puuttuu."
 
-#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780
+#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780
 msgid "Invalid direction."
 msgstr "Virheellinen suunta."
 
 #
-#: ../mod_tiling/tiling.c:1606
+#: ../mod_tiling/tiling.c:1617
 msgid "No split type given."
 msgstr "Halkaisun tyyppiä ei ole asetettu."
 
-#: ../mod_tiling/tiling.c:1619
+#: ../mod_tiling/tiling.c:1630
 msgid "Unknown split type."
 msgstr "Tuntematon halkaisutyyppi."
 
 #
 #
-#: ../mod_tiling/tiling.c:1659
+#: ../mod_tiling/tiling.c:1670
 msgid "The workspace is empty."
 msgstr "Työpöytä on tyhjä."
 
-#: ../mod_tiling/placement.c:106
+#: ../mod_tiling/placement.c:104
 #, c-format
 msgid ""
 "Ooops... could not find a region to attach client window to on workspace %s."
@@ -581,15 +574,15 @@ msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
 msgstr "REGION_RQGEOM_TRYONLY:ä ei tueta tilanäytölle."
 
 #
-#: ../mod_tiling/split.c:1082
+#: ../mod_tiling/split.c:1083
 msgid "Splitting the status display is not allowed."
 msgstr "Tilanäytön halkaisu ei ole sallittu."
 
-#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903
+#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903
 msgid "Unable to split: not enough free space."
 msgstr "Ei voida halkaista: liian vähän tilaa."
 
-#: ../mod_tiling/split.c:1864
+#: ../mod_tiling/split.c:1865
 #, c-format
 msgid "Unable to get configuration for %s."
 msgstr "Alueelle \"%s\" ei saatu asetuksia."
@@ -602,33 +595,33 @@ msgstr "Tilan
 msgid "Status display badly located in split tree."
 msgstr "Tilanäyttö on huonosti sijoittuneena halkaisupuuhun."
 
-#: ../mod_tiling/ops.c:28
-msgid "Already detached"
-msgstr "Irroitettu jo"
-
-#: ../mod_tiling/ops.c:142
+#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120
 msgid "Not member of a group"
 msgstr "Ei jäsenenä missään ryhmässä"
 
-#: ../mod_tiling/ops.c:147
+#: ../mod_tiling/ops.c:77
 msgid "Manager group already has bottom"
 msgstr "Managerilla on jo 'pohja'"
 
-#: ../mod_query/wedln.c:777
+#: ../mod_tiling/ops.c:154
+msgid "Unable to move a region from tiling to group."
+msgstr "Ei voitu siirtää kappaletta laatoituksesta ryhmään."
+
+#: ../mod_query/wedln.c:813
 msgid "history"
 msgstr "hist.täyd."
 
-#: ../mod_query/fwarn.c:34
+#: ../mod_query/fwarn.c:35
 msgid "Error:\n"
 msgstr "Virhe:\n"
 
 #
-#: ../mod_menu/menu.c:537
+#: ../mod_menu/menu.c:601
 msgid "Empty menu."
 msgstr "Tyhjä valikko."
 
 #
-#: ../mod_sm/sm.c:110
+#: ../mod_sm/sm.c:111
 msgid "Failed to set session directory."
 msgstr "Istuntohakemiston asetus epäonnistui."
 
@@ -658,7 +651,7 @@ msgstr "Virhe istunnonhallinan kutsussa IceAddConnectionWatch."
 msgid "Unable to connect to the session manager."
 msgstr "Yhteydenotto istunnonhallintaohjelmaan epäonnistui."
 
-#: ../mod_sp/main.c:85
+#: ../mod_sp/main.c:126
 msgid "Unable to create scratchpad."
 msgstr "Suttausalueen luonti epäonnistui."
 
@@ -666,44 +659,53 @@ msgstr "Suttausalueen luonti ep
 msgid "reading a pipe"
 msgstr "putken luku"
 
-#: ../mod_statusbar/statusbar.c:1046
+#: ../mod_statusbar/main.c:159
+msgid "ion-statusd timed out."
+msgstr "ion-statusd:n käynnistyksen aikaraja umpeutui."
+
+#: ../mod_statusbar/statusbar.c:1081
 #, c-format
 msgid "[ %date || load: %load ] %filler%systray"
 msgstr ""
 
-#: ../de/init.c:42
+#: ../de/init.c:68
 #, c-format
 msgid "Border attribute %s sanity check failed."
 msgstr "Reunan arvon '%s' järkevyystarkistus epäonnistui."
 
-#: ../de/init.c:65
+#: ../de/init.c:91
 #, c-format
 msgid "Unknown border style \"%s\"."
 msgstr "Reunan tyyli \"%s\" on tuntematon."
 
-#: ../de/init.c:97
+#: ../de/init.c:111
+#, c-format
+msgid "Unknown border side configuration \"%s\"."
+msgstr "Reunan sivuasetus \"%s\" on tuntematon."
+
+#: ../de/init.c:144
 #, c-format
 msgid "Unable to allocate colour \"%s\"."
 msgstr "Värin \"%s\" varaaminen epäonnistui."
 
-#: ../de/init.c:160
+#: ../de/init.c:210
 #, c-format
 msgid "Corrupt substyle table %d."
 msgstr "Alityylin %d taulu on rikki."
 
-#: ../de/init.c:193
+#: ../de/init.c:243
 #, c-format
 msgid "Unknown text alignment \"%s\"."
 msgstr "Tuntematon tekstin tasaus \"%s\"."
 
-#: ../de/init.c:263
+#: ../de/init.c:319
 #, c-format
 msgid "'based_on' for %s points back to the style itself."
 msgstr "Tyylin %s 'based_on' -asetus osoittaa itseensä."
 
-#: ../de/init.c:266
+#: ../de/init.c:322
 #, c-format
-msgid "Unknown base style \"%s\"."
+msgid "Unknown base style. \"%s\""
 msgstr "Tuntematon pohjatyyli \"%s\"."
 
 #: ../de/font.c:47
@@ -725,8 +727,7 @@ msgid "Failed to load fallback font."
 msgstr "Hätävarakirjaisimen lataus epäonnistui."
 
 #: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
+msgid "Style is still in use [%d] but the module is being unloaded!"
 msgstr "Tyyli %s on vielä käytössä [%d], mutta moduulia poistetaan!"
 
 #: ../ion/ion.c:42 ../pwm/pwm.c:42
@@ -742,53 +743,43 @@ msgid "Add directory to search path"
 msgstr "Lisää hakemisto hakupolulle"
 
 #: ../ion/ion.c:51 ../pwm/pwm.c:51
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr ""
-"Hallitse vain oletusarvoista juuri-ikkunaa. (Vastaa ensisijaista näyttöä jos "
-"Xinerama ei ole käytössä.)"
-
-#: ../ion/ion.c:55
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)"
+msgid "Manage default screen only"
+msgstr "Hallitse vain oletusarvoista juuri-ikkunaa."
 
-#: ../ion/ion.c:58 ../pwm/pwm.c:58
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella"
-
-#: ../ion/ion.c:62 ../pwm/pwm.c:62
+#: ../ion/ion.c:54 ../pwm/pwm.c:54
 msgid "Name of session (affects savefiles)"
 msgstr "Istunnon nimi (vaikuttaa talletustiedostoihin)"
 
-#: ../ion/ion.c:65 ../pwm/pwm.c:65
+#: ../ion/ion.c:57 ../pwm/pwm.c:57
 msgid "Session manager client ID"
 msgstr "Istunnonhallinnan asiakastunniste"
 
-#: ../ion/ion.c:68 ../pwm/pwm.c:68
+#: ../ion/ion.c:60 ../pwm/pwm.c:60
 msgid "Do not create startup error log and display it with xmessage."
 msgstr "Älä luo käynnistysvirhelokia ja näytä sitä xmessage:lla."
 
-#: ../ion/ion.c:72 ../pwm/pwm.c:72
+#: ../ion/ion.c:64 ../pwm/pwm.c:64
 msgid "Show this help"
 msgstr "Näytä tämä aputeksti"
 
-#: ../ion/ion.c:75 ../pwm/pwm.c:75
+#: ../ion/ion.c:67 ../pwm/pwm.c:67
 msgid "Show program version"
 msgstr "Näytä ohjelman versio"
 
-#: ../ion/ion.c:78 ../pwm/pwm.c:78
+#: ../ion/ion.c:70 ../pwm/pwm.c:70
 msgid "Show about text"
 msgstr "Näytä tietoja ohjelmasta"
 
-#: ../ion/ion.c:93
+#: ../ion/ion.c:85
 msgid "Could not get user configuration file directory."
 msgstr "Käyttäjän asetustiedostohakemisto puuttuu, eikä sitä voitu luoda."
 
-#: ../ion/ion.c:107
+#: ../ion/ion.c:99
 #, c-format
 msgid "%s/welcome.txt"
 msgstr "%s/welcome.fi.txt"
 
-#: ../ion/ion.c:140 ../pwm/pwm.c:87
+#: ../ion/ion.c:132 ../pwm/pwm.c:79
 #, c-format
 msgid ""
 "Usage: %s [options]\n"
@@ -797,28 +788,20 @@ msgstr ""
 "Käyttö: %s [valintoja]\n"
 "\n"
 
-#: ../ion/ion.c:200 ../pwm/pwm.c:150
-msgid "Invalid parameter to -xinerama."
-msgstr "Virheellinen parametri -xinerama:lle"
-
 #
-#: ../ion/ion.c:219 ../pwm/pwm.c:169
+#: ../ion/ion.c:200 ../pwm/pwm.c:150
 msgid "Invalid command line."
 msgstr "Virheellinen komentorivi."
 
-#: ../ion/ion.c:241
+#: ../ion/ion.c:222
 msgid "Ion startup error log:\n"
 msgstr "Ionin käynnistysvirheloki:\n"
 
-#: ../ion/ion.c:252 ../pwm/pwm.c:202
+#: ../ion/ion.c:233 ../pwm/pwm.c:183
 msgid "Refusing to start due to encountered errors."
 msgstr "Ohjelma kieltäytyy käynnistymästä tavattujen virheiden johdosta."
 
-#: ../pwm/pwm.c:55
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Hyödynnä Xineramaa (oletus: 0/ei)"
-
-#: ../pwm/pwm.c:191
+#: ../pwm/pwm.c:172
 msgid "PWM startup error log:\n"
 msgstr "PWM:n käynnistysvirheloki:\n"
 
@@ -889,7 +872,7 @@ msgstr ""
 
 #: ../../libextl-3/luaextl.c:1356
 msgid "Returned dead object."
-msgstr "Kuollut olio palautettu."
+msgstr "Kuollut kappale palautettu."
 
 #: ../../libextl-3/luaextl.c:1359
 #, c-format
@@ -938,16 +921,16 @@ msgstr ""
 "kykenee."
 
 #
-#: ../../libextl-3/luaextl.c:2373
+#: ../../libextl-3/luaextl.c:2347
 msgid "Maximal serialisation depth reached."
 msgstr "Suurin mahdollinen talletuksen rekursiosyvyys saavutettu."
 
-#: ../../libextl-3/luaextl.c:2394
+#: ../../libextl-3/luaextl.c:2368
 #, c-format
 msgid "Unable to serialise type %s."
 msgstr "Tyyppiä %s ei voida tallettaa."
 
-#: ../../libextl-3/luaextl.c:2425
+#: ../../libextl-3/luaextl.c:2399
 msgid "-- This file has been generated by Ion. Do not edit.\n"
 msgstr "-- Tämä tiedosto on Ionin luoma. Älä editoi sitä.\n"
 
@@ -960,619 +943,629 @@ msgstr ""
 "Tyyppitarkistus epäonnistui tason 2 kutsunkäsittelijässä parametrille #%d "
 "(oli %s, odotettiin %s)."
 
-msgid "Grow-D"
-msgstr "Kasvu: alas"
-
-msgid "Grow-U"
-msgstr "Kasvu: ylös"
-
-msgid "Grow-R"
-msgstr "Kasvu: oikealle"
-
-msgid "Grow-L"
-msgstr "Kasvu: vasemmalle"
-
-msgid "Pos-BR"
-msgstr "Paikka: alaoikea"
-
-msgid "Pos-BL"
-msgstr "Paikka: alavasen"
-
-msgid "Pos-TR"
-msgstr "Paikka: yläoikea"
+msgid "Scroll the message or completions up/down."
+msgstr "Vieritä viestiä tai täydennyksiä ylös/alas."
 
-msgid "Pos-TL"
-msgstr "Paikka: ylävasen"
+msgid "Close the query/message box, not executing bound actions."
+msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja."
 
-msgid "Toggle floating dock."
-msgstr "Näytä/piiloita kelluva laituri (dock)."
+msgid "Close the query and execute bound action."
+msgstr "Sulje kysely ja suorita sidottu toiminta."
 
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Tyhjää valikon hakupuskuri."
+msgid "Complete from history"
+msgstr "Täydennä historiasta"
 
-msgid "Select next/previous menu entry."
-msgstr "Siirry seuraavaan/edelliseen valintaan."
+msgid "Try to complete the entered text or cycle through completions."
+msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä."
 
 #
-#
-msgid "Activate current menu entry."
-msgstr "Suorita valinta."
-
-msgid "Close the menu."
-msgstr "Sulje valikko."
-
-msgid "New tiling"
-msgstr "Uusi laatoitus"
-
-msgid "Detach"
-msgstr "Irroita"
+msgid "Clear mark/cancel selection."
+msgstr "Lopeta tekstin valinta."
 
 #
-msgid "Transpose"
-msgstr "Käännä"
+msgid "Copy selection."
+msgstr "Kopioi valittu teksti."
 
 #
-msgid "Flip"
-msgstr "Peilaa"
+msgid "Cut selection."
+msgstr "Leikkaa valittu teksti."
 
 #
-#
-msgid "Split horizontally"
-msgstr "Jaa vaakasuunnassa"
+msgid "Set mark/begin selection."
+msgstr "Aloita tekstin valinta."
 
-#
-#
-msgid "Split vertically"
-msgstr "Jaa pystysuunnassa"
+msgid "Paste from the clipboard."
+msgstr "Liimaa teksti leikelaudalta."
 
 #
-msgid "At root"
-msgstr "Juuressa"
+msgid "Select next/previous (matching) history entry."
+msgstr "Näytä seuraava/edellinen vastaus muistista."
 
-msgid "Below"
-msgstr "Alapuolella"
+msgid "Transpose characters."
+msgstr "Transponoi merkit."
 
-msgid "Above"
-msgstr "Yläpuolella"
+msgid "Delete the whole line."
+msgstr "Tuhoa koko rivi."
 
-msgid "At right"
-msgstr "Oikealla"
+msgid "Delete to end of line."
+msgstr "Tuhoa merkit rivin loppuun saakka."
 
-msgid "At left"
-msgstr "Vasemmalla"
+msgid "Delete one word forward/backward."
+msgstr "Tuhoa yksi sana eteen/taakse."
 
-msgid "Float split"
-msgstr "Kelluta"
+msgid "Delete previous character."
+msgstr "Tuhoa edellinen merkki."
 
-#
-msgid "Destroy frame"
-msgstr "Tuhoa kehys"
+msgid "Delete next character."
+msgstr "Poista seuraava merkki."
 
-msgid "Tile frame, if no tiling exists on the workspace"
-msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä"
+msgid "Skip one word forward/backward."
+msgstr "Ohita yksi sana eteen/taaksepäin"
 
-msgid "Detach window from tiled frame"
-msgstr "Irroita ikkuna laatoitetusta kehyksestä"
+msgid "Go to end/beginning."
+msgstr "Mene rivin alkuun/loppuun."
 
-msgid "Destroy current frame."
-msgstr "Tuhoa tämänhetkinen kehys."
+msgid "Move one character forward/backward."
+msgstr "Siirry yksi merkki eteen/taakse."
 
-msgid "Split current frame horizontally."
-msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa."
+msgid "Kill"
+msgstr "Tapa"
 
-msgid "Go to frame above/below/right/left of current frame."
-msgstr ""
-"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan "
-"kehykseen."
+msgid "Attach tagged"
+msgstr "Liitä merkityt"
 
-msgid "Split current frame vertically."
-msgstr "Halkaise tämänhetkinen kehys pystysuunnassa."
+msgid "Rename"
+msgstr "Uudelleennimeä"
 
-msgid "Failed to create statusbar."
-msgstr "Epäonnistuttiin tilarivin luonnissa"
+msgid "Close"
+msgstr "Sulje"
 
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä."
+msgid "De/reattach"
+msgstr "Irroita/liitä"
 
-msgid "Screen not found."
-msgstr "Ruutua ei löytynyt."
+msgid "Toggle tag"
+msgstr "Muuta merkintää"
 
-msgid "Failed to start ion-statusd."
-msgstr "Ion-statusd:n käynnistys eopäonnistui."
+msgid "Window info"
+msgstr "Ikkunan tiedot"
 
-msgid "Errors starting ion-statusd:\n"
-msgstr "Ion-statusd:n käynnistysvirheet:\n"
+msgid "Clear tags"
+msgstr "Poista merkinnät"
 
-msgid "Could not find %s"
-msgstr "Ei löydettyä %s:ää."
+msgid "Exit"
+msgstr "Poistu"
 
-msgid "ion-statusd quit."
-msgstr "ion-statusd päätti suorituksen."
+msgid "Restart TWM"
+msgstr "Käynnistä TWM"
 
-msgid "Not a directory."
-msgstr "Ei hakemisto."
+msgid "Restart"
+msgstr "Uudelleenkäynnistä"
 
-msgid "Invalid command"
-msgstr "Virheellinen komento"
+msgid "Save"
+msgstr "Talleta"
 
-msgid "Error in command string: "
-msgstr "Virhe komentojonossa:"
+msgid "Session"
+msgstr "Istunto"
 
-msgid "Error compiling guard: %s"
-msgstr "Virhe vahdin käännössä. %s"
+msgid "Styles"
+msgstr "Tyylit"
 
-msgid "Invalid guard %s."
-msgstr "Virheellinen vahti %s."
+msgid "About Ion"
+msgstr "Tietoja Ionista"
 
-msgid "Main menu:"
-msgstr "Päävalikko:"
+msgid "Help"
+msgstr "Ohjeet"
 
-msgid "Context menu:"
-msgstr "Kontekstivalikko:"
+msgid "Lock screen"
+msgstr "Lukitse näyttö"
 
-msgid "Floating frame"
-msgstr "Kelluva kehys"
+msgid "Terminal"
+msgstr "Pääteohjelma"
 
-msgid "Tiled frame"
-msgstr "Laatoitettu kehys"
+#
+msgid "Run..."
+msgstr "Suorita..."
 
-msgid "Tiling"
-msgstr "Laatoitus"
+#
+msgid "Move in specified direction."
+msgstr "Liiku vastaavaan suuntaan."
+
+msgid "Shrink in specified direction."
+msgstr "Kutista vastaavaan suuntaan."
 
 #
-msgid "Workspace"
-msgstr "Työpöytä"
+msgid "Grow in specified direction."
+msgstr "Kasvata vastaavaan suuntaan."
 
-msgid "Screen"
-msgstr "Näyttö"
+msgid "End the resize mode."
+msgstr "Siirry tilasta pois."
 
-msgid "Frame"
-msgstr "Kehys"
+msgid "Cancel the resize mode."
+msgstr "Peruuta tilasta."
 
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekursiivinen taulu - ei voida syväkopioida."
+msgid "Move the frame."
+msgstr "Siirrä kehystä."
 
-msgid ""
-"Making the following minimal emergency mappings:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Tehdään seuraavat vähimmäiset hätäsidonnat:\n"
-"  F2 -> xterm\n"
-"  F11 -> uudelleenkäynnistys\n"
-"  F12 -> lopetus\n"
-"  Mod1+C -> sulkeminen\n"
-"  Mod1+K P/N -> vaihto kehyksen sisällä\n"
+msgid "Lower the frame."
+msgstr "Alenna kehystä."
 
-msgid "Unable to append to non-table menu"
-msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna "
+#
+msgid "Raise the frame."
+msgstr "Nosta kehys."
 
-msgid "Cannot save selection."
-msgstr "Ei voida tallettaa valintaa."
+msgid "Toggle shade mode"
+msgstr "Kytke litistys päälle/pois."
 
-msgid "Save look selection in %s?"
-msgstr "Talletaanko ulkonäköasetus tiedostoon %s?"
+msgid "Attach tagged objects to this frame."
+msgstr "Liitä merkityt kappaleet tähän kehykseen."
 
-msgid "Too much result data"
-msgstr "Liian suuri vastaus"
+msgid "Maximize the frame horizontally/vertically."
+msgstr "Maksimoi kehys vaaka/pystysuunnassa."
 
-msgid "Could not find client window %s."
-msgstr "Asiakasikkunaa %s ei löytynyt."
+msgid "Move current object within the frame left/right."
+msgstr ""
+"Siirrä kehyksessä tällä hetkellä näytettävää kappaletta vasemmalle/oikealle."
 
-msgid "Cannot attach: different root windows."
-msgstr "Ei voida liittää: eri juuri-ikkunat."
+msgid "Switch to next/previous object within the frame."
+msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan kappaleeseen."
 
-msgid "Unknown error"
-msgstr "Tuntematon virhe"
+msgid "Switch to n:th object within the frame."
+msgstr "Siirry n:teen kehyksen jakavaan kappaleeseen."
 
-msgid "Go to window:"
-msgstr "Mene ikkunaan:"
+#
+msgid "Query for a client window to attach."
+msgstr "Kysy liitettävää asiakasikkunaa."
 
-msgid "Attach window:"
-msgstr "Liitä ikkuna:"
+msgid "Move objects between frames by dragging and dropping the tab."
+msgstr ""
+"Siirrä kappaletta kehysten välillä raahaamalla ja pudottamalla välilehti."
 
-msgid "Go to or create workspace:"
-msgstr "Mene tai luo työpöytä:"
+msgid "Resize the frame."
+msgstr "Muuta kehyksen kokoa."
 
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?"
+msgid "Switch the frame to display the object indicated by the tab."
+msgstr "Vaihda kehys näyttämään välilehden ilmoittama kappale."
 
-msgid "Restart Ion (y/n)?"
-msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?"
+msgid "Begin move/resize mode."
+msgstr "Aloita siirto ja koonmuutostila."
 
-msgid "Frame name:"
-msgstr "Kehyksen nimi:"
+msgid "Display context menu."
+msgstr "Näytä kontekstivalikko."
 
-msgid "Workspace name:"
-msgstr "Työpöydän nimi:"
+#
+msgid "Query for a client window to go to."
+msgstr "Kysy asiakasikkunaa, johon siirtyä."
 
-msgid "Edit file:"
-msgstr "Muokkaa tiedostoa:"
+msgid "Query for workspace to go to or create a new one."
+msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi."
 
-msgid "View file:"
-msgstr "Näytä tiedosto:"
+msgid "Query for file to view."
+msgstr "Kysy tiedostoa näytettäväksi."
 
-msgid "Run:"
-msgstr "Suorita:"
+msgid "Query for file to edit."
+msgstr "Kysy tiedostoa muokattavaksi."
 
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui."
+msgid "Query for host to connect to with SSH."
+msgstr "Ota SSH-yhteys kyseltävään koneeseen."
 
-msgid "Failed to open ~/.ssh/config"
-msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui."
+msgid "Query for Lua code to execute."
+msgstr "Kysy Lua-koodia ajettavaksi."
 
-msgid "SSH to:"
-msgstr "Avaa SSH-yhteys:"
+msgid "Query for command line to execute."
+msgstr "Kysy komentoriviä suoritettavaksi."
 
-msgid "Manual page (%s):"
-msgstr "Ohjesivu (%s):"
+#
+msgid "Run a terminal emulator."
+msgstr "Käynnistä pääte-emulaattori."
 
-msgid "Lua code:"
-msgstr "Lua-koodia:"
+msgid "Show the Ion manual page."
+msgstr "Näytä Ionin ohjesivu."
 
-msgid "Unknown menu %s."
-msgstr "Tuntematon valikko %s."
+msgid "Query for manual page to be displayed."
+msgstr "Kysy ohjesivua näytettäväksi."
 
-msgid "Missing submenu "
-msgstr "Puuttuva alivalikko "
+msgid "Toggle tag of current object."
+msgstr "Merkitse aktiivinen kappale."
 
-msgid "%s:"
+msgid "Detach (float) or reattach an object to its previous location."
 msgstr ""
+"Irroita (kelluta) tai uudelleenliitä kappale sen edelliseen sijaintiin."
 
-msgid "No entry '%s'"
-msgstr "Tuntematon valinta '%s'."
+msgid "Close current object."
+msgstr "Sulje aktiivinen kappale."
 
+msgid "Toggle client window group full-screen mode"
+msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa"
+
+#
 msgid ""
-"\n"
-"%sClass: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Send next key press to the client window. Some programs may not allow this "
+"by default."
 msgstr ""
-"\n"
-"Luokka(class): %s\n"
-"Rooli(role): %s\n"
-"Instanssi(instance): %s\n"
-"XID: 0x%x"
-
-msgid "Toggle scratchpad."
-msgstr "Kytke suttausalue päälle/pois"
+"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki "
+"ohjelmat eivät välttämättä salli tätä oletuksena."
 
-msgid "Programs"
-msgstr "Ohjelmat"
+#
+msgid "Kill client owning the client window."
+msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma."
 
-msgid "Lock screen"
-msgstr "Lukitse näyttö"
+#
+msgid ""
+"Nudge the client window. This might help with some programs' resizing "
+"problems."
+msgstr ""
+"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien "
+"koko-ongelmien kanssa."
 
-msgid "Help"
-msgstr "Ohjeet"
+msgid "Raise focused object, if possible."
+msgstr "Nosta aktiivista kappaletta, jos mahdollista."
 
-#
-msgid "Workspaces"
-msgstr "Työpöydät"
+msgid "Backward-circulate focus."
+msgstr "Kierrätä fokusta taaksepäin"
 
-msgid "New"
-msgstr "Uusi"
+msgid "Forward-circulate focus."
+msgstr "Kierrätä fokusta eteenpäin."
 
-msgid "Styles"
-msgstr "Tyylit"
+msgid "Display the window list menu."
+msgstr "Näytä ikkunavalikko."
 
-msgid "Session"
-msgstr "Istunto"
+msgid "Display the main menu."
+msgstr "Näytä päävalikko."
 
-msgid "Close"
-msgstr "Sulje"
+#
+#
+msgid "Create a new workspace of chosen default type."
+msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä."
 
-msgid "List"
-msgstr "Lista"
+#
+msgid "Go to next/previous screen on multihead setup."
+msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä."
 
 #
-msgid ""
-"Switch to n:th object (workspace, full screen client window) within current "
-"screen."
-msgstr ""
-"Siirry n:teen tämänhetkisen näytön lomittamaan olioon (työpöytä, kokoruudun "
-"asiakasikkuna)."
+msgid "Go to n:th screen on multihead setup."
+msgstr "Siirry näytölle n usean näytön järjestelmässä."
 
 #
-msgid "Switch to next/previous object within current screen."
-msgstr "Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan olioon."
+msgid "Clear all tags."
+msgstr "Poista kaikki merkinnät."
 
 msgid "Go to first region demanding attention or previously active one."
 msgstr ""
 "Mene ensimmäiseen huomiota vaativaan alueeseen, tai edelliseen aktiiviseen."
 
 #
-msgid "Clear all tags."
-msgstr "Poista kaikki merkinnät."
+msgid "Switch to next/previous object within current screen."
+msgstr ""
+"Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan kappaleeseen."
 
 #
-msgid "Go to n:th screen on multihead setup."
-msgstr "Siirry näytölle n usean näytön järjestelmässä."
+msgid ""
+"Switch to n:th object (workspace, full screen client window) within current "
+"screen."
+msgstr ""
+"Siirry n:teen tämänhetkisen näytön lomittamaan kappaleeseen (työpöytä, "
+"kokoruudun asiakasikkuna)."
 
-#
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä."
+msgid "List"
+msgstr "Lista"
 
-#
-#
-msgid "Create a new workspace of chosen default type."
-msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä."
+msgid "New"
+msgstr "Uusi"
 
-msgid "Display the main menu."
-msgstr "Näytä päävalikko."
+msgid "Dillo"
+msgstr ""
 
-msgid "Display the window list menu."
-msgstr "Näytä ikkunavalikko."
+msgid "Konqueror"
+msgstr ""
 
-msgid "Forward-circulate focus."
-msgstr "Kierrätä fokusta eteenpäin."
+msgid "Links"
+msgstr ""
 
-msgid "Backward-circulate focus."
-msgstr "Kierrätä fokusta taaksepäin"
+msgid "Opera"
+msgstr ""
 
-msgid "Raise focused object, if possible."
-msgstr "Nosta fokusoitu olio, jos mahdollista."
+msgid "Rxvt"
+msgstr ""
 
-#
-msgid ""
-"Nudge the client window. This might help with some programs' resizing "
-"problems."
+msgid "W3M"
 msgstr ""
-"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien "
-"koko-ongelmien kanssa."
 
-#
-msgid "Kill client owning the client window."
-msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma."
+msgid "XTerm"
+msgstr ""
 
 #
+msgid "Workspaces"
+msgstr "Työpöydät"
+
+msgid "Programs"
+msgstr "Ohjelmat"
+
+msgid "Show the PWM manual page."
+msgstr "Näytä PWM:n ohjesivu."
+
+msgid "Toggle scratchpad."
+msgstr "Kytke suttausalue päälle/pois"
+
 msgid ""
-"Send next key press to the client window. Some programs may not allow this "
-"by default."
+"\n"
+"%sClass: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
 msgstr ""
-"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki "
-"ohjelmat eivät välttämättä salli tätä oletuksena."
+"\n"
+"Luokka(class): %s\n"
+"Rooli(role): %s\n"
+"Instanssi(instance): %s\n"
+"XID: 0x%x"
 
-msgid "Toggle client window group full-screen mode"
-msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa"
+msgid "No entry '%s'"
+msgstr "Tuntematon valinta '%s'."
 
-msgid "Close current object."
-msgstr "Sulje aktiivinen olio."
+msgid "%s:"
+msgstr ""
 
-msgid "Query for manual page to be displayed."
-msgstr "Kysy ohjesivua näytettäväksi."
+msgid "Missing submenu "
+msgstr "Puuttuva alivalikko "
 
-msgid "Show the Ion manual page."
-msgstr "Näytä Ionin ohjesivu."
+msgid "Unknown menu %s."
+msgstr "Tuntematon valikko %s."
 
-#
-msgid "Run a terminal emulator."
-msgstr "Käynnistä pääte-emulaattori."
+msgid "Lua code:"
+msgstr "Lua-koodia:"
 
-msgid "Query for command line to execute."
-msgstr "Kysy komentoriviä suoritettavaksi."
+msgid "Manual page (%s):"
+msgstr "Ohjesivu (%s):"
 
-msgid "Query for Lua code to execute."
-msgstr "Kysy Lua-koodia ajettavaksi."
+msgid "SSH to:"
+msgstr "Avaa SSH-yhteys:"
 
-msgid "Query for host to connect to with SSH."
-msgstr "Ota SSH-yhteys kyseltävään koneeseen."
+msgid "Failed to open ~/.ssh/config"
+msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui."
 
-msgid "Query for file to edit."
-msgstr "Kysy tiedostoa muokattavaksi."
+msgid "Failed to open ~/.ssh/known_hosts"
+msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui."
 
-msgid "Query for file to view."
-msgstr "Kysy tiedostoa näytettäväksi."
+msgid "Run:"
+msgstr "Suorita:"
 
-msgid "Query for workspace to go to or create a new one."
-msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi."
+msgid "View file:"
+msgstr "Näytä tiedosto:"
 
-#
-msgid "Query for a client window to go to."
-msgstr "Kysy asiakasikkunaa, johon siirtyä."
+msgid "Edit file:"
+msgstr "Muokkaa tiedostoa:"
 
-#
-msgid "Query for a client window to attach."
-msgstr "Kysy liitettävää asiakasikkunaa."
+msgid "Workspace name:"
+msgstr "Työpöydän nimi:"
 
-msgid "Display context menu."
-msgstr "Näytä kontekstivalikko."
+msgid "Frame name:"
+msgstr "Kehyksen nimi:"
 
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maksimoi kehys vaaka/pystysuunnassa."
+msgid "Restart Ion (y/n)?"
+msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?"
 
-msgid "Begin move/resize mode."
-msgstr "Aloita siirto ja koonmuutostila."
+msgid "Exit Ion/Shutdown session (y/n)?"
+msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?"
 
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Vaihda kehys näyttämään välilehden ilmoittama olio."
+msgid "Go to or create workspace:"
+msgstr "Mene tai luo työpöytä:"
 
-msgid "Resize the frame."
-msgstr "Muuta kehyksen kokoa."
+msgid "Attach window:"
+msgstr "Liitä ikkuna:"
 
-msgid "Move the frame."
-msgstr "Siirrä kehystä."
+msgid "Go to window:"
+msgstr "Mene ikkunaan:"
 
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Siirrä olioita kehysten välillä raahaamalla ja pudottamalla välilehti."
+msgid "New workspace layout (default):"
+msgstr "Uuden työpöydän sijoitelma (default):"
+
+msgid "Unknown error"
+msgstr "Tuntematon virhe"
+
+msgid "Unknown layout"
+msgstr "Tuntematon sijoittelu."
+
+msgid "Cannot attach: different root windows."
+msgstr "Ei voida liittää: eri juuri-ikkunat."
+
+msgid "Could not find client window %s."
+msgstr "Asiakasikkunaa %s ei löytynyt."
+
+msgid "Too much result data"
+msgstr "Liian suuri vastaus"
+
+msgid "Could not find %s"
+msgstr "Ei löydettyä %s:ää."
 
-msgid "Tag current object within the frame."
-msgstr "Merkitse kehyksen tällä hetkellä näyttämä olio."
+msgid "Not a directory."
+msgstr "Ei hakemisto."
 
-msgid "Switch to n:th object within the frame."
-msgstr "Siirry n:teen kehyksen jakavaan olioon."
+msgid "Invalid command"
+msgstr "Virheellinen komento"
 
-msgid "Switch to next/previous object within the frame."
-msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan olioon."
+msgid "Error in command string: "
+msgstr "Virhe komentojonossa:"
 
-msgid "Move current object within the frame left/right."
-msgstr ""
-"Siirrä kehyksessä tällä hetkellä näytettävää oliota vasemmalle/oikealle."
+msgid "Error compiling guard: %s"
+msgstr "Virhe vahdin käännössä. %s"
 
-msgid "Attach tagged objects to this frame."
-msgstr "Liitä merkityt oliot tähän kehykseen."
+msgid "Invalid guard %s."
+msgstr "Virheellinen vahti %s."
 
-msgid "Toggle shade mode"
-msgstr "Kytke litistys päälle/pois."
+msgid "Main menu:"
+msgstr "Päävalikko:"
 
-#
-msgid "Raise the frame."
-msgstr "Nosta kehys."
+msgid "Context menu:"
+msgstr "Kontekstivalikko:"
 
-msgid "Lower the frame."
-msgstr "Alenna kehystä."
+msgid "Floating frame"
+msgstr "Kelluva kehys"
 
-msgid "Cancel the resize mode."
-msgstr "Peruuta tilasta."
+msgid "Tiled frame"
+msgstr "Laatoitettu kehys"
 
-msgid "End the resize mode."
-msgstr "Siirry tilasta pois."
+msgid "Tiling"
+msgstr "Laatoitus"
 
 #
-msgid "Grow in specified direction."
-msgstr "Kasvata vastaavaan suuntaan."
+msgid "Workspace"
+msgstr "Työpöytä"
 
-msgid "Shrink in specified direction."
-msgstr "Kutista vastaavaan suuntaan."
+msgid "Screen"
+msgstr "Näyttö"
 
-#
-msgid "Move in specified direction."
-msgstr "Liiku vastaavaan suuntaan."
+msgid "Frame"
+msgstr "Kehys"
 
-msgid "About Ion"
-msgstr "Tietoja Ionista"
+msgid "Recursive table - unable to deepcopy"
+msgstr "Rekursiivinen taulu - ei voida syväkopioida."
 
-msgid "XTerm"
+msgid ""
+"Making the following minimal emergency mappings:\n"
+"  F2 -> xterm\n"
+"  F11 -> restart\n"
+"  F12 -> exit\n"
+"  Mod1+C -> close\n"
+"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
 msgstr ""
+"Tehdään seuraavat vähimmäiset hätäsidonnat:\n"
+"  F2 -> xterm\n"
+"  F11 -> uudelleenkäynnistys\n"
+"  F12 -> lopetus\n"
+"  Mod1+C -> sulkeminen\n"
+"  Mod1+K P/N -> vaihto kehyksen sisällä\n"
 
-msgid "W3M"
-msgstr ""
+msgid "Unable to append to non-table menu"
+msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna "
 
-msgid "Rxvt"
-msgstr ""
+msgid "Cannot save selection."
+msgstr "Ei voida tallettaa valintaa."
 
-msgid "Opera"
-msgstr ""
+msgid "Save look selection in %s?"
+msgstr "Talletaanko ulkonäköasetus tiedostoon %s?"
 
-msgid "Links"
-msgstr ""
+msgid "ion-statusd quit."
+msgstr "ion-statusd päätti suorituksen."
 
-msgid "Konqueror"
-msgstr ""
+msgid "Errors starting ion-statusd:\n"
+msgstr "Ion-statusd:n käynnistysvirheet:\n"
 
-msgid "Dillo"
-msgstr ""
+msgid "Failed to start ion-statusd."
+msgstr "Ion-statusd:n käynnistys eopäonnistui."
 
-#
-msgid "Run..."
-msgstr "Suorita..."
+msgid "Screen not found."
+msgstr "Ruutua ei löytynyt."
 
-msgid "Save"
-msgstr "Talleta"
+msgid "Screen already has an stdisp. Refusing to create a statusbar."
+msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä."
 
-msgid "Restart"
-msgstr "Uudelleenkäynnistä"
+msgid "Failed to create statusbar."
+msgstr "Epäonnistuttiin tilarivin luonnissa"
 
-msgid "Restart TWM"
-msgstr "Käynnistä TWM"
+msgid "Split current frame vertically."
+msgstr "Halkaise tämänhetkinen kehys pystysuunnassa."
 
-msgid "Exit"
-msgstr "Poistu"
+msgid "Go to frame above/below/right/left of current frame."
+msgstr ""
+"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan "
+"kehykseen."
 
-msgid "Kill"
-msgstr "Tapa"
+msgid "Split current frame horizontally."
+msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa."
 
-msgid "Toggle tag"
-msgstr "Muuta lippua"
+msgid "Destroy current frame."
+msgstr "Tuhoa tämänhetkinen kehys."
 
-msgid "Attach tagged"
-msgstr "Liitä merkityt"
+msgid "Tile frame, if no tiling exists on the workspace"
+msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä"
 
-msgid "Clear tags"
-msgstr "Poista merkinnät"
+#
+msgid "Destroy frame"
+msgstr "Tuhoa kehys"
 
-msgid "Window info"
-msgstr "Ikkunan tiedot"
+#
+#
+msgid "Split vertically"
+msgstr "Jaa pystysuunnassa"
 
 #
-msgid "New workspace"
-msgstr "Uusi työpöytä"
+#
+msgid "Split horizontally"
+msgstr "Jaa vaakasuunnassa"
 
-msgid "New empty workspace"
-msgstr "Uusi tyhjä työpöytä"
+#
+msgid "Flip"
+msgstr "Peilaa"
 
 #
-msgid "Close workspace"
-msgstr "Sulje työpöytä"
+msgid "Transpose"
+msgstr "Käännä"
 
-msgid "Move one character forward/backward."
-msgstr "Siirry yksi merkki eteen/taakse."
+msgid "Untile"
+msgstr "Hajoita laatoitus"
 
-msgid "Go to end/beginning."
-msgstr "Mene rivin alkuun/loppuun."
+msgid "Float split"
+msgstr "Kelluta"
 
-msgid "Skip one word forward/backward."
-msgstr "Ohita yksi sana eteen/taaksepäin"
+msgid "At left"
+msgstr "Vasemmalla"
 
-msgid "Delete next character."
-msgstr "Poista seuraava merkki."
+msgid "At right"
+msgstr "Oikealla"
 
-msgid "Delete previous character."
-msgstr "Tuhoa edellinen merkki."
+msgid "Above"
+msgstr "Yläpuolella"
 
-msgid "Delete one word forward/backward."
-msgstr "Tuhoa yksi sana eteen/taakse."
+msgid "Below"
+msgstr "Alapuolella"
 
-msgid "Delete to end of line."
-msgstr "Tuhoa merkit rivin loppuun saakka."
+#
+msgid "At root"
+msgstr "Juuressa"
 
-msgid "Delete the whole line."
-msgstr "Tuhoa koko rivi."
+msgid "New tiling"
+msgstr "Uusi laatoitus"
 
-msgid "Transpose characters."
-msgstr "Transponoi merkit."
+msgid "Close the menu."
+msgstr "Sulje valikko."
 
 #
-msgid "Select next/previous (matching) history entry."
-msgstr "Näytä seuraava/edellinen vastaus muistista."
+#
+msgid "Activate current menu entry."
+msgstr "Suorita valinta."
 
-msgid "Paste from the clipboard."
-msgstr "Liimaa teksti leikelaudalta."
+msgid "Select next/previous menu entry."
+msgstr "Siirry seuraavaan/edelliseen valintaan."
 
-#
-msgid "Set mark/begin selection."
-msgstr "Aloita tekstin valinta."
+msgid "Clear the menu's typeahead find buffer."
+msgstr "Tyhjää valikon hakupuskuri."
 
-#
-msgid "Cut selection."
-msgstr "Leikkaa valittu teksti."
+msgid "Toggle floating dock."
+msgstr "Näytä/piiloita kelluva laituri (dock)."
 
-#
-msgid "Copy selection."
-msgstr "Kopioi valittu teksti."
+msgid "Pos-TL"
+msgstr "Paikka: ylävasen"
 
-#
-msgid "Clear mark/cancel selection."
-msgstr "Lopeta tekstin valinta."
+msgid "Pos-TR"
+msgstr "Paikka: yläoikea"
 
-msgid "Try to complete the entered text or cycle through completions."
-msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä."
+msgid "Pos-BL"
+msgstr "Paikka: alavasen"
 
-msgid "Complete from history"
-msgstr "Täydennä historiasta"
+msgid "Pos-BR"
+msgstr "Paikka: alaoikea"
 
-msgid "Close the query and execute bound action."
-msgstr "Sulje kysely ja suorita sidottu toiminta."
+msgid "Grow-L"
+msgstr "Kasvu: vasemmalle"
 
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja."
+msgid "Grow-R"
+msgstr "Kasvu: oikealle"
 
-msgid "Scroll the message or completions up/down."
-msgstr "Vieritä viestiä tai täydennyksiä ylös/alas."
+msgid "Grow-U"
+msgstr "Kasvu: ylös"
+
+msgid "Grow-D"
+msgstr "Kasvu: alas"
 
 msgid "press"
 msgstr "painallus"
@@ -1592,6 +1585,71 @@ msgstr ""
 msgid "%s %s at %s"
 msgstr "%s %s osassa %s"
 
+#~ msgid "Tag current object within the frame."
+#~ msgstr "Merkitse kehyksen tällä hetkellä näyttämä kappale."
+
+#~ msgid "Xinerama sanity check failed; overlapping screens detected."
+#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
+
+#~ msgid "Xinerama sanity check failed; zero size detected."
+#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
+
+#~ msgid ""
+#~ "Don't know how to get Xinerama information for multiple X root windows."
+#~ msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle."
+
+#~ msgid "Error retrieving Xinerama information."
+#~ msgstr "Xinerama-tietoja ei saatu."
+
+#~ msgid "Unable to setup Xinerama screen %d."
+#~ msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui."
+
+#~ msgid "Unable to setup X screen %d."
+#~ msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui."
+
+#
+#~ msgid "Refusing to destroy - not empty."
+#~ msgstr "Tuhoamisesta kieltäydytään - ei tyhjä."
+
+#
+#~ msgid "Workspace not empty - refusing to destroy."
+#~ msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä."
+
+#~ msgid "Nil frame."
+#~ msgstr "Kehys on asettamatta."
+
+#~ msgid "The frame is not managed by the workspace."
+#~ msgstr "Kehys ei ole tämän työpöydän hallinnoima."
+
+#~ msgid "Already detached"
+#~ msgstr "Irroitettu jo"
+
+#~ msgid "Use Xinerama screen information (default: 1/yes)"
+#~ msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)"
+
+#~ msgid "Ignored: not compiled with Xinerama support"
+#~ msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella"
+
+#~ msgid "Invalid parameter to -xinerama."
+#~ msgstr "Virheellinen parametri -xinerama:lle"
+
+#~ msgid "Use Xinerama screen information (default: 0/no)"
+#~ msgstr "Hyödynnä Xineramaa (oletus: 0/ei)"
+
+#~ msgid "Detach window from tiled frame"
+#~ msgstr "Irroita ikkuna laatoitetusta kehyksestä"
+
+#
+#~ msgid "New workspace"
+#~ msgstr "Uusi työpöytä"
+
+#~ msgid "New empty workspace"
+#~ msgstr "Uusi tyhjä työpöytä"
+
+#
+#~ msgid "Close workspace"
+#~ msgstr "Sulje työpöytä"
+
 #~ msgid "Could not find a complete workspace class. Please load some modules."
 #~ msgstr ""
 #~ "Yhtäkään täydellistä työpöytäluokkaa ei löydy. Ole hyvä ja lataa joitakin "
@@ -1678,8 +1736,8 @@ msgstr "%s %s osassa %s"
 #~ msgid "Restart PWM"
 #~ msgstr "Käynnistä PWM"
 
-#~ msgid "Refresh list"
-#~ msgstr "Virkistä lista"
+msgid "Refresh list"
+msgstr "Virkistä lista"
 
 #~ msgid "Unable to create workspace: no screen."
 #~ msgstr "Ei voida luoda työpöytää: ei ruutua."
diff --git a/po/ru.po b/po/ru.po
deleted file mode 100644 (file)
index 01d0a08..0000000
--- a/po/ru.po
+++ /dev/null
@@ -1,1637 +0,0 @@
-# translation of ru.po to RUSSIAN
-# #
-# This file is distributed under the same license as the Ion3 package.
-# Vassily Leushin <basileus@kirov.lug.ru>, 2006.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ru\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-10-11 18:33+0300\n"
-"PO-Revision-Date: 2006-02-01 19:55+0300\n"
-"Last-Translator: Vassily Leushin <basileus@kirov.lug.ru>\n"
-"Language-Team: RUSSIAN <ru@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=KOI8-R\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Country: RUSSIAN FEDERATION\n"
-"X-Generator: KBabel 1.10.1\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../ioncore/conf-bindings.c:96
-msgid "Insane key combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ËÌÁ×ÉÛ."
-
-#: ../ioncore/conf-bindings.c:100
-msgid "Could not convert keysym to keycode."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ keysym × keycode"
-
-#: ../ioncore/conf-bindings.c:111
-#, c-format
-msgid "Unknown button \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÎÏÐËÁ \"%s\" "
-
-#: ../ioncore/conf-bindings.c:116
-msgid "Insane button combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ËÎÏÐÏË"
-
-#: ../ioncore/conf-bindings.c:123
-#: ../ioncore/conf-bindings.c:130
-msgid "Insane modifier combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ÍÏÄÉÆÉËÁÔÏÒÏ×"
-
-#: ../ioncore/conf-bindings.c:168
-#, c-format
-msgid "Can not wait on modifiers when no modifiers set in \"%s\"."
-msgstr "ïÖÉÄÁÎÉÅ ÍÏÄÉÆÉËÁÔÏÒÏ× ÎÅ×ÏÚÍÏÖÎÏ, ÅÓÌÉ ÏÎÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÙ × \"%s\" "
-
-#: ../ioncore/conf-bindings.c:186
-#, c-format
-msgid "Unable to add binding %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÐÒÉ×ÑÚËÕ %s."
-
-#: ../ioncore/conf-bindings.c:191
-#, c-format
-msgid "Unable to remove binding %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÒÉ×ÑÚËÕ %s."
-
-#: ../ioncore/conf-bindings.c:230
-#, c-format
-msgid "Unable to add submap for binding %s."
-msgstr ""
-
-#
-#: ../ioncore/conf-bindings.c:260
-msgid "Binding type not set."
-msgstr "ôÉРÐÒÉ×ÑÚËÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎ"
-
-#: ../ioncore/conf-bindings.c:270
-#, c-format
-msgid "Unknown binding type \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉРÐÒÉ×ÑÚËÉ \"%s\"."
-
-#: ../ioncore/conf-bindings.c:291
-#, c-format
-msgid "Unknown area \"%s\" for binding %s."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÂÌÁÓÔØ \"%s\" ÄÌÑ ÐÒÉ×ÑÚËÉ %s."
-
-#: ../ioncore/conf-bindings.c:332
-#, c-format
-msgid "Unable to get bindmap entry %d."
-msgstr ""
-
-#: ../ioncore/conf-bindings.c:374
-msgid "Unable to convert keysym to string."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ keysym  × ÓÔÒÏËÕ."
-
-#: ../ioncore/conf-bindings.c:388
-msgid "Unable to convert button to string."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ ËÎÏÐËÕ × ÓÔÒÏËÕ."
-
-#
-#: ../ioncore/event.c:78
-msgid "Time request from X server failed."
-msgstr "îÅÕÄÁÞÎÙÊ ÚÁÐÒÏÓ ×ÒÅÍÅÎÉ ÏÔ X ÓÅÒ×ÅÒÁ"
-
-#
-#: ../ioncore/exec.c:101
-msgid "Could not find a root window."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÒÎÅ×ÏÅ ÏËÎÏ."
-
-#: ../ioncore/exec.c:134
-msgid "reading a pipe"
-msgstr "ÞÔÅÎÉÅ ÉÚ ËÁÎÁÌÁ"
-
-#
-#: ../ioncore/exec.c:296
-msgid "Not saving state: running under session manager."
-msgstr "óÏÓÔÏÑÎÉÅ ÎÅ ÓÏÈÒÁÎÅÎÏ: ÒÁÂÏÔÁ ÐÏÄ ÍÅÎÅÄÖÅÒÏÍ ÓÅÓÓÉÊ."
-
-#: ../ioncore/strings.c:107
-#: ../ioncore/strings.c:143
-msgid "Invalid multibyte string."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÍÎÏÇÏÂÁÊÔÎÁÑ ÓÔÒÏËÁ"
-
-#: ../ioncore/strings.c:234
-#, c-format
-msgid "Error compiling regular expression: %s"
-msgstr "ïÛÉÂËÁ ËÏÍÐÉÌÑÃÉÉ ÒÅÇ. ×ÙÒÁÖÅÎÉÑ: %s"
-
-#: ../ioncore/modules.c:158
-msgid "Invalid module name."
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÉÍÑ ÍÏÄÕÌÑ."
-
-#
-#: ../ioncore/modules.c:170
-msgid "The module is already loaded."
-msgstr "äÁÎÎÙÊ ÍÏÄÕÌØ ÕÖÅ ÚÁÇÒÕÖÅÎ."
-
-#: ../ioncore/modules.c:185
-msgid "Module version information not found or version mismatch. Refusing to use."
-msgstr ""
-"éÎÆÏÒÍÁÃÉÑ Ï ×ÅÒÓÉÉ ÍÏÄÕÌÑ ÎÅ ÎÁÊÄÅÎÁ, ÉÌÉ ÎÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ×ÅÒÓÉÊ "
-"ïÔËÁÚ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ."
-
-#: ../ioncore/modules.c:196
-#, c-format
-msgid "Unable to initialise module %s."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍÏÄÕÌØ  %s ."
-
-#: ../ioncore/modules.c:220
-#: ../../libextl/readconfig.c:368
-#, c-format
-msgid "Unable to find '%s' on search path."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ '%s' × ÐÕÔÉ ÐÏÉÓËÁ."
-
-#: ../ioncore/modules.c:291
-msgid "Unknown module."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÍÏÄÕÌØ."
-
-#: ../ioncore/modules.c:299
-msgid "Unable to initialise module."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍÏÄÕÌØ."
-
-#: ../ioncore/modules.c:344
-msgid "No module to load given."
-msgstr "îÅ ÕËÁÚÁΠÍÏÄÕÌØ ÄÌÑ ÚÁÇÒÕÚËÉ."
-
-#: ../ioncore/screen.c:301
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:490
-msgid "Invalid offset."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÏÔÓÔÕÐ."
-
-#: ../ioncore/screen.c:535
-msgid "Could not find a complete workspace class. Please load some modules."
-msgstr ""
-"îÅ ÍÏÇÕ ÎÁÊÔÉ ËÌÁÓÓ ÐÏÌÎÏÇÏ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ. ðÏÖÁÌÕÊÓÔÁ "
-"ÚÁÇÒÕÚÉÔÅ ËÁËÉÅ-ÎÉÂÕÄØ ÍÏÄÕÌÉ."
-
-#: ../ioncore/screen.c:545
-#, c-format
-msgid "Unable to create a workspace on screen %d."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÁÂ. ÐÒÏÓÔÒÁÎÓÔ×Ï ÎÁ ÜËÒÁÎÅ  %d ."
-
-#: ../ioncore/signal.c:291
-#, c-format
-msgid "Caught fatal signal %d. Dying without deinit."
-msgstr "ðÒÉÎÑÔ ÆÁÔÁÌØÎÙÊ ÓÉÇÎÁÌ %d. õÍÉÒÁÀ ÂÅÚ deinit'Á."
-
-#: ../ioncore/signal.c:300
-#, c-format
-msgid "Caught signal %d. Dying."
-msgstr "ðÏÌÕÞÅΠÓÉÇÎÁÌ %d. õÍÉÒÁÀ."
-
-#: ../ioncore/sizehint.c:150
-msgid "Invalid client-supplied width/height increment."
-msgstr "ðÏÌÕÞÅΠÎÅÐÒÁ×ÉÌØÎÙÊ ÉÎËÒÅÍÅÎÔ ÛÉÒÉÎÙ/×ÙÓÏÔÙ ÏÔ ËÌÉÅÎÔÁ."
-
-#: ../ioncore/sizehint.c:158
-msgid "Invalid client-supplied aspect-ratio."
-msgstr "ðÏÌÕÞÅÎÙ ÎÅÐÒÁ×ÉÌØÎÙÅ ÐÒÏÐÏÒÃÉÉ ÏÔ ËÌÉÅÎÔÁ."
-
-#: ../ioncore/ioncore.c:66
-msgid ""
-"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"
-msgstr ""
-
-#: ../ioncore/ioncore.c:385
-#, c-format
-msgid "Could not connect to X display '%s'"
-msgstr "îÅ ÍÏÇÕ ÓÏÅÄÉÎÉÔØÓÑ Ó X ÄÉÓÐÌÅÅÍ '%s'"
-
-#: ../ioncore/ioncore.c:438
-msgid "Could not find a screen to manage."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÜËÒÁΠÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ."
-
-#: ../ioncore/xic.c:43
-msgid "Failed to open input method."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÏÔËÒÙÔ."
-
-#: ../ioncore/xic.c:48
-msgid "Input method doesn't support any style."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÓÔÉÌÉ"
-
-#: ../ioncore/xic.c:63
-msgid "input method doesn't support my preedit type."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÍÏÊ ÔÉРpreedit'Á. "
-
-#: ../ioncore/xic.c:91
-msgid "Failed to create input context."
-msgstr "ëÏÎÔÅËÓÔ ××ÏÄÁ ÎÅ ÓÏÚÄÁÎ."
-
-#: ../ioncore/clientwin.c:376
-#, c-format
-msgid "The transient_for hint for \"%s\" points to itself."
-msgstr "èÉÎÔ transient_for ÄÌÑ \"%s\" ÕËÁÚÙ×ÁÅÔ ÎÁ ÓÁÍÏÇÏ ÓÅÂÑ."
-
-#: ../ioncore/clientwin.c:380
-#, c-format
-msgid "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" multi-parent brain damage?)"
-msgstr ""
-
-#: ../ioncore/clientwin.c:385
-#, c-format
-msgid "The transient_for window for \"%s\" is not on the same screen."
-msgstr "ïËÎÏ transient_for ÄÌÑ \"%s\" ÎÅ ÎÁ ÔÏÍ ÖÅ ÜËÒÁÎÅ."
-
-#: ../ioncore/clientwin.c:405
-#: ../ioncore/clientwin.c:492
-#: ../ioncore/clientwin.c:1554
-#, c-format
-msgid "Window %#x disappeared."
-msgstr "ïËÎÏ %#x ÉÓÞÅÚÌÏ."
-
-#: ../ioncore/clientwin.c:512
-msgid "Unable to find a matching root window!"
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ ËÏÒÎÅ×ÏÅ ÏËÎÏ!"
-
-#: ../ioncore/clientwin.c:547
-#, c-format
-msgid "Unable to manage client window %#x."
-msgstr "îÅ ÍÏÇÕ ÕÐÒÁ×ÌÑÔØ ËÌÉÅÎÔÓËÉÍ ÏËÎÏÍ %#x."
-
-#: ../ioncore/clientwin.c:597
-msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
-msgstr ""
-
-#
-#: ../ioncore/clientwin.c:874
-msgid "Client does not support the WM_DELETE protocol."
-msgstr "ëÌÉÅÎÔ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÐÒÏÔÏËÏÌ WM_DELETE. "
-
-#: ../ioncore/clientwin.c:1103
-#: ../mod_ionws/ionws.c:76
-#: ../mod_floatws/floatws.c:103
-#, c-format
-msgid "Error reparenting %s."
-msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÚÎÁÞÅÎÉÑ ÒÏÄÉÔÅÌÑ %s."
-
-#: ../ioncore/clientwin.c:1560
-msgid "Saved client window does not want to be managed."
-msgstr "óÏÈÒÁÎÅÎÎÏÅ ÏËÎÏ ËÌÉÅÎÔÁ ÎÅ ÈÏÞÅÔ ÂÙÔØ ÐÏÄ ÕÐÒÁ×ÌÅÎÉÅÍ."
-
-#
-#: ../ioncore/colormap.c:96
-msgid "Unable to store colourmap watch info."
-msgstr ""
-
-#: ../ioncore/region.c:36
-msgid "Creating region with negative width or height!"
-msgstr "óÏÚÄÁÎÉÅ ÒÅÇÉÏÎÁ Ó ÏÔÒÉÃÁÔÅÌØÎÏÊ ×ÙÓÏÔÏÊ ÉÌÉ ÛÉÒÉÎÏÊ!"
-
-#: ../ioncore/region.c:84
-#, c-format
-msgid "Destroying object \"%s\" with client windows as children."
-msgstr "õÄÁÌÅÎÉÅ ÏÂßÅËÔÁ \"%s\" Ó ÏËÎÁÍÉ ËÌÉÅÎÔÁ ËÁË ÐÏÔÏÍËÁÍÉ."
-
-#: ../ioncore/attach.c:80
-msgid "Unable to reparent."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÎÁÚÎÁÞÉÔØ ÒÏÄÉÔÅÌÑ."
-
-#: ../ioncore/attach.c:112
-#: ../ioncore/frame-pointer.c:295
-#, c-format
-msgid "Attempt to make region %s manage its ancestor %s."
-msgstr "ðÏÐÙÔËÁ ÕÐÒÁ×ÌÅÎÉÑ ÒÅÇÉÏÎÏÍ %s ÅÇÏ ÐÒÅÄËÏÍ %s."
-
-#
-#: ../ioncore/defer.c:93
-msgid "Object destroyed while deferred actions are still pending."
-msgstr "ïÂßÅËÔ ÕÄÁÌÅΠÐÒÉ ÏÔÌÏÖÅÎÎÏÍ ÄÅÊÓÔ×ÉÉ."
-
-#: ../ioncore/manage.c:90
-msgid "Unable to find a screen for a new client window."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÜËÒÁΠÄÌÑ ÎÏ×ÏÇÏ ËÌÉÅÎÔÓËÏÇÏ ÏËÎÁ."
-
-#: ../ioncore/manage.c:187
-#, c-format
-msgid "Unable to rescue \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÓÐÁÓÔÉ \"%s\"."
-
-#: ../ioncore/rootwin.c:222
-#, c-format
-msgid "Unable to redirect root window events for screen %d."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÂÙÔÉÑ ËÏÒÎÅ×ÏÇÏ ÏËÎÁ ÄÌÑ ÜËÒÁÎÁ %d."
-
-#: ../ioncore/rootwin.c:316
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "ðÒÏ×ÅÒËÁ Xinerama ÎÅ ÕÄÁÌÁÓØ; ÏÂÎÁÒÕÖÅÎÏ ÎÁÌÏÖÅÎÉÅ ÜËÒÁÎÏ×."
-
-#: ../ioncore/rootwin.c:342
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "îÅ ÚÎÁÀ ËÁË ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ ÐÏ ÍÎÏÖÅÓÔ×ÅÎÎÙÍ ËÏÒÎÅ×ÙÍ ÏËÎÁÍ × Xinerama."
-
-#: ../ioncore/rootwin.c:378
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "îÅ ÍÏÇÕ ÎÁÓÔÒÏÉÔØ ÜËÒÁΠXinerama  %d."
-
-#: ../ioncore/rootwin.c:389
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "îÅ ÍÏÇÕ ÎÁÓÔÒÏÉÔØ ÜËÒÁΠX %d."
-
-#: ../ioncore/names.c:90
-#, c-format
-msgid "Corrupt instance number %s."
-msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÜËÚÅÍÐÌÑÒÁ %s."
-
-#: ../ioncore/saveload.c:55
-#, c-format
-msgid "Unknown class \"%s\", cannot create region."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÁÓÓ \"%s\", ÎÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÅÇÉÏÎ."
-
-#: ../ioncore/saveload.c:124
-#, c-format
-msgid ""
-"There were errors loading layout. Backing up current layout savefile as\n"
-"%s.\n"
-"If you are _not_ running under a session manager and wish to restore your\n"
-"old layout, copy this backup file over the layout savefile found in the\n"
-"same directory while Ion is not running and after having fixed your other\n"
-"configuration files that are causing this problem. (Maybe a missing\n"
-"module?)\n"
-msgstr ""
-
-#: ../ioncore/saveload.c:167
-msgid "Unable to get file for layout backup."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÒÅÚÅÒ×ÎÙÊ ÆÁÊÌ ÒÁÓÐÏÌÏÖÅÎÉÑ."
-
-#: ../ioncore/saveload.c:171
-#, c-format
-msgid "Backup file %s already exists."
-msgstr "ÒÅÚÅÒ×ÎÙÊ ÆÁÊÌ %s ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ."
-
-#: ../ioncore/saveload.c:177
-msgid "Failed backup."
-msgstr "òÅÚÅÒ×ÎÁÑ ËÏÐÉÑ ÎÅ ÓÏÚÄÁÎÁ."
-
-#
-#: ../ioncore/saveload.c:182
-msgid "Unable to initialise layout on any screen."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ÎÉ ÎÁ ÏÄÎÏÍ ÜËÒÁÎÅ."
-
-#: ../ioncore/saveload.c:202
-#, c-format
-msgid "Unable to get configuration for screen %d."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ËÏÎÆÉÇÕÒÁÃÉÀ ÜËÒÁÎÁ %d."
-
-#: ../ioncore/saveload.c:215
-msgid "Unable to save layout."
-msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ."
-
-#: ../ioncore/frame.c:122
-msgid "Frame is not empty."
-msgstr "æÒÅÊÍ ÎÅ ÐÕÓÔ."
-
-#: ../ioncore/conf.c:134
-msgid "User directory can not be set."
-msgstr "äÉÒÅËÔÏÒÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../ioncore/conf.c:197
-msgid "Some bindmaps were empty, loading ioncore-efbb."
-msgstr ""
-
-#: ../ioncore/fullscreen.c:100
-msgid "Failed to enter full screen mode."
-msgstr "ïÛÉÂËÁ ÐÏÌÎÏÜËÒÁÎÎÏÇÏ ÒÅÖÉÍÁ."
-
-#: ../ioncore/fullscreen.c:158
-msgid "WClientWin failed to return from full screen mode; remaining manager or parent from previous location refused to manage us."
-msgstr ""
-
-#
-#: ../ioncore/mplex.c:1247
-msgid "Invalid position setting."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÕÓÔÁÎÏ×ËÉ ÍÅÓÔÏÐÏÌÏÖÅÎÉÑ"
-
-#
-#: ../ioncore/mplex.c:1280
-msgid "Invalid action setting."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÕÓÔÁÎÏ×ËÉ ÄÅÊÓÔ×ÉÑ."
-
-#: ../ioncore/gr.c:119
-#, c-format
-msgid "Drawing engine %s is not registered!"
-msgstr "ä×ÉÖÏË ÏÔÒÉÓÏ×ËÉ %s ÎÅ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÎ."
-
-#: ../ioncore/gr.c:138
-#, c-format
-msgid "Unable to find brush for style '%s'."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ËÉÓÔØ ÄÌÑ ÓÔÉÌÑ '%s'."
-
-#: ../ioncore/gr.c:409
-msgid "No drawing engines loaded, trying \"de\"."
-msgstr "îÉ ÏÄÎÏ Ä×ÉÖËÁ ÏÔÒÉÓÏ×ËÉ ÎÅ ÚÁÇÒÕÖÅÎÏ, ÐÒÏÂÕÀ \"ru\"."
-
-#
-#: ../ioncore/hooks.c:219
-msgid "No function given."
-msgstr "îÅÔ ÆÕÎËÃÉÉ."
-
-#: ../mod_ionws/ionws.c:311
-msgid "Unable to create a node for status display."
-msgstr "îÅ  ÍÏÇÕ ÓÏÚÄÁÔØ ÕÚÅÌ ÄÌÑ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#: ../mod_ionws/ionws.c:323
-msgid "Unable to create new split for status display."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÎÏ×ÏÅ ÒÁÚÄÅÌÅÎÉÅ ÄÌÑ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/ionws.c:742
-msgid "Frame not managed by the workspace."
-msgstr "æÒÅÊÍ ÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#
-#: ../mod_ionws/ionws.c:747
-msgid "Invalid direction parameter."
-msgstr "îÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ ÎÁÐÒÁ×ÌÅÎÉÑ."
-
-#
-#: ../mod_ionws/ionws.c:765
-msgid "Unable to split."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÄÅÌÉÔØ."
-
-#: ../mod_ionws/ionws.c:803
-msgid "Nil frame."
-msgstr "îÕÌÅ×ÏÊ ÆÒÅÊÍ"
-
-#: ../mod_ionws/ionws.c:807
-msgid "The frame is not managed by the workspace."
-msgstr "äÁÎÎÙÊ ÆÒÅÊÍ ÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#: ../mod_ionws/ionws.c:812
-msgid "Frame may not be destroyed."
-msgstr "æÒÅÊÍ ÎÅ ÕÄÁÌÑÅÔÓÑ"
-
-#: ../mod_ionws/ionws.c:817
-msgid "Failed to rescue managed objects."
-msgstr ""
-
-#: ../mod_ionws/ionws.c:1028
-msgid "Nil parameter."
-msgstr "îÕÌÅ×ÏÊ ÐÁÒÁÍÅÔÒ."
-
-#: ../mod_ionws/ionws.c:1033
-msgid "Manager doesn't match."
-msgstr "íÅÎÅÄÖÅÒ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ."
-
-#
-#: ../mod_ionws/ionws.c:1055
-msgid "Could not get split tree."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÄÅÒÅ×Ï ÒÁÚÄÅÌÅÎÉÊ."
-
-#: ../mod_ionws/ionws.c:1076
-msgid "Workspace already has a status display node."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÕÖÅ ÉÍÅÅÔ ÕÚÅÌ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/ionws.c:1126
-msgid "Missing region parameters."
-msgstr "ïÔÓÕÔÓÔ×ÕÀÔ ÐÁÒÁÍÅÔÒÙ ÒÅÇÉÏÎÁ."
-
-#: ../mod_ionws/ionws.c:1162
-#: ../mod_ionws/splitfloat.c:783
-msgid "Invalid direction."
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÎÁÐÒÁ×ÌÅÎÉÅ"
-
-#
-#: ../mod_ionws/ionws.c:1236
-msgid "No split type given."
-msgstr "îÅÔ ÕËÁÚÁΠÔÉРÒÁÚÄÅÌÅÎÉÑ"
-
-#: ../mod_ionws/ionws.c:1249
-msgid "Unknown split type."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉРÒÁÚÄÅÌÅÎÉÑ"
-
-#
-#
-#: ../mod_ionws/ionws.c:1289
-msgid "The workspace is empty."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÐÕÓÔ."
-
-#: ../mod_ionws/placement.c:97
-#: ../mod_panews/placement.c:299
-#, c-format
-msgid "Ooops... could not find a region to attach client window to on workspace %s."
-msgstr "ïÊ... ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÒÅÇÉÏΠÄÌÑ ÐÒÉÓÏÅÄÉÎÅÎÉÑ ÏËÎÁ ËÌÉÅÎÔÁ ÎÁ ÒÁÂÏÞÅÍ ÓÔÏÌÅ %s."
-
-#: ../mod_ionws/split.c:906
-msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
-msgstr "REGION_RQGEOM_TRYONLY ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÄÉÓÐÌÅÑ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/split.c:979
-msgid "Invalid node."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÕÚÅÌ."
-
-#
-#: ../mod_ionws/split.c:1044
-msgid "Splitting the status display is not allowed."
-msgstr "òÁÚÄÅÌÅÎÉÅ ÄÉÓÐÌÅÑ ÓÔÁÔÕÓÁ ÎÅ ÄÏÐÕÓËÁÅÔÓÑ."
-
-#: ../mod_ionws/split.c:1072
-#: ../mod_ionws/splitfloat.c:896
-msgid "Unable to split: not enough free space."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÄÅÌÉÔØ: ÎÅÄÏÓÔÁÔÏÞÎÏ Ó×ÏÂÏÄÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á."
-
-#
-#: ../mod_ionws/split.c:1558
-msgid "Unable to move the status display out of way of transpose."
-msgstr ""
-
-#: ../mod_ionws/split.c:1722
-#, c-format
-msgid "Unable to get configuration for %s."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÎÁÓÔÒÏÊËÉ ÄÌÑ \"%s\"."
-
-#: ../mod_ionws/split-stdisp.c:591
-#: ../mod_ionws/split-stdisp.c:616
-msgid "Status display in bad split configuration."
-msgstr ""
-
-#: ../mod_ionws/split-stdisp.c:657
-msgid "Status display badly located in split tree."
-msgstr "äÉÓÐÌÅÊ ÓÔÁÔÕÓÁ ÐÌÏÈÏ ÒÁÚÍÅÝÅΠנÄÅÒÅ×Å ÒÁÚÄÅÌÅÎÉÊ."
-
-#: ../mod_floatws/floatws.c:351
-#: ../mod_panews/panews.c:259
-msgid "Workspace may not be destroyed."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÕÄÁÌÅÎ."
-
-#: ../mod_floatws/floatws.c:358
-msgid "Failed to rescue some client windows!"
-msgstr "îÅËÏÔÏÒÙÅ ÏËÎÁ ËÌÉÅÎÔÏ× ÎÅ ÓÏÈÒÁÎÅÎÙ!"
-
-#: ../mod_floatws/floatws.c:370
-#: ../mod_panews/panews.c:254
-msgid "Refusing to close non-empty workspace."
-msgstr "ïÔËÁÚ ×  ÚÁËÒÙÔÉÉ ÎÅ ÐÕÓÔÏÇÏ ÒÁÂ. ÐÒÏÓÔÒÁÎÓÔ×Á."
-
-#
-#: ../mod_floatws/floatws.c:462
-msgid "Failure to create a new frame."
-msgstr "îÏ×ÙÊ ÆÒÅÊÍ ÎÅ ÓÏÚÄÁÎ."
-
-#
-#: ../mod_floatws/floatws.c:1037
-#: ../mod_floatws/floatws.c:1115
-msgid "Region not managed by the workspace."
-msgstr "òÅÇÉÏΠÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#: ../mod_floatws/floatws.c:1236
-msgid "No geometry specified."
-msgstr "çÅÏÍÅÔÒÉÑ ÎÅ ÕËÁÚÁÎÁ."
-
-#: ../mod_floatws/placement.c:125
-#, c-format
-msgid "Unknown placement method \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÍÅÔÏÄ ÒÁÚÍÅÝÅÎÉÑ \"%s\"."
-
-#: ../mod_panews/panews.c:193
-msgid "Unable to re-initialise workspace. Destroying."
-msgstr "îÅ ÍÏÇÕ ÒÅÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÒÁÂÏÞÅÅ ÐÒÏÓÔÒÁÎÓÔ×Ï. õÄÁÌÅÎÉÅ."
-
-#: ../mod_panews/placement.c:104
-#: ../mod_panews/placement.c:108
-#: ../mod_panews/placement.c:175
-#: ../mod_panews/placement.c:180
-#, c-format
-msgid "Malfunctioning placement hook; condition #%d."
-msgstr ""
-
-#: ../mod_query/fwarn.c:34
-msgid "Error:\n"
-msgstr "ïÛÉÂËÁ:\n"
-
-#
-#: ../mod_menu/menu.c:490
-msgid "Empty menu."
-msgstr "ðÕÓÔÏÅ ÍÅÎÀ."
-
-#
-#: ../mod_sm/sm.c:110
-msgid "Failed to set session directory."
-msgstr "äÉÒÅËÔÏÒÉÑ ÓÅÓÓÉÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../mod_sm/sm_session.c:85
-msgid "Too many ICE connections."
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÅÄÉÎÅÎÉÊ  'ICE'."
-
-#: ../mod_sm/sm_session.c:227
-msgid "Failed to save session state"
-msgstr "óÏÓÔÏÑÎÉÅ ÓÅÓÓÉÉ ÎÅ ÓÏÈÒÁÎÉÌÏÓØ"
-
-#: ../mod_sm/sm_session.c:246
-msgid "Failed to request save-yourself-phase2 from session manager."
-msgstr ""
-
-#
-#: ../mod_sm/sm_session.c:295
-msgid "SESSION_MANAGER environment variable not set."
-msgstr "ÐÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ SESSION_MANAGER ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../mod_sm/sm_session.c:300
-msgid "Session Manager: IceAddConnectionWatch failed."
-msgstr ""
-
-#
-#: ../mod_sm/sm_session.c:325
-msgid "Unable to connect to the session manager."
-msgstr "îÅ ÍÏÇÕ ÓÏÅÄÉÎÉÔØÓÑ Ó ÍÅÎÅÄÖÅÒÏÍ ÓÅÓÓÉÊ."
-
-#: ../mod_sp/main.c:137
-#, c-format
-msgid "Unable to create scratchpad for screen %d."
-msgstr ""
-
-#: ../de/init.c:41
-#, c-format
-msgid "Border attribute %s sanity check failed."
-msgstr ""
-
-#: ../de/init.c:64
-#, c-format
-msgid "Unknown border style \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÔÉÌØ ÂÏÒÄÀÒÁ \"%s\"."
-
-#: ../de/init.c:96
-#, c-format
-msgid "Unable to allocate colour \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÍÅÓÔÉÔØ Ã×ÅÔ \"%s\"."
-
-#: ../de/init.c:160
-#, c-format
-msgid "Corrupt substyle table %d."
-msgstr "ðÏ×ÒÅÖÄÅÎÎÁÑ ÔÁÂÌÉÃÁ ÐÏÄÓÔÉÌÅÊ %d."
-
-#: ../de/init.c:193
-#, c-format
-msgid "Unknown text alignment \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ ÔÅËÓÔÁ \"%s\"."
-
-#: ../de/init.c:263
-#, c-format
-msgid "'based_on' for %s points back to the style itself."
-msgstr "'based_on' ÄÌÑ %s ÕËÁÚÙ×ÁÅÔ ÎÁ ÓÁÍ ÓÔÉÌØ."
-
-#: ../de/init.c:266
-#, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÂÁÚÏ×ÙÊ ÓÔÉÌØ \"%s\"."
-
-#: ../de/font.c:47
-#, c-format
-msgid "Fontset for font pattern '%s' implements context dependent drawing, which is unsupported. Expect clutter."
-msgstr ""
-
-#: ../de/font.c:58
-#, c-format
-msgid "Could not load font \"%s\", trying \"%s\""
-msgstr "îÅ ÍÏÇÕ ÚÁÇÒÕÚÉÔØ ÛÒÉÆÔ \"%s\", ÐÒÏÂÕÀ \"%s\""
-
-#: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "óÔÉÌØ %s ×ÓÅ ÅÝÅ ÉÓÐÏÌØÚÕÅÔÓÑ [%d] ÎÏ ÍÏÄÕÌØ ×ÙÇÒÕÖÁÅÔÓÑ!"
-
-#: ../ion/ion.c:41
-#: ../pwm/pwm.c:41
-msgid "X display to use"
-msgstr "éÓÐÏÌØÚÏ×ÁÔØ X ÄÉÓÐÌÅÊ"
-
-#: ../ion/ion.c:44
-#: ../pwm/pwm.c:44
-msgid "Configuration file"
-msgstr "æÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ"
-
-#: ../ion/ion.c:47
-#: ../pwm/pwm.c:47
-msgid "Add directory to search path"
-msgstr "äÏÂÁ×ÉÔØ ÄÉÒÅËÔÏÒÉÀ Ë ÐÕÔÉ ÐÏÉÓËÁ"
-
-#: ../ion/ion.c:50
-#: ../pwm/pwm.c:50
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr ""
-
-#: ../ion/ion.c:54
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr ""
-
-#: ../ion/ion.c:57
-#: ../pwm/pwm.c:57
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "éÇÎÏÒÉÒÕÀ: ÓËÏÍÐÉÌÉÒÏ×ÁÎÏ ÂÅÚ ÐÏÄÄÅÒÖËÉ Xinerama"
-
-#: ../ion/ion.c:61
-#: ../pwm/pwm.c:61
-msgid "Name of session (affects savefiles)"
-msgstr ""
-
-#: ../ion/ion.c:64
-#: ../pwm/pwm.c:64
-msgid "Session manager client ID"
-msgstr ""
-
-#: ../ion/ion.c:67
-#: ../pwm/pwm.c:67
-msgid "Do not create startup error log and display it with xmessage."
-msgstr "îÅ ÓÏÚÄÁ×ÁÔØ ÖÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ, Á ÐÏËÁÚÙ×ÁÔØ ÅÇÏ Ó ÐÏÍÏÝØÀ xmessage."
-
-#: ../ion/ion.c:71
-#: ../pwm/pwm.c:71
-msgid "Show this help"
-msgstr "ðÏËÁÚÁÔØ ÐÏÍÏÝØ"
-
-#: ../ion/ion.c:74
-#: ../pwm/pwm.c:74
-msgid "Show program version"
-msgstr "ðÏËÁÚÁÔØ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ"
-
-#: ../ion/ion.c:77
-#: ../pwm/pwm.c:77
-msgid "Show about text"
-msgstr "ðÏËÁÚÁÔØ 'ï ÐÒÏÇÒÁÍÍÅ...'"
-
-#: ../ion/ion.c:92
-msgid "Could not get user configuration file directory."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÄÉÒÅËÔÏÒÉÀ Ó ÆÁÊÌÁÍÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÎÁÓÔÒÏÅË "
-
-#: ../ion/ion.c:106
-#, c-format
-msgid "%s/welcome.txt"
-msgstr "%s/welcome.ru.txt"
-
-#: ../ion/ion.c:139
-#: ../pwm/pwm.c:86
-#, c-format
-msgid ""
-"Usage: %s [options]\n"
-"\n"
-msgstr ""
-
-#: ../ion/ion.c:199
-#: ../pwm/pwm.c:149
-msgid "Invalid parameter to -xinerama."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÐÁÒÁÍÅÔÒ ÄÌÑ  '-xinerama'."
-
-#
-#: ../ion/ion.c:218
-#: ../pwm/pwm.c:168
-msgid "Invalid command line."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÎÁÑ ÓÔÒÏËÁ"
-
-#: ../ion/ion.c:239
-msgid "Ion startup error log:\n"
-msgstr "öÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ Ion:\n"
-
-#: ../ion/ion.c:249
-#: ../pwm/pwm.c:199
-msgid "Refusing to start due to encountered errors."
-msgstr "÷ ÚÁÐÕÓËÅ ÏÔËÁÚÁÎÏ × ÓÉÌÕ ×ÏÚÎÉËÛÉÈ ÏÛÉÂÏË."
-
-#: ../pwm/pwm.c:54
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr ""
-
-#: ../pwm/pwm.c:189
-msgid "PWM startup error log:\n"
-msgstr "öÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ PWM:\n"
-
-#: ../../libextl/readconfig.c:86
-msgid "$HOME not set"
-msgstr "$HOME ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ"
-
-#: ../../libextl/readconfig.c:113
-msgid "User directory not set. Unable to set session directory."
-msgstr "äÉÒÅËÔÏÒÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ. îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÄÉÒÅËÔÏÒÉÀ ÓÅÓÓÉÉ."
-
-#: ../../libextl/readconfig.c:247
-#, c-format
-msgid "Falling back to %s."
-msgstr "ïÔËÁÔ Ë  %s."
-
-#: ../../libextl/readconfig.c:441
-#, c-format
-msgid "Unable to create session directory \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÄÉÒÅËÔÏÒÉÀ ÓÅÓÓÉÉ \"%s\"."
-
-#: ../../libextl/luaextl.c:113
-msgid "Lua stack full."
-msgstr "óÔÅË Lua ÐÏÌÏÎ."
-
-#
-#: ../../libextl/luaextl.c:139
-msgid "Unknown Lua error."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ × Lua."
-
-#: ../../libextl/luaextl.c:456
-msgid "Stack trace:"
-msgstr "ôÒÁÓÓÉÒÏ×ËÁ ÓÔÅËÁ:"
-
-#: ../../libextl/luaextl.c:463
-#, c-format
-msgid ""
-"\n"
-"(Unable to get debug info for level %d)"
-msgstr ""
-"\n"
-"(îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ ÄÌÑ ÕÒÏ×ÎÑ %d)"
-
-#: ../../libextl/luaextl.c:481
-msgid ""
-"\n"
-"  [Skipping unnamed C functions.]"
-msgstr ""
-
-#: ../../libextl/luaextl.c:532
-msgid "Internal error."
-msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ."
-
-#: ../../libextl/luaextl.c:551
-msgid "Unable to initialize Lua."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ Lua."
-
-#: ../../libextl/luaextl.c:1277
-msgid "Too many return values. Use a C compiler that has va_copy to support more."
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ×ÏÚ×ÒÁÝÁÅÍÙÈ ÚÎÁÞÅÎÉÊ. éÓÐÏÌØÚÕÊÔÅ ËÏÍÐÉÌÑÔÏÒ C Õ ËÏÔÏÒÏÇÏ ÅÓÔØ va_copy ÄÌÑ ÂÏÌØÛÅÊ ÐÏÄÄÅÒÖËÉ"
-
-#: ../../libextl/luaextl.c:1295
-#, c-format
-msgid "Invalid return value (expected '%c', got lua type \"%s\")."
-msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ×ÏÚ×ÒÁÝÁÅÍÏÅ ÚÎÁÞÅÎÉÅ (ÏÖÉÄÁÌÏÓØ '%c', ÐÏÌÕÞÅΠlua-ÔÉР\"%s\")."
-
-#: ../../libextl/luaextl.c:1330
-#: ../../libextl/luaextl.c:1594
-msgid "Stack full."
-msgstr "óÔÅË ÐÏÌÏÎ."
-
-#: ../../libextl/luaextl.c:1570
-msgid "L1 call handler upvalues corrupt."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1575
-msgid "Called function has been unregistered."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1587
-#, c-format
-msgid "Attempt to call an unsafe function \"%s\" in restricted mode."
-msgstr "ðÏÐÙÔËÁ ×ÙÚÏ×Á ÎÅÂÅÚÏÐÁÓÎÏÊ ÆÕÎËÃÉÉ \"%s\" × ÏÇÒÁÎÉÞÅÎÎÏÍ ÒÅÖÉÍÅ. "
-
-#: ../../libextl/luaextl.c:1603
-#, c-format
-msgid "Argument %d to %s is of invalid type. (Argument template is '%s', got lua type %s)."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1782
-#, c-format
-msgid "Function '%s' has more parameters than the level 1 call handler can handle"
-msgstr ""
-
-#
-#: ../../libextl/luaextl.c:2199
-msgid "Maximal serialisation depth reached."
-msgstr "äÏÓÔÉÇÎÕÔÁ ÍÁËÓÉÍÁÌØÎÁÑ ÇÌÕÂÉÎÁ ÓÅÒÉÁÌÉÚÁÃÉÉ."
-
-#: ../../libextl/luaextl.c:2220
-#, c-format
-msgid "Unable to serialise type %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÅÒÉÁÌÉÚÉÒÏ×ÁÔØ ÔÉР%s."
-
-#: ../../libextl/luaextl.c:2251
-msgid "-- This file has been generated by Ion. Do not edit.\n"
-msgstr "-- äÁÎÎÙÊ ÆÁÊÌ ÂÙÌ ÓÏÚÄÁΠéÏÎÏÍ. îÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ.\n"
-
-#: ../../libextl/misc.c:17
-#, c-format
-msgid "Type checking failed in level 2 call handler for parameter %d (got %s, expected %s)."
-msgstr ""
-
-#: ../etc/cfg_floatws.lua:34
-msgid "Lower the frame."
-msgstr "ïÐÕÓÔÉÔØ ÆÒÅÊÍ"
-
-#: ../etc/cfg_bindings.lua:171
-msgid "Display frame context menu."
-msgstr "ðÏËÁÚÁÔØ ËÏÎÔÅËÓÔÎÏÅ ÍÅÎÀ ÆÒÅÊÍÁ."
-
-#
-#: ../etc/cfg_ionws.lua:44
-msgid "Flip at root"
-msgstr "ðÅÒ×ÅÒÎÕÔØ × ËÏÒÎÅ×ÏÍ"
-
-#
-#: ../etc/cfg_bindings.lua:43
-msgid "Go to n:th screen on multihead setup."
-msgstr ""
-
-#: ../ext_statusbar/ext_statusbar.lua:308
-msgid "Failed to create statusbar."
-msgstr "óÔÁÔÕÓÂÁÒ ÎÅ ÓÏÚÄÁÎ"
-
-#: ../pwm/cfg_pwm_menus.lua:13
-#: ../etc/cfg_menus.lua:10
-msgid "Help"
-msgstr "ðÏÍÏÝØ"
-
-#: ../mod_query/mod_query.lua:566
-msgid "SSH to:"
-msgstr "SSH to:"
-
-#: ../etc/cfg_menus.lua:28
-msgid "Restart"
-msgstr "ðÅÒÅÚÁÐÕÓË"
-
-#: ../mod_menu/mod_menu.lua:231
-msgid "Cannot save selection."
-msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ×ÙÄÅÌÅÎÉÅ"
-
-#: ../etc/cfg_bindings.lua:206
-msgid "End the resize mode."
-msgstr "úÁ×ÅÒÛÉÔØ ÒÅÖÉÍ ÒÁÚÍÅÒÁ."
-
-#
-#
-#: ../etc/cfg_ionws.lua:48
-#: ../etc/cfg_ionws.lua:58
-msgid "Vertically"
-msgstr "÷ÅÒÔÉËÁÌØÎÏ"
-
-#: ../ioncore/ioncore-bindings.lua:34
-msgid "Invalid guard %s."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:109
-msgid "Query for Lua code to execute."
-msgstr "ïÞÅÒÅÄØ ÎÁ ×ÙÐÏÌÎÅÎÉÅ ËÏÄÁ Lua."
-
-#
-#: ../etc/cfg_bindings.lua:47
-msgid "Go to next/previous screen on multihead setup."
-msgstr " "
-
-#: ../mod_query/mod_query.lua:344
-msgid "none"
-msgstr "ÎÉÞÅÇÏ"
-
-#: ../etc/cfg_bindings.lua:219
-msgid "Shrink in specified direction."
-msgstr "õÍÅÎØÛÉÔØ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
-
-#: ../etc/cfg_bindings.lua:160
-msgid "Maximize the frame horizontally/vertically."
-msgstr "òÁÚ×ÅÒÎÕÔØ ÆÒÅÊÍ ÐÏ ×ÅÒÔÉËÁÌÉ/ÇÏÒÉÚÏÎÔÁÌÉ."
-
-#: ../etc/cfg_bindings.lua:156
-msgid "Move current object within the frame left/right."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÔÅËÕÝÉÊ ÏÂßÅËÔ × ÐÒÅÄÅÌÁÈ ÆÒÅÊÍÁ ×ÐÒÁ×Ï/×ÌÅ×Ï"
-
-#: ../etc/cfg_ionws.lua:12
-msgid "Go to frame above/below/right/left of current frame."
-msgstr "ðÅÒÅÊÔÉ Ë ÆÒÅÊÍÕ ×ÙÛÅ/ÎÉÖÅ/ÐÒÁ×ÅÅ/ÌÅ×ÅÅ ÔÅËÕÝÅÇÏ ÆÒÅÊÍÁ"
-
-#: ../ext_statusbar/ext_statusbar.lua:289
-msgid "Screen not found."
-msgstr "üËÒÁΠÎÅ ÎÁÊÄÅÎ"
-
-#: ../etc/cfg_bindings.lua:182
-msgid "Resize the frame."
-msgstr "éÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÆÒÅÊÍÁ"
-
-#: ../etc/cfg_bindings.lua:189
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÏÂßÅËÔÙ ÍÅÖÄÕ ÆÒÅÊÍÁÍÉ ÐÒÉ ÐÏÍÏÝÉ ÐÅÒÅÔÁÓËÉ×ÁÎÉÑ ÔÁÂÏ×."
-
-#: ../mod_query/mod_query.lua:99
-msgid "Could not find %s"
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ %s:"
-
-#: ../ext_statusbar/ext_statusbar.lua:295
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "üËÒÁΠÕÖÅ ÉÍÅÅÔ stdisp. ïÔËÁÚ × ÓÏÚÄÁÎÉÉ ÓÔÁÔÕÓÂÁÒÁ."
-
-#: ../etc/cfg_bindings.lua:112
-msgid "Query for host to connect to with SSH."
-msgstr "úÁÐÒÏÓ ÈÏÓÔÁ ÄÌÑ ÓÏÅÄÉÎÅÎÉÑ ÞÅÒÅÚ SSH."
-
-#
-#: ../etc/cfg_bindings.lua:229
-msgid "Move in specified direction."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ."
-
-#
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "mail"
-msgstr "ÐÏÞÔÁ"
-
-#: ../mod_query/mod_query.lua:807
-msgid ""
-"\n"
-"Transients:\n"
-msgstr ""
-
-#: ../etc/cfg_menu.lua:21
-msgid "Select next/previous menu entry."
-msgstr "×ÙÂÒÁÔØ ÓÌÅÄ/ÐÒÅÄ ÐÕÎËÔ ÍÅÎÀ"
-
-#: ../ioncore/ioncore-luaext.lua:30
-msgid "Recursive table - unable to deepcopy"
-msgstr "òÅËÕÒÓÉ×ÎÁÑ ÔÁÂÌÉÃÁ - ÇÌÕÂÏËÏÅ ËÏÐÉÒÏ×ÁÎÉÅ ÎÅ×ÏÚÍÏÖÎÏ"
-
-#
-#: ../etc/cfg_bindings.lua:209
-msgid "Grow in specified direction."
-msgstr "÷ÙÒÁÓÔÉ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ."
-
-#: ../ioncore/ioncore-bindings.lua:68
-msgid "Invalid command"
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ"
-
-#: ../mod_query/mod_query.lua:189
-#: ../mod_menu/mod_menu.lua:245
-msgid "Too much result data"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ËÏÎÅÞÎÙÈ ÄÁÎÎÙÈ "
-
-#: ../mod_query/mod_query.lua:344
-msgid "Workspace type (%s):"
-msgstr "ôÉРÒÁÂÏÞÅÇÏ ÓÔÏÌÁ (%s):"
-
-#: ../etc/cfg_bindings.lua:36
-msgid "Go to previous active object."
-msgstr "ÐÅÒÅÊÔÉ Ë ÓÌÅÄ. ÁËÔÉ×ÎÏÍÕ ÏÂßÅËÔÕ"
-
-#
-#: ../etc/cfg_query.lua:67
-msgid "Clear mark/cancel selection."
-msgstr "ïÞÉÓÔËÁ ÍÅÔËÉ/ÏÔÍÅÎÁ ×ÙÄÅÌÅÎÉÑ"
-
-#: ../mod_query/mod_query.lua:772
-msgid "No entry '%s'"
-msgstr "îÅÔ ÐÕÎËÔÁ '%s'"
-
-#
-#
-#: ../etc/cfg_bindings.lua:90
-msgid "Toggle fullscreen mode of current client window."
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ × ÐÏÌÎÏÜËÒÁÎÎÙÊ ÒÅÖÉÍ."
-
-#: ../etc/cfg_bindings.lua:103
-msgid "Query for manual page to be displayed."
-msgstr "úÁÐÒÏÓ ÎÁ ÏÔÏÂÒÁÖÅÎÉÅ ÓÔÒÁÎÉÃÙ man."
-
-#: ../etc/cfg_bindings.lua:51
-msgid "Show the Ion manual page."
-msgstr "ðÏËÁÚÁÔØ ÓÔÒÁÎÉÃÕ ÒÕËÏ×ÏÄÓÔ×Á ÐÏ éÏÎ."
-
-#: ../etc/cfg_bindings.lua:60
-msgid "Display the main menu."
-msgstr "ðÏËÁÚÁÔØ ÇÌÁ×ÎÏÅ ÍÅÎÀ"
-
-#
-#: ../etc/cfg_bindings.lua:54
-msgid "Run a terminal emulator."
-msgstr "úÁÐÕÓË ÜÍÕÌÑÔÏÒÁ ÔÅÒÍÉÎÁÌÁ"
-
-#: ../etc/cfg_bindings.lua:121
-msgid "Query for workspace to go to or create a new one."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:38
-msgid "Kill"
-msgstr "õÂÉÔØ"
-
-#: ../pwm/cfg_pwm_menus.lua:25
-#: ../etc/cfg_menus.lua:37
-msgid "Close"
-msgstr "úÁËÒÙÔØ"
-
-#: ../mod_query/mod_query.lua:381
-msgid "Go to or create workspace:"
-msgstr "ðÅÒÅÊÔÉ Ë ÉÌÉ ÓÏÚÄÁÔØ ÒÁÂÏÞÉÊ ÓÔÏÌ:"
-
-#: ../etc/cfg_query.lua:35
-msgid "Delete one word forward/backward."
-msgstr "õÄÁÌÉÔØ ÏÄÎÏ ÓÌÏ×Ï ×ÐÅÒÅÄÉ/ÓÚÁÄÉ."
-
-#: ../etc/cfg_query.lua:17
-msgid "Go to end/beginning."
-msgstr "ðÅÒÅÊÔÉ × ËÏÎÅÃ/ÎÁÞÁÌÏ"
-
-#
-#: ../etc/cfg_ionws.lua:43
-msgid "Transpose"
-msgstr "ðÅÒÅÍÅÓÔÉÔØ"
-
-#: ../etc/cfg_bindings.lua:152
-msgid "Switch to next/previous object within the frame."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ ÓÌÅÄ/ÐÒÅÄ ÏÂßÅËÔ ×ÎÕÔÒÉ ÆÒÅÊÍÁ."
-
-#: ../mod_query/mod_query.lua:402
-msgid "Restart Ion (y/n)?"
-msgstr "ðÅÒÅÚÁÐÕÓÔÉÔØ éÏΠ(y/n)?"
-
-#: ../mod_query/mod_query.lua:724
-msgid "Lua code: "
-msgstr "ëÏÄ Lua:"
-
-#: ../mod_query/mod_query.lua:367
-msgid "Attach window:"
-msgstr "ðÒÉÃÅÐÉÔØ ÏËÎÏ:"
-
-#: ../etc/cfg_bindings.lua:186
-#: ../etc/cfg_floatws.lua:37
-msgid "Move the frame."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÆÒÅÊÍ."
-
-#: ../pwm/cfg_pwm_menus.lua:11
-#: ../etc/cfg_menus.lua:8
-msgid "Programs"
-msgstr "ðÒÏÇÒÁÍÍÙ"
-
-#: ../etc/cfg_query.lua:23
-msgid "Skip one word forward/backward."
-msgstr "ðÒÏÐÕÓÔÉÔØ ÏÄÎÏ ÓÌÏ×Ï ×ÐÅÒÅÄ/ÎÁÚÁÄ."
-
-#: ../mod_query/mod_query.lua:738
-msgid "Unknown menu %s."
-msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÍÅÎÀ %s."
-
-#: ../etc/cfg_floatws.lua:12
-msgid "Backwards-circulate focus and raise the newly focused frame."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:44
-msgid "Window info"
-msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÏËÎÅ"
-
-#
-#: ../etc/cfg_query.lua:58
-msgid "Set mark/begin selection."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:30
-msgid "Restart TWM"
-msgstr "ðÅÒÅÚÁÐÕÓË TWM"
-
-#: ../etc/cfg_ionws.lua:9
-msgid "Split current frame vertically."
-msgstr "òÁÚÄÅÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ ÐÏ ×ÅÒÔÉËÁÌÉ"
-
-#
-#
-#: ../etc/cfg_bindings.lua:57
-msgid "Create a new workspace of chosen default type."
-msgstr "óÏÚÄÁÔØ ÎÏ×ÙÊ ÒÁÂÏÞÉÊ ÓÔÏÌ Ó ÔÉÐÏÍ ×ÙÂÒÁÎÎÙÍ ÐÏ-ÕÍÏÌÞÁÎÉÀ."
-
-#
-#: ../etc/cfg_floatws.lua:29
-msgid "Raise the frame."
-msgstr "ðÏÄÎÑÔØ ÆÒÅÊÍ"
-
-#: ../etc/cfg_floatws.lua:46
-msgid "(Un)stick"
-msgstr ""
-
-#: ../mod_query/mod_query.lua:287
-#: ../mod_query/mod_query.lua:297
-msgid "Could not find client window %s."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÏËÎÏ ËÌÉÅÎÔÁ %s."
-
-#: ../etc/cfg_query.lua:82
-msgid "Close the query/message box, not executing bound actions."
-msgstr ""
-
-#
-#: ../etc/cfg_bindings.lua:168
-msgid "Query for a client window to attach to active frame."
-msgstr ""
-
-#: ../mod_query/mod_query.lua:488
-msgid "Run:"
-msgstr "úÁÐÕÓÔÉÔØ:"
-
-#
-#: ../etc/cfg_panews.lua:11
-msgid "Resize the area."
-msgstr "éÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÏÂÌÁÓÔÉ."
-
-#
-#: ../etc/cfg_bindings.lua:95
-msgid "Kill client owning current client window."
-msgstr "õÂÉÔØ ËÌÉÅÎÔÁ ÔÅËÕÝÅÇÏ ÏËÎÁ."
-
-#: ../mod_query/mod_query.lua:595
-msgid "Manual page (%s):"
-msgstr "óÔÒÁÎÉÃÁ ÒÕËÏ×ÏÄÓÔ×Á (%s):"
-
-#
-#: ../etc/cfg_bindings.lua:124
-msgid "Query for a client window to go to."
-msgstr ""
-
-#
-#: ../etc/cfg_ionws.lua:39
-msgid "Destroy frame"
-msgstr "õÄÁÌÉÔØ ÆÒÅÊÍ"
-
-#: ../mod_query/mod_query.lua:339
-msgid "Unknown error"
-msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
-
-#: ../etc/cfg_bindings.lua:175
-#: ../etc/cfg_panews.lua:8
-msgid "Begin move/resize mode."
-msgstr "÷ÈÏÄ × ÒÅÖÉÍ ÐÅÒÅÍÅÝÅÎÉÑ/ÒÁÚÍÅÒÁ"
-
-#: ../etc/cfg_bindings.lua:136
-msgid "Tag current object within the frame."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:140
-msgid "Switch to n:th object within the frame."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:203
-msgid "Cancel the resize mode."
-msgstr "ïÔÍÅÎÁ ÒÅÖÉÍÁ ÒÁÚÍÅÒÁ."
-
-#: ../build/mkman.lua:196
-msgid "%s %s"
-msgstr "%s %s"
-
-#: ../etc/cfg_query.lua:27
-msgid "Delete next character."
-msgstr "õÄÁÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ"
-
-#: ../mod_query/mod_query.lua:356
-msgid "Go to window:"
-msgstr "ðÅÒÅÊÔÉ Ë ÏËÎÕ:"
-
-#: ../build/mkman.lua:182
-msgid "drag"
-msgstr "ÐÅÒÅÔÁÝÉÔØ"
-
-#: ../build/mkman.lua:181
-msgid "click"
-msgstr "ËÌÉËÎÕÔØ"
-
-#: ../build/mkman.lua:180
-msgid "press"
-msgstr "ÎÁÖÁÔØ"
-
-#: ../etc/cfg_menu.lua:27
-msgid "Clear the menu's typeahead find buffer."
-msgstr ""
-
-#: ../etc/cfg_ionws.lua:47
-msgid "Split"
-msgstr "òÁÚÄÅÌÉÔØ"
-
-#
-#: ../etc/cfg_bindings.lua:98
-msgid "Send next key press to current client window. Some programs may not allow this by default."
-msgstr ""
-
-#: ../etc/cfg_menu.lua:11
-msgid "Close the menu."
-msgstr "úÁËÒÙÔØ ÍÅÎÀ"
-
-#: ../etc/cfg_query.lua:87
-msgid "Scroll the message or completions up/down."
-msgstr ""
-
-#: ../etc/cfg_query.lua:74
-msgid "Close the query and execute bound action."
-msgstr ""
-
-#
-#: ../etc/cfg_bindings.lua:31
-msgid "Switch to next/previous object within current screen."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ ÓÌÅÄ./ÐÒÅÄ. ÏÂßÅËÔ ×ÎÕÔÒÉ ÔÅËÕÝÅÇÏ ÜËÒÁÎÁ."
-
-#: ../etc/cfg_query.lua:39
-msgid "Delete to end of line."
-msgstr "õÄÁÌÉÔØ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ."
-
-#: ../pwm/cfg_pwm_menus.lua:14
-#: ../etc/cfg_menus.lua:11
-msgid "About Ion"
-msgstr "ï Ion"
-
-#: ../mod_query/mod_query.lua:804
-msgid ""
-"Title: %s\n"
-"Class: %s\n"
-"Role: %s\n"
-"Instance: %s\n"
-"XID: 0x%x"
-msgstr ""
-"îÁÚ×ÁÎÉÅ: %s\n"
-"ëÌÁÓÓ(class): %s\n"
-"òÏÌØ(role): %s\n"
-"üËÚÅÍÐÌÑÒ(instance): %s\n"
-"XID: 0x%x"
-
-#
-#: ../etc/cfg_query.lua:61
-msgid "Cut selection."
-msgstr "÷ÙÒÅÚÁÔØ ×ÙÄÅÌÅÎÎÏÅ."
-
-#: ../etc/cfg_query.lua:53
-msgid "Paste from the clipboard."
-msgstr "÷ÓÔÁ×ÉÔØ ÉÚ ËÌÉÐÂÏÒÄÁ."
-
-#
-#: ../etc/cfg_query.lua:45
-msgid "Select next/previous (matching) history entry."
-msgstr "÷ÙÂÒÁÔØ ÓÌÅÄ./ÐÒÅÄ. (ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ) ÐÕÎËÔ ÉÓÔÏÒÉÉ."
-
-#: ../etc/cfg_menus.lua:43
-msgid "Clear tags"
-msgstr "ïÞÉÓÔÉÔØ ÔÅÇÉ"
-
-#: ../etc/cfg_query.lua:42
-msgid "Delete the whole line."
-msgstr "õÄÁÌÉÔØ ÓÔÒÏËÕ ÃÅÌÉËÏÍ"
-
-#: ../etc/cfg_query.lua:71
-msgid "Try to complete the entered text."
-msgstr "ðÏÐÙÔËÁ ÚÁ×ÅÒÛÉÔØ ××ÅÄÅÎÎÙÊ ÔÅËÓÔ."
-
-#: ../etc/cfg_query.lua:31
-msgid "Delete previous character."
-msgstr "õÄÁÌÉÔØ ÐÒÅÄÙÄÕÝÉÊ ÓÉÍ×ÏÌ."
-
-#: ../mod_query/mod_query.lua:299
-msgid "Cannot attach: different root windows."
-msgstr "îÅ ÍÏÇÕ ÐÒÉÃÅÐÉÔØ: ÒÁÚÎÙÅ ËÏÒÎÅ×ÙÅ ÏËÎÁ."
-
-#: ../build/mkman.lua:183
-msgid "double click"
-msgstr "Ä×ÏÊÎÏÊ ËÌÉË"
-
-#: ../etc/cfg_query.lua:11
-msgid "Move one character forward/backward."
-msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ×ÐÅÒÅÄ/ÎÁÚÁÄ."
-
-#: ../etc/cfg_menus.lua:29
-msgid "Restart PWM"
-msgstr "ðÅÒÅÚÁÐÕÓË PWM"
-
-#: ../etc/cfg_bindings.lua:115
-msgid "Query for file to edit."
-msgstr "úÁÐÒÏÓ ÎÁ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÆÁÊÌÁ."
-
-#
-#: ../etc/cfg_bindings.lua:39
-msgid "Clear all tags."
-msgstr "ïÞÉÓÔÉÔØ ×ÓÅ ÔÅÇÉ."
-
-#: ../etc/cfg_bindings.lua:178
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÆÒÅÊÍ ÎÁ ÐÏËÁÚ ÏÂßÅËÔÁ ÕËÁÚÁÎÎÏÇÏ ÔÁÂÏÍ."
-
-#
-#
-#: ../etc/cfg_ionws.lua:50
-#: ../etc/cfg_ionws.lua:60
-msgid "Horizontally"
-msgstr "çÏÒÉÚÏÎÔÁÌØÎÏ"
-
-#: ../pwm/cfg_pwm_menus.lua:16
-#: ../pwm/cfg_pwm_menus.lua:24
-msgid "New"
-msgstr "îÏ×ÙÊ"
-
-#: ../mod_query/mod_query.lua:410
-msgid "Frame name:"
-msgstr "éÍÑ ÆÒÅÊÍÁ:"
-
-#
-#: ../etc/cfg_bindings.lua:18
-msgid "Switch to n:th object (workspace, full screen client window) within current screen."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ n-ÎÙÊ ÏÂßÅËÔ (ÒÁÂ.ÓÔÏÌ, ÐÏÌÎÏÜËÒÁÎÎÏÅ ÏËÎÏ) ×ÎÕÔÒÉ ÔÅËÕÝÅÇÏ ÜËÒÁÎÁ."
-
-#: ../etc/cfg_bindings.lua:64
-msgid "Display the window list menu."
-msgstr "ðÏËÁÚÁÔØ ÍÅÎÀ ÓÐÉÓËÁ ÏËÏÎ."
-
-#: ../etc/cfg_floatws.lua:26
-msgid "Toggle shade mode"
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÒÅÖÉÍ ÔÅÎÉ"
-
-#: ../mod_query/mod_query.lua:393
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "÷ÙÈÏÄ ÉÚ éÏÎ/úÁ×ÅÒÛÉÔØ ÓÅÓÓÉÀ (y/n)?"
-
-#: ../etc/cfg_floatws.lua:15
-msgid "Raise/lower active frame."
-msgstr "ðÏÄÎÑÔØ/ÏÐÕÓÔÉÔØ ÁËÔÉ×ÎÙÊ ÆÒÅÊÍ"
-
-#: ../mod_menu/mod_menu.lua:235
-msgid "Save look selection in %s?"
-msgstr "óÏÈÒÁÎÉÔØ ×ÎÅÛÎÉÊ ×ÉÄ × %s?"
-
-#: ../etc/cfg_bindings.lua:82
-msgid "Close current object."
-msgstr "úÁËÒÙÔØ ÔÅËÕÝÉÊ ÏÂßÅËÔ."
-
-#
-#: ../etc/cfg_query.lua:64
-msgid "Copy selection."
-msgstr "ëÏÐÉÒÏ×ÁÔØ ×ÙÄÅÎÅÎÉÅ"
-
-#: ../etc/cfg_bindings.lua:164
-msgid "Attach tagged objects to this frame."
-msgstr "ðÒÉÃÅÐÉÔØ ÏÂßÅËÔ Ó ÔÅÇÏÍ Ë ÜÔÏÍÕ ÆÒÅÊÍÕ."
-
-#: ../etc/cfg_ionws.lua:57
-msgid "Floating split"
-msgstr "ðÌÁ×ÁÀÝÅÅ ÒÁÚÄÅÌÅÎÉÅ."
-
-#: ../mod_query/mod_query.lua:768
-msgid "%s menu:"
-msgstr "%s ÍÅÎÀ:"
-
-#: ../ext_statusbar/ext_statusbar.lua:318
-msgid "Failed to create a timer for statusbar."
-msgstr "ôÁÊÍÅÒ ÄÌÑ ÓÔÁÔÕÓÂÁÒÁ ÎÅ ÓÏÚÄÁÎ."
-
-#: ../etc/cfg_ionws.lua:52
-#: ../etc/cfg_ionws.lua:62
-msgid "Vertically at root"
-msgstr "÷ÅÒÔÉËÁÌØÎÏ × ËÏÒÎÅ×ÏÍ"
-
-#
-#
-#: ../etc/cfg_menu.lua:16
-msgid "Activate current menu entry."
-msgstr "áËÔÉ×ÉÒÏ×ÁÔØ ÔÅËÕÝÉÊ ÐÕÎËÔ ÍÅÎÀ."
-
-#: ../ioncore/ioncore-efbb.lua:12
-msgid ""
-"Making the following minimal emergency mappings:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Making the following minimal emergency mappings:\n"
-"  F2 -> xterm\n"
-"  F11 -> restart\n"
-"  F12 -> exit\n"
-"  Mod1+C -> close\n"
-"  Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-
-#
-#: ../etc/cfg_ionws.lua:45
-msgid "Transpose at root"
-msgstr "ðÅÒÅÍÅÓÔÉÔØ × ËÏÒÎÅ×ÏÍ"
-
-#: ../pwm/cfg_pwm_menus.lua:17
-#: ../etc/cfg_menus.lua:12
-msgid "Styles"
-msgstr "óÔÉÌÉ"
-
-#: ../etc/cfg_bindings.lua:106
-msgid "Query for command line to execute."
-msgstr "úÁÐÒÏÓ ÎÁ ÉÓÐÏÌÎÅÎÉÅ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ"
-
-#: ../mod_query/mod_query.lua:323
-msgid "Unable to create workspace: no screen."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÁÂÏÞÉÊ ÓÔÏÌ: ÎÅÔ ÜËÒÁÎÁ."
-
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "load"
-msgstr "ÚÁÇÒÕÚËÁ"
-
-#
-#: ../etc/cfg_ionws.lua:42
-msgid "Flip"
-msgstr "ðÅÒÅ×ÅÒÎÕÔØ"
-
-#: ../etc/cfg_ionws.lua:41
-msgid "Flip&transpose"
-msgstr "ðÅÒÅ×ÅÒÎÕÔØ É ÐÅÒÅÍÅÓÔÉÔØ"
-
-#: ../pwm/cfg_pwm_menus.lua:12
-#: ../etc/cfg_menus.lua:9
-msgid "Lock screen"
-msgstr "úÁÂÌÏËÉÒÏ×ÁÔØ ÜËÒÁÎ"
-
-#: ../mod_query/mod_query.lua:449
-msgid "Edit file:"
-msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌ:"
-
-#: ../etc/cfg_menus.lua:19
-msgid "XTerm"
-msgstr "XTerm"
-
-#: ../build/mkman.lua:198
-msgid "%s %s at %s"
-msgstr "%s %s ÎÁ %s"
-
-#
-#: ../etc/cfg_bindings.lua:85
-msgid "Nudge current client window. This might help with some programs' resizing problems."
-msgstr ""
-
-#: ../etc/cfg_ionws.lua:22
-msgid "Destroy current frame."
-msgstr "õÄÁÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ."
-
-#: ../ioncore/ioncore-bindings.lua:53
-msgid "Error in command string: "
-msgstr "ïÛÉÂËÁ × ÓÔÒÏËÅ ËÏÍÁÎÄÙ:"
-
-#: ../etc/cfg_ionws.lua:19
-msgid "Split current frame horizontally."
-msgstr "òÁÚÄÅÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ."
-
-#: ../etc/cfg_menus.lua:42
-msgid "Attach tagged"
-msgstr "ðÒÉÃÅÐÉÔØ ÏËÎÁ Ó ÔÅÇÁÍÉ"
-
-#: ../etc/cfg_ionws.lua:54
-#: ../etc/cfg_ionws.lua:64
-msgid "Horizontally at root"
-msgstr "çÏÒÉÚÏÎÔÁÌØÎÏ × ËÏÒÎÅ×ÏÍ"
-
-#: ../etc/cfg_menus.lua:40
-msgid "(Un)tag"
-msgstr "ðÏÓÔÁ×ÉÔØ/ÕÄÁÌÉÔØ ÔÅÇ"
-
-#: ../mod_query/mod_query.lua:459
-msgid "View file:"
-msgstr "ðÒÏÓÍÏÔÒ ÆÁÊÌÁ:"
-
-#: ../mod_query/mod_query.lua:421
-msgid "Workspace name:"
-msgstr "éÍÑ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ:"
-
-#: ../etc/cfg_menus.lua:31
-msgid "Exit"
-msgstr "÷ÙÈÏÄ"
-
-#: ../etc/cfg_menus.lua:27
-msgid "Save"
-msgstr "óÏÈÒÁÎÉÔØ"
-
-#
-#: ../pwm/cfg_pwm_menus.lua:15
-msgid "Workspaces"
-msgstr "òÁÂÏÞÉÅ ÓÔÏÌÙ"
-
-#: ../etc/cfg_menus.lua:20
-msgid "Mozilla Firefox"
-msgstr "Mozilla Firefox"
-
-#: ../ioncore/ioncore-bindings.lua:45
-msgid "Error compiling guard: %s"
-msgstr ""
-
-#: ../mod_menu/mod_menu.lua:271
-msgid "Refresh list"
-msgstr "ïÂÎÏ×ÉÔØ ÓÐÉÓÏË"
-
-#: ../etc/cfg_floatws.lua:9
-msgid "Circulate focus and raise the newly focused frame."
-msgstr "ðÅÒÅÄÁÔØ ÆÏËÕÓ É ÐÏÄÎÑÔØ ÆÒÅÊÍ Ó ÎÏ×ÙÍ ÆÏËÕÓÏÍ."
-
-#
-#: ../etc/cfg_menus.lua:21
-msgid "Run..."
-msgstr "÷ÙÐÏÌÎÉÔØ..."
-
-#: ../etc/cfg_bindings.lua:118
-msgid "Query for file to view."
-msgstr "úÁÐÒÏÓ ÐÒÏÓÍÏÔÒÁ ÆÁÊÌÁ."
-
-#: ../mod_query/mod_query.lua:511
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ~/.ssh/known_hosts"
-
-#: ../pwm/cfg_pwm_menus.lua:18
-#: ../etc/cfg_menus.lua:13
-msgid "Session"
-msgstr "óÅÓÓÉÑ"
-
-#: ../pwm/cfg_pwm_menus.lua:27
-msgid "List"
-msgstr "óÐÉÓÏË"
-
index 805daf010d3609fc3c78893c5c3014f7dcb028db..97026b238c74b8c9a75f6cace0ed7bc9ecb5ecb8 100644 (file)
@@ -50,16 +50,16 @@ dopath("mod_dock")
 --
 
 
--- Unbind anything using mod_query and rebinding to mod_menu where
+-- Unbind anything using mod_query and rebind to mod_menu where
 -- applicable.
 
 defbindings("WScreen", {
+    bdoc("Display the main menu."),
     kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"),
 })
 
 defbindings("WMPlex.toplevel", {
     kpress(ALTMETA.."F1", nil),
-    kpress(META..   "F1", "ioncore.exec_on(_, ':man pwm3')"),
     kpress(ALTMETA.."F3", nil),
     kpress(META..   "F3", nil),
     kpress(ALTMETA.."F4", nil),
@@ -67,11 +67,16 @@ defbindings("WMPlex.toplevel", {
     kpress(ALTMETA.."F6", nil),
     kpress(ALTMETA.."F9", nil),
     kpress(META.."G", nil),
-    kpress(META.."A", nil),
+    
+    bdoc("Show the PWM manual page."),
+    kpress(META..   "F1", "ioncore.exec_on(_, ':man pwm3')"),
+    
+    bdoc("Display context menu."),
+    kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
 })
 
-defbindings("WFrame", {
-    kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+defbindings("WFrame.toplevel", {
+    kpress(META.."A", nil),
 })
 
 -- Make a new main menu with additional workspace menu.
index c4a080474a9458aca9e25b9e144b729563bef60b..a96e3067701a02e3755421596135b52ce861c6a6 100644 (file)
--- a/pwm/pwm.c
+++ b/pwm/pwm.c
@@ -3,10 +3,7 @@
  *
  * Copyright (c) Tuomo Valkonen 1999-2007. 
  *
- * 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.
+ * See the included file LICENSE for details.
  */
 
 #include <stdlib.h>
index 31b30f560c8dd966a338ff9f19f475e2a458e2b9..d33136afee29f339fb5a25842a0505b265f3e1e6 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1,2 +1,2 @@
-#define ION_VERSION "3ds-20070318"
+#define ION_VERSION "3rc-20070506"
 #define ION_API_VERSION "3-"ION_VERSION