<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <!--Converted with LaTeX2HTML 2002-1 (1.69) original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> <TITLE>4. Graphical styles</TITLE> <META NAME="description" CONTENT="4. Graphical styles"> <META NAME="keywords" CONTENT="ionconf"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META NAME="Generator" CONTENT="LaTeX2HTML v2002-1"> <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> <LINK REL="STYLESHEET" HREF="ionconf.css"> <LINK REL="next" HREF="node6.html"> <LINK REL="previous" HREF="node4.html"> <LINK REL="up" HREF="ionconf.html"> <LINK REL="next" HREF="node6.html"> </HEAD> <BODY > <!--Navigation Panel--> <A NAME="tex2html297" HREF="node6.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html291" HREF="ionconf.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html285" HREF="node4.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html293" HREF="node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html295" HREF="node10.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html298" HREF="node6.html">5. Scripting</A> <B> Up:</B> <A NAME="tex2html292" HREF="ionconf.html">Ion: Configuring and extending</A> <B> Previous:</B> <A NAME="tex2html286" HREF="node4.html">3. Basic configuration</A> <B> <A NAME="tex2html294" HREF="node1.html">Contents</A></B> <B> <A NAME="tex2html296" HREF="node10.html">Index</A></B> <BR> <BR> <!--End of Navigation Panel--> <!--Table of Child-Links--> <A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A> <UL> <LI><A NAME="tex2html299" HREF="node5.html#SECTION00510000000000000000">4.1 Drawing engines, style specifications and sub-styles</A> <UL> <LI><A NAME="tex2html300" HREF="node5.html#SECTION00511000000000000000">4.1.1 Known styles and substyles</A> <UL> <LI><A NAME="tex2html301" HREF="node5.html#SECTION00511100000000000000">4.1.1.1 Frames</A> <LI><A NAME="tex2html302" HREF="node5.html#SECTION00511200000000000000">4.1.1.2 Tabs and menu entries</A> <LI><A NAME="tex2html303" HREF="node5.html#SECTION00511300000000000000">4.1.1.3 The rest</A> </UL> </UL> <BR> <LI><A NAME="tex2html304" HREF="node5.html#SECTION00520000000000000000">4.2 Defining styles for the default drawing engine</A> <UL> <LI><A NAME="tex2html305" HREF="node5.html#SECTION00521000000000000000">4.2.1 The structure of the configuration files</A> <LI><A NAME="tex2html306" HREF="node5.html#SECTION00522000000000000000">4.2.2 Defining the styles</A> <UL> <LI><A NAME="tex2html307" HREF="node5.html#SECTION00522100000000000000">4.2.2.1 Colours</A> <LI><A NAME="tex2html308" HREF="node5.html#SECTION00522200000000000000">4.2.2.2 Borders and widths</A> <LI><A NAME="tex2html309" HREF="node5.html#SECTION00522300000000000000">4.2.2.3 Text</A> <LI><A NAME="tex2html310" HREF="node5.html#SECTION00522400000000000000">4.2.2.4 Miscellaneous</A> <LI><A NAME="tex2html311" HREF="node5.html#SECTION00522500000000000000">4.2.2.5 Substyles</A> </UL> <LI><A NAME="tex2html312" HREF="node5.html#SECTION00523000000000000000">4.2.3 An example</A> </UL> <BR> <LI><A NAME="tex2html313" HREF="node5.html#SECTION00530000000000000000">4.3 Miscellaneous settings</A> <UL> <LI><A NAME="tex2html314" HREF="node5.html#SECTION00531000000000000000">4.3.1 Extra fields for style <TT>frame-ionframe</TT></A> <LI><A NAME="tex2html315" HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style <TT>frame-floatframe</TT></A> <LI><A NAME="tex2html316" HREF="node5.html#SECTION00533000000000000000">4.3.3 Extra fields for style <TT>dock</TT></A> </UL></UL> <!--End of Table of Child-Links--> <HR> <H1><A NAME="SECTION00500000000000000000"></A> <A NAME="chap:gr"></A> <BR> 4. Graphical styles </H1> <P> This chapter first gives in section <A HREF="#sec:engines">4.1</A> a general outline of how drawing engines are used, of style specifications and then in section <A HREF="#sec:defaultde">4.2</A> describes how to specify styles for the default drawing engine. <P> <H2><A NAME="SECTION00510000000000000000"></A> <A NAME="sec:engines"></A><A NAME="1617"></A><A NAME="1618"></A> <BR> 4.1 Drawing engines, style specifications and sub-styles </H2> <P> Ion's drawing routines are abstracted into so-called drawing engine modules that can, again depending on the system, be dynamically loaded as needed. The drawing engine modules provide ''brushes'' that objects can use to draw some high-level primitives such as borders and text boxes (in addition to simple text and rectangle drawing) on their windows and configure e.g. the shape and background of the window. While the drawing engines therefore do not directly implement looks for each possible object (that would hardly be maintainable), different brush styles can be used to give a distinctive look to different objects and engines could interpret some styles as special cases. Style specifications are strings of the form <P> <PRE> element1-element2-...-elementn </PRE> <P> An example of such a style specification is <TT>tab-frame</TT>; see the table in subsection <A HREF="#sec:styles">4.1.1</A> for more styles. <P> When an object asks for a brush of certain style, the selected drawing engine will attempt to find the closest match to this specification. The styles/brushes defined by the drawing engines may have asterisks (<code>*</code>) as some of the elements indicating a match to anything. Exact matches are preferred to asterisk matches and longer matches to shorter. For example, let a brush for style <TT>foo-bar-baz</TT> be queried, then the following brushes are in order of preference: <P> <PRE> foo-bar-baz foo-*-baz foo-bar * foo-baz -- Doesn't match, not selected! </PRE> <P> Some of the drawing primitives allow extra attributes to be specified, also in the form <PRE> attr1-attr2-...-attrn </PRE> These extra attributes are called <I>substyles</I><A NAME="1629"></A> and allow, for example, the state of the object to be indicated by different colour sets while keeping the interface at an abstract level and the drawing engine completely ignorant of the semantics - only the writer of the drawing engine configuration file has to know them. However the drawing engine can again interpret known substyles as special cases and the default engine indeed does so with frame tab tag and drag states.) <P> <H3><A NAME="SECTION00511000000000000000"></A> <A NAME="sec:styles"></A> <BR> 4.1.1 Known styles and substyles </H3> <P> <H4><A NAME="SECTION00511100000000000000"> 4.1.1.1 Frames</A> </H4> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Style name</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>frame</TT></TD> <TD ALIGN="LEFT">Style for frames. Substyles: <TT>active</TT>, <TT>inactive</TT>.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>frame-ionframe</TT></TD> <TD ALIGN="LEFT">A more specific style for WIonFrames. Substyles as for <TT>frame</TT>.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>frame-floatframe</TT></TD> <TD ALIGN="LEFT">A more specific style for WFloatFrames. Substyles as for <TT>frame</TT>.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00511200000000000000"> 4.1.1.2 Tabs and menu entries</A> </H4> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Style name</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab</TT></TD> <TD ALIGN="LEFT">Style for frames' tabs and menu entries. Substyles: combinations of the form <TT>a-s</TT> where <TT>a</TT> is one of <TT>active</TT>/<TT>inactive</TT> and <TT>s</TT> is one of <TT>selected</TT>/<TT>unselected</TT></TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab-frame</TT></TD> <TD ALIGN="LEFT">A more specific style for frames' tabs. Substyles: combinations of the form <TT>a-s-t-d-u</TT> where <TT>a</TT> and <TT>s</TT> are as above and <TT>t</TT> is one of <TT>tagged</TT>/<TT>not_tagged</TT>, <TT>d</TT> is one of <TT>dragged</TT>/<TT>not_dragged</TT> and <TT>u</TT> is one of <TT>activity</TT>/<TT>no_activity</TT>.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab-frame-ionframe</TT></TD> <TD ALIGN="LEFT">A more specific style for WIonFrames' tabs. Substyles as for <TT>tab-frame</TT>.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab-frame-floatframe</TT></TD> <TD ALIGN="LEFT">A more specific style for WFloatFrames' tabs.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab-menuentry</TT></TD> <TD ALIGN="LEFT">A more specific style for entries in WMenus.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tab-menuentry-bigmenu</TT></TD> <TD ALIGN="LEFT">An alternate style for entries in WMenus.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00511300000000000000"> 4.1.1.3 The rest</A> </H4> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Style name</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>input</TT></TD> <TD ALIGN="LEFT">A style for WInputs.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>input-edln</TT></TD> <TD ALIGN="LEFT">A more specific style for WEdlns. Substyles: <TT>selection</TT> for selected text and <TT>cursor</TT> for the cursor indicating current editing point.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>input-message</TT></TD> <TD ALIGN="LEFT">A more specific style for WMessages.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>input-menu</TT></TD> <TD ALIGN="LEFT">A more specific style for WMenus.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>input-menu-bigmenu</TT></TD> <TD ALIGN="LEFT">An alternate style for WMenus.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>moveres_display</TT></TD> <TD ALIGN="LEFT">The box displaying position/size when moving or resizing frames.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>dock</TT></TD> <TD ALIGN="LEFT">The dock.</TD> </TR> </TABLE> <P> <H2><A NAME="SECTION00520000000000000000"></A> <A NAME="sec:defaultde"></A> <BR> 4.2 Defining styles for the default drawing engine </H2> <P> Drawing engine style files are usually named <I>look-foo.lua</I> where <I>foo</I> is the name of the style. The file that Ion loads on startup or when <A HREF="node7.html#fn:gr_read_config"><TT>gr_read_config</TT></A> is called, however, is <I>draw.lua</I> and should usually be symlinked to or a copy of of some <I>look-foo.lua</I>. <P> <H3><A NAME="SECTION00521000000000000000"> 4.2.1 The structure of the configuration files</A> </H3> <P> The first thing to do in a stylefile is to choose the drawing engine, possibly loading the module as well. This is done with the following chunk of code. <P> <PRE> if not gr_select_engine("de") then return end </PRE> <P> The <A HREF="node7.html#fn:gr_select_engine"><TT>gr_select_engine</TT></A> function sees if the engine given as argument is registered (the default drawing engine is simply called ''de''). If the engine could not be found, it tries to load a module of the same name. If the engine still is not registered, <A HREF="node7.html#fn:gr_select_engine"><TT>gr_select_engine</TT></A> returns <TT>false</TT> and in this case we also exit the style setup script. If the engine was found, <A HREF="node7.html#fn:gr_select_engine"><TT>gr_select_engine</TT></A> sees that further requests for brushes are forwarded to that engine and returns <TT>true</TT>. <P> Before defining new styles it may be a good idea to clear old styles from memory so if the old configuration defines more specific styles than the new, the old styles don't override those specified by the new configuration. That can be done by calling <P> <PRE> de_reset() </PRE> <P> After this the new styles can be defined with <A HREF="node7.html#fn:de_define_style"><TT>de_define_style</TT></A> as explained in the next subsection. Finally, after the styles have been defined we must ask objects on the screen to look up new brushes to reflect the changes in configuration. This is done with <P> <PRE> gr_refresh() </PRE> <P> <H3><A NAME="SECTION00522000000000000000"> 4.2.2 Defining the styles</A> </H3> <P> Styles for the default drawing engine are defined with the function <A HREF="node7.html#fn:de_define_style"><TT>de_define_style</TT></A>. It has two arguments the first being a style specification as explained in previous sections and the second a table whose fields describe the style: <P> <PRE> de_define_style("some-style", { attribute = value, ... }) </PRE> <P> The supported attributes are described in tables below. The different border elements and styles referred to there are explained in Figure <A HREF="#fig:borders">4.1</A>. <P> <DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="1728"></A> <TABLE> <CAPTION ALIGN="BOTTOM"><STRONG>Figure 4.1:</STRONG> Sketch of different border styles and elements</CAPTION> <TR><TD><PRE> Elevated: Inlaid: Ridge: Groove: hhhhhhhhhhhs ............ hhhhhhhhhhhs sssssssssssh h..........s .sssssssssh. h..........s s..........h h. .s .s h. h.sssssssh.s s.hhhhhhhs.h h. .s .s h. h.s h.s s.h s.h h. .s .s h. h.shhhhhhh.s s.hsssssss.h h..........s .shhhhhhhhh. h..........s s..........h hsssssssssss ............ hsssssssssss shhhhhhhhhhh h = highlight, s = shadow, . = padding </PRE></TD></TR> </TABLE> </DIV> <P> <H4><A NAME="SECTION00522100000000000000"> 4.2.2.1 Colours</A> </H4> <P> Each of these fields a string of the form that can be passed to <TT>XAllocNamedColor</TT>. Valid strings are e.g. hexadecimal RGB specifications of the form <TT>#RRGGBB</TT> and colour names as specified in <I>/usr/X11R6/lib/X11/rgb.txt</I> (exact path varying). <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>highlight_colour</TT></TD> <TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>shadow_colour</TT></TD> <TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>foreground_colour</TT></TD> <TD ALIGN="LEFT">Colour for the normal drawing operations, e.g. text.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>background_colour</TT></TD> <TD ALIGN="LEFT">Window background colour (unless transparency is enabled) and background colour boxes.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>padding_colour</TT></TD> <TD ALIGN="LEFT">Colour for the ''padding'' part of a border border. Set to <TT>background_colour</TT> if unset.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00522200000000000000"> 4.2.2.2 Borders and widths</A> </H4> <P> All other fields below except <TT>border_style</TT> are non-negative integers indicating a number of pixels. <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>border_style</TT></TD> <TD ALIGN="LEFT">A string indicating the style of border; one of elevated/inlaid/ridge/groove as seen in the above sketch.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>highlight_pixels</TT></TD> <TD ALIGN="LEFT">Width of the highlight part of the border in pixels.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>shadow_pixels</TT></TD> <TD ALIGN="LEFT">Width of the shadow part of the border in pixels.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>padding_pixels</TT></TD> <TD ALIGN="LEFT">Width of the padding part of the border in pixels.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>spacing</TT></TD> <TD ALIGN="LEFT">Space to be left between all kinds of boxes.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00522300000000000000"> 4.2.2.3 Text</A> </H4> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>font</TT></TD> <TD ALIGN="LEFT">Font to be used in text-drawing operations; standard X font name.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>text_align</TT></TD> <TD ALIGN="LEFT">How text is to be aligned in text boxes/tabs; one of the strings left/right/center.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00522400000000000000"> 4.2.2.4 Miscellaneous</A> </H4> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>transparent_background</TT></TD> <TD ALIGN="LEFT">Should windows' that use this style background be transparent? true/false.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>based_on</TT></TD> <TD ALIGN="LEFT">The name of a previously defined style that this style should be based on.</TD> </TR> </TABLE> <P> <H4><A NAME="SECTION00522500000000000000"> 4.2.2.5 Substyles</A> </H4> <P> As discussed in previous sections, styles may have substyles to e.g. indicate different states of the object being drawn. The ''de'' engine limits what can be configured in substyles to the set of colours in the first table above, but also specifically interprets for the main style <TT>tab-frame</TT> the substyles <TT>*-*-tagged</TT> and <TT>*-*-*-dragged</TT> by, respectively, drawing a right angle shape at the top right corner of a tab and by shading the tab with a stipple pattern. Also for menus the substyles <TT>*-*-submenu</TT> are handled as a special case. <P> Substyles are defined with the function <A HREF="node7.html#fn:de_substyle"><TT>de_substyle</TT></A> within the table defining the main style. The parameters to this function are similar to those of <A HREF="node7.html#fn:de_define_style"><TT>de_define_style</TT></A>. <P> <PRE> de_define_style("some-style", { ... de_substyle("some-substyle", { ... }), ... }) </PRE> <P> <H3><A NAME="SECTION00523000000000000000"> 4.2.3 An example</A> </H3> <P> The following shortened segment from <I>look-cleanviolet.lua</I> should help to clarify the matters discussed in the previous subsection. <P> <PRE> de_define_style("*", { -- Gray background highlight_colour = "#eeeeee", shadow_colour = "#eeeeee", background_colour = "#aaaaaa", foreground_colour = "#000000", shadow_pixels = 1, highlight_pixels = 1, padding_pixels = 1, spacing = 0, border_style = "elevated", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", text_align = "center", }) de_define_style("tab-frame", { based_on = "*", de_substyle("active-selected", { -- Violet tab highlight_colour = "#aaaacc", shadow_colour = "#aaaacc", background_colour = "#666699", foreground_colour = "#eeeeee", }), -- More substyles would follow ... }) </PRE> <P> <H2><A NAME="SECTION00530000000000000000"> 4.3 Miscellaneous settings</A> </H2> <P> The following style fields are independent of the drawing engine used, but are related to objects' styles and therefore configured in the drawing engine configuration file. <P> <H3><A NAME="SECTION00531000000000000000"> 4.3.1 Extra fields for style <TT>frame-ionframe</TT></A> </H3> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>ionframe_bar_inside_border</TT></TD> <TD ALIGN="LEFT">Controls whether the tab-bar appears inside or outside of the frame's borders. true/false.</TD> </TR> </TABLE> <P> <H3><A NAME="SECTION00532000000000000000"> 4.3.2 Extra fields for style <TT>frame-floatframe</TT></A> </H3> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>floatframe_tab_min_w</TT></TD> <TD ALIGN="LEFT">Minimum tab width in pixels, given that this number times number of tabs doesn't exceed frame width.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>floatframe_bar_max_w_q</TT></TD> <TD ALIGN="LEFT">Maximum tab-bar width quotient of frame width. A number in the interval <IMG WIDTH="40" HEIGHT="35" ALIGN="MIDDLE" BORDER="0" SRC="img2.png" ALT="$(0, 1]$">.</TD> </TR> </TABLE> <P> <H3><A NAME="SECTION00533000000000000000"> 4.3.3 Extra fields for style <TT>dock</TT></A> </H3> <P> <TABLE CELLPADDING=3 BORDER="1" WIDTH="100%"> <TR><TD ALIGN="LEFT">Field</TD> <TD ALIGN="LEFT">Description</TD> </TR> <TR><TD ALIGN="LEFT"><TT>outline_style</TT></TD> <TD ALIGN="LEFT">How borders are drawn: <TT>"none"</TT> - no border, <TT>"all"</TT> - border around whole dock, <TT>"each"</TT> - border around each dockapp.</TD> </TR> <TR><TD ALIGN="LEFT"><TT>tile_size</TT></TD> <TD ALIGN="LEFT">A table with entries <TT>width</TT> and <TT>height</TT>, indicating the width and height of tiles in pixels.</TD> </TR> </TABLE> <P> Hopefully that's enough to get you started in writing new style configuration files for Ion. When in doubt, study the existing style configuration files. <P> <P> <HR> <!--Navigation Panel--> <A NAME="tex2html297" HREF="node6.html"> <IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> <A NAME="tex2html291" HREF="ionconf.html"> <IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> <A NAME="tex2html285" HREF="node4.html"> <IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> <A NAME="tex2html293" HREF="node1.html"> <IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> <A NAME="tex2html295" HREF="node10.html"> <IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> <BR> <B> Next:</B> <A NAME="tex2html298" HREF="node6.html">5. Scripting</A> <B> Up:</B> <A NAME="tex2html292" HREF="ionconf.html">Ion: Configuring and extending</A> <B> Previous:</B> <A NAME="tex2html286" HREF="node4.html">3. Basic configuration</A> <B> <A NAME="tex2html294" HREF="node1.html">Contents</A></B> <B> <A NAME="tex2html296" HREF="node10.html">Index</A></B> <!--End of Navigation Panel--> </BODY> </HTML>