+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>6. Function reference</TITLE>
+<META NAME="description" CONTENT="6. Function reference">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="next" HREF="node8.html">
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html348"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
+<A NAME="tex2html342"
+ HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
+<A NAME="tex2html336"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
+<A NAME="tex2html344"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
+<A NAME="tex2html346"
+ HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html349"
+ HREF="node8.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html343"
+ HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html337"
+ HREF="node6.html">5. Scripting</A>
+ <B> <A NAME="tex2html345"
+ HREF="node1.html">Contents</A></B>
+ <B> <A NAME="tex2html347"
+ HREF="node11.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><A NAME="tex2html350"
+ HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN CLASS="textit">ioncore</SPAN></A>
+<UL>
+<LI><A NAME="tex2html351"
+ HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+<LI><A NAME="tex2html352"
+ HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+<LI><A NAME="tex2html353"
+ HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+<LI><A NAME="tex2html354"
+ HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+<LI><A NAME="tex2html355"
+ HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+<LI><A NAME="tex2html356"
+ HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<LI><A NAME="tex2html357"
+ HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<LI><A NAME="tex2html358"
+ HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<LI><A NAME="tex2html359"
+ HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<LI><A NAME="tex2html360"
+ HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html361"
+ HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html362"
+ HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html363"
+ HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<LI><A NAME="tex2html364"
+ HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<LI><A NAME="tex2html365"
+ HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<LI><A NAME="tex2html366"
+ HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html367"
+ HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN CLASS="textit">mod_tiling</SPAN></A>
+<UL>
+<LI><A NAME="tex2html368"
+ HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+<LI><A NAME="tex2html369"
+ HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+<LI><A NAME="tex2html370"
+ HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+<LI><A NAME="tex2html371"
+ HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+<LI><A NAME="tex2html372"
+ HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html373"
+ HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN CLASS="textit">mod_query</SPAN></A>
+<UL>
+<LI><A NAME="tex2html374"
+ HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+<LI><A NAME="tex2html375"
+ HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+<LI><A NAME="tex2html376"
+ HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html377"
+ HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN CLASS="textit">mod_menu</SPAN></A>
+<UL>
+<LI><A NAME="tex2html378"
+ HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html379"
+ HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN CLASS="textit">mod_dock</SPAN></A>
+<UL>
+<LI><A NAME="tex2html380"
+ HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html381"
+ HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN CLASS="textit">mod_sp</SPAN></A>
+<LI><A NAME="tex2html382"
+ HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
+<LI><A NAME="tex2html383"
+ HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks</A>
+</UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00700000000000000000"></A>
+<A NAME="sec:exports"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>. Function reference
+</H1>
+
+<P>
+
+<H2><A NAME="SECTION00710000000000000000"></A>
+<A NAME="sec:ioncoreref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN CLASS="textit">ioncore</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="4188"></A>
+<A NAME="4189"></A>
+<A NAME="fn:ioncore.TR"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.TR(s, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>gettext+string.format
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4190"></A>
+<A NAME="4191"></A>
+<A NAME="fn:ioncore.bdoc"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.bdoc(text)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Used to enter documentation among bindings so that other programs
+ can read it. Does nothing.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4192"></A>
+<A NAME="4193"></A>
+<A NAME="fn:ioncore.chdir_for"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.chdir_for(reg, dir)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change default working directory for new programs started in <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4194"></A>
+<A NAME="4195"></A>
+<A NAME="fn:ioncore.compile_cmd"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.compile_cmd(cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Compile string <TT>cmd</TT> into a bindable function. Within <TT>cmd</TT>, the
+ variable ''<TT>_</TT>'' (underscore) can be used to refer to the object
+ that was selecting for the bound action and chosen to handle it.
+ The variable ''<TT>_sub</TT>'' refers to a ''currently active'' sub-object
+ of <TT>_</TT>, or a sub-object where the action loading to the binding
+ being called actually occured.
+
+<P>
+The string <TT>guard</TT> maybe set to pose limits on <TT>_sub</TT>. Currently
+ supported guards are <TT>_sub:non-nil</TT> and <TT>_sub:WFoobar</TT>, where
+ WFoobar is a class.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4196"></A>
+<A NAME="4197"></A>
+<A NAME="fn:ioncore.create_ws"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.create_ws(scr, tmpl, no_default)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create new workspace on screen <TT>scr</TT>. The table <TT>tmpl</TT>
+ may be used to override parts of <TT>default_ws_params</TT>,
+ and <TT>no_default</TT> may be set to <TT>true</TT> to complete ignore it.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4198"></A>
+<A NAME="4199"></A>
+<A NAME="fn:ioncore.defbindings"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defbindings(context, bindings)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define bindings for context <TT>context</TT>. Here <TT>binding</TT> is
+ a table composed of entries created with <A HREF="#fn:ioncore.kpress"><TT>ioncore.kpress</TT></A>,
+ etc.; see section <A HREF="node4.html#sec:bindings">3.3</A> for details.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4200"></A>
+<A NAME="4201"></A>
+<A NAME="fn:ioncore.defctxmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defctxmenu(ctx, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define context menu for context <TT>ctx</TT>, <TT>tab</TT> being a table
+ of menu entries.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4202"></A>
+<A NAME="4203"></A>
+<A NAME="fn:ioncore.defmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defmenu(name, tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a new menu with <TT>name</TT> being the menu's name and <TT>tab</TT>
+ being a table of menu entries. If <TT>tab.append</TT> is set, the entries
+ are appended to previously-defined ones, if possible.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4204"></A>
+<A NAME="4205"></A>
+<A NAME="fn:ioncore.defwinprop"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.defwinprop(list)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a winprop. For more information, see section <A HREF="node4.html#sec:winprops">3.5</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4206"></A>
+<A NAME="4207"></A>
+<A NAME="fn:ioncore.exec_on"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.exec_on(reg, cmd, merr_internal)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with the environment variable DISPLAY set to point to the
+ root window of the X screen <TT>reg</TT> is on. If <TT>cmd</TT> is prefixed
+ by a colon (<TT>:</TT>), the following command is executed in an xterm
+ (or other terminal emulator) with the help of the <TT>ion-runinxterm</TT>
+ script. If the command is prefixed by two colons, <TT>ion-runinxterm</TT>
+ will ask you to press enter after the command is finished, even if it
+ returns succesfully.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4208"></A>
+<A NAME="4209"></A>
+<A NAME="fn:ioncore.read_savefile"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.read_savefile(string basename)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Read a savefile.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4210"></A>
+<A NAME="4211"></A>
+<A NAME="fn:ioncore.get_savefile"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.get_savefile(string basename)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a file name to save (session) data in. The string <TT>basename</TT>
+ should contain no path or extension components.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4212"></A>
+<A NAME="4213"></A>
+<A NAME="fn:ioncore.lookup_script"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.lookup_script(string file, string sp)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Lookup script <TT>file</TT>. If <TT>try_in_dir</TT> is set, it is tried
+ before the standard search path.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4214"></A>
+<A NAME="4215"></A>
+<A NAME="fn:ioncore.write_savefile"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.write_savefile(string basename, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Write <TT>tab</TT> in file with basename <TT>basename</TT> in the
+ session directory.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4216"></A>
+<A NAME="4217"></A>
+<A NAME="fn:ioncore.find_manager"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.find_manager(obj, t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find an object with type name <TT>t</TT> managing <TT>obj</TT> or one of
+ its managers.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4218"></A>
+<A NAME="4219"></A>
+<A NAME="fn:ioncore.get_dir_for"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.get_dir_for(reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get default working directory for new programs started in <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4220"></A>
+<A NAME="4221"></A>
+<A NAME="fn:ioncore.getbindings"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getbindings(maybe_context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a table of all bindings.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4222"></A>
+<A NAME="4223"></A>
+<A NAME="fn:ioncore.getctxmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getctxmenu(name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a context menu defined with <A HREF="#fn:ioncore.defctxmenu"><TT>ioncore.defctxmenu</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4224"></A>
+<A NAME="4225"></A>
+<A NAME="fn:ioncore.getmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getmenu(name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a menu defined with <A HREF="#fn:ioncore.defmenu"><TT>ioncore.defmenu</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4226"></A>
+<A NAME="4227"></A>
+<A NAME="fn:ioncore.getwinprop"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.getwinprop(cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find winprop table for <TT>cwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4228"></A>
+<A NAME="4229"></A>
+<A NAME="fn:ioncore.aboutmsg"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.aboutmsg()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns an about message (version, author, copyright notice).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4230"></A>
+<A NAME="4231"></A>
+<A NAME="fn:ioncore.activity_first"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.activity_first()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return first regio non activity list.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4232"></A>
+<A NAME="4233"></A>
+<A NAME="fn:ioncore.activity_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.activity_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return list of regions with activity/urgency bit set.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4234"></A>
+<A NAME="4235"></A>
+<A NAME="fn:ioncore.clear_tags"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.clear_tags()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Untag all regions.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4236"></A>
+<A NAME="4237"></A>
+<A NAME="fn:ioncore.clientwin_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.clientwin_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return a list of all client windows.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4238"></A>
+<A NAME="4239"></A>
+<A NAME="fn:ioncore.current"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.current()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the currently focused region, if any.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4240"></A>
+<A NAME="4241"></A>
+<A NAME="fn:ioncore.defshortening"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.defshortening(string rx, string rule, bool always)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Add a rule describing how too long titles should be shortened to fit in tabs.
+ The regular expression <TT>rx</TT> (POSIX, not Lua!) is used to match titles
+ and when <TT>rx</TT> matches, <TT>rule</TT> is attempted to use as a replacement
+ for title. If <TT>always</TT> is set, the rule is used even if no shortening
+ is necessary.
+
+<P>
+Similarly to sed's 's' command, <TT>rule</TT> may contain characters that are
+ inserted in the resulting string and specials as follows:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Special</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$0</TD>
+<TD ALIGN="LEFT">Place the original string here.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$1 to $9</TD>
+<TD ALIGN="LEFT">Insert n:th capture here (as usual,captures are surrounded
+ by parentheses in the regex).</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$|</TD>
+<TD ALIGN="LEFT">Alternative shortening separator. The shortening described
+ before the first this kind of separator is tried first and
+ if it fails to make the string short enough, the next is
+ tried, and so on.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$<</TD>
+<TD ALIGN="LEFT">Remove characters on the left of this marker to shorten the
+ string.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">$></TD>
+<TD ALIGN="LEFT">Remove characters on the right of this marker to shorten the
+ string. Only the first $< or $> within an alternative
+ shortening is used.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4242"></A>
+<A NAME="4243"></A>
+<A NAME="fn:ioncore.exec"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.exec(string cmd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with the environment variable DISPLAY set to point to the
+ X display the WM is running on. No specific screen is set unlike with
+ <A HREF="#fn:WRootWin.exec_on"><TT>WRootWin.exec_on</TT></A>. The PID of the (shell executing the) new
+ process is returned.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4244"></A>
+<A NAME="4245"></A>
+<A NAME="fn:ioncore.find_screen_id"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.find_screen_id(integer id)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find the screen with numerical id <TT>id</TT>. If Xinerama is
+ not present, <TT>id</TT> corresponds to X screen numbers. Otherwise
+ the ids are some arbitrary ordering of Xinerama rootwins.
+ If <TT>id</TT> is <SPAN CLASS="MATH"></SPAN>, the screen with the highest id is returned.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4246"></A>
+<A NAME="4247"></A>
+<A NAME="fn:ioncore.get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get ioncore basic settings. For details see <A HREF="#fn:ioncore.set"><TT>ioncore.set</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4248"></A>
+<A NAME="4249"></A>
+<A NAME="fn:ioncore.get_paths"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.get_paths(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get important directories (userdir, sessiondir, searchpath).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4250"></A>
+<A NAME="4251"></A>
+<A NAME="fn:ioncore.goto_activity"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.goto_activity()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to first region on activity list.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4252"></A>
+<A NAME="4253"></A>
+<A NAME="fn:ioncore.goto_first"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_first(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to first region within <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
+ the boolean <TT>nofront</TT> field, for not bringing the object to
+ front.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4254"></A>
+<A NAME="4255"></A>
+<A NAME="fn:ioncore.goto_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_next(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to region next from <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/next/prev/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
+ the boolean <TT>nofront</TT> field, for not bringing the object to
+ front.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4256"></A>
+<A NAME="4257"></A>
+<A NAME="fn:ioncore.goto_next_screen"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_next_screen()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the next screen and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4258"></A>
+<A NAME="4259"></A>
+<A NAME="fn:ioncore.goto_nth_screen"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_nth_screen(integer id)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the screen with id <TT>id</TT> and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4260"></A>
+<A NAME="4261"></A>
+<A NAME="fn:ioncore.goto_prev_screen"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen ioncore.goto_prev_screen()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Switch focus to the previous screen and return it.
+
+<P>
+Note that this function is asynchronous; the screen will not
+ actually have received the focus when this function returns.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4262"></A>
+<A NAME="4263"></A>
+<A NAME="fn:ioncore.goto_previous"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.goto_previous()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to and return to a previously active region (if any).
+
+<P>
+Note that this function is asynchronous; the region will not
+ actually have received the focus when this function returns.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4264"></A>
+<A NAME="4265"></A>
+<A NAME="fn:ioncore.is_i18n"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.is_i18n()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is Ion supporting locale-specifically multibyte-encoded strings?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4266"></A>
+<A NAME="4267"></A>
+<A NAME="fn:ioncore.load_module"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.load_module(string modname)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to load a C-side module.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4268"></A>
+<A NAME="4269"></A>
+<A NAME="fn:ioncore.lookup_clientwin"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WClientWin ioncore.lookup_clientwin(string name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to find a client window with name <TT>name</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4270"></A>
+<A NAME="4271"></A>
+<A NAME="fn:ioncore.lookup_region"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.lookup_region(string name, string typenam)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to find a non-client window region with name <TT>name</TT> and type
+ inheriting <TT>typenam</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4272"></A>
+<A NAME="4273"></A>
+<A NAME="fn:ioncore.navi_first"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.navi_first(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find first region within <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
+ see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4274"></A>
+<A NAME="4275"></A>
+<A NAME="fn:ioncore.navi_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.navi_next(WRegion reg, string dirstr, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find region next from <TT>reg</TT> in direction <TT>dirstr</TT>
+ (up/down/left/right/next/prev/any). The table param may
+ contain the boolean field <TT>nowrap</TT>, instructing not to wrap
+ around, and the WRegions <TT>no_ascend</TT> and <TT>no_descend</TT>,
+ and functions <TT>ascend_filter</TT> and <TT>descend_filter</TT> from
+ <TT>WRegion</TT>s (<TT>to</TT>, <TT>from</TT>), used to decide when to descend
+ or ascend into another region. (TODO: more detailed explanation.)
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4276"></A>
+<A NAME="4277"></A>
+<A NAME="fn:ioncore.popen_bgread"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.popen_bgread(string cmd, function h, function errh)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Run <TT>cmd</TT> with a read pipe connected to its stdout.
+ When data is received through the pipe, <TT>handler</TT> is called
+ with that data.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4278"></A>
+<A NAME="4279"></A>
+<A NAME="fn:ioncore.progname"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.progname()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the name of program using Ioncore.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4280"></A>
+<A NAME="4281"></A>
+<A NAME="fn:ioncore.region_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.region_list(string typenam)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find all non-client window regions inheriting <TT>typenam</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4282"></A>
+<A NAME="4283"></A>
+<A NAME="fn:ioncore.request_selection"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.request_selection(function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request (string) selection. The function <TT>fn</TT> will be called
+ with the selection when and if it is received.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4284"></A>
+<A NAME="4285"></A>
+<A NAME="fn:ioncore.resign"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.resign()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Causes the window manager to simply exit without saving
+ state/session.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4286"></A>
+<A NAME="4287"></A>
+<A NAME="fn:ioncore.restart"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.restart()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Restart, saving session first.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4288"></A>
+<A NAME="4289"></A>
+<A NAME="fn:ioncore.restart_other"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.restart_other(string cmd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to restart another window manager <TT>cmd</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4290"></A>
+<A NAME="4291"></A>
+<A NAME="fn:ioncore.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set ioncore basic settings. The table <TT>tab</TT> may contain the
+ following fields.
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>opaque_resize</TT></TD>
+<TD ALIGN="LEFT">(boolean) Controls whether interactive move and
+ resize operations simply draw a rubberband during
+ the operation (false) or immediately affect the
+ object in question at every step (true).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>warp</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should focusing operations move the
+ pointer to the object to be focused?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should a managing WMPlex switch
+ to a newly mapped client window?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>screen_notify</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should notification tooltips be displayed
+ for hidden workspaces with activity?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame_default_index</TT></TD>
+<TD ALIGN="LEFT">(string) Specifies where to add new regions
+ on the mutually exclusive list of a frame. One of
+ ''last'', ''next'' (for after current), ''next-act''
+ (for after current and anything with activity right
+ after it).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>dblclick_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) Delay between clicks of a double click.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) Delay in milliseconds for ending keyboard
+ resize mode after inactivity.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_t_max</TT></TD>
+<TD ALIGN="LEFT">(integer) Controls keyboard resize acceleration.
+ See description below for details.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_t_min</TT></TD>
+<TD ALIGN="LEFT">(integer) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_step</TT></TD>
+<TD ALIGN="LEFT">(floating point) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>kbresize_maxacc</TT></TD>
+<TD ALIGN="LEFT">(floating point) See below.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>framed_transients</TT></TD>
+<TD ALIGN="LEFT">(boolean) Put transients in nested frames.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>float_placement_method</TT></TD>
+<TD ALIGN="LEFT">(string) How to place floating frames.
+ One of ''udlr'' (up-down, then left-right),
+ ''lrud'' (left-right, then up-down) or ''random''.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>default_ws_params</TT></TD>
+<TD ALIGN="LEFT">(table) Default workspace layout; the
+ attach/creation parameters for a WGroup.</TD>
+</TR>
+</TABLE>
+
+<P>
+When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
+ milliseconds has passed from a previous call, acceleration factor is reset
+ to 1.0. Otherwise, if at least <TT>kbresize_t_min</TT> milliseconds have
+ passed from the from previous acceleration update or reset the squere root
+ of the acceleration factor is incremented by <TT>kbresize_step</TT>. The
+ maximum acceleration factor (pixels/call modulo size hints) is given by
+ <TT>kbresize_maxacc</TT>. The default values are (200, 50, 30, 100).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4292"></A>
+<A NAME="4293"></A>
+<A NAME="fn:ioncore.set_get_winprop_fn"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set_get_winprop_fn(function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set function used to look up winprops.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4294"></A>
+<A NAME="4295"></A>
+<A NAME="fn:ioncore.set_paths"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.set_paths(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set important directories (sessiondir, searchpath).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4296"></A>
+<A NAME="4297"></A>
+<A NAME="fn:ioncore.set_selection"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.set_selection(string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set primary selection and cutbuffer0 to <TT>p</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4298"></A>
+<A NAME="4299"></A>
+<A NAME="fn:ioncore.shutdown"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.shutdown()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>End session saving it first.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4300"></A>
+<A NAME="4301"></A>
+<A NAME="fn:ioncore.snapshot"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.snapshot()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Save session.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4302"></A>
+<A NAME="4303"></A>
+<A NAME="fn:ioncore.tagged_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.tagged_list()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of tagged regions.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4304"></A>
+<A NAME="4305"></A>
+<A NAME="fn:ioncore.tags_first"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion ioncore.tags_first()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns first tagged object.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4306"></A>
+<A NAME="4307"></A>
+<A NAME="fn:ioncore.version"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.version()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns Ioncore version string.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4308"></A>
+<A NAME="4309"></A>
+<A NAME="fn:ioncore.warn"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.warn(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Issue a warning. How the message is displayed depends on the current
+ warning handler.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4310"></A>
+<A NAME="4311"></A>
+<A NAME="fn:ioncore.warn_traced"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.warn_traced(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:ioncore.warn"><TT>ioncore.warn</TT></A>, but also print Lua stack trace.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4312"></A>
+<A NAME="4313"></A>
+<A NAME="fn:ioncore.x_change_property"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_change_property(integer win, integer atom, integer atom_type, integer format, string mode, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Modify a window property. The <TT>mode</TT> is one of
+ <TT>"replace"</TT>, <TT>"prepend"</TT> or <TT>"append"</TT>, and format
+ is either 8, 16 or 32. Also see <A HREF="#fn:ioncore.x_get_window_property"><TT>ioncore.x_get_window_property</TT></A>
+ and the <TT>XChangeProperty</TT>(3) manual page.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4314"></A>
+<A NAME="4315"></A>
+<A NAME="fn:ioncore.x_delete_property"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_delete_property(integer win, integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete a window property.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4316"></A>
+<A NAME="4317"></A>
+<A NAME="fn:ioncore.x_get_atom_name"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string ioncore.x_get_atom_name(integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get the name of an atom. See <TT>XGetAtomName</TT>(3) manual page for
+ details.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4318"></A>
+<A NAME="4319"></A>
+<A NAME="fn:ioncore.x_get_text_property"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.x_get_text_property(integer win, integer atom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a text property for a window (<TT>STRING</TT>, <TT>COMPOUND_TEXT</TT>,
+ or <TT>UTF8_STRING</TT> property converted). The fields in the returned
+ table (starting from 1) are the null-separated parts of the property.
+ See the <TT>XGetTextProperty</TT>(3) manual page for more information.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4320"></A>
+<A NAME="4321"></A>
+<A NAME="fn:ioncore.x_get_window_property"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table ioncore.x_get_window_property(integer win, integer atom, integer atom_type, integer n32expected, bool more)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get a property <TT>atom</TT> of type <TT>atom_type</TT> for window <TT>win</TT>.
+ The <TT>n32expected</TT> parameter indicates the expected number of 32bit
+ words, and <TT>more</TT> indicates whether all or just this amount of data
+ should be fetched. Each 8, 16 or 32bit element of the property, as
+ deciphered from <TT>atom_type</TT> is a field in the returned table.
+ See <TT>XGetWindowProperty</TT>(3) manual page for more information.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4322"></A>
+<A NAME="4323"></A>
+<A NAME="fn:ioncore.x_intern_atom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer ioncore.x_intern_atom(string name, bool only_if_exists)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new atom. See <TT>XInternAtom</TT>(3) manual page for details.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4324"></A>
+<A NAME="4325"></A>
+<A NAME="fn:ioncore.x_set_text_property"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void ioncore.x_set_text_property(integer win, integer atom, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set a text property for a window. The fields of <TT>tab</TT> starting from
+ 1 should be the different null-separated parts of the property.
+ See the <TT>XSetTextProperty</TT>(3) manual page for more information.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4326"></A>
+<A NAME="4327"></A>
+<A NAME="fn:ioncore.kpress"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.kpress(keyspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of pressing a key given
+ by <TT>keyspec</TT> (with possible modifiers) to the function <TT>func</TT>.
+ For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4328"></A>
+<A NAME="4329"></A>
+<A NAME="fn:ioncore.kpress_wait"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.kpress_wait(keyspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This is similar to <A HREF="#fn:kpress"><TT>kpress</TT></A> but after calling <TT>cmd</TT>,
+ Ioncore waits for all modifiers to be released before processing
+ any further actions.
+ For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4330"></A>
+<A NAME="4331"></A>
+<A NAME="fn:ioncore.match_winprop_name"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.match_winprop_name(prop, cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>The basic name-based winprop matching criteria.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4332"></A>
+<A NAME="4333"></A>
+<A NAME="fn:ioncore.mclick"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mclick(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of clicking a mouse
+ button while possible modifier keys are pressed,
+ both given by <TT>buttonspec</TT>, to the function <TT>func</TT>.
+ For more information, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4334"></A>
+<A NAME="4335"></A>
+<A NAME="fn:ioncore.mdblclick"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mdblclick(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for double-click.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4336"></A>
+<A NAME="4337"></A>
+<A NAME="fn:ioncore.mdrag"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mdrag(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Creates a binding description table for the action of moving the mouse
+ (or other pointing device) while the button given by <TT>buttonspec</TT>
+ is held pressed and the modifiers given by <TT>buttonspec</TT> were pressed
+ when the button was initially pressed.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4338"></A>
+<A NAME="4339"></A>
+<A NAME="fn:ioncore.menuentry"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.menuentry(name, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Use this function to define normal menu entries. The string <TT>name</TT>
+ is the string shown in the visual representation of menu, and the
+ parameter <TT>cmd</TT> and <TT>guard</TT> are similar to those of
+ <A HREF="#fn:ioncore.defbindings"><TT>ioncore.defbindings</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4340"></A>
+<A NAME="4341"></A>
+<A NAME="fn:ioncore.mpress"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.mpress(buttonspec, cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for just pressing the mouse button.
+ Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4342"></A>
+<A NAME="4343"></A>
+<A NAME="fn:ioncore.refresh_stylelist"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.refresh_stylelist()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Refresh list of known style files.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4344"></A>
+<A NAME="4345"></A>
+<A NAME="fn:ioncore.submap"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submap(kcb_, list)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a function that creates a submap binding description table.
+ When the key press action <TT>keyspec</TT> occurs, Ioncore will wait for
+ a further key presse and act according to the submap.
+ For details, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4346"></A>
+<A NAME="4347"></A>
+<A NAME="fn:ioncore.submenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submenu(name, sub_or_name, options)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Use this function to define menu entries for submenus. The parameter
+ <A HREF="#fn:sub_or_name"><TT>sub_or_name</TT></A> is either a table of menu entries or the name
+ of an already defined menu. The initial menu entry to highlight can be
+ specified by <TT>options.initial</TT> as either an integer starting from 1,
+ or a function that returns such a number. Another option supported is
+ <TT>options.noautoexpand</TT> that will cause <A HREF="#fn:mod_query.query_menu"><TT>mod_query.query_menu</TT></A>
+ to not automatically expand this submenu.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00711000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4349"></A>
+<A NAME="4350"></A>
+<A NAME="fn:WClientWin.get_ident"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WClientWin.get_ident(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a table containing the properties <TT>WM_CLASS</TT> (table entries
+ <TT>instance</TT> and <TT>class</TT>) and <TT>WM_WINDOW_ROLE</TT> (<TT>role</TT>)
+ properties for <TT>cwin</TT>. If a property is not set, the corresponding
+ field(s) are unset in the table.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4351"></A>
+<A NAME="4352"></A>
+<A NAME="fn:WClientWin.is_fullscreen"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WClientWin.is_fullscreen(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>cwin</TT> in full screen mode?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4353"></A>
+<A NAME="4354"></A>
+<A NAME="fn:WClientWin.kill"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.kill(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to kill (with XKillWindow) the client that owns the X
+ window correspoding to <TT>cwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4355"></A>
+<A NAME="4356"></A>
+<A NAME="fn:WClientWin.nudge"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.nudge(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempts to fix window size problems with non-ICCCM compliant
+ programs.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4357"></A>
+<A NAME="4358"></A>
+<A NAME="fn:WClientWin.quote_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WClientWin.quote_next(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Send next key press directly to <TT>cwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4359"></A>
+<A NAME="4360"></A>
+<A NAME="fn:WClientWin.set_fullscreen"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WClientWin.set_fullscreen(WClientWin cwin, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set client window <TT>cwin</TT> full screen state according to the
+ parameter <TT>how</TT> (set/unset/toggle). Resulting state is returned,
+ which may not be what was requested.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4361"></A>
+<A NAME="4362"></A>
+<A NAME="fn:WClientWin.xid"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>double WClientWin.xid(WClientWin cwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the X window id for the client window.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00712000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4364"></A>
+<A NAME="4365"></A>
+<A NAME="fn:WFrame.is_shaded"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.is_shaded(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>frame</TT> shaded?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4366"></A>
+<A NAME="4367"></A>
+<A NAME="fn:WFrame.maximize_horiz"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.maximize_horiz(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to toggle horizontal maximisation of <TT>frame</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4368"></A>
+<A NAME="4369"></A>
+<A NAME="fn:WFrame.maximize_vert"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.maximize_vert(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to toggle vertical maximisation of <TT>frame</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4370"></A>
+<A NAME="4371"></A>
+<A NAME="fn:WFrame.mode"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WFrame.mode(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get frame mode.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4372"></A>
+<A NAME="4373"></A>
+<A NAME="fn:WFrame.p_switch_tab"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.p_switch_tab(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display the region corresponding to the tab that the user pressed on.
+ This function should only be used by binding it to a mouse action.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4374"></A>
+<A NAME="4375"></A>
+<A NAME="fn:WFrame.p_tabdrag"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WFrame.p_tabdrag(WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start dragging the tab that the user pressed on with the pointing device.
+ This function should only be used by binding it to <SPAN CLASS="textit">mpress</SPAN> or
+ <SPAN CLASS="textit">mdrag</SPAN> action with area ''tab''.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4376"></A>
+<A NAME="4377"></A>
+<A NAME="fn:WFrame.set_mode"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set frame mode.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4378"></A>
+<A NAME="4379"></A>
+<A NAME="fn:WFrame.set_numbers"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_numbers(WFrame frame, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Control whether tabs show numbers (set/unset/toggle).
+ Resulting state is returned, which may not be what was
+ requested.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4380"></A>
+<A NAME="4381"></A>
+<A NAME="fn:WFrame.set_shaded"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WFrame.set_shaded(WFrame frame, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set shading state according to the parameter <TT>how</TT>
+ (set/unset/toggle). Resulting state is returned, which may not be
+ what was requested.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00713000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4383"></A>
+<A NAME="4384"></A>
+<A NAME="fn:WGroup.attach"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.attach(WGroup ws, WRegion reg, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach and reparent existing region <TT>reg</TT> to <TT>ws</TT>.
+ The table <TT>param</TT> may contain the fields <TT>index</TT> and
+ <TT>switchto</TT> that are interpreted as for <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4385"></A>
+<A NAME="4386"></A>
+<A NAME="fn:WGroup.attach_new"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.attach_new(WGroup ws, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new region to be managed by <TT>ws</TT>. At least the following
+ fields in <TT>param</TT> are understood:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>type</TT></TD>
+<TD ALIGN="LEFT">Class name (a string) of the object to be created. Mandatory.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">Name of the object to be created (a string). Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">Should the region be switched to (boolean)? Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
+<TD ALIGN="LEFT">Stacking level; default is 1.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
+<TD ALIGN="LEFT">Make object modal; ignored if level is set.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
+<TD ALIGN="LEFT">Size policy.</TD>
+</TR>
+</TABLE>
+
+<P>
+In addition parameters to the region to be created are passed in this
+ same table.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4387"></A>
+<A NAME="4388"></A>
+<A NAME="fn:WGroup.bottom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WGroup.bottom(WGroup ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the 'bottom' of <TT>ws</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4389"></A>
+<A NAME="4390"></A>
+<A NAME="fn:WGroup.managed_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WGroup.managed_list(WGroup ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions managed by the workspace (frames, mostly).
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00714000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
+</H3>
+
+<P>
+
+<H3><A NAME="SECTION00715000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4393"></A>
+<A NAME="4394"></A>
+<A NAME="fn:WGroupWS.attach_framed"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WGroupWS.attach_framed(WGroupWS ws, WRegion reg, table t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach region <TT>reg</TT> on <TT>ws</TT>.
+ At least the following fields in <TT>t</TT> are supported:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">Should the region be switched to (boolean)? Optional.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">Geometry; <TT>x</TT> and <TT>y</TT>, if set, indicates top-left of
+ the frame to be created while <TT>width</TT> and <TT>height</TT>, if set, indicate
+ the size of the client window within that frame. Optional.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00716000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4396"></A>
+<A NAME="4397"></A>
+<A NAME="fn:WInfoWin.set_text"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInfoWin.set_text(WInfoWin p, string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set contents of the info window.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00717000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4399"></A>
+<A NAME="4400"></A>
+<A NAME="fn:WMPlex.attach"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.attach(WMPlex mplex, WRegion reg, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach and reparent existing region <TT>reg</TT> to <TT>mplex</TT>.
+ The table <TT>param</TT> may contain the fields <TT>index</TT> and
+ <TT>switchto</TT> that are interpreted as for <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4401"></A>
+<A NAME="4402"></A>
+<A NAME="fn:WMPlex.attach_new"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.attach_new(WMPlex mplex, table param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new region to be managed by <TT>mplex</TT>. At least the following
+ fields in <TT>param</TT> are understood (all but <TT>type</TT> are optional).
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>type</TT></TD>
+<TD ALIGN="LEFT">(string) Class name (a string) of the object to be created.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">(string) Name of the object to be created (a string).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">(boolean) Should the region be switched to (boolean)?</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>unnumbered</TT></TD>
+<TD ALIGN="LEFT">(boolean) Do not put on the numbered mutually
+ exclusive list.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>index</TT></TD>
+<TD ALIGN="LEFT">(integer) Index on this list, same as for
+ <A HREF="#fn:WMPlex.set_index"><TT>WMPlex.set_index</TT></A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
+<TD ALIGN="LEFT">(integer) Stacking level.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
+<TD ALIGN="LEFT">(boolean) Shortcut for modal stacking level.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>hidden</TT></TD>
+<TD ALIGN="LEFT">(boolean) Attach hidden, if not prevented
+ by e.g. the mutually exclusive list being empty.
+ This option overrides <TT>switchto</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
+<TD ALIGN="LEFT">(integer) Size policy.
+ (TODO: document them somewhere.)</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">(table) Geometry specification.</TD>
+</TR>
+</TABLE>
+
+<P>
+In addition parameters to the region to be created are passed in this
+ same table.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4403"></A>
+<A NAME="4404"></A>
+<A NAME="fn:WMPlex.attach_tagged"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.attach_tagged(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach all tagged regions to <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4405"></A>
+<A NAME="4406"></A>
+<A NAME="fn:WMPlex.dec_index"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.dec_index(WMPlex mplex, WRegion r)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4407"></A>
+<A NAME="4408"></A>
+<A NAME="fn:WMPlex.get_index"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WMPlex.get_index(WMPlex mplex, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get index of <TT>reg</TT> within the multiplexer on list 1. The first region
+ managed by <TT>mplex</TT> has index zero. If <TT>reg</TT> is not managed by
+ <TT>mplex</TT>, -1 is returned.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4409"></A>
+<A NAME="4410"></A>
+<A NAME="fn:WMPlex.get_stdisp"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.get_stdisp(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get status display information. See <A HREF="#fn:WMPlex.get_stdisp"><TT>WMPlex.get_stdisp</TT></A> for
+ information on the fields.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4411"></A>
+<A NAME="4412"></A>
+<A NAME="fn:WMPlex.inc_index"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.inc_index(WMPlex mplex, WRegion r)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4413"></A>
+<A NAME="4414"></A>
+<A NAME="fn:WMPlex.is_hidden"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WMPlex.is_hidden(WMPlex mplex, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> on within <TT>mplex</TT> and hidden?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4415"></A>
+<A NAME="4416"></A>
+<A NAME="fn:WMPlex.managed_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.managed_list(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of all regions managed by <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4417"></A>
+<A NAME="4418"></A>
+<A NAME="fn:WMPlex.mx_count"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WMPlex.mx_count(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the number of objects on the mutually exclusive list of <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4419"></A>
+<A NAME="4420"></A>
+<A NAME="fn:WMPlex.mx_current"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.mx_current(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the managed object currently active within the mutually exclusive
+ list of <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4421"></A>
+<A NAME="4422"></A>
+<A NAME="fn:WMPlex.mx_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WMPlex.mx_list(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions on the numbered/mutually exclusive list of
+ <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4423"></A>
+<A NAME="4424"></A>
+<A NAME="fn:WMPlex.mx_nth"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.mx_nth(WMPlex mplex, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the <TT>n</TT>:th object managed by <TT>mplex</TT> on the
+ <TT>l</TT>:th layer.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4425"></A>
+<A NAME="4426"></A>
+<A NAME="fn:WMPlex.set_hidden"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WMPlex.set_hidden(WMPlex mplex, WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set the visibility of the region <TT>reg</TT> on <TT>mplex</TT>
+ as specified with the parameter <TT>how</TT> (set/unset/toggle).
+ The resulting state is returned.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4427"></A>
+<A NAME="4428"></A>
+<A NAME="fn:WMPlex.set_index"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.set_index(WMPlex mplex, WRegion reg, integer index)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set index of <TT>reg</TT> within the multiplexer to <TT>index</TT> within
+ the mutually exclusive list. Special values for <TT>index</TT> are:
+ <TABLE CELLPADDING=3 WIDTH="100%">
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">After <A HREF="#fn:WMPlex.mx_current"><TT>WMPlex.mx_current</TT></A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">Last.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4429"></A>
+<A NAME="4430"></A>
+<A NAME="fn:WMPlex.set_stdisp"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WMPlex.set_stdisp(WMPlex mplex, table t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set/create status display for <TT>mplex</TT>. Table is a standard
+ description of the object to be created (as passed to e.g.
+ <A HREF="#fn:WMPlex.attach_new"><TT>WMPlex.attach_new</TT></A>). In addition, the following fields are
+ recognised:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
+<TD ALIGN="LEFT">The corner of the screen to place the status display
+ in. One of <TT>tl</TT>, <TT>tr</TT>, <TT>bl</TT> or <TT>br</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>action</TT></TD>
+<TD ALIGN="LEFT">If this field is set to <TT>keep</TT>, <TT>corner</TT>
+ and <TT>orientation</TT> are changed for the existing
+ status display. If this field is set to <TT>remove</TT>,
+ the existing status display is removed. If this
+ field is not set or is set to <TT>replace</TT>, a
+ new status display is created and the old, if any,
+ removed.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4431"></A>
+<A NAME="4432"></A>
+<A NAME="fn:WMPlex.switch_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_next(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display next (wrt. currently selected) object managed
+ by it.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4433"></A>
+<A NAME="4434"></A>
+<A NAME="fn:WMPlex.switch_nth"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_nth(WMPlex mplex, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display the <TT>n</TT>:th object managed by it.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4435"></A>
+<A NAME="4436"></A>
+<A NAME="fn:WMPlex.switch_prev"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMPlex.switch_prev(WMPlex mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Have <TT>mplex</TT> display previous (wrt. currently selected) object
+ managed by it.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00718000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4438"></A>
+<A NAME="4439"></A>
+<A NAME="fn:WMoveresMode.cancel"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.cancel(WMoveresMode mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return from move/resize cancelling changes if opaque
+ move/resize has not been enabled.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4440"></A>
+<A NAME="4441"></A>
+<A NAME="fn:WMoveresMode.finish"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.finish(WMoveresMode mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return from move/resize mode and apply changes unless opaque
+ move/resize is enabled.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4442"></A>
+<A NAME="4443"></A>
+<A NAME="fn:WMoveresMode.move"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.move(WMoveresMode mode, integer horizmul, integer vertmul)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move resize mode target one step:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1">
+<TR><TD ALIGN="RIGHT"><TT>horizmul</TT>/<TT>vertmul</TT></TD>
+<TD ALIGN="LEFT">effect</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">-1</TD>
+<TD ALIGN="LEFT">Move left/up</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">0</TD>
+<TD ALIGN="LEFT">No effect</TD>
+</TR>
+<TR><TD ALIGN="RIGHT">1</TD>
+<TD ALIGN="LEFT">Move right/down</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4444"></A>
+<A NAME="4445"></A>
+<A NAME="fn:WMoveresMode.resize"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMoveresMode.resize(WMoveresMode mode, integer left, integer right, integer top, integer bottom)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Shrink or grow resize mode target one step in each direction.
+ Acceptable values for the parameters <TT>left</TT>, <TT>right</TT>, <TT>top</TT>
+ and <TT>bottom</TT> are as follows: -1: shrink along,
+ 0: do not change, 1: grow along corresponding border.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00719000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4447"></A>
+<A NAME="4448"></A>
+<A NAME="fn:WRegion.begin_kbresize"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMoveresMode WRegion.begin_kbresize(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Enter move/resize mode for <TT>reg</TT>. The bindings set with
+ <A HREF="#fn:ioncore.set_bindings"><TT>ioncore.set_bindings</TT></A> for WMoveresMode are used in
+ this mode. Of the functions exported by the Ion C core, only
+ <A HREF="#fn:WMoveresMode.resize"><TT>WMoveresMode.resize</TT></A>, <A HREF="#fn:WMoveresMode.move"><TT>WMoveresMode.move</TT></A>,
+ <A HREF="#fn:WMoveresMode.cancel"><TT>WMoveresMode.cancel</TT></A> and <A HREF="#fn:WMoveresMode.end"><TT>WMoveresMode.end</TT></A> are
+ allowed to be called while in this mode.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4449"></A>
+<A NAME="4450"></A>
+<A NAME="fn:WRegion.current"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.current(WRegion mgr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the object, if any, that is considered ''currently active''
+ within the objects managed by <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4451"></A>
+<A NAME="4452"></A>
+<A NAME="fn:WRegion.geom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.geom(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the geometry of <TT>reg</TT> within its parent; a table with fields
+ <TT>x</TT>, <TT>y</TT>, <TT>w</TT> and <TT>h</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4453"></A>
+<A NAME="4454"></A>
+<A NAME="fn:WRegion.goto"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.goto(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to display <TT>reg</TT>, save region activity status and then
+ warp to (or simply set focus to if warping is disabled) <TT>reg</TT>.
+
+<P>
+Note that this function is asynchronous; the region will not
+ actually have received the focus when this function returns.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4455"></A>
+<A NAME="4456"></A>
+<A NAME="fn:WRegion.is_active"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_active(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> active/does it or one of it's children of focus?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4457"></A>
+<A NAME="4458"></A>
+<A NAME="fn:WRegion.is_activity"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_activity(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is activity notification set on <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4459"></A>
+<A NAME="4460"></A>
+<A NAME="fn:WRegion.is_mapped"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_mapped(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> visible/is it and all it's ancestors mapped?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4461"></A>
+<A NAME="4462"></A>
+<A NAME="fn:WRegion.is_tagged"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.is_tagged(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>reg</TT> tagged?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4463"></A>
+<A NAME="4464"></A>
+<A NAME="fn:WRegion.manager"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.manager(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the region that manages <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4465"></A>
+<A NAME="4466"></A>
+<A NAME="fn:WRegion.name"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WRegion.name(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the name for <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4467"></A>
+<A NAME="4468"></A>
+<A NAME="fn:WRegion.parent"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WWindow WRegion.parent(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the parent region of <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4469"></A>
+<A NAME="4470"></A>
+<A NAME="fn:WRegion.rootwin_of"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRootWin WRegion.rootwin_of(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the root window <TT>reg</TT> is on.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4471"></A>
+<A NAME="4472"></A>
+<A NAME="fn:WRegion.rqclose"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.rqclose(WRegion reg, bool relocate)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to close/destroy <TT>reg</TT>. Whether this operation works
+ depends on whether the particular type of region in question has
+ implemented the feature and, in case of client windows, whether
+ the client supports the <TT>WM_DELETE</TT> protocol (see also
+ <A HREF="#fn:WClientWin.kill"><TT>WClientWin.kill</TT></A>). If the operation is likely to succeed,
+ <TT>true</TT> is returned, otherwise <TT>false</TT>. In most cases the
+ region will not have been actually destroyed when this function returns.
+ If <TT>relocate</TT> is not set, and <TT>reg</TT> manages other regions, it
+ will not be closed. Otherwise the managed regions will be attempted
+ to be relocated.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4473"></A>
+<A NAME="4474"></A>
+<A NAME="fn:WRegion.rqclose_propagate"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WRegion.rqclose_propagate(WRegion reg, WRegion maybe_sub)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Recursively attempt to close a region or one of the regions managed by
+ it. If <TT>sub</TT> is set, it will be used as the managed region, otherwise
+ <A HREF="#fn:WRegion.current"><TT>WRegion.current</TT></A><TT>(reg)</TT>. The object to be closed is
+ returned or NULL if nothing can be closed. Also see notes for
+ <A HREF="#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4475"></A>
+<A NAME="4476"></A>
+<A NAME="fn:WRegion.rqgeom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.rqgeom(WRegion reg, table g)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to resize and/or move <TT>reg</TT>. The table <TT>g</TT> is a usual
+ geometry specification (fields <TT>x</TT>, <TT>y</TT>, <TT>w</TT> and <TT>h</TT>),
+ but may contain missing fields, in which case, <TT>reg</TT>'s manager may
+ attempt to leave that attribute unchanged.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4477"></A>
+<A NAME="4478"></A>
+<A NAME="fn:WRegion.rqorder"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.rqorder(WRegion reg, string ord)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request ordering. Currently supported values for <TT>ord</TT>
+ are 'front' and 'back'.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4479"></A>
+<A NAME="4480"></A>
+<A NAME="fn:WRegion.screen_of"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen WRegion.screen_of(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the screen <TT>reg</TT> is on.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4481"></A>
+<A NAME="4482"></A>
+<A NAME="fn:WRegion.set_activity"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_activity(WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set activity flag of <TT>reg</TT>. The <TT>how</TT> parameter most be
+ one of (set/unset/toggle).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4483"></A>
+<A NAME="4484"></A>
+<A NAME="fn:WRegion.set_name"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_name(WRegion reg, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set the name of <TT>reg</TT> to <TT>p</TT>. If the name is already in use,
+ an instance number suffix <TT><n></TT> will be attempted. If <TT>p</TT> has
+ such a suffix, it will be modified, otherwise such a suffix will be
+ added. Setting <TT>p</TT> to nil will cause current name to be removed.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4485"></A>
+<A NAME="4486"></A>
+<A NAME="fn:WRegion.set_name_exact"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_name_exact(WRegion reg, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Similar to <A HREF="#fn:WRegion.set_name"><TT>WRegion.set_name</TT></A> except if the name is already in use,
+ other instance numbers will not be attempted. The string <TT>p</TT> should
+ not contain a <TT><n></TT> suffix or this function will fail.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4487"></A>
+<A NAME="4488"></A>
+<A NAME="fn:WRegion.set_tagged"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WRegion.set_tagged(WRegion reg, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change tagging state of <TT>reg</TT> as defined by <TT>how</TT>
+ (set/unset/toggle). Resulting state is returned.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4489"></A>
+<A NAME="4490"></A>
+<A NAME="fn:WRegion.size_hints"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WRegion.size_hints(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns size hints for <TT>reg</TT>. The returned table always contains the
+ fields <TT>min_?</TT>, <TT>base_?</TT> and sometimes the fields <TT>max_?</TT>,
+ <TT>base_?</TT> and <TT>inc_?</TT>, where <TT>?</TT>=<TT>w</TT>, <TT>h</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007110000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4492"></A>
+<A NAME="4493"></A>
+<A NAME="fn:WRootWin.current_scr"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WScreen WRootWin.current_scr(WRootWin rootwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns previously active screen on root window <TT>rootwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007111000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4495"></A>
+<A NAME="4496"></A>
+<A NAME="fn:WScreen.id"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WScreen.id(WScreen scr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the numerical id for screen <TT>scr</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4497"></A>
+<A NAME="4498"></A>
+<A NAME="fn:WScreen.set_managed_offset"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WScreen.set_managed_offset(WScreen scr, table offset)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set offset of objects managed by the screen from actual screen geometry.
+ The table <TT>offset</TT> should contain the entries <TT>x</TT>, <TT>y</TT>,
+ <TT>w</TT> and <TT>h</TT> indicating offsets of that component of screen
+ geometry.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007112000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4500"></A>
+<A NAME="4501"></A>
+<A NAME="fn:WWindow.p_move"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WWindow.p_move(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start moving <TT>wwin</TT> with the mouse or other pointing device.
+ This function should only be used by binding it to <SPAN CLASS="textit">mpress</SPAN> or
+ <SPAN CLASS="textit">mdrag</SPAN> action.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4502"></A>
+<A NAME="4503"></A>
+<A NAME="fn:WWindow.p_resize"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WWindow.p_resize(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Start resizing <TT>wwin</TT> with the mouse or other pointing device.
+ This function should only be used by binding it to <SPAN CLASS="textit">mpress</SPAN> or
+ <SPAN CLASS="textit">mdrag</SPAN> action.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4504"></A>
+<A NAME="4505"></A>
+<A NAME="fn:WWindow.xid"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>double WWindow.xid(WWindow wwin)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the X window id for <TT>wwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007113000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4507"></A>
+<A NAME="fn:export"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>export(lib, ...)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Export a list of functions from <TT>lib</TT> into global namespace.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007114000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4509"></A>
+<A NAME="4510"></A>
+<A NAME="fn:gr.read_config"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void gr.read_config()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Read drawing engine configuration file <SPAN CLASS="textit">draw.lua</SPAN>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4511"></A>
+<A NAME="4512"></A>
+<A NAME="fn:gr.refresh"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void gr.refresh()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Refresh objects' brushes to update them to use newly loaded style.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4513"></A>
+<A NAME="4514"></A>
+<A NAME="fn:gr.select_engine"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool gr.select_engine(string engine)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Future requests for ''brushes'' are to be forwarded to the drawing engine
+ <TT>engine</TT>. If no engine of such name is known, a module with that name
+ is attempted to be loaded. This function is only intended to be called from
+ colour scheme etc. configuration files and can not be used to change the
+ look of existing objects; for that use <A HREF="#fn:gr.read_config"><TT>gr.read_config</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007115000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4516"></A>
+<A NAME="4517"></A>
+<A NAME="fn:string.shell_safe"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string.shell_safe(str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Make <TT>str</TT> shell-safe.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007116000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="4519"></A>
+<A NAME="4520"></A>
+<A NAME="fn:table.append"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.append(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Add entries that do not exist in <TT>t1</TT> from <TT>t2</TT> to <TT>t1</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4521"></A>
+<A NAME="4522"></A>
+<A NAME="fn:table.copy"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.copy(t, deep)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Make copy of <TT>table</TT>. If <TT>deep</TT> is unset, shallow one-level
+ copy is made, otherwise a deep copy is made.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4523"></A>
+<A NAME="4524"></A>
+<A NAME="fn:table.icat"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.icat(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Insert all positive integer entries from t2 into t1.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4525"></A>
+<A NAME="4526"></A>
+<A NAME="fn:table.join"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.join(t1, t2)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a table containing all entries from <TT>t1</TT> and those from
+ <TT>t2</TT> that are missing from <TT>t1</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="4527"></A>
+<A NAME="4528"></A>
+<A NAME="fn:table.map"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table.map(f, t)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Map all entries of <TT>t</TT> by <TT>f</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00720000000000000000"></A>
+<A NAME="sec:tilingref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN CLASS="textit">mod_tiling</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="6781"></A>
+<A NAME="6782"></A>
+<A NAME="fn:mod_tiling.detach"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_tiling.detach(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Detach <TT>reg</TT>, i.e. make it managed by its nearest ancestor
+ WGroup, framed if <TT>reg</TT> is not itself WFrame.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6783"></A>
+<A NAME="6784"></A>
+<A NAME="fn:mod_tiling.get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_tiling.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get parameters. For details see <A HREF="#fn:mod_tiling.set"><TT>mod_tiling.set</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6785"></A>
+<A NAME="6786"></A>
+<A NAME="fn:mod_tiling.mkbottom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_tiling.mkbottom(WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new WTiling 'bottom' for the group of <TT>reg</TT>,
+ consisting of <TT>reg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6787"></A>
+<A NAME="6788"></A>
+<A NAME="fn:mod_tiling.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_tiling.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set parameters. Currently only <TT>raise_delay</TT> (in milliseconds)
+ is supported.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00721000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="6790"></A>
+<A NAME="6791"></A>
+<A NAME="fn:WSplit.geom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WSplit.geom(WSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the area of workspace used by the regions under <TT>split</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6792"></A>
+<A NAME="6793"></A>
+<A NAME="fn:WSplit.parent"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitInner WSplit.parent(WSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return parent split for <TT>split</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6794"></A>
+<A NAME="6795"></A>
+<A NAME="fn:WSplit.rqgeom"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WSplit.rqgeom(WSplit node, table g)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attempt to resize and/or move the split tree starting at <TT>node</TT>.
+ Behaviour and the <TT>g</TT> parameter are as for <A HREF="#fn:WRegion.rqgeom"><TT>WRegion.rqgeom</TT></A>
+ operating on <TT>node</TT> (if it were a WRegion).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6796"></A>
+<A NAME="6797"></A>
+<A NAME="fn:WSplit.transpose"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WSplit.transpose(WSplit node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose contents of <TT>node</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00722000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="6799"></A>
+<A NAME="6800"></A>
+<A NAME="fn:WSplitInner.current"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitInner.current(WSplitInner node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the most previously active child node of <TT>split</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00723000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="6802"></A>
+<A NAME="6803"></A>
+<A NAME="fn:WSplitRegion.reg"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WSplitRegion.reg(WSplitRegion node)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the region contained in <TT>node</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00724000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="6805"></A>
+<A NAME="6806"></A>
+<A NAME="fn:WSplitSplit.br"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitSplit.br(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the bottom or right child node of <TT>split</TT> depending
+ on the direction of the split.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6807"></A>
+<A NAME="6808"></A>
+<A NAME="fn:WSplitSplit.dir"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WSplitSplit.dir(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the direction of <TT>split</TT>; either ''vertical'' or
+ ''horizontal''.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6809"></A>
+<A NAME="6810"></A>
+<A NAME="fn:WSplitSplit.flip"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WSplitSplit.flip(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Flip contents of <TT>node</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6811"></A>
+<A NAME="6812"></A>
+<A NAME="fn:WSplitSplit.tl"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WSplitSplit.tl(WSplitSplit split)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the top or left child node of <TT>split</TT> depending
+ on the direction of the split.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00725000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="6814"></A>
+<A NAME="6815"></A>
+<A NAME="fn:WTiling.flip_at"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.flip_at(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Flip <TT>ws</TT> at <TT>reg</TT> or root if nil.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6816"></A>
+<A NAME="6817"></A>
+<A NAME="fn:WTiling.transpose_at"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.transpose_at(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose <TT>ws</TT> at <TT>reg</TT> or root if nil.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6818"></A>
+<A NAME="6819"></A>
+<A NAME="fn:WTiling.farthest"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WTiling.farthest(WTiling ws, string dirstr, bool any)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the most previously active region on <TT>ws</TT> with no
+ other regions next to it in direction <TT>dirstr</TT>
+ (left/right/up/down). If <TT>any</TT> is not set, the status
+ display is not considered.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6820"></A>
+<A NAME="6821"></A>
+<A NAME="fn:WTiling.managed_list"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WTiling.managed_list(WTiling ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns a list of regions managed by the workspace (frames, mostly).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6822"></A>
+<A NAME="6823"></A>
+<A NAME="fn:WTiling.nextto"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WRegion WTiling.nextto(WTiling ws, WRegion reg, string dirstr, bool any)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return the most previously active region next to <TT>reg</TT> in
+ direction <TT>dirstr</TT> (left/right/up/down). The region <TT>reg</TT>
+ must be managed by <TT>ws</TT>. If <TT>any</TT> is not set, the status display
+ is not considered.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6824"></A>
+<A NAME="6825"></A>
+<A NAME="fn:WTiling.node_of"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitRegion WTiling.node_of(WTiling ws, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>For region <TT>reg</TT> managed by <TT>ws</TT> return the WSplit
+ a leaf of which <TT>reg</TT> is.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6826"></A>
+<A NAME="6827"></A>
+<A NAME="fn:WTiling.set_floating_at"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.set_floating_at(WTiling ws, WRegion reg, string how, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating of the sides of a split containin <TT>reg</TT> as indicated
+ by the parameters <TT>how</TT> (set/unset/toggle) and <TT>dirstr</TT>
+ (left/right/up/down/any). The new status is returned (and <TT>false</TT>
+ also on error).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6828"></A>
+<A NAME="6829"></A>
+<A NAME="fn:WTiling.set_floating"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplitSplit WTiling.set_floating(WTiling ws, WSplitSplit split, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating of a split's sides at <TT>split</TT> as indicated by the
+ parameter <TT>how</TT> (set/unset/toggle). A split of the appropriate is
+ returned, if there was a change.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6830"></A>
+<A NAME="6831"></A>
+<A NAME="fn:WTiling.split"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split(WTiling ws, WSplit node, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new frame on <TT>ws</TT> above/below/left of/right of
+ <TT>node</TT> as indicated by <TT>dirstr</TT>. If <TT>dirstr</TT> is
+ prefixed with ''floating:'' a floating split is created.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6832"></A>
+<A NAME="6833"></A>
+<A NAME="fn:WTiling.split_at"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split_at(WTiling ws, WFrame frame, string dirstr, bool attach_current)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Split <TT>frame</TT> creating a new frame to direction <TT>dirstr</TT>
+ (one of ''left'', ''right'', ''top'' or ''bottom'') of <TT>frame</TT>.
+ If <TT>attach_current</TT> is set, the region currently displayed in
+ <TT>frame</TT>, if any, is moved to thenew frame.
+ If <TT>dirstr</TT> is prefixed with ''floating:'' a floating split is
+ created.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6834"></A>
+<A NAME="6835"></A>
+<A NAME="fn:WTiling.split_top"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WFrame WTiling.split_top(WTiling ws, string dirstr)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Same as <A HREF="#fn:WTiling.split"><TT>WTiling.split</TT></A> at the root of the split tree.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6836"></A>
+<A NAME="6837"></A>
+<A NAME="fn:WTiling.split_tree"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WSplit WTiling.split_tree(WTiling ws)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Returns the root of the split tree.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="6838"></A>
+<A NAME="6839"></A>
+<A NAME="fn:WTiling.unsplit_at"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTiling.unsplit_at(WTiling ws, WFrame frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Try to relocate regions managed by <TT>frame</TT> to another frame
+ and, if possible, destroy the frame.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00730000000000000000"></A>
+<A NAME="sec:queryref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN CLASS="textit">mod_query</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="7832"></A>
+<A NAME="7833"></A>
+<A NAME="fn:mod_query.defcmd"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.defcmd(cmd, fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a command override for the <A HREF="#fn:mod_query.query_exec"><TT>query_exec</TT></A> query.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7834"></A>
+<A NAME="7835"></A>
+<A NAME="fn:mod_query.get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_query.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get module configuration. For more information see
+ <A HREF="#fn:mod_query.set"><TT>mod_query.set</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7836"></A>
+<A NAME="7837"></A>
+<A NAME="fn:mod_query.history_clear"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_query.history_clear()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear line editor history.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7838"></A>
+<A NAME="7839"></A>
+<A NAME="fn:mod_query.history_get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string mod_query.history_get(integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get entry at index <TT>n</TT> in line editor history, 0 being the latest.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7840"></A>
+<A NAME="7841"></A>
+<A NAME="fn:mod_query.history_push"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_query.history_push(string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Push an entry into line editor history.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7842"></A>
+<A NAME="7843"></A>
+<A NAME="fn:mod_query.history_search"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer mod_query.history_search(string s, integer from, bool bwd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Try to find matching history entry. Returns -1 if none was
+ found. The parameter <TT>from</TT> specifies where to start
+ searching from, and <TT>bwd</TT> causes backward search from
+ that point.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7844"></A>
+<A NAME="7845"></A>
+<A NAME="fn:mod_query.history_table"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_query.history_table()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Return table of history entries.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7846"></A>
+<A NAME="7847"></A>
+<A NAME="fn:mod_query.message"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMessage mod_query.message(WMPlex mplex, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display a message in the <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7848"></A>
+<A NAME="7849"></A>
+<A NAME="fn:mod_query.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_query.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set module configuration. The following are supported:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>autoshowcompl</TT></TD>
+<TD ALIGN="LEFT">(boolean) Is auto-show-completions enabled?
+ (default: true).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>autoshowcompl_delay</TT></TD>
+<TD ALIGN="LEFT">(integer) auto-show-completions delay
+ in milliseconds (default: 250).</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7850"></A>
+<A NAME="7851"></A>
+<A NAME="fn:mod_query.warn"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WMessage mod_query.warn(WMPlex mplex, string p)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display an error message box in the multiplexer <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7852"></A>
+<A NAME="7853"></A>
+<A NAME="fn:mod_query.popen_completions"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.popen_completions(cp, cmd, fn, reshnd)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function can be used to read completions from an external source.
+ The parameter <TT>cp</TT> is the completion proxy to be used,
+ and the string <TT>cmd</TT> the shell command to be executed. To its stdout,
+ the command should on the first line write the <TT>common_beg</TT>
+ parameter of <A HREF="#fn:WComplProxy.set_completions"><TT>WComplProxy.set_completions</TT></A> (which <TT>fn</TT> maybe used
+ to override) and a single actual completion on each of the successive lines.
+ The function <TT>reshnd</TT> may be used to override a result table
+ building routine.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7854"></A>
+<A NAME="7855"></A>
+<A NAME="fn:mod_query.query"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query(mplex, prompt, initvalue, handler, completor,
+ context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Low-level query routine. <TT>mplex</TT> is the WMPlex to display
+ the query in, <TT>prompt</TT> the prompt string, and <TT>initvalue</TT>
+ the initial contents of the query box. <TT>handler</TT> is a function
+ that receives (<TT>mplex</TT>, result string) as parameter when the
+ query has been succesfully completed, <TT>completor</TT> the completor
+ routine which receives a (<TT>cp</TT>, <TT>str</TT>, <TT>point</TT>) as parameters.
+ The parameter <TT>str</TT> is the string to be completed and <TT>point</TT>
+ cursor's location within it. Completions should be eventually,
+ possibly asynchronously, set with <A HREF="#fn:WComplProxy.set_completions"><TT>WComplProxy.set_completions</TT></A>
+ on <TT>cp</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7856"></A>
+<A NAME="7857"></A>
+<A NAME="fn:mod_query.query_attachclient"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_attachclient(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a client window and switches
+ focus to the one entered. It uses the completion function
+ <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7858"></A>
+<A NAME="7859"></A>
+<A NAME="fn:mod_query.query_editfile"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_editfile(mplex, script, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Asks for a file to be edited. This script uses
+ <TT>run-mailcap -mode=edit</TT> by default, but you may provide an
+ alternative script to use. The default prompt is "Edit file:" (translated).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7860"></A>
+<A NAME="7861"></A>
+<A NAME="fn:mod_query.query_exec"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_exec(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a command to execute with <SPAN CLASS="textit">/bin/sh</SPAN>.
+ If the command is prefixed with a colon (':'), the command will
+ be run in an XTerm (or other terminal emulator) using the script
+ <SPAN CLASS="textit">ion-runinxterm</SPAN>. Two colons ('::') will ask you to press
+ enter after the command has finished.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7862"></A>
+<A NAME="7863"></A>
+<A NAME="fn:mod_query.query_gotoclient"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_gotoclient(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a client window and attaches
+ it to the frame the query was opened in. It uses the completion
+ function <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7864"></A>
+<A NAME="7865"></A>
+<A NAME="fn:mod_query.query_lua"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_lua(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for Lua code to execute. It sets the variable '<TT>_</TT>'
+ in the local environment of the string to point to the mplex where the
+ query was created. It also sets the table <TT>arg</TT> in the local
+ environment to <TT>{_, _:current()}</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7866"></A>
+<A NAME="7867"></A>
+<A NAME="fn:mod_query.query_man"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_man(mplex, prog)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for a manual page to display. By default it runs the
+ <TT>man</TT> command in an <TT>xterm</TT> using <TT>ion-runinxterm</TT>,
+ but it is possible to pass another program as the <TT>prog</TT> argument.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7868"></A>
+<A NAME="7869"></A>
+<A NAME="fn:mod_query.query_menu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_menu(mplex, themenu, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query can be used to create a query of a defined menu.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7870"></A>
+<A NAME="7871"></A>
+<A NAME="fn:mod_query.query_renameframe"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_renameframe(frame)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a name new for the frame where the query
+ was created.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7872"></A>
+<A NAME="7873"></A>
+<A NAME="fn:mod_query.query_renameworkspace"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_renameworkspace(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function asks for a name new for the workspace on which the
+ query resides.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7874"></A>
+<A NAME="7875"></A>
+<A NAME="fn:mod_query.query_restart"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_restart(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks whether the user wants restart Ioncore.
+ If the answer is 'y', 'Y' or 'yes', so will happen.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7876"></A>
+<A NAME="7877"></A>
+<A NAME="fn:mod_query.query_runfile"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_runfile(mplex, script, prompt)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Asks for a file to be viewed. This script uses
+ <TT>run-mailcap -action=view</TT> by default, but you may provide an
+ alternative script to use. The default prompt is "View file:" (translated).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7878"></A>
+<A NAME="7879"></A>
+<A NAME="fn:mod_query.query_shutdown"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_shutdown(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks whether the user wants to exit Ion (no session manager)
+ or close the session (running under a session manager that supports such
+ requests). If the answer is 'y', 'Y' or 'yes', so will happen.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7880"></A>
+<A NAME="7881"></A>
+<A NAME="fn:mod_query.query_ssh"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_ssh(mplex, ssh)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for a host to connect to with SSH.
+ Hosts to tab-complete are read from <SPAN CLASS="textit">~/.ssh/known_hosts</SPAN>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7883"></A>
+<A NAME="7884"></A>
+<A NAME="fn:mod_query.query_workspace"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_workspace(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This query asks for the name of a workspace. If a workspace
+ (an object inheriting WGroupWS) with such a name exists,
+ it will be switched to. Otherwise a new workspace with the
+ entered name will be created and the user will be queried for
+ the type of the workspace.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7885"></A>
+<A NAME="7886"></A>
+<A NAME="fn:mod_query.query_yesno"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.query_yesno(mplex, prompt, handler)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function query will display a query with prompt <TT>prompt</TT> in
+ <TT>mplex</TT> and if the user answers affirmately, call <TT>handler</TT>
+ with <TT>mplex</TT> as parameter.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7887"></A>
+<A NAME="7888"></A>
+<A NAME="fn:mod_query.show_about_ion"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.show_about_ion(mplex)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display an "About Ion" message in <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7889"></A>
+<A NAME="7890"></A>
+<A NAME="fn:mod_query.show_tree"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_query.show_tree(mplex, reg, max_depth)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Show information about a region tree
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00731000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="7892"></A>
+<A NAME="7893"></A>
+<A NAME="fn:WComplProxy.set_completions"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WComplProxy.set_completions(WComplProxy proxy, table compls)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set completion list of the WEdln that <TT>proxy</TT> refers to to
+ <TT>compls</TT>, if it is still waiting for this completion run. The
+ numerical indexes of <TT>compls</TT> list the found completions. If the
+ entry <TT>common_beg</TT> (<TT>common_end</TT>) exists, it gives an extra
+ common prefix (suffix) of all found completions.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00732000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="7895"></A>
+<A NAME="7896"></A>
+<A NAME="fn:WEdln.back"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.back(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move backward one character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7897"></A>
+<A NAME="7898"></A>
+<A NAME="fn:WEdln.backspace"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.backspace(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete previous character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7899"></A>
+<A NAME="7900"></A>
+<A NAME="fn:WEdln.bkill_word"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bkill_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Starting from the previous characters, delete possible whitespace and
+ preceding alphanumeric characters until previous non-alphanumeric character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7901"></A>
+<A NAME="7902"></A>
+<A NAME="fn:WEdln.bol"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to the beginning of line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7903"></A>
+<A NAME="7904"></A>
+<A NAME="fn:WEdln.bskip_word"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.bskip_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to to beginning of current sequence of alphanumeric characters
+ followed by whitespace.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7905"></A>
+<A NAME="7906"></A>
+<A NAME="fn:WEdln.clear_mark"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.clear_mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear <SPAN CLASS="textit">mark</SPAN>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7907"></A>
+<A NAME="7908"></A>
+<A NAME="fn:WEdln.complete"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.complete(WEdln wedln, string cycle, string mode)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Call completion handler with the text between the beginning of line and
+ current cursor position, or select next/previous completion from list if in
+ auto-show-completions mode and <TT>cycle</TT> is set to ``next'' or ``prev'',
+ respectively. The <TT>mode</TT> may be ``history'' or ``normal''. If it is
+ not set, the previous mode is used. Normally next entry is not cycled to
+ despite the setting of <TT>cycle</TT> if mode switch occurs. To override
+ this, use ``next-always'' and ``prev-always'' for <TT>cycle</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7909"></A>
+<A NAME="7910"></A>
+<A NAME="fn:WEdln.contents"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WEdln.contents(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get line editor contents.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7911"></A>
+<A NAME="7912"></A>
+<A NAME="fn:WEdln.context"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>string WEdln.context(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get history context for <TT>wedln</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7913"></A>
+<A NAME="7914"></A>
+<A NAME="fn:WEdln.copy"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.copy(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Copy text between <SPAN CLASS="textit">mark</SPAN> and current cursor position to clipboard.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7915"></A>
+<A NAME="7916"></A>
+<A NAME="fn:WEdln.cut"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.cut(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Copy text between <SPAN CLASS="textit">mark</SPAN> and current cursor position to clipboard
+ and then delete that sequence.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7917"></A>
+<A NAME="7918"></A>
+<A NAME="fn:WEdln.delete"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.delete(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete current character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7919"></A>
+<A NAME="7920"></A>
+<A NAME="fn:WEdln.eol"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.eol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to the end of line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7921"></A>
+<A NAME="7922"></A>
+<A NAME="fn:WEdln.finish"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.finish(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close <TT>wedln</TT> and call any handlers.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7923"></A>
+<A NAME="7924"></A>
+<A NAME="fn:WEdln.forward"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.forward(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Move forward one character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7925"></A>
+<A NAME="7926"></A>
+<A NAME="fn:WEdln.history_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.history_next(WEdln wedln, bool match)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Replace line editor contents with next entry in history if one exists.
+ If <TT>match</TT> is <TT>true</TT>, the initial part of the history entry
+ must match the current line from beginning to point.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7927"></A>
+<A NAME="7928"></A>
+<A NAME="fn:WEdln.history_prev"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.history_prev(WEdln wedln, bool match)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Replace line editor contents with previous in history if one exists.
+ If <TT>match</TT> is <TT>true</TT>, the initial part of the history entry
+ must match the current line from beginning to point.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7929"></A>
+<A NAME="7930"></A>
+<A NAME="fn:WEdln.insstr"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.insstr(WEdln wedln, string str)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Input <TT>str</TT> in wedln at current editing point.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7931"></A>
+<A NAME="7932"></A>
+<A NAME="fn:WEdln.is_histcompl"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.is_histcompl(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get history completion mode.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7933"></A>
+<A NAME="7934"></A>
+<A NAME="fn:WEdln.kill_line"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_line(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete the whole line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7935"></A>
+<A NAME="7936"></A>
+<A NAME="fn:WEdln.kill_to_bol"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_to_bol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete all characters from previous to beginning of line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7937"></A>
+<A NAME="7938"></A>
+<A NAME="fn:WEdln.kill_to_eol"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_to_eol(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Delete all characters from current to end of line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7939"></A>
+<A NAME="7940"></A>
+<A NAME="fn:WEdln.kill_word"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.kill_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Starting from the current point, delete possible whitespace and
+ following alphanumeric characters until next non-alphanumeric character.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7941"></A>
+<A NAME="7942"></A>
+<A NAME="fn:WEdln.mark"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WEdln.mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get current mark (start of selection) for <TT>wedln</TT>.
+ Return value of -1 indicates that there is no mark, and
+ 0 is the beginning of the line.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7943"></A>
+<A NAME="7944"></A>
+<A NAME="fn:WEdln.next_completion"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.next_completion(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select next completion.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7945"></A>
+<A NAME="7946"></A>
+<A NAME="fn:WEdln.paste"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.paste(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Request selection from application holding such.
+
+<P>
+Note that this function is asynchronous; the selection will not
+ actually be inserted before Ion receives it. This will be no
+ earlier than Ion return to its main loop.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7947"></A>
+<A NAME="7948"></A>
+<A NAME="fn:WEdln.point"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>integer WEdln.point(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get current editing point.
+ Beginning of the edited line is point 0.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7949"></A>
+<A NAME="7950"></A>
+<A NAME="fn:WEdln.prev_completion"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WEdln.prev_completion(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select previous completion.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7951"></A>
+<A NAME="7952"></A>
+<A NAME="fn:WEdln.set_context"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.set_context(WEdln wedln, string context)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set history context for <TT>wedln</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7953"></A>
+<A NAME="7954"></A>
+<A NAME="fn:WEdln.set_mark"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.set_mark(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set <SPAN CLASS="textit">mark</SPAN> to current cursor position.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7955"></A>
+<A NAME="7956"></A>
+<A NAME="fn:WEdln.skip_word"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.skip_word(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Go to to end of current sequence of whitespace followed by alphanumeric
+ characters..
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7957"></A>
+<A NAME="7958"></A>
+<A NAME="fn:WEdln.transpose_chars"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.transpose_chars(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose characters.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7959"></A>
+<A NAME="7960"></A>
+<A NAME="fn:WEdln.transpose_words"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WEdln.transpose_words(WEdln wedln)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Transpose words.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00733000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="7962"></A>
+<A NAME="7963"></A>
+<A NAME="fn:WInput.cancel"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.cancel(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close input not calling any possible finish handlers.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7964"></A>
+<A NAME="7965"></A>
+<A NAME="fn:WInput.scrolldown"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.scrolldown(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Scroll input <TT>input</TT> text contents down.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="7966"></A>
+<A NAME="7967"></A>
+<A NAME="fn:WInput.scrollup"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WInput.scrollup(WInput input)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Scroll input <TT>input</TT> text contents up.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00740000000000000000"></A>
+<A NAME="sec:menuref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN CLASS="textit">mod_menu</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="8777"></A>
+<A NAME="8778"></A>
+<A NAME="fn:mod_menu.grabmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.grabmenu(mplex, sub, menu_or_name, param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function is similar to <A HREF="#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A>, but input
+ is grabbed and the key used to active the menu can be used to
+ cycle through menu entries.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8779"></A>
+<A NAME="8780"></A>
+<A NAME="fn:mod_menu.menu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.menu(mplex, sub, menu_or_name, param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Display a menu in the lower-left corner of <TT>mplex</TT>.
+ The variable <TT>menu_or_name</TT> is either the name of a menu
+ defined with <A HREF="#fn:mod_menu.defmenu"><TT>mod_menu.defmenu</TT></A> or directly a table similar
+ to ones passesd to this function. When this function is
+ called from a binding handler, <TT>sub</TT> should be set to
+ the second argument of to the binding handler (<TT>_sub</TT>)
+ so that the menu handler will get the same parameters as the
+ binding handler. Extra options can be passed in the table
+ <TT>param</TT>. The initial entry can be specified as the field
+ <TT>initial</TT> as an integer starting from 1. Menus can be made
+ to use a bigger style by setting the field <TT>big</TT> to <TT>true</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8781"></A>
+<A NAME="8782"></A>
+<A NAME="fn:mod_menu.get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table mod_menu.get()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get module basic settings. For details, see <A HREF="#fn:mod_menu.set"><TT>mod_menu.set</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8783"></A>
+<A NAME="8784"></A>
+<A NAME="fn:mod_menu.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_menu.set(table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set module basic settings. The parameter table may contain the
+ following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>scroll_amount</TT></TD>
+<TD ALIGN="LEFT">Number of pixels to scroll at a time
+ pointer-controlled menus when one extends
+ beyond a border of the screen and the pointer
+ touches that border.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>scroll_delay</TT></TD>
+<TD ALIGN="LEFT">Time between such scrolling events in
+ milliseconds.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8785"></A>
+<A NAME="8786"></A>
+<A NAME="fn:mod_menu.pmenu"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_menu.pmenu(win, sub, menu_or_name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This function displays a drop-down menu and should only
+ be called from a mouse press handler. The parameters are
+ similar to those of <A HREF="#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00741000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="8788"></A>
+<A NAME="8789"></A>
+<A NAME="fn:WMenu.cancel"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.cancel(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Close <TT>menu</TT> not calling any possible finish handlers.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8790"></A>
+<A NAME="8791"></A>
+<A NAME="fn:WMenu.finish"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.finish(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>If selected entry is a submenu, display that.
+ Otherwise destroy the menu and call handler for selected entry.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8792"></A>
+<A NAME="8793"></A>
+<A NAME="fn:WMenu.select_next"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_next(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select next entry in menu.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8794"></A>
+<A NAME="8795"></A>
+<A NAME="fn:WMenu.select_nth"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_nth(WMenu menu, integer n)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select <TT>n</TT>:th entry in menu.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8796"></A>
+<A NAME="8797"></A>
+<A NAME="fn:WMenu.select_prev"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.select_prev(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Select previous entry in menu.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8798"></A>
+<A NAME="8799"></A>
+<A NAME="fn:WMenu.typeahead_clear"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WMenu.typeahead_clear(WMenu menu)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear typeahead buffer.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00750000000000000000"></A>
+<A NAME="sec:dockref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN CLASS="textit">mod_dock</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="8997"></A>
+<A NAME="8998"></A>
+<A NAME="fn:mod_dock.set_floating_shown_on"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void mod_dock.set_floating_shown_on(WMPlex mplex, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle floating docks on <TT>mplex</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00751000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="9000"></A>
+<A NAME="9001"></A>
+<A NAME="fn:WDock.attach"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WDock.attach(WDock dock, WRegion reg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Attach <TT>reg</TT> to <TT>dock</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9002"></A>
+<A NAME="9003"></A>
+<A NAME="fn:WDock.get"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table WDock.get(WDock dock)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Get <TT>dock</TT>'s configuration table. See <A HREF="#fn:WDock.set"><TT>WDock.set</TT></A> for a
+ description of the table.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9004"></A>
+<A NAME="9005"></A>
+<A NAME="fn:WDock.resize"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WDock.resize(WDock dock)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Resizes and refreshes <TT>dock</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9006"></A>
+<A NAME="9007"></A>
+<A NAME="fn:WDock.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WDock.set(WDock dock, table conftab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Configure <TT>dock</TT>. <TT>conftab</TT> is a table of key/value pairs:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Key</TD>
+<TD ALIGN="LEFT">Values</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT">Name of dock</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
+<TD ALIGN="LEFT">string in <!-- MATH
+ $\{t,m,b\}\times\{t,c,b\}$
+ -->
+<SPAN CLASS="MATH"></SPAN></TD>
+<TD ALIGN="LEFT">Dock position.
+ Can only be used in floating mode.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>grow</TT></TD>
+<TD ALIGN="LEFT">up/down/left/right</TD>
+<TD ALIGN="LEFT">Growth direction where new dockapps are added. Also
+ sets orientation for dock when working as WMPlex status
+ display (see <A HREF="#fn:WMPlex.set_stdisp"><TT>WMPlex.set_stdisp</TT></A>).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>is_auto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Should <TT>dock</TT> automatically manage new dockapps?</TD>
+</TR>
+</TABLE>
+
+<P>
+Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00760000000000000000"></A>
+<A NAME="sec:spref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN CLASS="textit">mod_sp</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="9106"></A>
+<A NAME="9107"></A>
+<A NAME="fn:mod_sp.set_shown"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_sp.set_shown(WFrame sp, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Toggle displayed status of <TT>sp</TT>.
+ The parameter <TT>how</TT> is one of (set/unset/toggle).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9108"></A>
+<A NAME="9109"></A>
+<A NAME="fn:mod_sp.set_shown_on"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool mod_sp.set_shown_on(WMPlex mplex, string how)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Change displayed status of some scratchpad on <TT>mplex</TT> if one is
+ found. The parameter <TT>how</TT> is one of (set/unset/toggle).
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00770000000000000000"></A>
+<A NAME="sec:deref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN>
+</H2>
+
+ <DL>
+<DD><A NAME="9173"></A>
+<A NAME="9174"></A>
+<A NAME="fn:de.defstyle"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool de.defstyle(string name, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a style.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9175"></A>
+<A NAME="9176"></A>
+<A NAME="fn:de.defstyle_rootwin"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool de.defstyle_rootwin(WRootWin rootwin, string name, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a style for the root window <TT>rootwin</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9177"></A>
+<A NAME="9178"></A>
+<A NAME="fn:de.reset"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void de.reset()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear all styles from drawing engine memory.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9179"></A>
+<A NAME="9180"></A>
+<A NAME="fn:de.substyle"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>table de.substyle(string pattern, table tab)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Define a substyle.
+
+</DD>
+</DL>
+
+<P>
+
+<H2><A NAME="SECTION00780000000000000000"></A>
+<A NAME="sec:hookref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Hooks
+</H2>
+
+<P>
+
+ <DL>
+<DD><A NAME="9401"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_do_manage_alt"></A><TT>clientwin_do_manage_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>(WClientWin, table)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we want to manage a new client window.
+ The table argument contains the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Do we want to switch to the client window.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>jumpto</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Do we want to jump to the client window.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>userpos</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Geometry set by user.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>dockapp</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Client window is a dockapp.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>maprq</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Map request (and not initialisation scan).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>gravity</TT></TD>
+<TD ALIGN="LEFT">number</TD>
+<TD ALIGN="LEFT">Window gravity.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
+<TD ALIGN="LEFT">table</TD>
+<TD ALIGN="LEFT">Requested geometry; <TT>x</TT>, <TT>y</TT>, <TT>w</TT>, <TT>h</TT>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tfor</TT></TD>
+<TD ALIGN="LEFT">WClientWin</TD>
+<TD ALIGN="LEFT">Transient for window.</TD>
+</TR>
+</TABLE>
+
+<P>
+This hook is not called in protected mode and can be used for
+ arbitrary placement policies (deciding in which workspace a new
+ WClientWin should go). In this case, you can call
+<PRE>
+reg:attach(cwin)
+</PRE>
+ where <TT>reg</TT> is the region where the window should go, and
+ <TT>cwin</TT> is the first argument of the function added to the
+ hook.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9402"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_mapped_hook"></A><TT>clientwin_mapped_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WClientWin</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we have started to manage a client window.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9403"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="clientwin_unmapped_hook"></A><TT>clientwin_unmapped_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>number</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when we no longer manage a client window. The parameter
+ is the X ID of the window; see <A HREF="#fn:WClientWin.xid"><TT>WClientWin.xid</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9404"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="frame_managed_changed_hook"></A><TT>frame_managed_changed_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when there are changes in the objects managed by a frame
+ or their order. The table parameter has the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">The frame in question</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>mode</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT"><TT>"switchonly"</TT>, <TT>"reorder"</TT>,
+ <TT>"add"</TT> or <TT>"remove"</TT></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sw</TT></TD>
+<TD ALIGN="LEFT">bool</TD>
+<TD ALIGN="LEFT">Switch occured</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>sub</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The managed region (primarily) affected</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9405"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_sigchld_hook"></A><TT>ioncore_sigchld_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>integer</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when a child process has exited. The parameter
+ is the PID of the process.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9406"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_deinit_hook"></A><TT>ioncore_deinit_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when Ion is deinitialising and about to quit.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9407"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_post_layout_setup_hook"></A><TT>ioncore_post_layout_setup_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when Ion has done all initialisation and is almost ready to
+ enter the mainloop, except no windows are yet being managed.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9408"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_snapshot_hook"></A><TT>ioncore_snapshot_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called to signal scripts and modules to save their state (if any).
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9409"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="tiling_placement_alt"></A><TT>tiling_placement_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when a client window is about to be managed by a WTiling
+ to allow for alternative placement policies. The table has the
+ following fields:
+ <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>tiling</TT></TD>
+<TD ALIGN="LEFT">WTiling</TD>
+<TD ALIGN="LEFT">The tiling</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The region (always a WClientWin at
+ the moment) to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>mp</TT></TD>
+<TD ALIGN="LEFT">table</TD>
+<TD ALIGN="LEFT">This table contains the same fields as
+ the parameter of <A HREF="#fn:clientwin_do_manage_alt"><TT>clientwin_do_manage_alt</TT></A></TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_frame</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">A succesfull handler should
+ return the target frame here.</TD>
+</TR>
+</TABLE>
+ This hook is just for placing within a given workspace after the
+ workspace has been decided by the default workspace selection
+ policy. It is called in protected mode. For arbitrary placement
+ policies, <A HREF="#fn:clientwin_do_manage_alt"><TT>clientwin_do_manage_alt</TT></A> should be used; it
+ isn't called in protected mode,
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9410"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="panews_make_placement_alt"></A><TT>panews_make_placement_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called to make a placement on panews. The parameter table has
+ the following fields:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>ws</TT></TD>
+<TD ALIGN="LEFT">WPaneWS</TD>
+<TD ALIGN="LEFT">The workspace</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>frame</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">A frame initially allocated for the
+ region to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>reg</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">The region to be placed</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>specifier</TT></TD>
+<TD ALIGN="LEFT">WRegion</TD>
+<TD ALIGN="LEFT">For drag&drop on handling empty areas</TD>
+</TR>
+</TABLE>
+
+<P>
+The handler should set some of these fields on success:
+
+<P>
+<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
+<TR><TD ALIGN="LEFT">Field</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_node</TT></TD>
+<TD ALIGN="LEFT">WSplit</TD>
+<TD ALIGN="LEFT">Target split</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_config</TT></TD>
+<TD ALIGN="LEFT">WFrame</TD>
+<TD ALIGN="LEFT">New configuration for it, unless
+ WSplitRegion</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_w</TT></TD>
+<TD ALIGN="LEFT">integer</TD>
+<TD ALIGN="LEFT">New width for target split (optional)</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>res_h</TT></TD>
+<TD ALIGN="LEFT">integer</TD>
+<TD ALIGN="LEFT">New height for target split (optional)</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9411"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_activated_hook"></A><TT>region_activated_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Signalled when a region or one of its children has received the focus.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9412"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_activity_hook"></A><TT>region_activity_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This hook is triggered when the activity flag of the parameter
+ region has been changed.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9413"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_do_warp_alt"></A><TT>region_do_warp_alt</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This alt-hook exist to allow for alternative pointer warping
+ implementations.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9414"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="region_inactivated_hook"></A><TT>region_inactivated_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>WRegion</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Signalled when the focus has moved from the parameter region or
+ one of its children to a non-child region of the parameter region.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="9415"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="screen_managed_changed_hook"></A><TT>screen_managed_changed_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>table</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Called when there are changes in the objects managed by a screen
+ or their order. The table parameter is similar to that of
+ <A HREF="#fn:frame_managed_changed_hook"><TT>frame_managed_changed_hook</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html348"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
+<A NAME="tex2html342"
+ HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
+<A NAME="tex2html336"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
+<A NAME="tex2html344"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
+<A NAME="tex2html346"
+ HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html349"
+ HREF="node8.html">A. The GNU General</A>
+<B> Up:</B> <A NAME="tex2html343"
+ HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html337"
+ HREF="node6.html">5. Scripting</A>
+ <B> <A NAME="tex2html345"
+ HREF="node1.html">Contents</A></B>
+ <B> <A NAME="tex2html347"
+ HREF="node11.html">Index</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>